Sha256: 8e0cbc5ad2fdccb8695328c231f768ccac315cd04cabe89eddf5145899b39c36

Contents?: true

Size: 1.41 KB

Versions: 4

Compression:

Stored size: 1.41 KB

Contents

# -*- coding: utf-8 -*-
description  'Persistent login'
require 'openssl'

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 hash == OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new('sha256'),
                                                                          Config['rack.session_secret'], user)
      end
    end
  end

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

  before(:login_buttons) { render_partial :persistent_login }
end

__END__
@@ persistent_login.slim
&checkbox#persistent name="persistent" value="1"
label for="persistent" = :persistent_login.t
br
@@ locale.yml
cs:
  persistent_login:     'Trvalé přihlášení'
de:
  persistent_login:     'Dauerhaft anmelden'
en:
  persistent_login:     'Persistent login'
fr:
  persistent_login:     'Connexion persistente'

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
olelo-0.9.15 plugins/login/persistent.rb
olelo-0.9.14 plugins/login/persistent.rb
olelo-0.9.13 plugins/login/persistent.rb
olelo-0.9.12 plugins/login/persistent.rb