ost-kyc-sdk-ruby 2.0.0.beta.1 → 2.0.0.beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9ab41657d4c62ab3dd0db4591fb314668e98655f2d98690ad5e743d61fd6c50
4
- data.tar.gz: f4276b1a35be0352976a3d45ac10bd104b5d12a0b734d3204278b2e409d327cc
3
+ metadata.gz: 5aa3fa49768c56a8193a60c086bf03a6cd61d43d8837fa5d71973f38d606818f
4
+ data.tar.gz: c90dfe42fc423c08ad21f749b5a4cda0d18bdc2ccee1ba6667a38748d6b05bb1
5
5
  SHA512:
6
- metadata.gz: 5c59db9b297ab2a2430449fa096f66de2073fb5a3a0215cdb53c6bf8b6dd917ec641060f305472679ac548073e76658cdf29485beb8855e5f582b907ebb4c65f
7
- data.tar.gz: eaa01133fb5e6eb9f263ca4ba9f3774fd9b90f2963e115c7e07a65eb0226be0f26a165fa38870629208a90fc9d65e7d34217eb5e8db5b6468f34bf0a1d1bc1e8
6
+ metadata.gz: 4a0fcd2f3b009a3c28e8ea1e94e10ad8fe94324edd198644b648b76976df7b99bfefe6c74aa389ea782ecec1e9a22ba4fbecbbab1006f467340577760f8f3249
7
+ data.tar.gz: f51a5799fe42b1973f735ce645e8f2b09ea36bd4b7b9752f16ab0df6092b0640ed4c4a09c4843b93abc145e214ce58a92f4461f17d043ba6f158e0d769788e5a
@@ -0,0 +1,8 @@
1
+ class Config
2
+
3
+ API_BASE_URL = ENV['OST_KYC_API_ENDPOINT']
4
+ API_KEY = ENV['OST_KYC_API_KEY']
5
+ API_SECRET = ENV['OST_KYC_API_SECRET']
6
+ OST_SDK = OstKycSdkRuby::Saas::Services.new({api_key: API_KEY, api_secret: API_SECRET, api_base_url: API_BASE_URL})
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+
2
+ module OstKycSdkRuby
3
+
4
+ end
5
+
6
+ require "ost-kyc-sdk-ruby/version"
7
+ require "ost-kyc-sdk-ruby/util"
8
+ require "ost-kyc-sdk-ruby/saas"
@@ -0,0 +1,18 @@
1
+ require_relative 'saas/services'
2
+
3
+ require_relative 'saas/base'
4
+
5
+ require_relative 'saas/services'
6
+ require_relative 'saas/manifest'
7
+ require_relative 'saas/users'
8
+ require_relative 'saas/users_kyc'
9
+ require_relative 'saas/users_kyc_detail'
10
+ require_relative 'saas/validators'
11
+
12
+ module OstKycSdkRuby
13
+
14
+ module Saas
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,116 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Saas
4
+
5
+ class Base
6
+
7
+ REGEX_VALUE = /\A[0-9a-z\.\-]+\z/i
8
+
9
+ include OstKycSdkRuby::Util::ServicesHelper
10
+
11
+ attr_reader :http_helper
12
+
13
+ # OstKycSdkRuby::Saas::Base
14
+
15
+ # Initialize
16
+ #
17
+ # Arguments:
18
+ # api_base_url: (String)
19
+ # api_key: (String)
20
+ # api_secret: (String)
21
+ # api_spec: (Boolean)
22
+ #
23
+ def initialize(params)
24
+
25
+ fail 'missing API Base URL' if params[:api_base_url].nil?
26
+ fail 'missing API Key' if params[:api_key].nil?
27
+ fail 'missing API Secret' if params[:api_secret].nil?
28
+
29
+ params[:api_base_url] = sanitize_api_base_url(params[:api_base_url])
30
+
31
+ @http_helper = OstKycSdkRuby::Util::HTTPHelper.new(params)
32
+
33
+ end
34
+
35
+ private
36
+
37
+ # Get id key from params hash and delete it
38
+ #
39
+ # Arguments:
40
+ # params: (Hash)
41
+ #
42
+ # Returns:
43
+ # id: (Integer)
44
+ #
45
+ #
46
+ # if (null == params || !params.containsKey("id") || null == params.get("id")) {
47
+ # throw new MissingParameter("id");
48
+ # }
49
+ def get_id!(params)
50
+ get_value_for_key(params, "id")
51
+ end
52
+
53
+ # Get user_id key from params hash and delete it
54
+ #
55
+ # Arguments:
56
+ # params: (Hash)
57
+ #
58
+ # Returns:
59
+ # id: (Integer)
60
+ #
61
+ def get_user_id!(params)
62
+ get_value_for_key(params, "user_id")
63
+ end
64
+
65
+ # Get value for specific key
66
+ #
67
+ # Arguments:
68
+ # params: (Hash)
69
+ #
70
+ # Returns:
71
+ # id: (Integer)
72
+ #
73
+ def get_value_for_key(params, key)
74
+ if params.has_key?(key.to_sym)
75
+ value = params.delete(key.to_sym)
76
+ elsif params.has_key?(key.to_s)
77
+ value = params.delete(key.to_s)
78
+ end
79
+ raise "#{key.to_s} missing in request params" if value.nil?
80
+ raise "#{key.to_s} invalid in request params" if !(is_valid_value?(value.to_s))
81
+ value
82
+ end
83
+
84
+ # Sanitize API Base URL
85
+ #
86
+ # Arguments:
87
+ # params: (String)
88
+ #
89
+ # Returns:
90
+ # api_base_url: (String)
91
+ #
92
+ def sanitize_api_base_url(api_base_url)
93
+
94
+ api_base_url = api_base_url.gsub(/\/$/, '') # remove trailing slash
95
+
96
+ return api_base_url
97
+
98
+ end
99
+
100
+ # Is the value is valid for given key
101
+ #
102
+ # * Author: Puneet
103
+ # * Date: 10/10/2017
104
+ # * Reviewed By: Sunil
105
+ #
106
+ # @return [Boolean] returns a boolean
107
+ #
108
+ def is_valid_value?(value)
109
+ value =~ REGEX_VALUE
110
+ end
111
+
112
+ end
113
+
114
+ end
115
+
116
+ end
@@ -0,0 +1,30 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Saas
4
+
5
+ class Manifest
6
+
7
+ attr_reader :users_kyc, :users, :users_kyc_detail, :validators
8
+
9
+ # Initialize
10
+ #
11
+ # Arguments:
12
+ # api_base_url: (String)
13
+ # api_key: (String)
14
+ # api_secret: (String)
15
+ # api_spec: (Boolean)
16
+ #
17
+ def initialize(params)
18
+
19
+ @users = OstKycSdkRuby::Saas::Users.new(params)
20
+ @users_kyc = OstKycSdkRuby::Saas::UsersKyc.new(params)
21
+ @users_kyc_detail = OstKycSdkRuby::Saas::UserKycDetail.new(params)
22
+ @validators = OstKycSdkRuby::Saas::Validators.new(params)
23
+
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,44 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Saas
4
+
5
+ class Services
6
+
7
+ ## OstKycSdkRuby::Saas::Services
8
+
9
+ attr_reader :services
10
+
11
+ # Initialize
12
+ #
13
+ # Arguments:
14
+ # api_base_url: (String)
15
+ # api_key: (String)
16
+ # api_secret: (String)
17
+ # api_spec: (Boolean)
18
+ #
19
+ def initialize(params)
20
+
21
+ fail 'missing API Base URL' if params[:api_base_url].nil?
22
+ fail 'missing API Key' if params[:api_key].nil?
23
+ fail 'missing API Secret' if params[:api_secret].nil?
24
+
25
+ params[:api_base_url] = params[:api_base_url].gsub(/\/$/, '') # remove trailing slash
26
+ params[:api_spec] = false if params[:api_spec].nil?
27
+
28
+ set_manifest(params)
29
+
30
+ end
31
+
32
+ private
33
+
34
+ def set_manifest(params)
35
+
36
+ @services = OstKycSdkRuby::Saas::Manifest.new(params)
37
+
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,51 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Saas
4
+
5
+ class Users < OstKycSdkRuby::Saas::Base
6
+
7
+ # Initialize
8
+ #
9
+ # Arguments:
10
+ # api_base_url: (String)
11
+ # api_key: (String)
12
+ # api_secret: (String)
13
+ # api_spec: (Boolean)
14
+ #
15
+ def initialize(params)
16
+ super
17
+ @url_prefix = '/api/v2/users'
18
+ end
19
+
20
+ # Create a new user
21
+ #
22
+ # Returns:
23
+ # response: (OstKycSdkRuby::Util::Result)
24
+ #
25
+ def create(params = {})
26
+ http_helper.send_post_request("#{@url_prefix}", params)
27
+ end
28
+
29
+ # Get an existing user
30
+ #
31
+ # Returns:
32
+ # response: (OstKycSdkRuby::Util::Result)
33
+ #
34
+ def get(params)
35
+ http_helper.send_get_request("#{@url_prefix}/#{get_id!(params)}", params)
36
+ end
37
+
38
+ # Fetches the list of an existing users
39
+ #
40
+ # Returns:
41
+ # response: (OstKycSdkRuby::Util::Result)
42
+ #
43
+ def list(params = {})
44
+ http_helper.send_get_request("#{@url_prefix}", params)
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
@@ -0,0 +1,81 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Saas
4
+
5
+ class UsersKyc < OstKycSdkRuby::Saas::Base
6
+
7
+ # Initialize
8
+ #
9
+ # Arguments:
10
+ # api_base_url: (String)
11
+ # api_key: (String)
12
+ # api_secret: (String)
13
+ # api_spec: (Boolean)
14
+ #
15
+ def initialize(params)
16
+ super
17
+ @url_prefix = '/api/v2/users-kyc'
18
+ end
19
+
20
+ # Fetches the list of an existing Users Kyc
21
+ #
22
+ # Returns:
23
+ # response: (OstKycSdkRuby::Util::Result)
24
+ #
25
+ def list(params = {})
26
+ http_helper.send_get_request("#{@url_prefix}", params)
27
+ end
28
+
29
+ # Creates/Updates a new User Kyc
30
+ #
31
+ # Arguments:
32
+ # params: (Hash)
33
+ #
34
+ # Returns:
35
+ # response: (OstKycSdkRuby::Util::Result)
36
+ #
37
+ def submit_kyc(params)
38
+ http_helper.send_post_request("#{@url_prefix}/#{get_user_id!(params)}", params)
39
+ end
40
+
41
+ # Get an existing User Kyc
42
+ #
43
+ # Arguments:
44
+ # params: (Hash)
45
+ #
46
+ # Returns:
47
+ # response: (OstKycSdkRuby::Util::Result)
48
+ #
49
+ def get(params)
50
+ http_helper.send_get_request("#{@url_prefix}/#{get_user_id!(params)}", params)
51
+ end
52
+
53
+ # Get an existing Presigned URL via POST call
54
+ #
55
+ # Arguments:
56
+ # params: (Hash)
57
+ #
58
+ # Returns:
59
+ # response: (OstKycSdkRuby::Util::Result)
60
+ #
61
+ def get_presigned_url_post(params = {})
62
+ http_helper.send_get_request("#{@url_prefix}/pre-signed-urls/for-post", params)
63
+ end
64
+
65
+ # Get an existing Presigned URL via PUT call
66
+ #
67
+ # Arguments:
68
+ # params: (Hash)
69
+ #
70
+ # Returns:
71
+ # response: (OstKycSdkRuby::Util::Result)
72
+ #
73
+ def get_presigned_url_put(params = {})
74
+ http_helper.send_get_request("#{@url_prefix}/pre-signed-urls/for-put", params)
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ end
@@ -0,0 +1,33 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Saas
4
+
5
+ class UserKycDetail < OstKycSdkRuby::Saas::Base
6
+
7
+ # Initialize
8
+ #
9
+ # Arguments:
10
+ # api_base_url: (String)
11
+ # api_key: (String)
12
+ # api_secret: (String)
13
+ # api_spec: (Boolean)
14
+ #
15
+ def initialize(params)
16
+ super
17
+ @url_prefix = '/api/v2/users-kyc-detail'
18
+ end
19
+
20
+ # Get an existing User Kyc Detail
21
+ #
22
+ # Returns:
23
+ # response: (OstKycSdkRuby::Util::Result)
24
+ #
25
+ def get(params)
26
+ http_helper.send_get_request("#{@url_prefix}/#{get_user_id!(params)}", params)
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,36 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Saas
4
+
5
+ class Validators < OstKycSdkRuby::Saas::Base
6
+
7
+ # Initialize
8
+ #
9
+ # Arguments:
10
+ # api_base_url: (String)
11
+ # api_key: (String)
12
+ # api_secret: (String)
13
+ # api_spec: (Boolean)
14
+ #
15
+ def initialize(params)
16
+ super
17
+ @url_prefix = '/api/v2'
18
+ end
19
+
20
+ # Verify Ethereum Address
21
+ #
22
+ # Arguments:
23
+ # params: (Hash)
24
+ #
25
+ # Returns:
26
+ # response: (OstKycSdkRuby::Util::Result)
27
+ #
28
+ def verify_ethereum_address(params)
29
+ http_helper.send_get_request("#{@url_prefix}/ethereum-address-validation", params)
30
+ end
31
+
32
+ end
33
+
34
+ end
35
+
36
+ end
@@ -0,0 +1,35 @@
1
+ require_relative "../../../lib/ost-kyc-sdk-ruby/util"
2
+ require_relative "../../../lib/ost-kyc-sdk-ruby/saas"
3
+ require "test/unit"
4
+ require_relative "../../../lib/config"
5
+
6
+ class SignatureGenerationTest < Test::Unit::TestCase
7
+
8
+ def signature_test_obj
9
+ params = {api_secret: "35f346e5ef825ed4499da98a6ac6b401"}
10
+ @signature_test_obj ||= OstKycSdkRuby::Util::HTTPHelper.new(params)
11
+ end
12
+
13
+ def test_signature
14
+ test_obj_for_signature = {
15
+ k1: 'Rachin',
16
+ k2: 'tejas',
17
+ list2: [
18
+ {a: 'L21A', b: 'L21B'},
19
+ {a: 'L22A', b: 'L22B'},
20
+ {a: 'L23A', b: 'L23B'}
21
+ ],
22
+ make_mistakes: "",
23
+ nice_param: [],
24
+ empty_obj: {},
25
+ empty_str: '',
26
+ garbage_str: "~^[]%$#@!&*~,./?~()-_'this is garbage",
27
+ id: 11003,
28
+ email: 'mayur+67@ost.com'
29
+ }
30
+ test_endpoint = "/api/v2/users"
31
+ signature = signature_test_obj.get_signature_for_test(test_endpoint,test_obj_for_signature)
32
+ assert_equal(signature, "c42188c53bfdf84e542a0a9c0a78d19c9f497c61e816f169e1907bc98477eb82")
33
+ end
34
+
35
+ end
@@ -0,0 +1,17 @@
1
+ require_relative "../../../lib/ost-kyc-sdk-ruby/util"
2
+ require_relative "../../../lib/ost-kyc-sdk-ruby/saas"
3
+ require "test/unit"
4
+ require_relative "../../../lib/config"
5
+
6
+ class UserKycDetailTest < Test::Unit::TestCase
7
+
8
+ def user_kyc_detail_obj
9
+ @user_kyc_detail_obj ||= Config::OST_SDK.services.users_kyc_detail
10
+ end
11
+
12
+ def test_user_kyc_detail_get
13
+ result = user_kyc_detail_obj.get(user_id: ENV['USER_ID'])
14
+ assert_equal(result.success?, true )
15
+ end
16
+
17
+ end
@@ -0,0 +1,41 @@
1
+ require_relative "../../../lib/ost-kyc-sdk-ruby/util"
2
+ require_relative "../../../lib/ost-kyc-sdk-ruby/saas"
3
+ require "test/unit"
4
+ require_relative "../../../lib/config"
5
+
6
+ class UserKycTest < Test::Unit::TestCase
7
+
8
+ def user_kyc_obj
9
+ @user_kyc_obj ||= Config::OST_SDK.services.users_kyc
10
+ end
11
+
12
+ def test_user_kyc_get
13
+ result = user_kyc_obj.get(user_id: ENV['USER_ID'])
14
+ assert_equal(result.success?, true )
15
+ end
16
+
17
+ def test_submit_kyc
18
+ params = {user_id: ENV['USER_ID'], first_name:'aniket',last_name:'ayachit', birthdate:'21/12/1991', country:'india', nationality:'indian', document_id_number:'arqpa7659a',document_id_file_path:'2/i/016be96da275031de2787b57c99f1471', selfie_file_path:'2/i/9e8d3a5a7a58f0f1be50b7876521aebc', residence_proof_file_path:'2/i/4ed790b2d525f4c7b30fbff5cb7bbbdb', ethereum_address: '0xdfbc84ccac430f2c0455c437adf417095d7ad68e', estimated_participation_amount:'2', street_address:'afawfveav ',city:'afawfveav', state:'afawfveav',postal_code:'afawfveav','investor_proof_files_path':['2/i/9ff6374909897ca507ba3077ee8587da', '2/i/4872730399670c6d554ab3821d63ebce']}
19
+ result = user_kyc_obj.submit_kyc(params)
20
+ assert_equal(result.success?, false )
21
+ end
22
+
23
+ def test_user_kyc_list
24
+ result = user_kyc_obj.list()
25
+ assert_equal(result.success?, true )
26
+ end
27
+
28
+ def test_presigned_url_for_put
29
+ params = {files: {selfie: "image/jpeg"}}
30
+ result = user_kyc_obj.get_presigned_url_put(params)
31
+ assert_equal(result.success?, true )
32
+ end
33
+
34
+ def test_presigned_url_for_post
35
+ params = {files: {selfie: "image/jpeg"}}
36
+ result = user_kyc_obj.get_presigned_url_post(params)
37
+ assert_equal(result.success?, true )
38
+ end
39
+
40
+
41
+ end
@@ -0,0 +1,47 @@
1
+ require_relative "../../../lib/ost-kyc-sdk-ruby/util"
2
+ require_relative "../../../lib/ost-kyc-sdk-ruby/saas"
3
+ require "test/unit"
4
+ require_relative "../../../lib/config"
5
+
6
+ class UserTest < Test::Unit::TestCase
7
+
8
+ def user_obj
9
+ @user_obj ||= Config::OST_SDK.services.users
10
+ end
11
+
12
+ def test_user_get
13
+ result = user_obj.get(id: ENV['USER_ID'])
14
+ assert_equal(result.success?, true)
15
+ end
16
+
17
+ def test_user_get_with_zero_as_user_id
18
+ result = user_obj.get(id: 0)
19
+ assert_equal(result.success?, false)
20
+ end
21
+
22
+ def test_user_get_with_null_as_user_id
23
+ assert_raise(RuntimeError) {
24
+ user_obj.get(id: "")
25
+ }
26
+ end
27
+
28
+ def test_user_list_with_total_entry_in_meta
29
+ params = {order: 'asc', limit: 1, filters: {is_kyc_submitted: false}}
30
+ result = user_obj.list(params)
31
+ assert_equal(result.data["meta"]["next_page_payload"]["limit"], 1)
32
+ assert_equal(result.data["meta"]["next_page_payload"]["filters"]["is_kyc_submitted"], "false")
33
+ end
34
+
35
+ def test_user_create
36
+ unique_email = "usertest+#{Time.now.to_i}_#{RUBY_VERSION}@ost.com"
37
+ result = user_obj.create(email: unique_email)
38
+ assert_equal(result.success?, true)
39
+ end
40
+
41
+ def test_user_list
42
+ result = user_obj.list()
43
+ assert_equal(result.success?, true)
44
+ end
45
+
46
+
47
+ end
@@ -0,0 +1,17 @@
1
+ require_relative "../../../lib/ost-kyc-sdk-ruby/util"
2
+ require_relative "../../../lib/ost-kyc-sdk-ruby/saas"
3
+ require "test/unit"
4
+ require_relative "../../../lib/config"
5
+
6
+ class ValidatorsTest < Test::Unit::TestCase
7
+
8
+ def validators_obj
9
+ @validators_obj ||= Config::OST_SDK.services.validators
10
+ end
11
+
12
+ def test_validators_get
13
+ result = validators_obj.verify_ethereum_address(ethereum_address: "0x7f2ED21D1702057C7d9f163cB7e5458FA2B6B7c4")
14
+ assert_equal(result.success?, true )
15
+ end
16
+
17
+ end
@@ -0,0 +1,13 @@
1
+ require_relative 'util/common_validator'
2
+ require_relative 'util/result'
3
+ require_relative 'util/api_credentials'
4
+ require_relative 'util/http_helper'
5
+ require_relative 'util/services_helper'
6
+
7
+ module OstKycSdkRuby
8
+
9
+ module Util
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,32 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Util
4
+
5
+ class APICredentials
6
+
7
+ # Initialize
8
+ #
9
+ # Arguments:
10
+ # api_key: (String)
11
+ # api_secret: (String)
12
+ #
13
+ def initialize(api_key, api_secret)
14
+ @api_key = api_key
15
+ @api_secret = api_secret
16
+ end
17
+
18
+ # Returns:
19
+ # api_key: (String)
20
+ #
21
+ attr_reader :api_key
22
+
23
+ # Returns:
24
+ # api_secret: (String)
25
+ #
26
+ attr_reader :api_secret
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
@@ -0,0 +1,50 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Util
4
+
5
+ class CommonValidator
6
+
7
+ # Check for numeric-ness of an input
8
+ #
9
+ # Arguments:
10
+ # object: (Float)
11
+ #
12
+ # Returns:
13
+ # Boolean
14
+ #
15
+ def self.is_numeric?(object)
16
+ true if Float(object) rescue false
17
+ end
18
+
19
+ # Check for boolean-ness of an input
20
+ #
21
+ # Arguments:
22
+ # object: (Boolean)
23
+ #
24
+ # Returns:
25
+ # Boolean
26
+ #
27
+ def self.is_boolean?(object)
28
+ [
29
+ true,
30
+ false
31
+ ].include?(object)
32
+ end
33
+
34
+ # Is the given object Hash
35
+ #
36
+ # Arguments:
37
+ # object: (Hash)
38
+ #
39
+ # Returns:
40
+ # Boolean
41
+ #
42
+ def self.is_a_hash?(obj)
43
+ obj.is_a?(Hash) || obj.is_a?(ActionController::Parameters)
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -0,0 +1,251 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Util
4
+
5
+ class HTTPHelper
6
+
7
+ # OstKycSdkRuby::Util::HTTPHelper
8
+
9
+ require "uri"
10
+ require "open-uri"
11
+ require "openssl"
12
+ require "net/http"
13
+ require "json"
14
+
15
+ # Initialize
16
+ #
17
+ # Arguments:
18
+ # api_base_url: (String)
19
+ # api_key: (String)
20
+ # api_secret: (String)
21
+ # api_spec: (Boolean)
22
+ #
23
+ def initialize(params)
24
+ @api_base_url = params[:api_base_url]
25
+ @api_key = params[:api_key]
26
+ @api_secret = params[:api_secret]
27
+ @api_spec = params[:api_spec]
28
+ @timeout = 10
29
+ if (params.key?(:config))
30
+ config = params[:config]
31
+ if (config.key?(:timeout))
32
+ @timeout = config[:timeout]
33
+ end
34
+ end
35
+ end
36
+
37
+ # Send POST requests
38
+ #
39
+ # Arguments:
40
+ # end_point: (String)
41
+ # request_params: (Hash)
42
+ #
43
+ # Returns:
44
+ # OstKycSdkRuby::Util::Result
45
+ #
46
+ def send_post_request(endpoint, request_params)
47
+ perform_and_handle_exceptions('u_hh_1', 'POST request failed') do
48
+ escaped_query_string = get_query_string(endpoint, request_params)
49
+ uri = URI(get_api_url(endpoint))
50
+ http = setup_request(uri)
51
+ if @api_spec
52
+ return OstKycSdkRuby::Util::Result.success({data: {request_uri: uri.to_s, request_type: 'POST', request_params: escaped_query_string}})
53
+ else
54
+ result = http.post(uri.path, escaped_query_string)
55
+ return format_response(result)
56
+ end
57
+ end
58
+ end
59
+
60
+ # Send GET requests
61
+ #
62
+ # Arguments:
63
+ # end_point: (String)
64
+ # request_params: (Hash)
65
+ #
66
+ # Returns:
67
+ # OstKycSdkRuby::Util::Result
68
+ #
69
+ def send_get_request(endpoint, request_params)
70
+ perform_and_handle_exceptions('u_hh_2', 'GET request Failed') do
71
+ escaped_query_string = get_query_string(endpoint, request_params)
72
+ raw_url = get_api_url(endpoint) + "?#{escaped_query_string}"
73
+ uri = URI(raw_url)
74
+ if @api_spec
75
+ return OstKycSdkRuby::Util::Result.success({data: {request_uri: uri.to_s.split("?")[0], request_type: 'GET', request_params: escaped_query_string}})
76
+ else
77
+ result = {}
78
+ Timeout.timeout(@timeout) do
79
+ result = Net::HTTP.get_response(uri)
80
+ end
81
+ return format_response(result)
82
+ end
83
+ end
84
+ end
85
+
86
+ def get_signature_for_test(endpoint, request_params)
87
+ escaped_query_string = get_escaped_query_string(request_params)
88
+ string_to_sign = "#{endpoint}?#{escaped_query_string}"
89
+ generate_signature(string_to_sign)
90
+ end
91
+
92
+ private
93
+
94
+ def setup_request(uri)
95
+ http = Net::HTTP.new(uri.host, uri.port)
96
+ http.read_timeout = @timeout
97
+ http.open_timeout = @timeout
98
+ if uri.scheme == "https"
99
+ http.use_ssl = true
100
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
101
+ end
102
+ http
103
+ end
104
+
105
+ def get_query_string(endpoint, request_params)
106
+ request_timestamp = Time.now.to_i
107
+ request_params = request_params.merge("request_timestamp" => request_timestamp, "api_key" => @api_key)
108
+ escaped_query_string = get_escaped_query_string(request_params)
109
+ string_to_sign = endpoint + "?" + escaped_query_string
110
+ signature = generate_signature(string_to_sign)
111
+ "#{escaped_query_string}&signature=#{escape(signature)}"
112
+ end
113
+
114
+ def get_escaped_query_string(request_params)
115
+ sorted_request_params = sort_param(request_params)
116
+ build_nested_query(sorted_request_params)
117
+ end
118
+
119
+ def generate_signature(string_to_sign)
120
+ digest = OpenSSL::Digest.new('sha256')
121
+ OpenSSL::HMAC.hexdigest(digest, @api_secret, string_to_sign)
122
+ end
123
+
124
+ def get_api_url(endpoint)
125
+ @api_base_url + endpoint
126
+ end
127
+
128
+ def build_nested_query(value, prefix = nil)
129
+ case value
130
+ when Array
131
+ value.map {|v|
132
+ build_nested_query(v, "#{prefix}[]")
133
+ }.join("&")
134
+ when Hash
135
+ value.map {|k, v|
136
+ build_nested_query(v, prefix ? "#{prefix}[#{k}]" : k)
137
+ }.reject(&:empty?).join('&')
138
+ # when nil
139
+ # "#{escape(prefix)}="
140
+ else
141
+ raise ArgumentError, "value must be a Hash" if prefix.nil?
142
+ "#{escape(prefix)}=#{escape(value)}"
143
+ end
144
+ end
145
+
146
+ def escape(s)
147
+ s = URI.encode_www_form_component(s)
148
+ URI.escape(s, "*")
149
+ end
150
+
151
+ # Method which is called in service perform and handle exceptions
152
+ #
153
+ def perform_and_handle_exceptions(err_code = 'swt', err_message = 'Something Went Wrong', &block)
154
+ begin
155
+ yield if block_given?
156
+ rescue StandardError => se
157
+ OstKycSdkRuby::Util::Result.exception(se, {error: err_code, error_message: err_message})
158
+ end
159
+ end
160
+
161
+ def sort_param(params)
162
+
163
+ if params.is_a?(Hash)
164
+ params = JSON.parse(params.to_json)
165
+ data = {}
166
+ params.sort.each do |ele|
167
+ key = ele[0]
168
+ val = ele[1]
169
+ data[key] = sort_param(val)
170
+ end
171
+
172
+ elsif params.is_a?(Array)
173
+ params = JSON.parse(params.to_json)
174
+ data = []
175
+ params.each do |ele|
176
+ data << sort_param(ele)
177
+ end
178
+ else
179
+ data = params.to_s
180
+ end
181
+
182
+ return data
183
+ end
184
+
185
+ def format_response(response)
186
+ json_raw_response = JSON.parse(response.body)
187
+ # If internal response
188
+ if json_raw_response.has_key?('success') || json_raw_response.has_key?('err')
189
+ format_internal_response(response)
190
+ else
191
+ format_external_response(response.code)
192
+ end
193
+ end
194
+
195
+ def format_internal_response(response)
196
+ json_raw_response = JSON.parse(response.body)
197
+ if json_raw_response['success']
198
+ OstKycSdkRuby::Util::Result.success(
199
+ {
200
+ data: json_raw_response['data'],
201
+ http_code: response.code
202
+ }
203
+ )
204
+ else
205
+ err_data = json_raw_response['err']
206
+ OstKycSdkRuby::Util::Result.error(
207
+ {
208
+ error: err_data['code'],
209
+ internal_id: err_data['internal_id'],
210
+ error_message: err_data['msg'],
211
+ error_data: err_data['error_data'],
212
+ http_code: response.code
213
+ }
214
+ )
215
+ end
216
+ end
217
+
218
+ def format_external_response(response_code)
219
+ case response_code.to_i
220
+ when 502
221
+ code = 'BAD_GATEWAY'
222
+ internal_id = 'SDK(BAD_GATEWAY)'
223
+ message = 'Something went wrong.'
224
+ when 503
225
+ code = 'SERVICE_UNAVAILABLE'
226
+ internal_id = 'SDK(SERVICE_UNAVAILABLE)'
227
+ message = 'API under maintenance.'
228
+ when 504
229
+ code = 'GATEWAY_TIMEOUT'
230
+ internal_id = 'SDK(GATEWAY_TIMEOUT)'
231
+ message = 'Request timed out.'
232
+ else
233
+ code = 'SOMETHING_WENT_WRONG'
234
+ internal_id = 'SDK(SOMETHING_WENT_WRONG)'
235
+ message = 'Something went wrong.'
236
+ end
237
+ OstKycSdkRuby::Util::Result.error(
238
+ {
239
+ error: code,
240
+ internal_id: internal_id,
241
+ error_message: message,
242
+ http_code: response_code
243
+ }
244
+ )
245
+ end
246
+
247
+ end
248
+
249
+ end
250
+
251
+ end
@@ -0,0 +1,233 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Util
4
+
5
+ class Result
6
+
7
+ # OstKycSdkRuby::Util::Result
8
+
9
+ attr_accessor :error,
10
+ :error_message,
11
+ :internal_id,
12
+ :error_data,
13
+ :message,
14
+ :data,
15
+ :exception,
16
+ :http_code
17
+
18
+ # Initialize
19
+ #
20
+ # Arguments:
21
+ # params: (Hash)
22
+ def initialize(params = {})
23
+ set_error(params)
24
+ set_message(params[:message])
25
+ set_http_code(params[:http_code])
26
+ @data = params[:data] || {}
27
+ end
28
+
29
+ # Set Error
30
+ #
31
+ # Arguments:
32
+ # params: (Hash)
33
+ def set_error(params)
34
+ @error = params[:error] if params.key?(:error)
35
+ @error_message = params[:error_message] if params.key?(:error_message)
36
+ @error_data = params[:error_data] if params.key?(:error_data)
37
+ @internal_id = params[:internal_id] if params.key?(:internal_id)
38
+ end
39
+
40
+ # Set Message
41
+ #
42
+ # Arguments:
43
+ # msg: (String)
44
+ def set_message(msg)
45
+ @message = msg
46
+ end
47
+
48
+ # Set HTTP Code
49
+ #
50
+ # Arguments:
51
+ # msg: (String)
52
+ def set_http_code(h_c)
53
+ if h_c.nil?
54
+ @http_code = 200
55
+ else
56
+ @http_code = h_c.to_i
57
+ end
58
+ end
59
+
60
+ # Set Exception
61
+ #
62
+ # Arguments:
63
+ # e: (Exception)
64
+ def set_exception(e)
65
+ @exception = e
66
+ end
67
+
68
+ # is valid?
69
+ #
70
+ # @return [Boolean] returns True / False
71
+ #
72
+ def valid?
73
+ !invalid?
74
+ end
75
+
76
+ # is invalid?
77
+ #
78
+ # @return [Boolean] returns True / False
79
+ #
80
+ def invalid?
81
+ errors_present?
82
+ end
83
+
84
+ # Define error / failed methods
85
+ #
86
+ [:error?, :errors?, :failed?].each do |name|
87
+ define_method(name) { invalid? }
88
+ end
89
+
90
+ # Define success method
91
+ #
92
+ [:success?].each do |name|
93
+ define_method(name) { valid? }
94
+ end
95
+
96
+ # are errors present?
97
+ #
98
+ # @return [Boolean] returns True / False
99
+ #
100
+ def errors_present?
101
+ @internal_id ||
102
+ @error ||
103
+ @error_message ||
104
+ @error_data ||
105
+ @exception
106
+ end
107
+
108
+ # Exception message
109
+ #
110
+ # Returns:
111
+ # exception_message: (String)
112
+ #
113
+ def exception_message
114
+ @e_m ||= @exception.nil? ? '' : @exception.message
115
+ end
116
+
117
+ # Get instance variables Hash style from object
118
+ #
119
+ def [](key)
120
+ instance_variable_get("@#{key}")
121
+ end
122
+
123
+ # Error
124
+ #
125
+ # Returns:
126
+ # obj: (OstKycSdkRuby::Util::Result)
127
+ #
128
+ def self.error(params)
129
+ new(params)
130
+ end
131
+
132
+ # Success
133
+ #
134
+ # Returns:
135
+ # obj: (OstKycSdkRuby::Util::Result)
136
+ #
137
+ def self.success(params)
138
+ new(params.merge!(no_error))
139
+ end
140
+
141
+ # Exception
142
+ #
143
+ # Returns:
144
+ # obj: (OstKycSdkRuby::Util::Result)
145
+ #
146
+ def self.exception(e, params = {})
147
+ obj = new(params)
148
+ obj.set_exception(e)
149
+ return obj
150
+ end
151
+
152
+ # No Error
153
+ #
154
+ # Returns:
155
+ # obj: (Hash)
156
+ #
157
+ def self.no_error
158
+ @n_err ||= {
159
+ error: nil,
160
+ error_message: nil,
161
+ error_data: nil,
162
+ internal_id: nil
163
+ }
164
+ end
165
+
166
+ # Fields
167
+ #
168
+ # Returns:
169
+ # obj: (Array)
170
+ #
171
+ def self.fields
172
+ error_fields + [:data, :message]
173
+ end
174
+
175
+ # Error Fields
176
+ #
177
+ # Returns:
178
+ # obj: (Array)
179
+ #
180
+ def self.error_fields
181
+ [
182
+ :error,
183
+ :error_message,
184
+ :error_data,
185
+ :internal_id
186
+ ]
187
+ end
188
+
189
+ # Create an Hash out of all instance vars
190
+ #
191
+ # Returns:
192
+ # obj: (Hash)
193
+ #
194
+ def to_hash
195
+ self.class.fields.each_with_object({}) do |key, hash|
196
+ val = send(key)
197
+ hash[key] = val if !val.nil?
198
+ end
199
+ end
200
+
201
+ # To JSON
202
+ #
203
+ # Returns:
204
+ # obj: (Hash)
205
+ #
206
+ def to_json
207
+
208
+ hash = self.to_hash
209
+
210
+ if (hash[:error] == nil)
211
+ h = {
212
+ success: true
213
+ }.merge(hash)
214
+ h
215
+ else
216
+ {
217
+ success: false,
218
+ err: {
219
+ internal_id: hash[:internal_id] || 'SDK',
220
+ code: hash[:error],
221
+ msg: hash[:error_message],
222
+ error_data: hash[:error_data] || []
223
+ }
224
+ }
225
+ end
226
+
227
+ end
228
+
229
+ end
230
+
231
+ end
232
+
233
+ end
@@ -0,0 +1,102 @@
1
+ module OstKycSdkRuby
2
+
3
+ module Util
4
+
5
+ module ServicesHelper
6
+
7
+ # Wrapper Method which could be used to execute business logic
8
+ # Error handling code wraps execution of business logic
9
+ #
10
+ # Arguments:
11
+ # err_code: (String)
12
+ # err_message: (String)
13
+ # block: (Proc)
14
+ #
15
+ # Returns:
16
+ # OstKycSdkRuby::Util::Result
17
+ #
18
+ def perform_and_handle_exceptions(err_code = 'swt', err_message = 'Something Went Wrong', &block)
19
+ begin
20
+ yield if block_given?
21
+ rescue StandardError => se
22
+ OstKycSdkRuby::Util::Result.exception(se, {error: err_code, error_message: err_message, data: @params} )
23
+ end
24
+ end
25
+
26
+ # Success
27
+ #
28
+ # Returns:
29
+ # OstKycSdkRuby::Util::Result
30
+ #
31
+ def success
32
+ success_with_data({})
33
+ end
34
+
35
+ # Success with data
36
+ #
37
+ # Arguments:
38
+ # data: (Hash)
39
+ #
40
+ # Returns:
41
+ # OstKycSdkRuby::Util::Result
42
+ #
43
+ def success_with_data(data)
44
+
45
+ # Allow only Hash data to pass ahead
46
+ data = {} unless Util::CommonValidator.is_a_hash?(data)
47
+
48
+ OstKycSdkRuby::Util::Result.success({data: data})
49
+
50
+ end
51
+
52
+ # Error with data
53
+ #
54
+ # Arguments:
55
+ # code: (String)
56
+ # msg: (String)
57
+ # data: (Hash)
58
+ #
59
+ # Returns:
60
+ # OstKycSdkRuby::Util::Result
61
+ #
62
+ def error_with_data(code, msg, data = {})
63
+
64
+ OstKycSdkRuby::Util::Result.error(
65
+ {
66
+ error: code,
67
+ error_message: msg,
68
+ data: data
69
+ }
70
+ )
71
+
72
+ end
73
+
74
+ #
75
+ # Exception with data and without action
76
+ #
77
+ # Arguments:
78
+ # e: (Exception)
79
+ # code: (String)
80
+ # msg: (String)
81
+ # data: (Hash optional)
82
+ #
83
+ # Returns:
84
+ # OstKycSdkRuby::Util::Result
85
+ #
86
+ def exception_with_data(e, code, msg, data = {})
87
+
88
+ OstKycSdkRuby::Util::Result.exception(
89
+ e, {
90
+ error: code,
91
+ error_message: msg,
92
+ data: data
93
+ }
94
+ )
95
+
96
+ end
97
+
98
+ end
99
+
100
+ end
101
+
102
+ end
@@ -0,0 +1,5 @@
1
+ module OstKycSdkRuby
2
+
3
+ VERSION = "2.0.0.beta.2"
4
+
5
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ost-kyc-sdk-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta.1
4
+ version: 2.0.0.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - OST
@@ -44,7 +44,29 @@ email: []
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
- files: []
47
+ files:
48
+ - lib/config.rb
49
+ - lib/ost-kyc-sdk-ruby.rb
50
+ - lib/ost-kyc-sdk-ruby/saas.rb
51
+ - lib/ost-kyc-sdk-ruby/saas/base.rb
52
+ - lib/ost-kyc-sdk-ruby/saas/manifest.rb
53
+ - lib/ost-kyc-sdk-ruby/saas/services.rb
54
+ - lib/ost-kyc-sdk-ruby/saas/users.rb
55
+ - lib/ost-kyc-sdk-ruby/saas/users_kyc.rb
56
+ - lib/ost-kyc-sdk-ruby/saas/users_kyc_detail.rb
57
+ - lib/ost-kyc-sdk-ruby/saas/validators.rb
58
+ - lib/ost-kyc-sdk-ruby/test/signature_generation_test.rb
59
+ - lib/ost-kyc-sdk-ruby/test/user_kyc_detail_test.rb
60
+ - lib/ost-kyc-sdk-ruby/test/user_kyc_test.rb
61
+ - lib/ost-kyc-sdk-ruby/test/user_test.rb
62
+ - lib/ost-kyc-sdk-ruby/test/validators_test.rb
63
+ - lib/ost-kyc-sdk-ruby/util.rb
64
+ - lib/ost-kyc-sdk-ruby/util/api_credentials.rb
65
+ - lib/ost-kyc-sdk-ruby/util/common_validator.rb
66
+ - lib/ost-kyc-sdk-ruby/util/http_helper.rb
67
+ - lib/ost-kyc-sdk-ruby/util/result.rb
68
+ - lib/ost-kyc-sdk-ruby/util/services_helper.rb
69
+ - lib/ost-kyc-sdk-ruby/version.rb
48
70
  homepage: https://kyc.ost.com
49
71
  licenses:
50
72
  - MIT