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, ConfigurationError, Current, Error, Event, Events, Model, ParseSignedJSON, Railtie, SecurityError, Session, User, VerifySignature

Constant Summary collapse

VERSION =
"0.4.4"

Class Method Summary collapse

Class Method Details

._current_userObject



59
60
61
# File 'lib/userbin/userbin.rb', line 59

def self._current_user
  current.user if current
end

.authenticate!(request) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/userbin/userbin.rb', line 8

def self.authenticate!(request)
  jwt = request.cookies['_ubt']
  return unless jwt

  decoded = Userbin.decode_jwt(jwt)

  if Time.now > Time.at(decoded['expires_at'] / 1000)
    jwt = refresh_session(decoded['id'])
    return unless jwt

    decoded = Userbin.decode_jwt(jwt)

    if Time.now > Time.at(decoded['expires_at'] / 1000)
      raise Userbin::SecurityError
    end
  end

  self.current = Userbin::Session.new(decoded)

  return jwt
end

.authenticated?Boolean

Returns:

  • (Boolean)


47
48
49
# File 'lib/userbin/userbin.rb', line 47

def self.authenticated?
  current.authenticated? rescue false
end

.configObject



44
45
46
# File 'lib/userbin.rb', line 44

def config
  @configuration ||= Userbin::Configuration.new
end

.configure(config_hash = nil) {|config| ... } ⇒ Object

Yields:



34
35
36
37
38
39
40
41
42
# File 'lib/userbin.rb', line 34

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

.currentObject



39
40
41
# File 'lib/userbin/userbin.rb', line 39

def self.current
  Thread.current[:userbin]
end

.current=(value) ⇒ Object



43
44
45
# File 'lib/userbin/userbin.rb', line 43

def self.current=(value)
  Thread.current[:userbin] = value
end

.current_userObject



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/userbin/userbin.rb', line 63

def self.current_user
  if _current_user
    if Userbin.config.find_user
      u = Userbin.config.find_user.call(_current_user.id)
      if u
        u
      else
        if Userbin.config.create_user

          # Fetch a full profile from the API. This way we can get more
          # sensitive details than those stored in the cookie. It also checks
          # that the user still exists in Userbin.
          profile = User.find(_current_user.id)

          u = Userbin.config.create_user.call(profile)
          if u
            u
          else
            _current_user
          end
        else
          raise ConfigurationError, "You need to implement create_user"
        end
      end
    else
      _current_user
    end
  end
end

.decode_jwt(jwt) ⇒ Object



4
5
6
# File 'lib/userbin/userbin.rb', line 4

def self.decode_jwt(jwt)
  JWT.decode(jwt, Userbin.config.api_secret)
end

.refresh_session(session_id) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/userbin/userbin.rb', line 30

def self.refresh_session(session_id)
  api_endpoint = ENV["USERBIN_API_ENDPOINT"] || 'https://api.userbin.com'
  uri = URI("#{api_endpoint}/sessions/#{session_id}/refresh.jwt")
  uri.user = config.app_id
  uri.password = config.api_secret
  net = Net::HTTP.post_form(uri, {})
  net.body
end

.userObject



93
94
95
# File 'lib/userbin/userbin.rb', line 93

def self.user
  current_user
end

.user_logged_in?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/userbin/userbin.rb', line 51

def self.user_logged_in?
  authenticated?
end

.user_signed_in?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/userbin/userbin.rb', line 55

def self.user_signed_in?
  authenticated?
end