cybersource_rest_client 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/lib/AuthenticationSDK/authentication/http/GetSignatureParameter.rb +64 -0
  3. data/lib/AuthenticationSDK/authentication/http/HttpSignatureHeader.rb +52 -0
  4. data/lib/AuthenticationSDK/authentication/jwt/JwtToken.rb +62 -0
  5. data/lib/AuthenticationSDK/authentication/payloadDigest/digest.rb +10 -0
  6. data/lib/AuthenticationSDK/core/Authorization.rb +24 -0
  7. data/lib/AuthenticationSDK/core/ITokenGeneration.rb +4 -0
  8. data/lib/AuthenticationSDK/core/Logger.rb +26 -0
  9. data/lib/AuthenticationSDK/core/MerchantConfig.rb +181 -0
  10. data/{AuthenticationSDK → lib/AuthenticationSDK}/resource/TRRReports.json +0 -0
  11. data/{AuthenticationSDK → lib/AuthenticationSDK}/resource/cybs.yml +0 -0
  12. data/{AuthenticationSDK → lib/AuthenticationSDK}/resource/request.json +0 -0
  13. data/{AuthenticationSDK → lib/AuthenticationSDK}/resource/request_capture.json +0 -0
  14. data/{AuthenticationSDK → lib/AuthenticationSDK}/resource/testrest.p12 +0 -0
  15. data/{AuthenticationSDK → lib/AuthenticationSDK}/spec/Authorization_spec.rb +0 -0
  16. data/{AuthenticationSDK → lib/AuthenticationSDK}/spec/MerchantConfigData.rb +0 -0
  17. data/{AuthenticationSDK → lib/AuthenticationSDK}/spec/MerchantConfig_spec.rb +0 -0
  18. data/{AuthenticationSDK → lib/AuthenticationSDK}/spec/PostRequestData.json +0 -0
  19. data/{AuthenticationSDK → lib/AuthenticationSDK}/spec/PutRequestData.json +0 -0
  20. data/{AuthenticationSDK → lib/AuthenticationSDK}/spec/ResponseCodeMessage_spec.rb +0 -0
  21. data/{AuthenticationSDK → lib/AuthenticationSDK}/spec/spec_helper.rb +0 -0
  22. data/lib/AuthenticationSDK/util/ApiException.rb +19 -0
  23. data/lib/AuthenticationSDK/util/Cache.rb +36 -0
  24. data/lib/AuthenticationSDK/util/Constants.rb +138 -0
  25. data/lib/AuthenticationSDK/util/PropertiesUtil.rb +19 -0
  26. data/lib/AuthenticationSDK/util/Utility.rb +32 -0
  27. data/lib/cybersource_rest_client/api_client.rb +11 -11
  28. data/lib/cybersource_rest_client.rb +13 -0
  29. metadata +27 -29
  30. data/AuthenticationSDK/AuthenticationSDK-0.0.1.gem +0 -0
  31. data/AuthenticationSDK/Cybersource.gemspec +0 -25
  32. data/AuthenticationSDK/authentication/http/GetSignatureParameter.rb +0 -64
  33. data/AuthenticationSDK/authentication/http/HttpSignatureHeader.rb +0 -52
  34. data/AuthenticationSDK/authentication/jwt/JwtToken.rb +0 -62
  35. data/AuthenticationSDK/authentication/payloadDigest/digest.rb +0 -10
  36. data/AuthenticationSDK/core/Authorization.rb +0 -24
  37. data/AuthenticationSDK/core/ITokenGeneration.rb +0 -4
  38. data/AuthenticationSDK/core/Logger.rb +0 -26
  39. data/AuthenticationSDK/core/MerchantConfig.rb +0 -181
  40. data/AuthenticationSDK/util/ApiException.rb +0 -19
  41. data/AuthenticationSDK/util/Cache.rb +0 -36
  42. data/AuthenticationSDK/util/Constants.rb +0 -138
  43. data/AuthenticationSDK/util/PropertiesUtil.rb +0 -20
  44. data/AuthenticationSDK/util/Utility.rb +0 -31
@@ -0,0 +1,138 @@
1
+ class Constants
2
+
3
+ GET_REQUEST_TYPE_LOWER = 'get' unless const_defined?(:GET_REQUEST_TYPE_LOWER)
4
+
5
+ POST_REQUEST_TYPE_LOWER = 'post' unless const_defined?(:POST_REQUEST_TYPE_LOWER)
6
+
7
+ PUT_REQUEST_TYPE_LOWER = 'put' unless const_defined?(:PUT_REQUEST_TYPE_LOWER)
8
+
9
+ PATCH_REQUEST_TYPE_LOWER = 'patch' unless const_defined?(:PATCH_REQUEST_TYPE_LOWER)
10
+
11
+ DELETE_REQUEST_TYPE_LOWER = 'delete' unless const_defined?(:DELETE_REQUEST_TYPE_LOWER)
12
+
13
+ GET_REQUEST_TYPE = 'GET' unless const_defined?(:GET_REQUEST_TYPE)
14
+
15
+ POST_REQUEST_TYPE = 'POST' unless const_defined?(:POST_REQUEST_TYPE)
16
+
17
+ PUT_REQUEST_TYPE = 'PUT' unless const_defined?(:PUT_REQUEST_TYPE)
18
+
19
+ PATCH_REQUEST_TYPE = 'PATCH' unless const_defined?(:PATCH_REQUEST_TYPE)
20
+
21
+ DELETE_REQUEST_TYPE = 'DELETE' unless const_defined?(:DELETE_REQUEST_TYPE)
22
+
23
+ V_C_MERCHANT_ID = 'v-c-merchant-id' unless const_defined?(:V_C_MERCHANT_ID)
24
+
25
+ HOST = 'host' unless const_defined?(:HOST)
26
+
27
+ DATE = 'date' unless const_defined?(:DATE)
28
+
29
+ REQUEST_TARGET = '(request-target)' unless const_defined?(:REQUEST_TARGET)
30
+
31
+ DIGEST = 'digest' unless const_defined?(:DIGEST)
32
+
33
+ SIGNATURE = 'Signature' unless const_defined?(:SIGNATURE)
34
+
35
+ HTTPS_URI_PREFIX = 'https://' unless const_defined?(:HTTPS_URI_PREFIX)
36
+
37
+ BEARER = 'Bearer' unless const_defined?(:BEARER)
38
+
39
+ MEDIA_TYPE_JSON = 'application/json' unless const_defined?(:MEDIA_TYPE_JSON)
40
+
41
+ SIGNATURE_ALGORITHM = 'HmacSHA256' unless const_defined?(:SIGNATURE_ALGORITHM)
42
+
43
+ ALGORITHM = "algorithm=\"" unless const_defined?(:ALGORITHM)
44
+
45
+ SHA256 = 'SHA-256=' unless const_defined?(:SHA256)
46
+
47
+ CONTENT_TYPE = 'Content-Type' unless const_defined?(:CONTENT_TYPE)
48
+
49
+ USER_AGENT = 'User-Agent' unless const_defined?(:USER_AGENT)
50
+
51
+ USER_AGENT_VALUE = 'Mozilla/5.0' unless const_defined?(:USER_AGENT_VALUE)
52
+
53
+ KEY_ID = "keyid=\"" unless const_defined?(:KEY_ID)
54
+
55
+ HEADERS_PARAM = "headers=\"" unless const_defined?(:HEADERS_PARAM)
56
+
57
+ SIGNATURE_PARAM = "signature=\"" unless const_defined?(:SIGNATURE_PARAM)
58
+
59
+ AUTH_TYPE_HTTP = 'HTTP_SIGNATURE' unless const_defined?(:AUTH_TYPE_HTTP)
60
+
61
+ AUTH_TYPE_JWT = 'JWT' unless const_defined?(:AUTH_TYPE_JWT)
62
+
63
+ RUN_ENV_SANDBOX = 'CYBERSOURCE.ENVIRONMENT.SANDBOX' unless const_defined?(:RUN_ENV_SANDBOX)
64
+
65
+ RUN_ENV_PROD = 'CYBERSOURCE.ENVIRONMENT.PRODUCTION'unless const_defined?(:RUN_ENV_PROD)
66
+
67
+ SANDBOX_URL = 'apitest.cybersource.com' unless const_defined?(:SANDBOX_URL)
68
+
69
+ PRODUCTION_URL = 'api.cybersource.com' unless const_defined?(:PRODUCTION_URL)
70
+
71
+ # constants for fall back logic
72
+
73
+ DEFAULT_LOG_SIZE = '10485760' unless const_defined?(:DEFAULT_LOG_SIZE)
74
+
75
+ DEFAULT_PROXY_ADDRESS = 'userproxy.visa.com' unless const_defined?(:DEFAULT_PROXY_ADDRESS)
76
+
77
+ DEFAULT_PROXY_PORT = '443' unless const_defined?(:DEFAULT_PROXY_PORT)
78
+
79
+ DEFAULT_TIMEOUT = '1000' unless const_defined?(:DEFAULT_TIMEOUT)
80
+
81
+ DEFAULT_LOG_DIRECTORY = '../log' unless const_defined?(:DEFAULT_LOG_DIRECTORY)
82
+
83
+ DEFAULT_KEY_DIRECTORY = 'resource' unless const_defined?(:DEFAULT_KEY_DIRECTORY)
84
+
85
+ DEFAULT_LOGFILE_NAME = 'cybs' unless const_defined?(:DEFAULT_LOGFILE_NAME)
86
+
87
+ # Constant for Fall back logic and Exception Handling
88
+
89
+ REQUEST_JSON_ERROR = 'Request Json File missing. File Path :: ' unless const_defined?(:REQUEST_JSON_ERROR)
90
+
91
+ INVALID_ENABLE_LOG = 'EnableLog should be (True/False) in cybs.yml' unless const_defined?(:INVALID_ENABLE_LOG)
92
+
93
+ REFER_LOG = 'Please refer Log for details' unless const_defined?(:REFER_LOG)
94
+
95
+ MERCHANT_ID_NULL = 'MerchantID is mandatory' unless const_defined?(:MERCHANT_ID_NULL)
96
+
97
+ INCORRECT_KEY_PASS = 'The keyPass Entered is Incorrect' unless const_defined?(:INCORRECT_KEY_PASS)
98
+
99
+ AUTH_TYPE_MANDATORY= 'AuthenticationType is Mandatory' unless const_defined?(:AUTH_TYPE_MANDATORY)
100
+
101
+ MERCHANT_KEY_ID_MANDATORY = 'MerchantKeyId is Mandatory' unless const_defined?(:MERCHANT_KEY_ID_MANDATORY)
102
+
103
+ MERCHANT_SECRET_KEY_MANDATORY = 'MerchantSecretKey is Mandatory' unless const_defined?(:MERCHANT_SECRET_KEY_MANDATORY)
104
+
105
+ KEY_PASS_NULL = 'keyPass is empty, Assigining merchantID value' unless const_defined?(:KEY_PASS_NULL)
106
+
107
+ REQUEST_JSON_PATH_EMPTY = 'RequestJsonPath not provided. Using Default Value:'unless const_defined?(:REQUEST_JSON_PATH_EMPTY)
108
+
109
+ REQUEST_TYPE_EMPTY = 'RequestType Property of Merchant Config Not Set' unless const_defined?(:REQUEST_TYPE_EMPTY)
110
+
111
+ INVALID_REQUEST_TYPE_METHOD = 'Entered Request Type should be (GET/POST/PUT)' unless const_defined?(:INVALID_REQUEST_TYPE_METHOD)
112
+
113
+ INVALID_LOG_DIRECTORY = 'Entered LogDirectory is Incorrect. Using Default Path: ' unless const_defined?(:INVALID_LOG_DIRECTORY)
114
+
115
+ RUN_ENVIRONMENT_ERROR = 'Entered RunEnvironment is Incorrect.' unless const_defined?(:RUN_ENVIRONMENT_ERROR)
116
+
117
+ PROPERTY_FILE_NOT_FOUND = 'Cybs.yml file not found' unless const_defined?(:PROPERTY_FILE_NOT_FOUND)
118
+
119
+ ERROR_PREFIX = 'Error: ' unless const_defined?(:ERROR_PREFIX)
120
+
121
+ WARNING_PREFIX = 'Warning: ' unless const_defined?(:WARNING_PREFIX)
122
+
123
+ HIDDEN_MERCHANT_PROPERTIES = 'merchantID,merchantKeyId,merchantsecretKey,keyAlias,keyPass' unless const_defined?(:HIDDEN_MERCHANT_PROPERTIES)
124
+
125
+ RUN_ENVIRONMENT = 'RunEnvironment is Mandatory' unless const_defined?(:RUN_ENVIRONMENT)
126
+
127
+ KEY_DIRECTORY_EMPTY = 'KeysDirectory not provided. Using Default Path:' unless const_defined?(:KEY_DIRECTORY_EMPTY)
128
+
129
+ FILE_NOT_FOUND = 'File not found, Re-Enter path/file name, Entered path/file name :: ' unless const_defined?(:FILE_NOT_FOUND)
130
+
131
+ AUTH_ERROR = 'Check Authentication Type (HTTP_Signature/JWT) in cybs.yml.' unless const_defined?(:AUTH_ERROR)
132
+
133
+ KEY_FILE_NAME_NULL_EMPTY = 'KeyFilename Empty/Null. Assigining merchantID value' unless const_defined?(:KEY_FILE_NAME_NULL_EMPTY)
134
+
135
+ KEY_ALIAS_NULL_EMPTY = 'KeyAlias Empty/Null. Assigining merchantID value' unless const_defined?(:KEY_ALIAS_NULL_EMPTY)
136
+
137
+ INCORRECT_KEY_ALIAS = 'The Entered KeyAlias is Incorrect. Assigining merchantID value' unless const_defined?(:INCORRECT_KEY_ALIAS)
138
+ end
@@ -0,0 +1,19 @@
1
+ require 'yaml'
2
+ require_relative './Constants.rb'
3
+ public
4
+ # Method for reading Cybs.yml file
5
+ class PropertiesUtil
6
+ def getCybsProp(cybs_path)
7
+ # Give the path of cybs properties file which needs to be read.
8
+ if File.exist?(cybs_path)
9
+ # Reading Merchant Config from Cybs.yml File"
10
+ cybsproperty_obj = YAML.load(File.read(cybs_path))
11
+ return cybsproperty_obj
12
+ elsif !File.exist?(cybs_path)
13
+ raise Constants::ERROR_PREFIX + Constants::PROPERTY_FILE_NOT_FOUND
14
+ end
15
+ rescue StandardError => err
16
+ puts err.message
17
+ exit!
18
+ end
19
+ end
@@ -0,0 +1,32 @@
1
+ public
2
+
3
+ class Utility
4
+ def getResponseCodeMessage(responseCode)
5
+ responseCode = responseCode.to_s
6
+ case responseCode
7
+ when "200"
8
+ tempResponseCodeMessage = "Transcation Successful"
9
+ when "201"
10
+ tempResponseCodeMessage = "Transcation Successful"
11
+ when "400"
12
+ tempResponseCodeMessage = "Bad Request"
13
+ when "401"
14
+ tempResponseCodeMessage = "Authentication Failed"
15
+ when "404"
16
+ tempResponseCodeMessage = "Not Found"
17
+ when "403"
18
+ tempResponseCodeMessage = "Forbidden"
19
+ when "500"
20
+ tempResponseCodeMessage = "Internal Server Error"
21
+ when "502"
22
+ tempResponseCodeMessage = "Bad Gateway"
23
+ when "503"
24
+ tempResponseCodeMessage = "Service Unavailable"
25
+ when "504"
26
+ tempResponseCodeMessage = "Gateway Timeout"
27
+ else
28
+ tempResponseCodeMessage= ''
29
+ end
30
+ return tempResponseCodeMessage
31
+ end
32
+ end
@@ -140,16 +140,16 @@ module CyberSource
140
140
  download_file(request) if opts[:return_type] == 'File'
141
141
  request
142
142
  end
143
- # set merchantConfig
144
- def set_configuration(config)
145
- require_relative '../../AuthenticationSDK/core/MerchantConfig.rb'
146
- $merchantconfig_obj = Merchantconfig.new(config)
147
- @config.host = $merchantconfig_obj.requestHost
148
- end
149
- # Calling Authentication
143
+ # set merchantConfig
144
+ def set_configuration(config)
145
+ require_relative '../AuthenticationSDK/core/MerchantConfig.rb'
146
+ $merchantconfig_obj = Merchantconfig.new(config)
147
+ @config.host = $merchantconfig_obj.requestHost
148
+ end
149
+ # Calling Authentication
150
150
  def CallAuthenticationHeader(http_method, path, body_params, header_params, query_params)
151
- require_relative '../../AuthenticationSDK/core/Authorization.rb'
152
- require_relative '../../AuthenticationSDK/authentication/payloadDigest/digest.rb'
151
+ require_relative '../AuthenticationSDK/core/Authorization.rb'
152
+ require_relative '../AuthenticationSDK/authentication/payloadDigest/digest.rb'
153
153
  request_target = get_query_param(path, query_params)
154
154
  # Request Type. [Non-Editable]
155
155
  request_type = http_method.to_s
@@ -198,7 +198,7 @@ module CyberSource
198
198
  end
199
199
  request_target
200
200
  end
201
-
201
+
202
202
  # Check if the given MIME is a JSON MIME.
203
203
  # JSON MIME examples:
204
204
  # application/json
@@ -457,4 +457,4 @@ module CyberSource
457
457
  end
458
458
  end
459
459
  end
460
- end
460
+ end
@@ -10,6 +10,19 @@ Swagger Codegen version: 2.2.3
10
10
 
11
11
  =end
12
12
 
13
+ require 'AuthenticationSDK/util/Utility'
14
+ require 'AuthenticationSDK/util/PropertiesUtil'
15
+ require 'AuthenticationSDK/util/Constants'
16
+ require 'AuthenticationSDK/util/Cache'
17
+ require 'AuthenticationSDK/util/ApiException'
18
+ require 'AuthenticationSDK/core/MerchantConfig'
19
+ require 'AuthenticationSDK/core/Logger'
20
+ require 'AuthenticationSDK/core/ITokenGeneration'
21
+ require 'AuthenticationSDK/core/Authorization'
22
+ require 'AuthenticationSDK/authentication/payloadDigest/digest'
23
+ require 'AuthenticationSDK/authentication/jwt/JwtToken'
24
+ require 'AuthenticationSDK/authentication/http/HttpSignatureHeader'
25
+ require 'AuthenticationSDK/authentication/http/GetSignatureParameter'
13
26
  # Common files
14
27
  require 'cybersource_rest_client/api_client'
15
28
  require 'cybersource_rest_client/api_error'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cybersource_rest_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - CyberSource
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-11 00:00:00.000000000 Z
11
+ date: 2019-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: typhoeus
@@ -279,33 +279,31 @@ executables: []
279
279
  extensions: []
280
280
  extra_rdoc_files: []
281
281
  files:
282
- - AuthenticationSDK/AuthenticationSDK-0.0.1.gem
283
- - AuthenticationSDK/Cybersource.gemspec
284
- - AuthenticationSDK/authentication/http/GetSignatureParameter.rb
285
- - AuthenticationSDK/authentication/http/HttpSignatureHeader.rb
286
- - AuthenticationSDK/authentication/jwt/JwtToken.rb
287
- - AuthenticationSDK/authentication/payloadDigest/digest.rb
288
- - AuthenticationSDK/core/Authorization.rb
289
- - AuthenticationSDK/core/ITokenGeneration.rb
290
- - AuthenticationSDK/core/Logger.rb
291
- - AuthenticationSDK/core/MerchantConfig.rb
292
- - AuthenticationSDK/resource/TRRReports.json
293
- - AuthenticationSDK/resource/cybs.yml
294
- - AuthenticationSDK/resource/request.json
295
- - AuthenticationSDK/resource/request_capture.json
296
- - AuthenticationSDK/resource/testrest.p12
297
- - AuthenticationSDK/spec/Authorization_spec.rb
298
- - AuthenticationSDK/spec/MerchantConfigData.rb
299
- - AuthenticationSDK/spec/MerchantConfig_spec.rb
300
- - AuthenticationSDK/spec/PostRequestData.json
301
- - AuthenticationSDK/spec/PutRequestData.json
302
- - AuthenticationSDK/spec/ResponseCodeMessage_spec.rb
303
- - AuthenticationSDK/spec/spec_helper.rb
304
- - AuthenticationSDK/util/ApiException.rb
305
- - AuthenticationSDK/util/Cache.rb
306
- - AuthenticationSDK/util/Constants.rb
307
- - AuthenticationSDK/util/PropertiesUtil.rb
308
- - AuthenticationSDK/util/Utility.rb
282
+ - lib/AuthenticationSDK/authentication/http/GetSignatureParameter.rb
283
+ - lib/AuthenticationSDK/authentication/http/HttpSignatureHeader.rb
284
+ - lib/AuthenticationSDK/authentication/jwt/JwtToken.rb
285
+ - lib/AuthenticationSDK/authentication/payloadDigest/digest.rb
286
+ - lib/AuthenticationSDK/core/Authorization.rb
287
+ - lib/AuthenticationSDK/core/ITokenGeneration.rb
288
+ - lib/AuthenticationSDK/core/Logger.rb
289
+ - lib/AuthenticationSDK/core/MerchantConfig.rb
290
+ - lib/AuthenticationSDK/resource/TRRReports.json
291
+ - lib/AuthenticationSDK/resource/cybs.yml
292
+ - lib/AuthenticationSDK/resource/request.json
293
+ - lib/AuthenticationSDK/resource/request_capture.json
294
+ - lib/AuthenticationSDK/resource/testrest.p12
295
+ - lib/AuthenticationSDK/spec/Authorization_spec.rb
296
+ - lib/AuthenticationSDK/spec/MerchantConfigData.rb
297
+ - lib/AuthenticationSDK/spec/MerchantConfig_spec.rb
298
+ - lib/AuthenticationSDK/spec/PostRequestData.json
299
+ - lib/AuthenticationSDK/spec/PutRequestData.json
300
+ - lib/AuthenticationSDK/spec/ResponseCodeMessage_spec.rb
301
+ - lib/AuthenticationSDK/spec/spec_helper.rb
302
+ - lib/AuthenticationSDK/util/ApiException.rb
303
+ - lib/AuthenticationSDK/util/Cache.rb
304
+ - lib/AuthenticationSDK/util/Constants.rb
305
+ - lib/AuthenticationSDK/util/PropertiesUtil.rb
306
+ - lib/AuthenticationSDK/util/Utility.rb
309
307
  - lib/cybersource_rest_client.rb
310
308
  - lib/cybersource_rest_client/api/capture_api.rb
311
309
  - lib/cybersource_rest_client/api/conversion_details_api.rb
@@ -1,25 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = "authenticationSDK"
3
- s.version = "0.0.1"
4
- s.platform = Gem::Platform::RUBY
5
- s.date = "2018-07-17"
6
- s.summary = "Cybersource Payments REST API Ruby Gem"
7
- s.description = "Move your business forward with the Cybersource Payments REST API"
8
- s.authors = ["cybersource"]
9
- s.email = ""
10
- s.files = Dir.glob("{lib}/**/*")
11
-
12
- s.required_ruby_version = '>= 2.2.2'
13
- s.required_rubygems_version = '>= 1.3.6'
14
-
15
- s.add_runtime_dependency 'activesupport', '~> 5.2', '>= 5.2.0'
16
- s.add_runtime_dependency 'json', '~> 2.1.0', '>= 1.8.1'
17
- s.add_runtime_dependency 'interface','~> 1.0', '>= 1.0.4'
18
- s.add_runtime_dependency 'jwt', '~> 2.1.0'
19
-
20
- s.add_runtime_dependency 'rspec', '~> 2.1'
21
- s.add_runtime_dependency 'simplecov'
22
- s.add_runtime_dependency 'simplecov-json'
23
- s.add_development_dependency 'rubocop', '~> 0.57.2'
24
- end
25
-
@@ -1,64 +0,0 @@
1
- require_relative '../../util/Constants.rb'
2
- require_relative '.././payloadDigest/digest.rb'
3
- require 'openssl'
4
- # This function returns value for paramter Signature which is then passed to Signature header
5
- # paramter 'Signature' is calucated based on below key values and then signed with SECRET KEY -
6
- # host: Sandbox (apitest.cybersource.com) or Production (api.cybersource.com) hostname
7
- # date: "HTTP-date" format as defined by RFC7231.
8
- # (request-target): Should be in format of httpMethod: path
9
- # Example: "post /pts/v2/payments"
10
- # Digest: Only needed for POST calls.
11
- # digestString = BASE64( HMAC-SHA256 ( Payload ));
12
- # Digest: “SHA-256=“ + digestString;
13
- # v-c-merchant-id: set value to Cybersource Merchant ID
14
- # This ID can be found on EBC portal*/
15
- class SignatureParameter
16
- def generateSignatureParameter(merchantconfig_obj, gmtdatetime, log_obj)
17
- request_type = merchantconfig_obj.requestType.upcase
18
- merchantSecretKey = merchantconfig_obj.merchantSecretKey
19
- signatureString = Constants::HOST + ': ' + merchantconfig_obj.requestHost
20
- signatureString << "\n"+ Constants::DATE + ': ' + gmtdatetime
21
- signatureString << "\n(request-target): "
22
- if request_type == Constants::GET_REQUEST_TYPE || request_type == Constants::DELETE_REQUEST_TYPE
23
- targetUrl=gettargetUrlForGetDelete(request_type,merchantconfig_obj)
24
- signatureString << targetUrl + "\n"
25
- elsif request_type == Constants::POST_REQUEST_TYPE || request_type == Constants::PUT_REQUEST_TYPE || request_type == Constants::PATCH_REQUEST_TYPE
26
- targetUrl=gettargetUrlForPutPost(request_type,merchantconfig_obj)
27
- signatureString << targetUrl + "\n"
28
- payload = merchantconfig_obj.requestJsonData
29
- digest = DigestGeneration.new.generateDigest(payload, log_obj)
30
- digest_payload = Constants::SHA256 + digest
31
- signatureString << Constants::DIGEST + ': ' + digest_payload + "\n"
32
- end
33
- signatureString << Constants::V_C_MERCHANT_ID + ': ' + merchantconfig_obj.merchantId
34
- encodedSignatureString = signatureString.force_encoding(Encoding::UTF_8)
35
- decodedKey = Base64.decode64(merchantSecretKey)
36
- base64EncodedSignature = Base64.strict_encode64(OpenSSL::HMAC.digest('sha256', decodedKey, encodedSignatureString))
37
- return base64EncodedSignature
38
- rescue StandardError => err
39
- log_obj.logger.error(err.message)
40
- log_obj.logger.error(err.backtrace)
41
- puts 'Check log for more details.'
42
- exit!
43
- end
44
- def gettargetUrlForGetDelete(request_type, merchantconfig_obj)
45
- targetUrlForGetDelete = ''
46
- if request_type == Constants::DELETE_REQUEST_TYPE
47
- targetUrlForGetDelete = Constants::DELETE_REQUEST_TYPE_LOWER + ' ' + merchantconfig_obj.requestTarget
48
- elsif request_type == Constants::GET_REQUEST_TYPE
49
- targetUrlForGetDelete = Constants::GET_REQUEST_TYPE_LOWER + ' ' + merchantconfig_obj.requestTarget
50
- end
51
- return targetUrlForGetDelete
52
- end
53
- def gettargetUrlForPutPost(request_type, merchantconfig_obj)
54
- targetUrlForPutPost = ''
55
- if request_type == Constants::POST_REQUEST_TYPE
56
- targetUrlForPutPost = Constants::POST_REQUEST_TYPE_LOWER + ' ' + merchantconfig_obj.requestTarget
57
- elsif request_type == Constants::PUT_REQUEST_TYPE
58
- targetUrlForPutPost = Constants::PUT_REQUEST_TYPE_LOWER + ' ' + merchantconfig_obj.requestTarget
59
- elsif request_type == Constants::PATCH_REQUEST_TYPE
60
- targetUrlForPutPost = Constants::PATCH_REQUEST_TYPE_LOWER + ' ' + merchantconfig_obj.requestTarget
61
- end
62
- return targetUrlForPutPost
63
- end
64
- end
@@ -1,52 +0,0 @@
1
- require 'base64'
2
- require_relative '../../core/ITokenGeneration.rb'
3
- require_relative '../../util/Constants.rb'
4
- require_relative '../../util/ApiException.rb'
5
- require_relative '.././payloadDigest/digest.rb'
6
- require_relative '.././http/GetSignatureParameter.rb'
7
- public
8
- # SignatureHeader return SignatureHeader Value that contains following paramters
9
- # * keyid -- Merchant ID obtained from EBC portal
10
- # * algorithm -- Should have value as "HmacSHA256"
11
- # * headers -- List of all header name passed in the Signature paramter below
12
- # String getHeaders = "host date (request-target)" + " " + "v-c-merchant-id";
13
- # String postHeaders = "host date (request-target) digest v-c-merchant-id";
14
- # Note: Digest is not passed for GET calls
15
- # * signature -- Signature header has paramter called signature
16
- # Paramter 'Signature' must contain all the paramters mentioned in header above in given order
17
- class GenerateHttpSignature
18
- # Generates Signature based on the requestType
19
- def getToken(merchantconfig_obj, gmtdatetime, log_obj)
20
- request_type = merchantconfig_obj.requestType.upcase
21
- signatureHeaderValue =''
22
- signatureHeaderValue << Constants::KEY_ID + merchantconfig_obj.merchantKeyId + "\""
23
- # Algorithm should be always HmacSHA256 for http signature
24
- signatureHeaderValue << ', ' + Constants::ALGORITHM + Constants::SIGNATURE_ALGORITHM + "\""
25
- # Headers - list is choosen based on HTTP method
26
- signatureheader=getsignatureHeader(request_type)
27
- signatureHeaderValue << ', ' + Constants::HEADERS_PARAM + signatureheader + "\""
28
- # Get Value for parameter 'Signature' to be passed to Signature Header
29
- signature_value = SignatureParameter.new.generateSignatureParameter(merchantconfig_obj, gmtdatetime, log_obj)
30
- signatureHeaderValue << ', ' + Constants::SIGNATURE_PARAM + signature_value + "\""
31
- return signatureHeaderValue
32
- rescue StandardError => err
33
- ApiException.new.apiexception(err,log_obj)
34
- exit!
35
- end
36
- def getsignatureHeader(request_type)
37
- headers = ''
38
- if request_type == Constants::POST_REQUEST_TYPE
39
- headers = 'host date (request-target) digest ' + Constants::V_C_MERCHANT_ID
40
- elsif request_type == Constants::GET_REQUEST_TYPE || request_type == Constants::DELETE_REQUEST_TYPE
41
- headers = 'host date (request-target)' + ' ' + Constants::V_C_MERCHANT_ID
42
- elsif request_type == Constants::PUT_REQUEST_TYPE
43
- headers = 'host date (request-target) digest ' + Constants::V_C_MERCHANT_ID
44
- elsif request_type == Constants::PATCH_REQUEST_TYPE
45
- headers = 'host date (request-target) digest ' + Constants::V_C_MERCHANT_ID
46
- else
47
- raise StandardError.new(Constants::ERROR_PREFIX + Constants::INVALID_REQUEST_TYPE_METHOD)
48
- end
49
- return headers
50
- end
51
- implements TokenInterface
52
- end
@@ -1,62 +0,0 @@
1
- require 'base64'
2
- require 'openssl'
3
- require 'jwt'
4
- require 'json'
5
- require 'active_support'
6
- require_relative '../../core/ITokenGeneration.rb'
7
- require_relative '../../util/Constants.rb'
8
- require_relative '../../util/ApiException.rb'
9
- require_relative '../../util/Cache.rb'
10
- require_relative '../../authentication/payloadDigest/digest.rb'
11
- public
12
- #JWT Token-generated based on the Request type
13
- class GenerateJwtToken
14
- def getToken(merchantconfig_obj,gmtDatetime,log_obj)
15
- jwtBody = ''
16
- request_type = merchantconfig_obj.requestType.upcase
17
- filePath = merchantconfig_obj.keysDirectory + '/' + merchantconfig_obj.keyFilename + '.p12'
18
- if (!File.exist?(filePath))
19
- raise Constants::ERROR_PREFIX + Constants::FILE_NOT_FOUND + File.expand_path(filePath)
20
- end
21
- p12File = File.binread(filePath)
22
- jwtBody=getJwtBody(request_type, gmtDatetime, merchantconfig_obj, log_obj)
23
- claimSet = JSON.parse(jwtBody)
24
- p12FilePath = OpenSSL::PKCS12.new(p12File, merchantconfig_obj.keyPass)
25
- # Generating certificate.
26
- cacheObj = ActiveSupport::Cache::MemoryStore.new
27
- x5Cert = Cache.new.fetchCachedCertificate(filePath, p12File, merchantconfig_obj.keyPass, cacheObj)
28
- # Generating Public key.
29
- publicKey = OpenSSL::PKey::RSA.new(p12FilePath.key.public_key)
30
- #Generating Private Key
31
- privateKey = OpenSSL::PKey::RSA.new(p12FilePath.key)
32
- # JWT token-Generates using RS256 algorithm only
33
- x5clist = [x5Cert]
34
- customHeaders = {}
35
- customHeaders['v-c-merchant-id'] = merchantconfig_obj.keyAlias
36
- customHeaders['x5c'] = x5clist
37
- # Generating JWT token
38
- token = JWT.encode(claimSet, privateKey, 'RS256', customHeaders)
39
- return token
40
- rescue StandardError => err
41
- if err.message.include? 'PKCS12_parse: mac verify failure'
42
- ApiException.new.customerror(Constants::ERROR_PREFIX + Constants::INCORRECT_KEY_PASS,log_obj)
43
- exit!
44
- else
45
- ApiException.new.apiexception(err,log_obj)
46
- exit!
47
- end
48
- end
49
- def getJwtBody(request_type, gmtDatetime, merchantconfig_obj,log_obj)
50
- if request_type == Constants::POST_REQUEST_TYPE || request_type == Constants::PUT_REQUEST_TYPE || request_type == Constants::PATCH_REQUEST_TYPE
51
- payload = merchantconfig_obj.requestJsonData
52
- # Note: Digest is not passed for GET calls
53
- digest = DigestGeneration.new.generateDigest(payload, log_obj)
54
- jwtBody = "{\n \"digest\":\"" + digest + "\", \"digestAlgorithm\":\"SHA-256\", \"iat\":\"" + gmtDatetime + "\"}"
55
- elsif request_type == Constants::GET_REQUEST_TYPE || request_type == Constants::DELETE_REQUEST_TYPE
56
- jwtBody = "{\n \"iat\":\"" + gmtDatetime + "\"\n} \n\n"
57
- else
58
- raise StandardError.new(Constants::ERROR_PREFIX + Constants::INVALID_REQUEST_TYPE_METHOD)
59
- end
60
- end
61
- implements TokenInterface
62
- end
@@ -1,10 +0,0 @@
1
- require 'digest'
2
- public
3
- # This method return Digest value which is SHA-256
4
- # hash of payload that is BASE64 encoded
5
- class DigestGeneration
6
- def generateDigest(payload, log_obj)
7
- digest = Digest::SHA256.base64digest(payload)
8
- return digest
9
- end
10
- end
@@ -1,24 +0,0 @@
1
- require_relative '../authentication/http/HttpSignatureHeader.rb'
2
- require_relative '../authentication/jwt/JwtToken.rb'
3
- require_relative '../util/Constants.rb'
4
- require_relative '../util/ApiException.rb'
5
- public
6
- # This function calls for the generation of Signature message depending on the authentication type.
7
- class Authorization
8
- def getToken(merchantconfig_obj, gmtdatetime, log_obj)
9
- authenticationType = merchantconfig_obj.authenticationType.upcase
10
- if merchantconfig_obj.requestType.to_s.empty?
11
- raise StandardError.new(Constants::ERROR_PREFIX + Constants::REQUEST_TYPE_EMPTY)
12
- end
13
- if authenticationType == Constants::AUTH_TYPE_HTTP
14
- token = GenerateHttpSignature.new.getToken(merchantconfig_obj, gmtdatetime, log_obj)
15
- elsif authenticationType == Constants::AUTH_TYPE_JWT
16
- token = GenerateJwtToken.new.getToken(merchantconfig_obj, gmtdatetime, log_obj)
17
- elsif authenticationType != Constants::AUTH_TYPE_HTTP || authenticationType != Constants::AUTH_TYPE_JWT
18
- raise StandardError.ner(Constants::ERROR_PREFIX + Constants::AUTH_ERROR)
19
- end
20
- rescue StandardError => err
21
- ApiException.new.apiexception(err,log_obj)
22
- exit!
23
- end
24
- end
@@ -1,4 +0,0 @@
1
- require 'interface'
2
- TokenInterface = interface {
3
- required_methods :getToken
4
- }
@@ -1,26 +0,0 @@
1
- require_relative '../util/ApiException.rb'
2
- require 'logger'
3
- public
4
- # Logger Class
5
- class Log
6
- def initialize(logDirectory, logFilename, logSize, enableLog)
7
- #log
8
- if enableLog == true
9
- filename = logDirectory + '/' + logFilename + '.log'
10
- datetime = DateTime.now
11
- if File.exist?(filename) && File.size(filename) >= logSize
12
- updatedFileName = logDirectory + '/' + logFilename + '_' + datetime.strftime('%Y%m%d%H%M%S') + '.log'
13
- File.rename(filename, updatedFileName)
14
- end
15
- @logger = Logger.new(STDOUT)
16
- @logger = Logger.new(filename, logSize)
17
- @logger.datetime_format = datetime.strftime('%Y-%m-%d %H:%M:%S')
18
- else
19
- @logger = Logger.new(false)
20
- end
21
- rescue StandardError => err
22
- puts err
23
- exit!
24
- end
25
- attr_accessor :logger
26
- end