stormpath-sdk 1.1.3 → 1.1.4

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: 5d1de61dbd75dec6b95c21b0caeccebba7c1771c
4
- data.tar.gz: 5d4abcc09a7c3dfd0092b903a4a6d2b48b2c4766
3
+ metadata.gz: c2840d5f55013463cc18377b9909e1f68840999b
4
+ data.tar.gz: fda3ed5eac3265a739fbdce2f05c3968e5527a84
5
5
  SHA512:
6
- metadata.gz: 3dda830ead5d75dcd8dbc7fe97b22c1d94c9b974126e5973288c89358b91160c99167c57ffe65cf8378bf954c284d63a0fc1ad97afa5520a247be78aec91d70d
7
- data.tar.gz: 9df0ea91dfc37d6b71bc9ca99fdf8dcaf703a020abd5343698eaaed097b44c8ce5c1ded3a998d1213ea542081ebf00ad18ffbb61ef5866b7b1a1ffbf0b5a1f13
6
+ metadata.gz: 16c24a217cf341d9b23f38d8c27e68d944e6fb65659d350297f4d6d511dfe8a0ba59ea7b53fb60cd58e5edaf04cae75c38f0df5f9eed9c97742803671ea14f46
7
+ data.tar.gz: 842510b773d64d28890ba9f028555e4190592eb860b1f15d513fb6e8d19e2e303a7ed6a22043290e8c02bfd310caaa9a2f620c3c9c6bc186d42cfa6c8ac207f6
data/.travis.yml CHANGED
@@ -1,8 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1.5
4
- - 2.2.4
5
- - 2.3.0
4
+ - 2.3.1
6
5
  services:
7
6
  - redis-server
8
7
  before_install:
data/CHANGES.md CHANGED
@@ -1,6 +1,13 @@
1
1
  stormpath-sdk-ruby Changelog
2
2
  ============================
3
3
 
4
+ Version 1.1.4
5
+ -------------
6
+
7
+ Released on July 12, 2016
8
+
9
+ - Add exchanging Client Credentials for Access Tokens
10
+
4
11
  Version 1.1.3
5
12
  -------------
6
13
 
data/README.md CHANGED
@@ -390,6 +390,30 @@ grant_request = Stormpath::Oauth::IdSiteGrantRequest.new jwt_token
390
390
  response = application.authenticate_oauth grant_request
391
391
  ```
392
392
 
393
+ ### Exchange Client Credentials for a Stormpath Access Token
394
+
395
+ As a developer, I want to authenticate API Keys directly against my application endpoint, so that I can have Stormpath generate an application token that I can use for a session.
396
+
397
+ Create an API Key for an account:
398
+
399
+ ```ruby
400
+ account_api_key = account.api_keys.create({})
401
+ ```
402
+
403
+ Then create an client credentials request and get a authentication result:
404
+
405
+ ```ruby
406
+ client_credentials_grant_request = Stormpath::Oauth::ClientCredentialsGrantRequest.new(
407
+ account_api_key.id,
408
+ account_api_key.secret
409
+ )
410
+
411
+ authentication_result = application.authenticate_oauth(client_credentials_grant_request)
412
+
413
+ puts authentication_result.access_token
414
+ puts authentication_result.refresh_token
415
+ ```
416
+
393
417
  ### Registering Accounts
394
418
 
395
419
  Accounts are created on a directory instance. They can be created in two
data/lib/stormpath-sdk.rb CHANGED
@@ -128,5 +128,7 @@ module Stormpath
128
128
  autoload :Error, 'stormpath-sdk/oauth/error'
129
129
  autoload :IdSiteGrantRequest, "stormpath-sdk/oauth/id_site_grant_request"
130
130
  autoload :IdSiteGrant, "stormpath-sdk/oauth/id_site_grant"
131
+ autoload :ClientCredentialsGrantRequest, "stormpath-sdk/oauth/client_credentials_grant_request"
132
+ autoload :ClientCredentialsGrant, "stormpath-sdk/oauth/client_credentials_grant"
131
133
  end
132
134
  end
@@ -284,18 +284,7 @@ class Stormpath::DataStore
284
284
  end
285
285
 
286
286
  def form_request_parse(resource)
287
- data = ""
288
-
289
- property_names = resource.get_dirty_property_names
290
- property_names.each do |name|
291
- if name != "formData"
292
- property = resource.get_property name, ignore_camelcasing: true
293
- data += name.underscore + '=' + property.to_s
294
- data += '&' unless name == property_names.last
295
- end
296
- end
297
-
298
- data
287
+ URI.encode_www_form(resource.form_properties.to_a)
299
288
  end
300
289
 
301
290
  def to_hash(resource)
File without changes
@@ -22,7 +22,8 @@ module Stormpath
22
22
  password: PasswordGrant,
23
23
  refresh_token: RefreshToken,
24
24
  id_site_token: IdSiteGrant,
25
- stormpath_token: StormpathTokenGrant
25
+ stormpath_token: StormpathTokenGrant,
26
+ client_credentials: ClientCredentialsGrant
26
27
  }.freeze
27
28
  end
28
29
  end
@@ -0,0 +1,25 @@
1
+ module Stormpath
2
+ module Oauth
3
+ class ClientCredentialsGrant < Stormpath::Resource::Base
4
+ prop_accessor :grant_type, :api_key_id, :api_key_secret
5
+
6
+ def form_properties
7
+ {
8
+ grant_type: grant_type,
9
+ apiKeyId: api_key_id,
10
+ apiKeySecret: api_key_secret
11
+ }
12
+ end
13
+
14
+ def set_options(request)
15
+ set_property :api_key_id, request.api_key_id
16
+ set_property :api_key_secret, request.api_key_secret
17
+ set_property :grant_type, request.grant_type
18
+ end
19
+
20
+ def form_data?
21
+ true
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ module Stormpath
2
+ module Oauth
3
+ class ClientCredentialsGrantRequest
4
+ attr_reader :api_key_id, :api_key_secret
5
+
6
+ def initialize(api_key_id, api_key_secret)
7
+ @api_key_id = api_key_id
8
+ @api_key_secret = api_key_secret
9
+ end
10
+
11
+ def grant_type
12
+ 'client_credentials'
13
+ end
14
+ end
15
+ end
16
+ end
@@ -3,6 +3,13 @@ module Stormpath
3
3
  class IdSiteGrant < Stormpath::Resource::Base
4
4
  prop_accessor :grant_type, :token
5
5
 
6
+ def form_properties
7
+ {
8
+ grant_type: grant_type,
9
+ token: token
10
+ }
11
+ end
12
+
6
13
  def set_options(request)
7
14
  set_property :grant_type, request.grant_type
8
15
  set_property :token, request.token
@@ -3,6 +3,14 @@ module Stormpath
3
3
  class PasswordGrant < Stormpath::Resource::Base
4
4
  prop_accessor :grant_type, :username, :password
5
5
 
6
+ def form_properties
7
+ {
8
+ grant_type: grant_type,
9
+ username: username,
10
+ password: password
11
+ }
12
+ end
13
+
6
14
  def set_options(request)
7
15
  set_property :username, request.username
8
16
  set_property :password, request.password
@@ -3,6 +3,13 @@ module Stormpath
3
3
  class RefreshToken < Stormpath::Resource::Base
4
4
  prop_accessor :grant_type, :refresh_token
5
5
 
6
+ def form_properties
7
+ {
8
+ grant_type: grant_type,
9
+ refresh_token: refresh_token
10
+ }
11
+ end
12
+
6
13
  def set_options(request)
7
14
  set_property :refresh_token, request.refresh_token
8
15
  set_property :grant_type, request.grant_type
@@ -1,7 +1,14 @@
1
1
  module Stormpath
2
2
  module Oauth
3
3
  class StormpathTokenGrant < Stormpath::Resource::Base
4
- prop_accessor :grant_type, :refresh_token
4
+ prop_accessor :grant_type, :token
5
+
6
+ def form_properties
7
+ {
8
+ grant_type: grant_type,
9
+ token: token
10
+ }
11
+ end
5
12
 
6
13
  def set_options(request)
7
14
  set_property :token, request.token
@@ -14,6 +14,6 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  module Stormpath
17
- VERSION = '1.1.3'
17
+ VERSION = '1.1.4'
18
18
  VERSION_DATE = '2016-05-24'
19
19
  end
@@ -1082,6 +1082,31 @@ describe Stormpath::Resource::Application, :vcr do
1082
1082
  end
1083
1083
  end
1084
1084
 
1085
+ context 'generate access token from client credentials request' do
1086
+ let(:account_api_key) { account.api_keys.create({}) }
1087
+
1088
+ let(:client_credentials_grant_request) do
1089
+ Stormpath::Oauth::ClientCredentialsGrantRequest.new(
1090
+ account_api_key.id,
1091
+ account_api_key.secret
1092
+ )
1093
+ end
1094
+
1095
+ let(:authenticate_oauth) { application.authenticate_oauth(client_credentials_grant_request) }
1096
+
1097
+ it 'should return access token response' do
1098
+ expect(authenticate_oauth).to be_kind_of(Stormpath::Oauth::AccessTokenAuthenticationResult)
1099
+ end
1100
+
1101
+ it 'response should contain token data' do
1102
+ expect(authenticate_oauth.access_token).not_to be_empty
1103
+ expect(authenticate_oauth.refresh_token).not_to be_empty
1104
+ expect(authenticate_oauth.token_type).not_to be_empty
1105
+ expect(authenticate_oauth.expires_in).not_to be_nil
1106
+ expect(authenticate_oauth.stormpath_access_token_href).not_to be_empty
1107
+ end
1108
+ end
1109
+
1085
1110
  context 'exchange id site token for access_token with invalid jwt' do
1086
1111
  let(:invalid_jwt_token) { 'invalid_token' }
1087
1112
 
File without changes
data/spec/spec_helper.rb CHANGED
File without changes
@@ -18,7 +18,11 @@ Gem::Specification.new do |s|
18
18
  s.add_dependency('multi_json', '>= 1.3.6')
19
19
  s.add_dependency('httpclient', '>= 2.2.5')
20
20
  s.add_dependency('uuidtools', '>= 2.1.3')
21
- s.add_dependency('activesupport', '>= 3.2.8')
21
+ if RUBY_VERSION < '2.2.2'
22
+ s.add_dependency('activesupport', '>= 3.2.8', '< 5.0')
23
+ else
24
+ s.add_dependency('activesupport', '>= 3.2.8')
25
+ end
22
26
  s.add_dependency('properties-ruby', "~> 0.0.4")
23
27
  s.add_dependency('http-cookie', "~> 1.0.2")
24
28
  s.add_dependency('java_properties')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stormpath-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stormpath, Inc
@@ -314,6 +314,8 @@ files:
314
314
  - lib/stormpath-sdk/id_site/id_site_result.rb
315
315
  - lib/stormpath-sdk/oauth/access_token_authentication_result.rb
316
316
  - lib/stormpath-sdk/oauth/authenticator.rb
317
+ - lib/stormpath-sdk/oauth/client_credentials_grant.rb
318
+ - lib/stormpath-sdk/oauth/client_credentials_grant_request.rb
317
319
  - lib/stormpath-sdk/oauth/error.rb
318
320
  - lib/stormpath-sdk/oauth/id_site_grant.rb
319
321
  - lib/stormpath-sdk/oauth/id_site_grant_request.rb