bb_oauth 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,174 @@
1
+ require 'date'
2
+
3
+ module BancoBrasilClientCredentials
4
+ class BaseModel
5
+ # List of attributes with nullable: true
6
+ def self.openapi_nullable
7
+ Set.new([])
8
+ end
9
+
10
+ # Initializes the object
11
+ # @param [Hash] attributes Model attributes in the form of hash
12
+ def initialize(attributes = {})
13
+ unless attributes.is_a?(Hash)
14
+ fail ArgumentError, "The input argument (attributes) must be a hash in `#{self.class.name}` initialize method"
15
+ end
16
+
17
+ # check to see if the attribute exists and convert string to symbol for hash key
18
+ attributes = attributes.each_with_object({}) { |(k, v), h|
19
+ unless self.class.attribute_map.key?(k.to_sym)
20
+ fail ArgumentError, "`#{k}` is not a valid attribute in `#{self.class.name}`."\
21
+ ' Please check the name to make sure it\'s valid. List of attributes: '\
22
+ "#{self.class.attribute_map.keys.inspect}"
23
+ end
24
+ h[k.to_sym] = v
25
+ }
26
+
27
+ attributes.each { |key, value| self.send("#{key}=", value) }
28
+ end
29
+
30
+ def list_invalid_properties
31
+ Array.new
32
+ end
33
+
34
+ # Check to see if the all the properties in the model are valid
35
+ # @return true if the model is valid
36
+ def valid?
37
+ list_invalid_properties.empty?
38
+ end
39
+
40
+ # Checks equality by comparing each attribute.
41
+ # @param o [Object] Object to be compared
42
+ def ==(o)
43
+ return true if self.equal?(o)
44
+
45
+ self.class == o.class && self.class.attribute_map.keys.all? { |attr| self.send(attr) == o.send(attr) }
46
+ end
47
+
48
+ # @see the `==` method
49
+ # @param o [Object] Object to be compared
50
+ def eql?(o)
51
+ self == o
52
+ end
53
+
54
+ # Calculates hash code according to all attributes.
55
+ # @return [Integer] Hash code
56
+ def hash
57
+ self.class.attribute_map.keys.map { |attr| self.send(attr) }.hash
58
+ end
59
+
60
+ # Builds the object from hash
61
+ # @param [Hash] attributes Model attributes in the form of hash
62
+ # @return [Object] Returns the model itself
63
+ def self.build_from_hash(attributes)
64
+ new.build_from_hash(attributes)
65
+ end
66
+
67
+ # Builds the object from hash
68
+ # @param [Hash] attributes Model attributes in the form of hash
69
+ # @return [Object] Returns the model itself
70
+ def build_from_hash(attributes)
71
+ return nil unless attributes.is_a?(Hash)
72
+ self.class.openapi_types.each_pair do |key, type|
73
+ if type =~ /\AArray<(.*)>/i
74
+ # check to ensure the input is an array given that the attribute
75
+ # is documented as an array but the input is not
76
+ if attributes[self.class.attribute_map[key]].is_a?(Array)
77
+ self.send("#{key}=", attributes[self.class.attribute_map[key]].map { |v| _deserialize($1, v) })
78
+ end
79
+ elsif !attributes[self.class.attribute_map[key]].nil?
80
+ self.send("#{key}=", _deserialize(type, attributes[self.class.attribute_map[key]]))
81
+ elsif attributes[self.class.attribute_map[key]].nil? && self.class.openapi_nullable.include?(key)
82
+ self.send("#{key}=", nil)
83
+ end
84
+ end
85
+
86
+ self
87
+ end
88
+
89
+ # Deserializes the data based on type
90
+ # @param type [String] Data type
91
+ # @param value [String] Value to be deserialized
92
+ # @return [Object] Deserialized data
93
+ def _deserialize(type, value)
94
+ case type.to_sym
95
+ when :DateTime
96
+ DateTime.parse(value)
97
+ when :Date
98
+ Date.parse(value)
99
+ when :NumberDate
100
+ Date.strptime(value.to_s.rjust(8, '0'), '%d%m%Y')
101
+ when :String
102
+ value.to_s
103
+ when :Integer
104
+ value.to_i
105
+ when :Float
106
+ value.to_f
107
+ when :Boolean
108
+ value.to_s =~ /\A(true|t|yes|y|1)\z/i
109
+ when :Object
110
+ # generic object (usually a Hash), return directly
111
+ value
112
+ when /\AArray<(?<inner_type>.+)>\z/
113
+ inner_type = Regexp.last_match[:inner_type]
114
+ value.map { |v| _deserialize(inner_type, v) }
115
+ when /\AHash<(?<k_type>.+?), (?<v_type>.+)>\z/
116
+ k_type = Regexp.last_match[:k_type]
117
+ v_type = Regexp.last_match[:v_type]
118
+ {}.tap do |hash|
119
+ value.each do |k, v|
120
+ hash[_deserialize(k_type, k)] = _deserialize(v_type, v)
121
+ end
122
+ end
123
+ else # model
124
+ BancoBrasilClientCredentials.const_get(type).build_from_hash(value)
125
+ end
126
+ end
127
+
128
+ # Returns the string representation of the object
129
+ # @return [String] String presentation of the object
130
+ def to_s
131
+ to_hash.to_s
132
+ end
133
+
134
+ # to_body is an alias to to_hash (backward compatibility)
135
+ # @return [Hash] Returns the object in the form of hash
136
+ def to_body
137
+ to_hash
138
+ end
139
+
140
+ # Returns the object in the form of hash
141
+ # @return [Hash] Returns the object in the form of hash
142
+ def to_hash
143
+ hash = {}
144
+ self.class.attribute_map.each_pair do |attr, param|
145
+ value = self.send(attr)
146
+ if value.nil?
147
+ is_nullable = self.class.openapi_nullable.include?(attr)
148
+ next if !is_nullable || (is_nullable && !instance_variable_defined?(:"@#{attr}"))
149
+ end
150
+
151
+ hash[param] = _to_hash(value)
152
+ end
153
+ hash
154
+ end
155
+
156
+ # Outputs non-array value in the form of hash
157
+ # For object, use to_hash. Otherwise, just return the value
158
+ # @param [Object] value Any valid value
159
+ # @return [Hash] Returns the value in the form of hash
160
+ def _to_hash(value)
161
+ if value.is_a?(Array)
162
+ value.compact.map { |v| _to_hash(v) }
163
+ elsif value.is_a?(Hash)
164
+ {}.tap do |hash|
165
+ value.each { |k, v| hash[k] = _to_hash(v) }
166
+ end
167
+ elsif value.respond_to? :to_hash
168
+ value.to_hash
169
+ else
170
+ value
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,36 @@
1
+ require 'date'
2
+
3
+ module BancoBrasilClientCredentials
4
+ class Body < BaseModel
5
+ # Deverá ser informado: client_credentials
6
+ attr_accessor :grant_type
7
+
8
+ # Os escopos deverão ser informados separados por espaço.
9
+ attr_accessor :scope
10
+
11
+ # Attribute mapping from ruby-style variable name to JSON key.
12
+ def self.attribute_map
13
+ { grant_type: :grant_type, scope: :scope }
14
+ end
15
+
16
+ # Attribute type mapping.
17
+ def self.openapi_types
18
+ { grant_type: :Object, scope: :Object }
19
+ end
20
+
21
+ # Show invalid properties with the reasons. Usually used together with valid?
22
+ # @return Array for valid properties with the reasons
23
+ def list_invalid_properties
24
+ invalid_properties = Array.new
25
+ if @grant_type.nil?
26
+ invalid_properties.push('invalid value for "grant_type", grant_type cannot be nil.')
27
+ end
28
+
29
+ if @scope.nil?
30
+ invalid_properties.push('invalid value for "scope", scope cannot be nil.')
31
+ end
32
+
33
+ invalid_properties
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,43 @@
1
+ require 'date'
2
+
3
+ module BancoBrasilClientCredentials
4
+ class ResponseToken < BaseModel
5
+ # Token de Acesso
6
+ attr_accessor :access_token
7
+
8
+ # Tipo de token
9
+ attr_accessor :token_type
10
+
11
+ # Tempo de Expiração do token
12
+ attr_accessor :expires_in
13
+
14
+ # Attribute mapping from ruby-style variable name to JSON key.
15
+ def self.attribute_map
16
+ { access_token: :access_token, token_type: :token_type, expires_in: :expires_in }
17
+ end
18
+
19
+ # Attribute type mapping.
20
+ def self.openapi_types
21
+ { access_token: :Object, token_type: :Object, expires_in: :Object }
22
+ end
23
+
24
+ # Show invalid properties with the reasons. Usually used together with valid?
25
+ # @return Array for valid properties with the reasons
26
+ def list_invalid_properties
27
+ invalid_properties = Array.new
28
+ if @access_token.nil?
29
+ invalid_properties.push('invalid value for "access_token", access_token cannot be nil.')
30
+ end
31
+
32
+ if @token_type.nil?
33
+ invalid_properties.push('invalid value for "token_type", token_type cannot be nil.')
34
+ end
35
+
36
+ if @expires_in.nil?
37
+ invalid_properties.push('invalid value for "expires_in", expires_in cannot be nil.')
38
+ end
39
+
40
+ invalid_properties
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,3 @@
1
+ module BancoBrasilClientCredentials
2
+ VERSION = '1.0.1'
3
+ end
data/lib/bb_oauth.rb ADDED
@@ -0,0 +1,31 @@
1
+ # Common files
2
+ require 'bb_oauth/api_client'
3
+ require 'bb_oauth/api_error'
4
+ require 'bb_oauth/version'
5
+ require 'bb_oauth/configuration'
6
+
7
+ # Models
8
+ require 'bb_oauth/models/base_model'
9
+ require 'bb_oauth/models/body'
10
+ require 'bb_oauth/models/response_token'
11
+
12
+ # APIs
13
+ require 'bb_oauth/api/default_api'
14
+
15
+ module BancoBrasilClientCredentials
16
+ class << self
17
+ # Customize default settings for the SDK using block.
18
+ # BancoBrasilClientCredentials.configure do |config|
19
+ # config.username = "xxx"
20
+ # config.password = "xxx"
21
+ # end
22
+ # If no block given, return the default Configuration object.
23
+ def configure
24
+ if block_given?
25
+ yield(Configuration.default)
26
+ else
27
+ Configuration.default
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+
4
+ describe 'DefaultApi' do
5
+ before { @instance = BancoBrasilClientCredentials::DefaultApi.new }
6
+
7
+ describe 'test an instance of DefaultApi' do
8
+ it 'should create an instance of DefaultApi' do
9
+ expect(@instance).to be_instance_of(BancoBrasilClientCredentials::DefaultApi)
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,201 @@
1
+ require 'spec_helper'
2
+
3
+ describe BancoBrasilClientCredentials::ApiClient do
4
+ context 'initialization' do
5
+ context 'URL stuff' do
6
+ context 'host' do
7
+ it 'removes http from host' do
8
+ BancoBrasilClientCredentials.configure { |c| c.host = 'http://example.com' }
9
+ expect(BancoBrasilClientCredentials::Configuration.default.host).to eq('example.com')
10
+ end
11
+
12
+ it 'removes https from host' do
13
+ BancoBrasilClientCredentials.configure { |c| c.host = 'https://wookiee.com' }
14
+ expect(BancoBrasilClientCredentials::ApiClient.default.config.host).to eq('wookiee.com')
15
+ end
16
+
17
+ it 'removes trailing path from host' do
18
+ BancoBrasilClientCredentials.configure { |c| c.host = 'hobo.com/v4' }
19
+ expect(BancoBrasilClientCredentials::Configuration.default.host).to eq('hobo.com')
20
+ end
21
+ end
22
+
23
+ context 'base_path' do
24
+ it "prepends a slash to base_path" do
25
+ BancoBrasilClientCredentials.configure { |c| c.base_path = 'v4/dog' }
26
+ expect(BancoBrasilClientCredentials::Configuration.default.base_path).to eq('/v4/dog')
27
+ end
28
+
29
+ it "doesn't prepend a slash if one is already there" do
30
+ BancoBrasilClientCredentials.configure { |c| c.base_path = '/v4/dog' }
31
+ expect(BancoBrasilClientCredentials::Configuration.default.base_path).to eq('/v4/dog')
32
+ end
33
+
34
+ it "ends up as a blank string if nil" do
35
+ BancoBrasilClientCredentials.configure { |c| c.base_path = nil }
36
+ expect(BancoBrasilClientCredentials::Configuration.default.base_path).to eq('')
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ describe 'params_encoding in #build_request' do
43
+ let(:config) { BancoBrasilClientCredentials::Configuration.new }
44
+ let(:api_client) { BancoBrasilClientCredentials::ApiClient.new(config) }
45
+
46
+ it 'defaults to nil' do
47
+ expect(BancoBrasilClientCredentials::Configuration.default.params_encoding).to eq(nil)
48
+ expect(config.params_encoding).to eq(nil)
49
+
50
+ request = api_client.build_request(:get, '/test')
51
+ expect(request.options[:params_encoding]).to eq(nil)
52
+ end
53
+
54
+ it 'can be customized' do
55
+ config.params_encoding = :multi
56
+ request = api_client.build_request(:get, '/test')
57
+ expect(request.options[:params_encoding]).to eq(:multi)
58
+ end
59
+ end
60
+
61
+ describe 'timeout in #build_request' do
62
+ let(:config) { BancoBrasilClientCredentials::Configuration.new }
63
+ let(:api_client) { BancoBrasilClientCredentials::ApiClient.new(config) }
64
+
65
+ it 'defaults to 0' do
66
+ expect(BancoBrasilClientCredentials::Configuration.default.timeout).to eq(0)
67
+ expect(config.timeout).to eq(0)
68
+
69
+ request = api_client.build_request(:get, '/test')
70
+ expect(request.options[:timeout]).to eq(0)
71
+ end
72
+
73
+ it 'can be customized' do
74
+ config.timeout = 100
75
+ request = api_client.build_request(:get, '/test')
76
+ expect(request.options[:timeout]).to eq(100)
77
+ end
78
+ end
79
+
80
+ describe '#deserialize' do
81
+ it "handles Array<Integer>" do
82
+ api_client = BancoBrasilClientCredentials::ApiClient.new
83
+ headers = { 'Content-Type' => 'application/json' }
84
+ response = double('response', headers: headers, body: '[12, 34]')
85
+ data = api_client.deserialize(response, 'Array<Integer>')
86
+ expect(data).to be_instance_of(Array)
87
+ expect(data).to eq([12, 34])
88
+ end
89
+
90
+ it 'handles Array<Array<Integer>>' do
91
+ api_client = BancoBrasilClientCredentials::ApiClient.new
92
+ headers = { 'Content-Type' => 'application/json' }
93
+ response = double('response', headers: headers, body: '[[12, 34], [56]]')
94
+ data = api_client.deserialize(response, 'Array<Array<Integer>>')
95
+ expect(data).to be_instance_of(Array)
96
+ expect(data).to eq([[12, 34], [56]])
97
+ end
98
+
99
+ it 'handles Hash<String, String>' do
100
+ api_client = BancoBrasilClientCredentials::ApiClient.new
101
+ headers = { 'Content-Type' => 'application/json' }
102
+ response = double('response', headers: headers, body: '{"message": "Hello"}')
103
+ data = api_client.deserialize(response, 'Hash<String, String>')
104
+ expect(data).to be_instance_of(Hash)
105
+ expect(data).to eq(:message => 'Hello')
106
+ end
107
+ end
108
+
109
+ describe '#build_collection_param' do
110
+ let(:param) { ['aa', 'bb', 'cc'] }
111
+ let(:api_client) { BancoBrasilClientCredentials::ApiClient.new }
112
+
113
+ it 'works for csv' do
114
+ expect(api_client.build_collection_param(param, :csv)).to eq('aa,bb,cc')
115
+ end
116
+
117
+ it 'works for ssv' do
118
+ expect(api_client.build_collection_param(param, :ssv)).to eq('aa bb cc')
119
+ end
120
+
121
+ it 'works for tsv' do
122
+ expect(api_client.build_collection_param(param, :tsv)).to eq("aa\tbb\tcc")
123
+ end
124
+
125
+ it 'works for pipes' do
126
+ expect(api_client.build_collection_param(param, :pipes)).to eq('aa|bb|cc')
127
+ end
128
+
129
+ it 'works for multi' do
130
+ expect(api_client.build_collection_param(param, :multi)).to eq(['aa', 'bb', 'cc'])
131
+ end
132
+
133
+ it 'fails for invalid collection format' do
134
+ expect(proc { api_client.build_collection_param(param, :INVALID) }).to raise_error(RuntimeError, 'unknown collection format: :INVALID')
135
+ end
136
+ end
137
+
138
+ describe '#json_mime?' do
139
+ let(:api_client) { BancoBrasilClientCredentials::ApiClient.new }
140
+
141
+ it 'works' do
142
+ expect(api_client.json_mime?(nil)).to eq false
143
+ expect(api_client.json_mime?('')).to eq false
144
+
145
+ expect(api_client.json_mime?('application/json')).to eq true
146
+ expect(api_client.json_mime?('application/json; charset=UTF8')).to eq true
147
+ expect(api_client.json_mime?('APPLICATION/JSON')).to eq true
148
+
149
+ expect(api_client.json_mime?('application/xml')).to eq false
150
+ expect(api_client.json_mime?('text/plain')).to eq false
151
+ expect(api_client.json_mime?('application/jsonp')).to eq false
152
+ end
153
+ end
154
+
155
+ describe '#select_header_accept' do
156
+ let(:api_client) { BancoBrasilClientCredentials::ApiClient.new }
157
+
158
+ it 'works' do
159
+ expect(api_client.select_header_accept(nil)).to be_nil
160
+ expect(api_client.select_header_accept([])).to be_nil
161
+
162
+ expect(api_client.select_header_accept(['application/json'])).to eq('application/json')
163
+ expect(api_client.select_header_accept(['application/xml', 'application/json; charset=UTF8'])).to eq('application/json; charset=UTF8')
164
+ expect(api_client.select_header_accept(['APPLICATION/JSON', 'text/html'])).to eq('APPLICATION/JSON')
165
+
166
+ expect(api_client.select_header_accept(['application/xml'])).to eq('application/xml')
167
+ expect(api_client.select_header_accept(['text/html', 'application/xml'])).to eq('text/html,application/xml')
168
+ end
169
+ end
170
+
171
+ describe '#select_header_content_type' do
172
+ let(:api_client) { BancoBrasilClientCredentials::ApiClient.new }
173
+
174
+ it 'works' do
175
+ expect(api_client.select_header_content_type(nil)).to eq('application/json')
176
+ expect(api_client.select_header_content_type([])).to eq('application/json')
177
+
178
+ expect(api_client.select_header_content_type(['application/json'])).to eq('application/json')
179
+ expect(api_client.select_header_content_type(['application/xml', 'application/json; charset=UTF8'])).to eq('application/json; charset=UTF8')
180
+ expect(api_client.select_header_content_type(['APPLICATION/JSON', 'text/html'])).to eq('APPLICATION/JSON')
181
+ expect(api_client.select_header_content_type(['application/xml'])).to eq('application/xml')
182
+ expect(api_client.select_header_content_type(['text/plain', 'application/xml'])).to eq('text/plain')
183
+ end
184
+ end
185
+
186
+ describe '#sanitize_filename' do
187
+ let(:api_client) { BancoBrasilClientCredentials::ApiClient.new }
188
+
189
+ it 'works' do
190
+ expect(api_client.sanitize_filename('sun')).to eq('sun')
191
+ expect(api_client.sanitize_filename('sun.gif')).to eq('sun.gif')
192
+ expect(api_client.sanitize_filename('../sun.gif')).to eq('sun.gif')
193
+ expect(api_client.sanitize_filename('/var/tmp/sun.gif')).to eq('sun.gif')
194
+ expect(api_client.sanitize_filename('./sun.gif')).to eq('sun.gif')
195
+ expect(api_client.sanitize_filename('..\sun.gif')).to eq('sun.gif')
196
+ expect(api_client.sanitize_filename('\var\tmp\sun.gif')).to eq('sun.gif')
197
+ expect(api_client.sanitize_filename('c:\var\tmp\sun.gif')).to eq('sun.gif')
198
+ expect(api_client.sanitize_filename('.\sun.gif')).to eq('sun.gif')
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+ require 'date'
4
+
5
+ describe 'Body' do
6
+ before { @instance = BancoBrasilClientCredentials::Body.new }
7
+
8
+ describe 'test an instance of Body' do
9
+ it 'should create an instance of Body' do
10
+ expect(@instance).to be_instance_of(BancoBrasilClientCredentials::Body)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+ require 'date'
4
+
5
+
6
+ describe 'ResponseToken' do
7
+ before { @instance = BancoBrasilClientCredentials::ResponseToken.new }
8
+
9
+ describe 'test an instance of ResponseToken' do
10
+ it 'should create an instance of ResponseToken' do
11
+ expect(@instance).to be_instance_of(BancoBrasilClientCredentials::ResponseToken)
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ # load the gem
2
+ require 'bb_oauth'
3
+
4
+ RSpec.configure do |config|
5
+
6
+ config.expect_with :rspec do |expectations|
7
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
8
+ end
9
+
10
+ config.mock_with :rspec do |mocks|
11
+ mocks.verify_partial_doubles = true
12
+ end
13
+ end
@@ -0,0 +1,93 @@
1
+ {
2
+ "swagger": "2.0",
3
+ "info": {
4
+ "title": "Fluxo Client Credentials",
5
+ "version": "1.0.0"
6
+ },
7
+ "host": "oauth.bb.com.br",
8
+ "schemes": [
9
+ "https"
10
+ ],
11
+ "consumes": [
12
+ "application/x-www-form-urlencoded"
13
+ ],
14
+ "produces": [
15
+ "application/x-www-form-urlencoded"
16
+ ],
17
+ "paths": {
18
+ "/oauth/token": {
19
+ "post": {
20
+ "parameters": [
21
+ {
22
+ "name": "grant_type",
23
+ "description": "Deverá ser informado: client_credentials",
24
+ "in": "formData",
25
+ "required": true,
26
+ "type": "string"
27
+ },
28
+ {
29
+ "name": "scope",
30
+ "description": "Os escopos deverão ser informados separados por espaço.",
31
+ "in": "formData",
32
+ "required": true,
33
+ "type": "string"
34
+ },
35
+ {
36
+ "name": "Content-Type",
37
+ "description": "Deverá ser informado: application/x-www-form-urlencoded\n",
38
+ "in": "header",
39
+ "required": true,
40
+ "type": "string"
41
+ }
42
+ ],
43
+ "responses": {
44
+ "200": {
45
+ "schema": {
46
+ "$ref": "#/definitions/ResponseToken"
47
+ },
48
+ "description": "Geração de Access Token"
49
+ }
50
+ }
51
+ },
52
+ "parameters": [
53
+ {
54
+ "name": "Authorization",
55
+ "description": "Deverá ser informado no padrão: Basic {Base64(client_id:client_secret)}",
56
+ "in": "header",
57
+ "required": true,
58
+ "type": "string"
59
+ },
60
+ {
61
+ "name": "Content-Type",
62
+ "description": "Deverá ser informado: application/x-www-form-urlencoded\n",
63
+ "in": "header",
64
+ "required": true,
65
+ "type": "string"
66
+ }
67
+ ]
68
+ }
69
+ },
70
+ "definitions": {
71
+ "ResponseToken": {
72
+ "description": "",
73
+ "required": [
74
+ "access_token",
75
+ "token_type",
76
+ "expires_in"
77
+ ],
78
+ "type": "object",
79
+ "properties": {
80
+ "access_token": {
81
+ "description": "Token de Acesso"
82
+ },
83
+ "token_type": {
84
+ "description": "Tipo de token"
85
+ },
86
+ "expires_in": {
87
+ "description": "Tempo de Expiração do token"
88
+ }
89
+ },
90
+ "example": "{\n \"access_token\": \"Yyr_4-0c2bgPhzbH60SkEmMuJO77DI9ZESN-vZBZ_hMK8BNMOAvlw.6en65sKd2itKfRwqKEr\n 7nZPbT6C4S6AglgqDtDwaUsBgHlbLFzjgZevTxnyv1Zjh0SZQNMTngzw1E60vJkPSJQXWOam2\n EylIQ_-j7lOfWjLiLX6zdBF-4BC_9r2IqA5EQhKS\\eZxkN17FcPTwaOpzsOb6tMxvmg6hWVpx\n YKMoye64go1VOtPZprBEnjdu3xZIhDFYWcKSfaGJDpcvNXczSQZoK7i19FZetvDa-QX9AO1NK\n SQVQXSj-uSK3OnwUQXZySBotR5B_IklGV5oyguUN7ZA3wUMZohhhMTRh9CavKEEG1sf1L8Ygk\n vTpTVQv7W9xKhCzqm8Oyy25JrmOaeeI0BYVREc83BitfNKAp3Gf-7mfS6YOit8LWbdfJxxrRA\n AIRGhRmCDjahPd_fiRMR4nr-lDi0LHtmlKWVWeswFKdOj1uKsJ8adqL18ksdKfZBJWXh0XFb4\n EALjmojkE6t0L_7zrwdNySonkqKotGVwbm3n5j5Eyleqc2O7J11Y2bljHbdLWk7vtUpHmhGEL\n zjK-N66iLIhDKZmQEZKILBskWCq5jeSC-ZfF1dkJML-4Jl3nB1DtbyKVlB6Sv65_kJ-qNOCfT\n aiifV03VcFvx6cM5qKFozintpvxq8ht8M0M.fxPC5LQXbBSE9WNnHVBGY1qKfGDodeLNI4-qg\n 4jP5hLKIfLGzOo43zmqiABAToVLZyj3oJACKk-tyGGovpFd4Q\",\n \"token_type\": \"Bearer\",\n \"expires_in\": 600\n}"
91
+ }
92
+ }
93
+ }