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
- #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 |
# 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 } 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 " def \#{name}(*args)\n Userbin::User.new('$current').\#{name}(*args)\n end\n RUBY\n end\nend\n", __FILE__, __LINE__ + 1 |
Instance Method Details
#authorize! ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/userbin/client.rb', line 47 def unless @store.session_token raise Userbin::, 'Need to call login before authorize' end if @store.session_token.expired? Userbin::Monitoring.heartbeat end if mfa_in_progress? logout raise Userbin::, 'Logged out due to being unverified' end if mfa_required? && !device_trusted? raise Userbin::ChallengeRequiredError end end |
#authorized? ⇒ Boolean
68 69 70 |
# File 'lib/userbin/client.rb', line 68 def !!@store.session_token end |
#device_trusted? ⇒ Boolean
114 115 116 |
# File 'lib/userbin/client.rb', line 114 def device_trusted? @store.session_token ? @store.session_token.device_trusted? : false end |
#has_default_pairing? ⇒ Boolean
126 127 128 |
# File 'lib/userbin/client.rb', line 126 def has_default_pairing? @store.session_token ? @store.session_token.has_default_pairing? : false end |
#login(user_id, user_attrs = {}) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/userbin/client.rb', line 72 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
86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/userbin/client.rb', line 86 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
110 111 112 |
# File 'lib/userbin/client.rb', line 110 def mfa_enabled? @store.session_token ? @store.session_token.mfa_enabled? : false end |
#mfa_in_progress? ⇒ Boolean
118 119 120 |
# File 'lib/userbin/client.rb', line 118 def mfa_in_progress? @store.session_token ? @store.session_token.mfa_in_progress? : false end |
#mfa_required? ⇒ Boolean
122 123 124 |
# File 'lib/userbin/client.rb', line 122 def mfa_required? @store.session_token ? @store.session_token.mfa_required? : false end |
#session_token ⇒ Object
39 40 41 |
# File 'lib/userbin/client.rb', line 39 def session_token @store.session_token end |
#session_token=(session_token) ⇒ Object
43 44 45 |
# File 'lib/userbin/client.rb', line 43 def session_token=(session_token) @store.session_token = session_token end |
#trust_device(attrs = {}) ⇒ Object
99 100 101 102 103 104 105 106 107 108 |
# File 'lib/userbin/client.rb', line 99 def trust_device(attrs = {}) unless @store.session_token raise Userbin::, '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 |