bsm-sso-client 0.4.4 → 0.5.0

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.
@@ -1,4 +1,9 @@
1
1
  require 'rails'
2
+ require 'active_support/message_verifier'
3
+ require 'active_support/memoizable'
4
+ require 'active_support/core_ext/object/acts_like'
5
+ require 'active_support/core_ext/time/acts_like'
6
+ require 'active_support/core_ext/date_time/acts_like'
2
7
  require 'active_support/core_ext/numeric/time'
3
8
  require 'active_support/dependencies'
4
9
  require 'active_resource'
@@ -26,9 +31,18 @@ module Bsm
26
31
  mattr_writer :user_class
27
32
  @@user_class = nil
28
33
 
34
+ mattr_accessor :user_attributes
35
+ @@user_attributes = {}
36
+
29
37
  mattr_accessor :warden_configuration
30
38
  @@warden_configuration = nil
31
39
 
40
+ mattr_reader :navigational_formats
41
+ @@navigational_formats = [:html, :all, :js, nil].to_set
42
+
43
+ mattr_reader :api_formats
44
+ @@api_formats = [:xml, :json].to_set
45
+
32
46
  class << self
33
47
 
34
48
  delegate :site=, :site, :to => :"Bsm::Sso::Client::AbstractResource"
@@ -37,6 +51,10 @@ module Bsm
37
51
  @@user_class || Bsm::Sso::Client::User
38
52
  end
39
53
 
54
+ def user_instance
55
+ user_class.new(user_attributes)
56
+ end
57
+
40
58
  # Default message verifier
41
59
  def verifier
42
60
  raise "Please configure a secret! Example: Bsm::Sso::Client.secret = '...'" unless secret.present?
@@ -3,8 +3,6 @@ class Bsm::Sso::Client::FailureApp < ActionController::Metal
3
3
  include ActionController::Redirecting
4
4
  include Bsm::Sso::Client::UrlHelpers
5
5
 
6
- NAVIGATIONAL_FORMATS = [:html, :all, :js, nil].to_set.freeze
7
-
8
6
  def self.call(env)
9
7
  action(:respond).call(env)
10
8
  end
@@ -14,7 +12,7 @@ class Bsm::Sso::Client::FailureApp < ActionController::Metal
14
12
  end
15
13
 
16
14
  def respond
17
- if NAVIGATIONAL_FORMATS.include?(request.format.try(:to_sym))
15
+ if Bsm::Sso::Client.navigational_formats.include?(request.format.try(:to_sym))
18
16
  request.xhr? ? respond_with_js! : redirect!
19
17
  else
20
18
  stop!
@@ -4,3 +4,4 @@ end
4
4
  require 'bsm/sso/client/strategies/base'
5
5
  require 'bsm/sso/client/strategies/ticket'
6
6
  require 'bsm/sso/client/strategies/http_auth'
7
+ require 'bsm/sso/client/strategies/api_token'
@@ -0,0 +1,47 @@
1
+ class Bsm::Sso::Client::Strategies::APIToken < Bsm::Sso::Client::Strategies::HttpAuth
2
+ extend ActiveSupport::Memoizable
3
+
4
+ def self.verifier
5
+ @verifier ||= ActiveSupport::MessageVerifier.new(secret)
6
+ end
7
+
8
+ def self.secret=(value)
9
+ @verifier = nil
10
+ @secret = value
11
+ end
12
+
13
+ def self.secret
14
+ Bsm::Sso::Client.secret
15
+ end
16
+
17
+ def self.user_instance
18
+ Bsm::Sso::Client.user_instance
19
+ end
20
+
21
+ def api_format?
22
+ Bsm::Sso::Client.api_formats.include? request.format.try(:to_sym)
23
+ end
24
+
25
+ def valid?
26
+ api_format? && super && !!expiration
27
+ end
28
+
29
+ def authenticate!
30
+ if expiration >= Time.now
31
+ success!(user_instance)
32
+ else
33
+ fail!(:expired)
34
+ end
35
+ end
36
+
37
+ def expiration
38
+ result = self.class.verifier.verify(token)
39
+ result if result.acts_like?(:time)
40
+ rescue ActiveSupport::MessageVerifier::InvalidSignature
41
+ nil
42
+ end
43
+ memoize :expiration
44
+
45
+ Warden::Strategies.add :sso_api_token, self
46
+ end
47
+
@@ -4,4 +4,8 @@ class Bsm::Sso::Client::Strategies::Base < ::Warden::Strategies::Base
4
4
  Bsm::Sso::Client.user_class
5
5
  end
6
6
 
7
+ def user_instance
8
+ Bsm::Sso::Client.user_instance
9
+ end
10
+
7
11
  end
@@ -18,6 +18,6 @@ class Bsm::Sso::Client::Strategies::HttpAuth < Bsm::Sso::Client::Strategies::Bas
18
18
  @token ||= ActiveSupport::Base64.decode64($1).split(/:/, 2).first
19
19
  end
20
20
 
21
+ Warden::Strategies.add :sso_http_auth, self
21
22
  end
22
23
 
23
- Warden::Strategies.add :sso_http_auth, Bsm::Sso::Client::Strategies::HttpAuth
@@ -10,7 +10,7 @@ class Bsm::Sso::Client::Strategies::Ticket < Bsm::Sso::Client::Strategies::Base
10
10
  u.nil? ? fail!(:invalid) : success!(u)
11
11
  end
12
12
 
13
+ Warden::Strategies.add :sso_ticket, self
13
14
  end
14
15
 
15
- Warden::Strategies.add :sso_ticket, Bsm::Sso::Client::Strategies::Ticket
16
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bsm-sso-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-28 00:00:00.000000000Z
12
+ date: 2011-12-15 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activeresource
16
- requirement: &18658560 !ruby/object:Gem::Requirement
16
+ requirement: &18232380 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: 3.2.0
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *18658560
27
+ version_requirements: *18232380
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: actionpack
30
- requirement: &18643480 !ruby/object:Gem::Requirement
30
+ requirement: &18230600 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ! '>='
@@ -38,10 +38,10 @@ dependencies:
38
38
  version: 3.2.0
39
39
  type: :runtime
40
40
  prerelease: false
41
- version_requirements: *18643480
41
+ version_requirements: *18230600
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: railties
44
- requirement: &18641160 !ruby/object:Gem::Requirement
44
+ requirement: &18229320 !ruby/object:Gem::Requirement
45
45
  none: false
46
46
  requirements:
47
47
  - - ! '>='
@@ -52,10 +52,10 @@ dependencies:
52
52
  version: 3.2.0
53
53
  type: :runtime
54
54
  prerelease: false
55
- version_requirements: *18641160
55
+ version_requirements: *18229320
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rails_warden
58
- requirement: &18640320 !ruby/object:Gem::Requirement
58
+ requirement: &18228180 !ruby/object:Gem::Requirement
59
59
  none: false
60
60
  requirements:
61
61
  - - ~>
@@ -63,10 +63,10 @@ dependencies:
63
63
  version: 0.5.0
64
64
  type: :runtime
65
65
  prerelease: false
66
- version_requirements: *18640320
66
+ version_requirements: *18228180
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: activerecord
69
- requirement: &18639760 !ruby/object:Gem::Requirement
69
+ requirement: &18227620 !ruby/object:Gem::Requirement
70
70
  none: false
71
71
  requirements:
72
72
  - - ! '>='
@@ -74,10 +74,10 @@ dependencies:
74
74
  version: '0'
75
75
  type: :development
76
76
  prerelease: false
77
- version_requirements: *18639760
77
+ version_requirements: *18227620
78
78
  - !ruby/object:Gem::Dependency
79
79
  name: rake
80
- requirement: &18639060 !ruby/object:Gem::Requirement
80
+ requirement: &18223100 !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
83
  - - ! '>='
@@ -85,10 +85,10 @@ dependencies:
85
85
  version: '0'
86
86
  type: :development
87
87
  prerelease: false
88
- version_requirements: *18639060
88
+ version_requirements: *18223100
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rack-test
91
- requirement: &18638400 !ruby/object:Gem::Requirement
91
+ requirement: &18222520 !ruby/object:Gem::Requirement
92
92
  none: false
93
93
  requirements:
94
94
  - - ! '>='
@@ -96,10 +96,10 @@ dependencies:
96
96
  version: '0'
97
97
  type: :development
98
98
  prerelease: false
99
- version_requirements: *18638400
99
+ version_requirements: *18222520
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: rspec
102
- requirement: &18637740 !ruby/object:Gem::Requirement
102
+ requirement: &18221920 !ruby/object:Gem::Requirement
103
103
  none: false
104
104
  requirements:
105
105
  - - ! '>='
@@ -107,10 +107,10 @@ dependencies:
107
107
  version: '0'
108
108
  type: :development
109
109
  prerelease: false
110
- version_requirements: *18637740
110
+ version_requirements: *18221920
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: shoulda-matchers
113
- requirement: &18637260 !ruby/object:Gem::Requirement
113
+ requirement: &18221380 !ruby/object:Gem::Requirement
114
114
  none: false
115
115
  requirements:
116
116
  - - ! '>='
@@ -118,10 +118,10 @@ dependencies:
118
118
  version: '0'
119
119
  type: :development
120
120
  prerelease: false
121
- version_requirements: *18637260
121
+ version_requirements: *18221380
122
122
  - !ruby/object:Gem::Dependency
123
123
  name: webmock
124
- requirement: &18636840 !ruby/object:Gem::Requirement
124
+ requirement: &18220740 !ruby/object:Gem::Requirement
125
125
  none: false
126
126
  requirements:
127
127
  - - ! '>='
@@ -129,10 +129,10 @@ dependencies:
129
129
  version: '0'
130
130
  type: :development
131
131
  prerelease: false
132
- version_requirements: *18636840
132
+ version_requirements: *18220740
133
133
  - !ruby/object:Gem::Dependency
134
134
  name: sqlite3-ruby
135
- requirement: &18636400 !ruby/object:Gem::Requirement
135
+ requirement: &18220100 !ruby/object:Gem::Requirement
136
136
  none: false
137
137
  requirements:
138
138
  - - ! '>='
@@ -140,7 +140,7 @@ dependencies:
140
140
  version: '0'
141
141
  type: :development
142
142
  prerelease: false
143
- version_requirements: *18636400
143
+ version_requirements: *18220100
144
144
  description: ''
145
145
  email: dimitrij@blacksquaremedia.com
146
146
  executables: []
@@ -148,6 +148,7 @@ extensions: []
148
148
  extra_rdoc_files: []
149
149
  files:
150
150
  - lib/bsm/sso/client.rb
151
+ - lib/bsm/sso/client/strategies/api_token.rb
151
152
  - lib/bsm/sso/client/strategies/ticket.rb
152
153
  - lib/bsm/sso/client/strategies/base.rb
153
154
  - lib/bsm/sso/client/strategies/http_auth.rb