Skip to content

Commit

Permalink
Merge pull request #23 from securenative/dev
Browse files Browse the repository at this point in the history
Version 0.1.29
  • Loading branch information
inbaltako authored Oct 1, 2020
2 parents ad2bf48 + af303df commit 682e43f
Show file tree
Hide file tree
Showing 114 changed files with 857 additions and 2,521 deletions.
4 changes: 2 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
securenative (0.1.28)
securenative (0.1.29)

GEM
remote: https://rubygems.org/
Expand Down Expand Up @@ -208,7 +208,7 @@ GEM
rspec-core (~> 3.9.0)
rspec-expectations (~> 3.9.0)
rspec-mocks (~> 3.9.0)
rspec-core (3.9.2)
rspec-core (3.9.3)
rspec-support (~> 3.9.3)
rspec-expectations (3.9.2)
diff-lcs (>= 1.2.0, < 2.0)
Expand Down
55 changes: 23 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,36 +50,36 @@ To get your *API KEY*, login to your SecureNative account and go to project sett
SecureNative can automatically load your config from *securenative.yml* file or from the file that is specified in your *SECURENATIVE_CONFIG_FILE* env variable:

```ruby
require 'securenative/securenative'
require 'securenative'


secureative = SecureNative::SecureNative.init
secureative = SecureNative::Client.init
```
### Option 2: Initialize via API Key

```ruby
require 'securenative/sdk'
require 'securenative'


securenative = SecureNative::SecureNative.init_with_api_key('YOUR_API_KEY')
securenative = SecureNative::Client.init_with_api_key('YOUR_API_KEY')
```

### Option 3: Initialize via ConfigurationBuilder
```ruby
require 'securenative/sdk'
require 'securenative'


options = SecureNative::ConfigurationBuilder.new(api_key: 'API_KEY', max_events: 10, log_level: 'ERROR')
SecureNative::SecureNative.init_with_options(options)
options = SecureNative::Config::ConfigurationBuilder.new(api_key: 'API_KEY', max_events: 10, log_level: 'ERROR')
SecureNative::Client.init_with_options(options)
```

## Getting SecureNative instance
Once initialized, sdk will create a singleton instance which you can get:
```ruby
require 'securenative/sdk'
require 'securenative'


secureNative = SecureNative::SecureNative.instance
secureNative = SecureNative::Client.instance
```

## Tracking events
Expand All @@ -88,15 +88,12 @@ Once the SDK has been initialized, tracking requests sent through the SDK
instance. Make sure you build event with the EventBuilder:

```ruby
require 'securenative/sdk'
require 'securenative/models/event_options'
require 'securenative/enums/event_types'
require 'securenative/models/user_traits'
require 'securenative'


def track
securenative = SecureNative::SecureNative.instance
context = SecureNative::SecureNativeContext.new(client_token: 'SECURED_CLIENT_TOKEN', ip: '127.0.0.1',
securenative = SecureNative::Client.instance
context = SecureNative::Context.new(client_token: 'SECURED_CLIENT_TOKEN', ip: '127.0.0.1',
headers: { 'user-agent' => 'Mozilla: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.3 Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/43.4' })

event_options = SecureNative::EventOptions.new(event: SecureNative::EventTypes::LOG_IN, user_id: '1234', context: context,
Expand All @@ -112,15 +109,12 @@ end
You can also create request securenative.context from requests:

```ruby
require 'securenative/sdk'
require 'securenative/models/event_options'
require 'securenative/enums/event_types'
require 'securenative/models/user_traits'
require 'securenative'


def track(request)
securenative = SecureNative::SecureNative.instance
context = SecureNative::SecureNativeContext.from_http_request(request)
securenative = SecureNative::Client.instance
context = SecureNative::Context.from_http_request(request)

event_options = SecureNative::EventOptions.new(event: SecureNative::EventTypes::LOG_IN, user_id: '1234', context: context,
user_traits: SecureNative::UserTraits.new(name: 'Your Name', email: 'name@gmail.com', phone: '+1234567890'),
Expand All @@ -137,15 +131,12 @@ end
**Example**

```ruby
require 'securenative/sdk'
require 'securenative/models/event_options'
require 'securenative/enums/event_types'
require 'securenative/models/user_traits'
require 'securenative'


def verify(request)
securenative = SecureNative::SecureNative.instance
context = SecureNative::SecureNativeContext.from_http_request(request)
securenative = SecureNative::Client.instance
context = SecureNative::Context.from_http_request(request)

event_options = SecureNative::EventOptions.new(event: SecureNative::EventTypes::LOG_IN, user_id: '1234', context: context,
user_traits: SecureNative::UserTraits.new(name: 'Your Name', email: 'name@gmail.com', phone: '+1234567890'),
Expand All @@ -163,11 +154,11 @@ end
Apply our filter to verify the request is from us, for example:

```ruby
require 'securenative/sdk'
require 'securenative'


def webhook_endpoint(request)
securenative = SecureNative::SecureNative.instance
securenative = SecureNative::Client.instance

# Checks if request is verified
is_verified = securenative.verify_request_payload(request)
Expand All @@ -190,9 +181,9 @@ Initialize sdk as showed above.
### Options 2: Using ConfigurationBuilder
```ruby
require 'securenative/sdk'
require 'securenative'

options = SecureNative::SecureNativeOptions.new(api_key: 'API_KEY', max_events: 10, log_level: 'ERROR', proxy_headers: ['CF-Connecting-IP'])
options = SecureNative::Options.new(api_key: 'API_KEY', max_events: 10, log_level: 'ERROR', proxy_headers: ['CF-Connecting-IP'])

SecureNative::SecureNative.init_with_options(options)
SecureNative::Client.init_with_options(options)
```
49 changes: 49 additions & 0 deletions lib/securenative.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# frozen_string_literal: true

require 'securenative/failover_strategy'
require 'securenative/enums/risk_level'
require 'securenative/enums/api_route'
require 'securenative/event_types'
require 'securenative/enums/risk_level'
require 'securenative/config/configuration_builder'
require 'securenative/config/configuration_manager'
require 'securenative/options'
require 'securenative/utils/request_utils'
require 'securenative/utils/version_utils'
require 'securenative/utils/encryption_utils'
require 'securenative/utils/signature_utils'
require 'securenative/utils/date_utils'
require 'securenative/utils/utils'
require 'securenative/utils/log'
require 'securenative/utils/ip_utils'
require 'securenative/frameworks/hanami'
require 'securenative/frameworks/sinatra'
require 'securenative/frameworks/rails'
require 'securenative/context'
require 'securenative/event_options'
require 'securenative/user_traits'
require 'securenative/request_context'
require 'securenative/client_token'
require 'securenative/sdk_event'
require 'securenative/verify_result'
require 'securenative/errors/invalid_options_error'
require 'securenative/errors/sdk_Illegal_state_error'
require 'securenative/errors/config_error'
require 'securenative/errors/sdk_error'
require 'securenative/errors/http_error'
require 'securenative/http_client'
require 'securenative/event_manager'
require 'securenative/api_manager'
require 'securenative/client'
require 'securenative/version'

require 'yaml'
require 'net/http'
require 'uri'
require 'json'
require 'securerandom'
require 'openssl'
require 'digest'
require 'base64'
require 'resolv'
require 'logger'
27 changes: 10 additions & 17 deletions lib/securenative/api_manager.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
# frozen_string_literal: true

require 'securenative/models/sdk_event'
require 'securenative/enums/failover_strategy'
require 'securenative/enums/risk_level'
require 'securenative/enums/api_route'
require 'securenative/models/verify_result'
require 'json'

module SecureNative
class ApiManager
def initialize(event_manager, securenative_options)
Expand All @@ -15,27 +8,27 @@ def initialize(event_manager, securenative_options)
end

def track(event_options)
SecureNativeLogger.debug('Track event call')
event = SDKEvent.new(event_options, @options)
@event_manager.send_async(event, ApiRoute::TRACK)
SecureNative::Log.debug('Track event call')
event = SecureNative::SDKEvent.new(event_options, @options)
@event_manager.send_async(event, SecureNative::Enums::ApiRoute::TRACK)
end

def verify(event_options)
SecureNativeLogger.debug('Verify event call')
event = SDKEvent.new(event_options, @options)
SecureNative::Log.debug('Verify event call')
event = SecureNative::SDKEvent.new(event_options, @options)

begin
res = @event_manager.send_sync(event, ApiRoute::VERIFY, false)
res = @event_manager.send_sync(event, SecureNative::Enums::ApiRoute::VERIFY)
ver_result = JSON.parse(res.body)
return VerifyResult.new(risk_level: ver_result['riskLevel'], score: ver_result['score'], triggers: ver_result['triggers'])
rescue StandardError => e
SecureNativeLogger.debug("Failed to call verify; #{e}")
SecureNative::Log.debug("Failed to call verify; #{e}")
end
if @options.fail_over_strategy == FailOverStrategy::FAIL_OPEN
return VerifyResult.new(risk_level: RiskLevel::LOW, score: 0, triggers: nil)
if @options.fail_over_strategy == SecureNative::FailOverStrategy::FAIL_OPEN
return SecureNative::VerifyResult.new(risk_level: SecureNative::Enums::RiskLevel::LOW, score: 0, triggers: nil)
end

VerifyResult.new(risk_level: RiskLevel::HIGH, score: 1, triggers: nil)
VerifyResult.new(risk_level: SecureNative::Enums::RiskLevel::HIGH, score: 1, triggers: nil)
end
end
end
75 changes: 75 additions & 0 deletions lib/securenative/client.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# frozen_string_literal: true

module SecureNative
class Client
attr_reader :options

def initialize(options)
@securenative = nil
if SecureNative::Utils::Utils.null_or_empty?(options.api_key)
raise SecureNativeSDKError, 'You must pass your SecureNative api key'
end

@options = options
@event_manager = EventManager.new(@options)

@api_manager = SecureNative::ApiManager.new(@event_manager, @options)
SecureNative::Log.init_logger(@options.log_level)
end

def self.init_with_options(options)
if @securenative.nil?
@securenative = SecureNative::Client.new(options)
@securenative
else
SecureNative::Log.debug('This SDK was already initialized.')
raise SecureNativeSDKError, 'This SDK was already initialized.'
end
end

def self.init_with_api_key(api_key)
if SecureNative::Utils::Utils.null_or_empty?(api_key)
raise SecureNativeConfigError, 'You must pass your SecureNative api key'
end

if @securenative.nil?
options = SecureNative::Config::ConfigurationBuilder.new(api_key: api_key)
@securenative = SecureNative::Client.new(options)
@securenative
else
SecureNative::Log.debug('This SDK was already initialized.')
raise SecureNativeSDKError, 'This SDK was already initialized.'
end
end

def self.init
options = SecureNative::Config::ConfigurationManager.load_config
init_with_options(options)
end

def self.instance
raise SecureNativeSDKIllegalStateError if @securenative.nil?

@securenative
end

def track(event_options)
@api_manager.track(event_options)
end

def verify(event_options)
@api_manager.verify(event_options)
end

def self._flush
@securenative = nil
end

def verify_request_payload(request)
request_signature = request.header[SignatureUtils.SIGNATURE_HEADER]
body = request.body

SignatureUtils.valid_signature?(@options.api_key, body, request_signature)
end
end
end
File renamed without changes.
44 changes: 22 additions & 22 deletions lib/securenative/config/configuration_builder.rb
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
# frozen_string_literal: true

require 'securenative/enums/failover_strategy'

module SecureNative
class ConfigurationBuilder
attr_reader :api_key, :api_url, :interval, :max_events, :timeout, :auto_send, :disable, :log_level, :fail_over_strategy, :proxy_headers
attr_writer :api_key, :api_url, :interval, :max_events, :timeout, :auto_send, :disable, :log_level, :fail_over_strategy, :proxy_headers
module Config
class ConfigurationBuilder
attr_reader :api_key, :api_url, :interval, :max_events, :timeout, :auto_send, :disable, :log_level, :fail_over_strategy, :proxy_headers
attr_writer :api_key, :api_url, :interval, :max_events, :timeout, :auto_send, :disable, :log_level, :fail_over_strategy, :proxy_headers

def initialize(api_key: nil, api_url: 'https://api.securenative.com/collector/api/v1', interval: 1000,
max_events: 1000, timeout: 1500, auto_send: true, disable: false, log_level: 'FATAL',
fail_over_strategy: FailOverStrategy::FAIL_OPEN, proxy_headers: nil)
@api_key = api_key
@api_url = api_url
@interval = interval
@max_events = max_events
@timeout = timeout
@auto_send = auto_send
@disable = disable
@log_level = log_level
@fail_over_strategy = fail_over_strategy
@proxy_headers = proxy_headers
end
def initialize(api_key: nil, api_url: 'https://api.securenative.com/collector/api/v1', interval: 1000,
max_events: 1000, timeout: 1500, auto_send: true, disable: false, log_level: 'FATAL',
fail_over_strategy: SecureNative::FailOverStrategy::FAIL_OPEN, proxy_headers: nil)
@api_key = api_key
@api_url = api_url
@interval = interval
@max_events = max_events
@timeout = timeout
@auto_send = auto_send
@disable = disable
@log_level = log_level
@fail_over_strategy = fail_over_strategy
@proxy_headers = proxy_headers
end

def self.default_securenative_options
SecureNativeOptions.new
def self.default_securenative_options
Options.new
end
end
end
end
end
Loading

0 comments on commit 682e43f

Please sign in to comment.