Class: Userbin::Client
- Inherits:
-
Object
- Object
- Userbin::Client
- Defined in:
- lib/userbin/client.rb
Instance Attribute Summary collapse
-
#request_context ⇒ Object
Returns the value of attribute request_context.
Class Method Summary collapse
Instance Method Summary collapse
- #authorize! ⇒ Object
- #authorized? ⇒ Boolean
- #device_trusted? ⇒ Boolean
- #has_default_pairing? ⇒ Boolean
-
#initialize(request, response, opts = {}) ⇒ Client
constructor
A new instance of Client.
- #login(user_id, user_attrs = {}) ⇒ Object
- #logout ⇒ Object
- #mfa_enabled? ⇒ Boolean
- #mfa_in_progress? ⇒ Boolean
- #mfa_required? ⇒ Boolean
- #session_token ⇒ Object
- #session_token=(session_token) ⇒ Object
- #track(opts = {}) ⇒ Object
- #trust_device(attrs = {}) ⇒ Object
Constructor Details
#initialize(request, response, opts = {}) ⇒ Client
Returns a new instance of Client.
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/userbin/client.rb', line 20 def initialize(request, response, opts = {}) # Save a reference in the per-request store so that the request # middleware in request.rb can access it RequestStore.store[:userbin] = self if response.class.name == 'ActionDispatch::Cookies::CookieJar' = Userbin::CookieStore::Rack.new(response) else = Userbin::CookieStore::Base.new(request, response) end @store = Userbin::TokenStore.new() @request_context = { ip: request.ip, user_agent: request.user_agent, cookie_id: ['__cid'] } end |
Instance Attribute Details
#request_context ⇒ Object
Returns the value of attribute request_context.
4 5 6 |
# File 'lib/userbin/client.rb', line 4 def request_context @request_context end |
Class Method Details
.install_proxy_methods(*names) ⇒ Object
6 7 8 9 10 11 12 13 14 |
# File 'lib/userbin/client.rb', line 6 def self.install_proxy_methods(*names) names.each do |name| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{name}(*args) Userbin::User.new('$current').#{name}(*args) end RUBY end end |
Instance Method Details
#authorize! ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/userbin/client.rb', line 48 def unless @store.session_token raise Userbin::UserUnauthorizedError, 'Need to call login before authorize' end if @store.session_token.expired? Userbin::Monitoring.heartbeat end if mfa_in_progress? logout raise Userbin::UserUnauthorizedError, 'Logged out due to being unverified' end if mfa_required? && !device_trusted? raise Userbin::ChallengeRequiredError end end |
#authorized? ⇒ Boolean
69 70 71 |
# File 'lib/userbin/client.rb', line 69 def !!@store.session_token end |
#device_trusted? ⇒ Boolean
115 116 117 |
# File 'lib/userbin/client.rb', line 115 def device_trusted? @store.session_token ? @store.session_token.device_trusted? : false end |
#has_default_pairing? ⇒ Boolean
127 128 129 |
# File 'lib/userbin/client.rb', line 127 def has_default_pairing? @store.session_token ? @store.session_token.has_default_pairing? : false end |
#login(user_id, user_attrs = {}) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/userbin/client.rb', line 73 def login(user_id, user_attrs = {}) # Clear the session token if any @store.session_token = nil user = Userbin::User.new(user_id.to_s) session = user.sessions.create( user: user_attrs, trusted_device_token: @store.trusted_device_token) # Set the session token for use in all subsequent requests @store.session_token = session.token session end |
#logout ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/userbin/client.rb', line 87 def logout return unless @store.session_token # Destroy the current session specified in the session token begin sessions.destroy('$current') rescue Userbin::ApiError # ignored end # Clear the session token @store.session_token = nil end |
#mfa_enabled? ⇒ Boolean
111 112 113 |
# File 'lib/userbin/client.rb', line 111 def mfa_enabled? @store.session_token ? @store.session_token.mfa_enabled? : false end |
#mfa_in_progress? ⇒ Boolean
119 120 121 |
# File 'lib/userbin/client.rb', line 119 def mfa_in_progress? @store.session_token ? @store.session_token.mfa_in_progress? : false end |
#mfa_required? ⇒ Boolean
123 124 125 |
# File 'lib/userbin/client.rb', line 123 def mfa_required? @store.session_token ? @store.session_token.mfa_required? : false end |
#session_token ⇒ Object
40 41 42 |
# File 'lib/userbin/client.rb', line 40 def session_token @store.session_token end |
#session_token=(session_token) ⇒ Object
44 45 46 |
# File 'lib/userbin/client.rb', line 44 def session_token=(session_token) @store.session_token = session_token end |
#track(opts = {}) ⇒ Object
131 132 133 |
# File 'lib/userbin/client.rb', line 131 def track(opts = {}) Userbin::Event.post('/v1/events', opts) end |
#trust_device(attrs = {}) ⇒ Object
100 101 102 103 104 105 106 107 108 109 |
# File 'lib/userbin/client.rb', line 100 def trust_device(attrs = {}) unless @store.session_token raise Userbin::UserUnauthorizedError, 'Need to call login before trusting device' end trusted_device = trusted_devices.create(attrs) # Set the session token for use in all subsequent requests @store.trusted_device_token = trusted_device.token end |