mastercard_core_sdk 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb6b59bd4a75a56d7b91cae232074730af2f6c7c
4
- data.tar.gz: 6c91654b4b2a27b6cc02b9c9a40717976b4d1226
3
+ metadata.gz: 70baa13d8f8b4684d46d10f1447d213c1b4f79a9
4
+ data.tar.gz: 536119e0d246a3e11b01ee4fd1bae3440c42a12c
5
5
  SHA512:
6
- metadata.gz: dc1476806427da0fb09cd120393b035509f819f21a496f9241fcf6ba67e5791a73f45d34b8bde6d3de043faacc4293128db41d2764aff4e4087fc641785206ca
7
- data.tar.gz: 8d51ea7648a7eb4f98d037c300293a1922b8d193744e5ae1f12eb8555245fa40933c18c31efa098f03096c8d1e0f732e70b34f6222ac8811cc614a4a6af1c017
6
+ metadata.gz: 5564f83d9186449a34d4a5ae88ee6f3b565e46a26c81182c8a8d0be2e4b7279265036fbd83df813b46eff66921738f9f2f3defaaf4b8f4aac22280cf74008463
7
+ data.tar.gz: 952f07b940667b6bf92bdf58617cc0207535aafbc76388f9cf9c3a593ba909470bcae7994af374936b39a69edfee22e8576b6f4a404533ccbbd1433ef490cd1f
data/README.md CHANGED
@@ -1,10 +1,18 @@
1
1
  # MastercardCoreSdk
2
- This is core SDK containing the configuration part for checkout SDK.
3
- The merchant checkout SDK - MastercardMasterpassMerchant requires this MastercardCoreSdk as dependency for calling the checkout API services.
4
- Features include :
5
- Exception Handler - Exception handling features help you deal with any unexpected or exceptional situations that occur while calling the API services.
6
- • Serializers - Serializer handles the request and responses for the API services.
7
- ApiTracker - ApiTracker tracks the details of SDK from which API services are called.
2
+
3
+ This is core SDK containing the configuration part for checkout SDK.
4
+
5
+ The merchant checkout SDK - MastercardMasterpassMerchant requires this MastercardCoreSdk as dependency for calling the checkout API services.
6
+
7
+ Features include :
8
+
9
+ • Exception Handler - Exception handling features help you deal with any unexpected or exceptional situations that occur while calling the API services.
10
+
11
+ • Serializers - Serializer handles the request and responses for the API services.
12
+
13
+ • ApiTracker - ApiTracker tracks the details of SDK from which API services are called.
14
+
15
+ For more information, refer [mastercard's developer site](https://developer.mastercard.com).
8
16
 
9
17
  ## Installation
10
18
 
@@ -23,11 +31,21 @@ Or install it yourself as:
23
31
  $ gem install mastercard_core_sdk
24
32
 
25
33
  ## Usage
26
- Set MasterCard Configuration using Consumer Key & Private Key from developer's site and call API:
34
+
35
+ Customize default settings for the SDK through Configuration class using block :
27
36
 
28
37
  ```
29
38
  require 'mastercard_core_sdk'
30
39
 
40
+ MastercardCoreSdk.configure do |config|
41
+ # Since version 1.3.0, verify_ssl is set default to true.
42
+ config.ssl_ca_cert = <path to the certificate file to verify the peer>
43
+ end
44
+ ```
45
+
46
+ Set configurations for private key and consumer key to call API:
47
+
48
+ ```
31
49
  MasterCardApiConfiguration.consumer_key = <Consumer Key>
32
50
  MasterCardApiConfiguration.private_key = OpenSSL::PKCS12.new(File.open(<Path to P12 file>), <Password>).key
33
51
  MasterCardApiConfiguration.sandbox = false #By default SANDBOX environment is set, Set sandbox to false to use Production environment
@@ -35,7 +53,6 @@ MasterCardApiConfiguration.sandbox = false #By default SANDBOX environment is s
35
53
  request_token_response = RequestTokenApi.create(<URL>)
36
54
  ```
37
55
 
38
-
39
56
  ## Copyright
40
57
  Copyright (c) 2016, MasterCard International Incorporated. See LICENSE for details.
41
58
 
@@ -5,12 +5,19 @@ require_relative '../models/access_token_response'
5
5
 
6
6
  module MastercardCoreSdk
7
7
  module Api
8
+ # Invokes AccessTokenApi.
8
9
  class AccessTokenApi
9
10
  include MastercardCoreSdk::Core, MastercardCoreSdk::Client, MastercardCoreSdk::Exceptions, MastercardCoreSdk::Tracker
10
11
 
11
- # Access Token Api service
12
- # @param oauth_token
13
- # @param oauth_verifier
12
+ # This API call is used to exchange a request token for a long access token from the Masterpass service.
13
+ # For Pairing during checkout, this service will need to be called twice:
14
+ # 1. To request the checkout access token, which is used to retrieve checkout data.
15
+ # 2. To request the long access token, which is used to retrieve precheckout data.
16
+ # You will need the Request Token (oauth_token) and Verifier (oauth_verifier) from the merchant callback to get an access token.
17
+ #
18
+ # @note Since version 1.2.0, the method signature for {create} has changed.
19
+ # @param oauth_token the oauth token, which is used to retrieve checkout data.
20
+ # @param oauth_verifier the oauth verifier.
14
21
  # @param api_config Optional ApiConfig object.
15
22
  # @return [AccessTokenResponse]
16
23
  def self.create(oauth_token, oauth_verifier, api_config = nil)
@@ -5,11 +5,14 @@ require_relative '../models/request_token_response'
5
5
 
6
6
  module MastercardCoreSdk
7
7
  module Api
8
+ # Invokes RequestTokenApi.
8
9
  class RequestTokenApi
9
10
  include MastercardCoreSdk::Core, MastercardCoreSdk::Client, MastercardCoreSdk::Exceptions, MastercardCoreSdk::Tracker
10
11
 
11
- # Request Token Api service
12
- # @param oauth_callback_url Callback URL.
12
+ # This api call used to get the request token.This must be executed when a
13
+ # consumer clicks Buy with MasterPass or Connect with MasterPass buttons on your site/app.
14
+ #
15
+ # @param oauth_callback_url the oauth callback URL.
13
16
  # @param api_config Optional ApiConfig object.
14
17
  # @return [RequestTokenResponse]
15
18
  def self.create(oauth_callback_url, api_config = nil)
@@ -14,6 +14,7 @@ require_relative '../converters/sdk_converter_factory'
14
14
 
15
15
  module MastercardCoreSdk
16
16
  module Client
17
+ # ApiClient is the base class to invoke the API. It is responsible for to convert all request and response according to the content type.
17
18
  class ApiClient
18
19
  include MastercardCoreSdk::Core, MastercardCoreSdk::Interceptors, MastercardCoreSdk::Converters, MastercardCoreSdk::Tracker
19
20
 
@@ -38,6 +39,7 @@ module MastercardCoreSdk
38
39
  # Defines the object that would handle error for all the requests.
39
40
  attr_accessor :error_handler
40
41
 
42
+ # Adds the authorization header, tracking headers and also logs the request/response.
41
43
  attr_accessor :mastercard_authenticator
42
44
 
43
45
  # Initializing Api Client with user-agent, configuration and default headers.
@@ -61,7 +63,7 @@ module MastercardCoreSdk
61
63
  # @param service_request Service Request object
62
64
  # @param http_method Specifies HTTP method
63
65
  # @param return_type Specifies response return type model
64
- # @return [String]
66
+ # @return [String] Response body
65
67
  def call(path, service_request, http_method, return_type)
66
68
  request = build_request(http_method, path, service_request, @api_config)
67
69
  response_body, response_code, response_headers = call_api(request, return_type)
@@ -97,7 +99,14 @@ module MastercardCoreSdk
97
99
 
98
100
  return data, response.code, response.headers
99
101
  end
100
-
102
+
103
+ # Builds the HTTP request
104
+ #
105
+ # @param [String] http_method HTTP method/verb (e.g. POST)
106
+ # @param [String] path URL path (e.g. /account/new)
107
+ # @param [Object] request ServiceRequest object
108
+ # @param [Object] api_config ApiConfig object
109
+ # @return [Typhoeus::Request] A Typhoeus Request
101
110
  def build_request(http_method, path, request, api_config)
102
111
  url = build_request_url(path, request, api_config)
103
112
  http_method = http_method.to_sym.downcase
@@ -106,14 +115,21 @@ module MastercardCoreSdk
106
115
  header_params = @default_headers.merge(content_type_header || {}).merge(request.headers || {}).merge(api_config_header)
107
116
  query_params = request.query_params || {}
108
117
 
118
+ # set ssl_verifyhosts option based on @config.verify_ssl_host (true/false)
119
+ _verify_ssl_host = @config.verify_ssl_host ? 2 : 0
120
+
109
121
  req_opts = {
110
122
  :method => http_method,
111
123
  :headers => header_params,
112
124
  :params => query_params,
113
125
  :timeout => @config.timeout,
114
- :ssl_verifypeer => @config.verify_ssl
126
+ :ssl_verifypeer => @config.verify_ssl,
127
+ :ssl_verifyhost => _verify_ssl_host,
128
+ :sslcert => @config.cert_file,
129
+ :sslkey => @config.key_file
115
130
  }
116
-
131
+ req_opts[:cainfo] = @config.ssl_ca_cert if @config.ssl_ca_cert
132
+
117
133
  if [:post, :patch, :put, :delete].include?(http_method)
118
134
  req_body = build_request_body(request)
119
135
  req_opts.update :body => req_body
@@ -1,11 +1,16 @@
1
1
  module MastercardCoreSdk
2
2
  module Core
3
- # Defines consumer key, private key from developer's site and name, host URL for environment other than sandbox/production.
3
+ # Set environment details require to call mastercard api.
4
4
  class ApiConfig
5
5
 
6
6
  CONFIG_NAME_HEADER = "__config_name__"
7
7
  attr_accessor :name, :consumer_key, :private_key, :host_url
8
8
 
9
+ # Constructs ApiConfig object.
10
+ # @param name the environment name. e.g. "SANDBOX"
11
+ # @param consumer_key the consumer key (Generated from mastercard developer zone).
12
+ # @param private_key the private key, to be fetched from the certificate.
13
+ # @param host_url the environment host url. e.g. "https://sandbox.api.mastercard.com"
9
14
  def initialize(name, consumer_key, private_key, host_url)
10
15
  @name = name
11
16
  @consumer_key = consumer_key
@@ -1,18 +1,18 @@
1
1
  module MastercardCoreSdk
2
2
  module Core
3
- # To be defined by application developer : environment name, consumer key, private key and host URL.
3
+ # Set environment details require to call mastercard api.
4
4
  class ApiConfigBuilder
5
5
 
6
6
  # Sets environment name
7
- # @param name Environment.
7
+ # @param name the environment name. e.g. SANDBOX.
8
8
  # @return [ApiConfigBuilder]
9
9
  def name(name)
10
10
  @name = name
11
11
  return self
12
12
  end
13
13
 
14
- # Sets consumer key
15
- # @param consumer_key Consumer key from developer's site.
14
+ # Set the consumer key generated from mastercard developer zone.
15
+ # @param consumer_key the consumer key (Generated from mastercard developer zone).
16
16
  # @return [ApiConfigBuilder]
17
17
  def consumer_key(consumer_key)
18
18
  @consumer_key = consumer_key
@@ -20,22 +20,22 @@ module MastercardCoreSdk
20
20
  end
21
21
 
22
22
  # Sets private key
23
- # @param private_key Private key from developer's site.
23
+ # @param private_key the private key, to be fetched from the certificate.
24
24
  # @return [ApiConfigBuilder]
25
25
  def private_key(private_key)
26
26
  @private_key = private_key
27
27
  return self
28
28
  end
29
29
 
30
- # Sets host URL as per environment(Sandbox/Production)
31
- # @param host_url Host URL for the environment.
30
+ # Sets host URL for the environment(Sandbox/Production)
31
+ # @param host_url the environment host url. e.g. sandbox - "https://sandbox.api.mastercard.com"
32
32
  # @return [ApiConfigBuilder]
33
33
  def host_url(host_url)
34
34
  @host_url = host_url
35
35
  return self
36
36
  end
37
37
 
38
- # Register the ApiConfig with MasterCardApiConfiguration.
38
+ # Build and register the ApiConfig object.
39
39
  # @return [ApiConfig]
40
40
  def build
41
41
  api_config = ApiConfig.new(@name, @consumer_key, @private_key, @host_url)
@@ -2,16 +2,9 @@ require 'uri'
2
2
 
3
3
  module MastercardCoreSdk
4
4
  module Core
5
+ # Represents a set of configuration settings.
5
6
  class Configuration
6
- # Defines url scheme
7
- attr_accessor :scheme
8
-
9
- # Defines url host
10
- attr_accessor :host
11
-
12
- # Defines url base path
13
- attr_accessor :base_path
14
-
7
+
15
8
  # The time limit for HTTP request in seconds.
16
9
  # Default to 0 (never times out).
17
10
  attr_accessor :timeout
@@ -20,29 +13,47 @@ module MastercardCoreSdk
20
13
  # Set this to false to skip verifying SSL certificate when calling API from https server.
21
14
  # Default to true.
22
15
  #
23
- # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks.
24
- #
16
+ # @note Do NOT set it to false in production code, otherwise you would face multiple types of cryptographic attacks. Since version 1.3.0, it is default to true.
17
+ #
25
18
  # @return [true, false]
26
19
  attr_accessor :verify_ssl
20
+
21
+ ### TLS/SSL setting
22
+ # Set this to false to skip verifying SSL host name.
23
+ # Default to true.
24
+ #
25
+ # @return [true, false]
26
+ # @since 1.3.0
27
+ attr_accessor :verify_ssl_host
28
+
29
+ # Set this to customize the certificate file to verify the peer.
30
+ #
31
+ # @return [String] the path to the certificate file
32
+ #
33
+ # @see The `cainfo` option of Typhoeus, `--cert` option of libcurl. Related source code:
34
+ # https://github.com/typhoeus/typhoeus/blob/master/lib/typhoeus/easy_factory.rb#L145
35
+ # @since 1.3.0
36
+ attr_accessor :ssl_ca_cert
37
+
38
+ # Client certificate file (for client certificate)
39
+ # @since 1.3.0
40
+ attr_accessor :cert_file
27
41
 
28
- attr_accessor :inject_format
29
-
30
- attr_accessor :force_ending_format
42
+ # Client private key file (for client certificate)
43
+ # @since 1.3.0
44
+ attr_accessor :key_file
31
45
 
32
46
  attr_accessor :format, :user_agent, :default_headers
33
47
 
34
-
35
48
  def initialize
36
- @scheme = 'https'
37
- @host = 'api.mastercard.com'
38
- @base_path = ''
39
49
  @timeout = 0
40
- @verify_ssl = false #To be set to true for production
41
- @inject_format = false
42
- @force_ending_format = false
50
+ @verify_ssl = true
51
+ @verify_ssl_host = true
52
+ @cert_file = nil
53
+ @key_file = nil
43
54
  @format = ""
44
55
  @default_headers = {}
45
-
56
+
46
57
  yield(self) if block_given?
47
58
  end
48
59
 
@@ -55,27 +66,6 @@ module MastercardCoreSdk
55
66
  yield(self) if block_given?
56
67
  end
57
68
 
58
- def scheme=(scheme)
59
- # remove :// from scheme
60
- @scheme = scheme.sub(/:\/\//, '')
61
- end
62
-
63
- def host=(host)
64
- # remove http(s):// and anything after a slash
65
- @host = host.sub(/https?:\/\//, '').split('/').first
66
- end
67
-
68
- def base_path=(base_path)
69
- # Add leading and trailing slashes to base_path
70
- @base_path = "/#{base_path}".gsub(/\/+/, '/')
71
- @base_path = "" if @base_path == "/"
72
- end
73
-
74
- def base_url
75
- url = "#{scheme}://#{[host, base_path].join('/').gsub(/\/+/, '/')}".sub(/\/+\z/, '')
76
- URI.encode(url)
77
- end
78
-
79
69
  end
80
70
  end
81
71
  end
@@ -4,7 +4,7 @@ require_relative 'api_config_builder'
4
4
 
5
5
  module MastercardCoreSdk
6
6
  module Core
7
- # Setting MasterCard API configuration parameters for API calls
7
+ # Setting MasterCard API configuration parameters for API calls.
8
8
  class MasterCardApiConfiguration
9
9
 
10
10
  @@logger = Logging.logger[self]
@@ -52,8 +52,8 @@ module MastercardCoreSdk
52
52
  end
53
53
  end
54
54
 
55
- # Registers the API configuration.
56
- # @param api_config The API configuration.
55
+ # Register the ApiConfig object.
56
+ # @param api_config the ApiConfig object.
57
57
  def register_config(api_config)
58
58
  self.configs.merge!({ api_config.name => api_config })
59
59
  end
@@ -13,6 +13,9 @@ module MastercardCoreSdk
13
13
 
14
14
  attr_accessor :api_tracker
15
15
 
16
+ # Hook into before a request runs.
17
+ #
18
+ # Adds the Authorization, API tracking and user-agent information to request header and logs the request/response information.
16
19
  def authenticate
17
20
  Typhoeus.before do |request|
18
21
  SignatureBuilder.build(request)
@@ -1,5 +1,6 @@
1
1
  module MastercardCoreSdk
2
2
  module Core
3
+ # Container for query string data used to make service request url.
3
4
  class QueryParams
4
5
 
5
6
  attr_reader :params
@@ -8,12 +9,20 @@ module MastercardCoreSdk
8
9
  @params = {}
9
10
  end
10
11
 
12
+ # Merge query string parameters as key,value pair into params hash.
13
+ #
14
+ # @param key the params key.
15
+ # @param value the params value.
16
+ # @return [Object] the QueryParams object.
11
17
  def add(key, value)
12
18
  key = key.to_sym if key.is_a?(String)
13
19
  @params.merge!({ key => value })
14
20
  return self
15
21
  end
16
22
 
23
+ # Gets the query string parameters.
24
+ #
25
+ # @return [Hash] the params hash containing key value pair.
17
26
  def params
18
27
  @params
19
28
  end
@@ -4,14 +4,15 @@ require_relative '../exceptions/sdk_validation_error'
4
4
 
5
5
  module MastercardCoreSdk
6
6
  module Core
7
- # Class for defining log statements; it is called by logging interceptor for logging.
7
+ # Logs the request and response content.
8
8
  class RequestResponseLogger
9
9
  include MastercardCoreSdk::Exceptions
10
10
 
11
11
  NEWLINE = "\n"
12
12
  @@logger = Logging.logger[self]
13
13
 
14
- # Method called by interceptor to log request
14
+ # Log the request content.
15
+ # @param request the typhoeus request content to be logged.
15
16
  def self.log_request(request)
16
17
  if request
17
18
 
@@ -41,7 +42,8 @@ module MastercardCoreSdk
41
42
  end
42
43
  end
43
44
 
44
- # Method called by interceptor to log response
45
+ # Log the response content.
46
+ # @param response the typhoeus response content to be logged.
45
47
  def self.log_response(response)
46
48
  if response
47
49
 
@@ -85,7 +87,7 @@ module MastercardCoreSdk
85
87
  end
86
88
  end
87
89
 
88
- private
90
+ private
89
91
 
90
92
  def self.mask_data(response_body)
91
93
  xmldoc = Nokogiri::XML(response_body)
@@ -1,5 +1,6 @@
1
1
  module MastercardCoreSdk
2
2
  module Core
3
+ # Set all required request parameters and pass it to the API client.
3
4
  class ServiceRequest
4
5
 
5
6
  attr_accessor :headers, :path_params, :query_params, :body, :content_type
@@ -26,6 +26,7 @@ module MastercardCoreSdk
26
26
  ERR_INTERNAL = "INTERNAL_PROCESSING_ERROR"
27
27
  SEP_COLON = "]: "
28
28
  ERR_MSG_RES_PARSE = "Exception occurred during response parsing."
29
+ ERR_SRC_UNREACHABLE = "Unreachable"
29
30
 
30
31
  # Raise custom error as per response error object.
31
32
  # @param error_response The Typheous::Response object containing error details.
@@ -36,9 +37,16 @@ module MastercardCoreSdk
36
37
  response_status_code = error_response.response_code
37
38
 
38
39
  if response_body.empty?
39
- errors = get_errors_object(ERR_DESC_EMPTY_RES, ERR_REASON_EMPTY_BODY_RES, ERR_SRC_UNKN)
40
- @@logger.error "400 #{ERR_SRC_UNKN}"
41
- raise SDKResponseError.new(:errors_object => errors, :status_code => 400)
40
+ if response_status_code == 0
41
+ response = error_response.response
42
+ errors = get_errors_object(response.return_message, response.return_code.to_s.upcase, ERR_SRC_UNREACHABLE) if response.return_message && response.return_code
43
+ @@logger.error "0 #{ERR_SRC_UNREACHABLE}"
44
+ raise SDKResponseError.new(:errors_object => errors, :status_code => 0)
45
+ else
46
+ errors = get_errors_object(ERR_DESC_EMPTY_RES, ERR_REASON_EMPTY_BODY_RES, ERR_SRC_UNKN)
47
+ @@logger.error "400 #{ERR_SRC_UNKN}"
48
+ raise SDKResponseError.new(:errors_object => errors, :status_code => 400)
49
+ end
42
50
 
43
51
  elsif response_status_code == 200
44
52
  # In some cases, response code is 200 and response body is empty.
@@ -82,6 +90,12 @@ module MastercardCoreSdk
82
90
 
83
91
  private
84
92
 
93
+ # Return new Errors object with error description, reason code, source.
94
+ #
95
+ # @param description the error description.
96
+ # @param reason_code the error reason code.
97
+ # @param source the error source.
98
+ # @return [Errors] the Errors object.
85
99
  def get_errors_object(description, reason_code, source)
86
100
  error = Error.new(:description => description, :reason_code => reason_code, :source => source, :recoverable => false)
87
101
  return Errors.new(:error => [error])
@@ -3,7 +3,7 @@ require_relative '../exceptions/sdk_validation_error'
3
3
 
4
4
  module MastercardCoreSdk
5
5
  module Interceptors
6
- # Intercepts request for modifying headers for API calls tracking
6
+ # Interceptor to set SDK tracking information in each request header.
7
7
  class ApiTrackerBuilder
8
8
  include MastercardCoreSdk::Core, MastercardCoreSdk::Exceptions
9
9
 
@@ -1,3 +1,3 @@
1
1
  module MastercardCoreSdk
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -61,5 +61,20 @@ require_relative 'mastercard_core_sdk/core/api_config_builder'
61
61
 
62
62
 
63
63
  module MastercardCoreSdk
64
- # Base Sdk
64
+ # Core Sdk
65
+ class << self
66
+ # Customize default settings for the SDK using block.
67
+ # MastercardCoreSdk.configure do |config|
68
+ # config.ssl_ca_cert = <path to the certificate file to verify the peer>
69
+ # end
70
+ # If no block given, return the default Configuration object.
71
+ # @since 1.3.0
72
+ def configure
73
+ if block_given?
74
+ yield(Core::Configuration.default)
75
+ else
76
+ Core::Configuration.default
77
+ end
78
+ end
79
+ end
65
80
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mastercard_core_sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MasterCard
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-23 00:00:00.000000000 Z
11
+ date: 2017-02-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler