Module: Userbin
- Defined in:
- lib/userbin/events.rb,
lib/userbin/current.rb,
lib/userbin/railtie.rb,
lib/userbin/session.rb,
lib/userbin/userbin.rb,
lib/userbin/version.rb,
lib/userbin/basic_auth.rb,
lib/userbin/configuration.rb,
lib/userbin/authentication.rb,
lib/userbin/rails/auth_helpers.rb,
lib/userbin.rb
Defined Under Namespace
Modules: AuthHelpers
Classes: Authentication, BasicAuth, Callback, Configuration, Current, Error, Event, Events, Model, ParseSignedJSON, Railtie, SecurityError, Session, UnimplementedError, User, VerifySignature
Constant Summary
collapse
- VERSION =
"0.3.4"
Class Method Summary
collapse
Class Method Details
._current_user ⇒ Object
62
63
64
|
# File 'lib/userbin/userbin.rb', line 62
def self._current_user
current.user if current
end
|
.authenticate!(request, now = Time.now) ⇒ Object
Provide either a Rack::Request or a Hash containing :signature and :data.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/userbin/userbin.rb', line 13
def self.authenticate!(request, now = Time.now)
signature, data =
request.cookies.values_at('_ubs', '_ubd')
if signature && data && valid_signature?(signature, data)
current = Userbin::Session.new(MultiJson.decode(data))
if now > Time.at(current.expires_at / 1000)
signature, data = refresh_session(current.id)
end
end
tmp = MultiJson.decode(data) if data
self.current = Userbin::Session.new(tmp)
[signature, data]
end
|
.authenticate_events!(request, now = Time.now) ⇒ Object
2
3
4
5
6
7
8
9
|
# File 'lib/userbin/userbin.rb', line 2
def self.authenticate_events!(request, now = Time.now)
signature, data =
request.params.values_at('signature', 'data')
valid_signature?(signature, data)
[signature, data]
end
|
.authenticated? ⇒ Boolean
50
51
52
|
# File 'lib/userbin/userbin.rb', line 50
def self.authenticated?
current.authenticated? rescue false
end
|
.config ⇒ Object
45
46
47
|
# File 'lib/userbin.rb', line 45
def config
@configuration ||= Userbin::Configuration.new
end
|
35
36
37
38
39
40
41
42
43
|
# File 'lib/userbin.rb', line 35
def configure(config_hash=nil)
if config_hash
config_hash.each do |k,v|
config.send("#{k}=", v)
end
end
yield(config) if block_given?
end
|
.current ⇒ Object
42
43
44
|
# File 'lib/userbin/userbin.rb', line 42
def self.current
Thread.current[:userbin]
end
|
.current=(value) ⇒ Object
46
47
48
|
# File 'lib/userbin/userbin.rb', line 46
def self.current=(value)
Thread.current[:userbin] = value
end
|
.current_user ⇒ Object
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/userbin/userbin.rb', line 66
def self.current_user
if Userbin.config.find_user
u = Userbin.config.find_user.call(_current_user.id)
return u if u
if Userbin.config.create_user
u = Userbin.config.create_user.call(_current_user)
return u if u
_current_user
else
raise UnimplementedError, "You need to implement create_user"
end
else
_current_user
end
end
|
.refresh_session(session_id) ⇒ Object
33
34
35
36
37
38
39
40
|
# File 'lib/userbin/userbin.rb', line 33
def self.refresh_session(session_id)
api_endpoint = ENV["USERBIN_API_ENDPOINT"] || 'https://api.userbin.com'
uri = URI("#{api_endpoint}/sessions/#{session_id}/refresh")
uri.user = config.app_id
uri.password = config.api_secret
net = Net::HTTP.post_form(uri, {})
[net['X-Userbin-Signature'], net.body]
end
|
.user ⇒ Object
82
83
84
|
# File 'lib/userbin/userbin.rb', line 82
def self.user
current_user
end
|
.user_logged_in? ⇒ Boolean
54
55
56
|
# File 'lib/userbin/userbin.rb', line 54
def self.user_logged_in?
authenticated?
end
|
.user_signed_in? ⇒ Boolean
58
59
60
|
# File 'lib/userbin/userbin.rb', line 58
def self.user_signed_in?
authenticated?
end
|
.valid_signature?(signature, data) ⇒ Boolean
Checks signature against secret and returns boolean
90
91
92
93
94
95
|
# File 'lib/userbin/userbin.rb', line 90
def self.valid_signature?(signature, data)
digest = OpenSSL::Digest::SHA256.new
valid = signature == OpenSSL::HMAC.hexdigest(digest, config.api_secret, data)
raise SecurityError, "Invalid signature" unless valid
valid
end
|