Sha256: 51184987fea7286dc7094491044ca60028d163d7c3f6e7378e71cd4401a08a89

Contents?: true

Size: 958 Bytes

Versions: 5

Compression:

Stored size: 958 Bytes

Contents

description  'Persistent login'

class ::Olelo::Application
  TOKEN_NAME = 'olelo.token'
  TOKEN_LIFETIME = 24*60*60*365

  hook :auto_login do
    if !User.current
      token = request.cookies[TOKEN_NAME]
      if token
        hash, user = token.split('-', 2)
        User.current = User.find(user) if sha256(user + Config['rack.session_secret']) == hash
      end
    end
  end

  before :login_buttons do
    %{<input type="checkbox" name="persistent" id="persistent" value="1"/>
<label for="persistent">#{escape_html :persistent_login.t}</label><br/>}
  end

  after :action do |method, path|
    if path == '/login'
      if User.logged_in? && params[:persistent]
        token = "#{sha256(User.current.name + Config['rack.session_secret'])}-#{User.current.name}"
        response.set_cookie(TOKEN_NAME, value: token, expires: Time.now + TOKEN_LIFETIME)
      end
    elsif path == '/logout'
      response.delete_cookie(TOKEN_NAME)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
olelo-0.9.8 plugins/login/persistent.rb
olelo-0.9.7 plugins/login/persistent.rb
olelo-0.9.6 plugins/login/persistent.rb
olelo-0.9.5 plugins/login/persistent.rb
olelo-0.9.4 plugins/login/persistent.rb