From 7eb64715595abded9e5ef4bcbc06aa203c6f23a8 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 6 May 2007 12:49:32 +0000 Subject: [PATCH] Added autologin feature (disabled by default). To enable this feature, go to administration settings and choose a duration for autologin. When enabled, a checkbox on the login form lets users activate autologin. git-svn-id: http://redmine.rubyforge.org/svn/trunk@514 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/account_controller.rb | 7 +++++++ app/controllers/application.rb | 7 +++++++ app/models/setting.rb | 2 +- app/models/user.rb | 5 +++++ app/views/account/login.rhtml | 9 ++++++--- app/views/settings/edit.rhtml | 23 ++++++++++++++--------- config/settings.yml | 6 +++++- lang/bg.yml | 3 +++ lang/de.yml | 3 +++ lang/en.yml | 3 +++ lang/es.yml | 3 +++ lang/fr.yml | 3 +++ lang/it.yml | 3 +++ lang/ja.yml | 3 +++ lang/pt.yml | 3 +++ lang/zh.yml | 3 +++ 16 files changed, 72 insertions(+), 14 deletions(-) diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 61c71557..9b54a90e 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -42,6 +42,11 @@ class AccountController < ApplicationController user = User.try_to_login(params[:login], params[:password]) if user self.logged_in_user = user + # generate a key and set cookie if autologin + if params[:autologin] && Setting.autologin? + token = Token.create(:user => user, :action => 'autologin') + cookies[:autologin] = { :value => token.value, :expires => 1.year.from_now } + end redirect_back_or_default :controller => 'my', :action => 'page' else flash.now[:notice] = l(:notice_account_invalid_creditentials) @@ -51,6 +56,8 @@ class AccountController < ApplicationController # Log out current user and redirect to welcome page def logout + cookies.delete :autologin + Token.delete_all(["user_id = ? AND action = ?", logged_in_user.id, "autologin"]) if logged_in_user self.logged_in_user = nil redirect_to :controller => 'welcome' end diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 2a8e1515..54e4768b 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -40,6 +40,13 @@ class ApplicationController < ActionController::Base # check if login is globally required to access the application def check_if_login_required + # no check needed if user is already logged in + return true if logged_in_user + # auto-login feature + autologin_key = cookies[:autologin] + if autologin_key && Setting.autologin? + self.logged_in_user = User.find_by_autologin_key(autologin_key) + end require_login if Setting.login_required? end diff --git a/app/models/setting.rb b/app/models/setting.rb index 56f7a524..ecca01c2 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -49,7 +49,7 @@ class Setting < ActiveRecord::Base end def self.#{name}? - self[:#{name}].to_s == "1" + self[:#{name}].to_i > 0 end def self.#{name}=(value) diff --git a/app/models/user.rb b/app/models/user.rb index 6ae1301e..1c561385 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -141,6 +141,11 @@ class User < ActiveRecord::Base token = Token.find_by_value(key) token && token.user.active? ? token.user : nil end + + def self.find_by_autologin_key(key) + token = Token.find_by_action_and_value('autologin', key) + token && (token.created_on > Setting.autologin.to_i.day.ago) && token.user.active? ? token.user : nil + end def <=>(user) lastname == user.lastname ? firstname <=> user.firstname : lastname <=> user.lastname diff --git a/app/views/account/login.rhtml b/app/views/account/login.rhtml index 7148bdd7..08d462c6 100644 --- a/app/views/account/login.rhtml +++ b/app/views/account/login.rhtml @@ -3,23 +3,26 @@

<%=l(:label_please_login)%>

<% form_tag({:action=> "login"}, :class => "tabular") do %> +

<%= text_field_tag 'login', nil, :size => 25 %>

<%= password_field_tag 'password', nil, :size => 25 %>

-

+<% if Setting.autologin? %> +

+<% end %> + +

<% end %> <%= javascript_tag "Form.Element.focus('login');" %> -
<% links = [] links << link_to(l(:label_register), :action => 'register') if Setting.self_registration? links << link_to(l(:label_password_lost), :action => 'lost_password') if Setting.lost_password? %> <%= links.join(" | ") %> -

\ No newline at end of file diff --git a/app/views/settings/edit.rhtml b/app/views/settings/edit.rhtml index 057a988d..f88d3f14 100644 --- a/app/views/settings/edit.rhtml +++ b/app/views/settings/edit.rhtml @@ -15,15 +15,6 @@

<%= select_tag 'settings[default_language]', options_for_select( lang_options_for_select(false), Setting.default_language) %>

-

-<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %><%= hidden_field_tag 'settings[login_required]', 0 %>

- -

-<%= check_box_tag 'settings[self_registration]', 1, Setting.self_registration? %><%= hidden_field_tag 'settings[self_registration]', 0 %>

- -

-<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %><%= hidden_field_tag 'settings[lost_password]', 0 %>

-

<%= text_field_tag 'settings[attachment_max_size]', Setting.attachment_max_size, :size => 6 %> KB

@@ -52,6 +43,20 @@ <%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %><%= hidden_field_tag 'settings[sys_api_enabled]', 0 %>

+
<%= l(:label_authentication) %> +

+<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %><%= hidden_field_tag 'settings[login_required]', 0 %>

+ +

+<%= select_tag 'settings[autologin]', options_for_select( [[l(:label_disabled), "0"]] + [1, 7, 30, 365].collect{|days| [lwr(:actionview_datehelper_time_in_words_day, days), days.to_s]}, Setting.autologin) %>

+ +

+<%= check_box_tag 'settings[self_registration]', 1, Setting.self_registration? %><%= hidden_field_tag 'settings[self_registration]', 0 %>

+ +

+<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %><%= hidden_field_tag 'settings[lost_password]', 0 %>

+
+
<%= l(:text_issues_ref_in_commit_messages) %>

<%= text_field_tag 'settings[commit_ref_keywords]', Setting.commit_ref_keywords, :size => 30 %>
<%= l(:text_coma_separated) %>

diff --git a/config/settings.yml b/config/settings.yml index 46324785..39e2e853 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -61,4 +61,8 @@ commit_fix_keywords: commit_fix_status_id: format: int default: 0 - \ No newline at end of file +# autologin duration in days +# 0 means autologin is disabled +autologin: + format: int + default: 0 diff --git a/lang/bg.yml b/lang/bg.yml index 6041f71b..1e348cb7 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -171,6 +171,7 @@ setting_autofetch_changesets: Автоматично обработване на setting_sys_api_enabled: Разрешаване на WS за управление на SVN склада setting_commit_ref_keywords: Отбелязващи ключови думи setting_commit_fix_keywords: Приключващи ключови думи +setting_autologin: Autologin label_user: Потребител label_user_plural: Потребители @@ -380,6 +381,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: Вход button_submit: Изпращане diff --git a/lang/de.yml b/lang/de.yml index 35e4328c..1fc529ba 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -171,6 +171,7 @@ setting_autofetch_changesets: Autofetch SVN commits setting_sys_api_enabled: Enable WS for repository management setting_commit_ref_keywords: Referencing keywords setting_commit_fix_keywords: Fixing keywords +setting_autologin: Autologin label_user: Benutzer label_user_plural: Benutzer @@ -380,6 +381,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: Einloggen button_submit: OK diff --git a/lang/en.yml b/lang/en.yml index fadcaad3..1800b5d3 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -171,6 +171,7 @@ setting_autofetch_changesets: Autofetch SVN commits setting_sys_api_enabled: Enable WS for repository management setting_commit_ref_keywords: Referencing keywords setting_commit_fix_keywords: Fixing keywords +setting_autologin: Autologin label_user: User label_user_plural: Users @@ -380,6 +381,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: Login button_submit: Submit diff --git a/lang/es.yml b/lang/es.yml index e6c9002e..3a66e0bc 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -171,6 +171,7 @@ setting_autofetch_changesets: Autofetch SVN commits setting_sys_api_enabled: Enable WS for repository management setting_commit_ref_keywords: Referencing keywords setting_commit_fix_keywords: Fixing keywords +setting_autologin: Autologin label_user: Usuario label_user_plural: Usuarios @@ -380,6 +381,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: Conexión button_submit: Someter diff --git a/lang/fr.yml b/lang/fr.yml index 394417ac..bd1973b4 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -171,6 +171,7 @@ setting_autofetch_changesets: Récupération auto. des commits SVN setting_sys_api_enabled: Activer les WS pour la gestion des dépôts setting_commit_ref_keywords: Mot-clés de référencement setting_commit_fix_keywords: Mot-clés de résolution +setting_autologin: Autologin label_user: Utilisateur label_user_plural: Utilisateurs @@ -380,6 +381,8 @@ label_end_to_start: début à fin label_end_to_end: fin à fin label_start_to_start: début à début label_start_to_end: début à fin +label_stay_logged_in: Rester connecté +label_disabled: désactivé button_login: Connexion button_submit: Soumettre diff --git a/lang/it.yml b/lang/it.yml index 2deb0911..c1e96454 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -171,6 +171,7 @@ setting_autofetch_changesets: Acquisisci automaticamente le commit SVN setting_sys_api_enabled: Abilita WS per la gestione del repository setting_commit_ref_keywords: Referencing keywords setting_commit_fix_keywords: Fixing keywords +setting_autologin: Autologin label_user: Utente label_user_plural: Utenti @@ -380,6 +381,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: Login button_submit: Invia diff --git a/lang/ja.yml b/lang/ja.yml index f746faf9..95579949 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -172,6 +172,7 @@ setting_autofetch_changesets: SVNコミットを自動取得する setting_sys_api_enabled: リポジトリ管理用のWeb Serviceを有効化する setting_commit_ref_keywords: Referencing keywords setting_commit_fix_keywords: Fixing keywords +setting_autologin: Autologin label_user: ユーザ label_user_plural: ユーザ @@ -381,6 +382,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: ログイン button_submit: 変更 diff --git a/lang/pt.yml b/lang/pt.yml index 0d8bfc67..3c6debfb 100644 --- a/lang/pt.yml +++ b/lang/pt.yml @@ -171,6 +171,7 @@ setting_autofetch_changesets: Autofetch SVN commits setting_sys_api_enabled: Ativa WS para gerenciamento do repositorio setting_commit_ref_keywords: Referencing keywords setting_commit_fix_keywords: Fixing keywords +setting_autologin: Autologin label_user: Usuario label_user_plural: Usuarios @@ -380,6 +381,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: Login button_submit: Enviar diff --git a/lang/zh.yml b/lang/zh.yml index 344d8152..f9f2a75a 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -174,6 +174,7 @@ setting_autofetch_changesets: Autofetch SVN commits setting_sys_api_enabled: Enable WS for repository management setting_commit_ref_keywords: Referencing keywords setting_commit_fix_keywords: Fixing keywords +setting_autologin: Autologin label_user: 用户 label_user_plural: 用户列表 @@ -383,6 +384,8 @@ label_end_to_start: start to end label_end_to_end: end to end label_start_to_start: start to start label_start_to_end: start to end +label_stay_logged_in: Stay logged in +label_disabled: disabled button_login: 登录 button_submit: 提交 -- 2.11.0