]> source.dussan.org Git - redmine.git/commitdiff
Added autologin feature (disabled by default).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 6 May 2007 12:49:32 +0000 (12:49 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 6 May 2007 12:49:32 +0000 (12:49 +0000)
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

16 files changed:
app/controllers/account_controller.rb
app/controllers/application.rb
app/models/setting.rb
app/models/user.rb
app/views/account/login.rhtml
app/views/settings/edit.rhtml
config/settings.yml
lang/bg.yml
lang/de.yml
lang/en.yml
lang/es.yml
lang/fr.yml
lang/it.yml
lang/ja.yml
lang/pt.yml
lang/zh.yml

index 61c71557a93eae0cd05bbc71fcb5d42c963b4c43..9b54a90ece3b069bde67558f6380d7fab996bdb0 100644 (file)
@@ -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
index 2a8e15155044bbfdbb1d3e03819e1aea1f5057fa..54e4768b69c83568345844ec997d7b4ec47c0aeb 100644 (file)
@@ -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 
   
index 56f7a524250fa47bcd08ecb2dc1ebeb711817796..ecca01c2825a4b6f1ff73aeb362f8340cc2ce1fe 100644 (file)
@@ -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)
index 6ae1301e70a5f41218b229385a39d3b9582e6cfa..1c56138562ce6399d63d9557da47921aaa72a9d0 100644 (file)
@@ -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
index 7148bdd7d23ec6d281646c10f33cffc64065d7c4..08d462c617a1f95e47cb5e7b2e00cd44b5d42df4 100644 (file)
@@ -3,23 +3,26 @@
 <h2 class="icon22 icon22-authent"><%=l(:label_please_login)%></h2>
 
 <% form_tag({:action=> "login"}, :class => "tabular") do %>
+
 <p><label for="login"><%=l(:field_login)%>:</label>
 <%= text_field_tag 'login', nil, :size => 25 %></p>
 
 <p><label for="password"><%=l(:field_password)%>:</label>
 <%= password_field_tag 'password', nil, :size => 25 %></p>
 
-<p><center><input type="submit" name="login" value="<%=l(:button_login)%> &#187;" class="primary" /></center>
+<% if Setting.autologin? %>
+<p><label for="autologin"><%= check_box_tag 'autologin' %> <%= l(:label_stay_logged_in) %></label></p>
+<% end %>
+
+<p><input type="submit" name="login" value="<%=l(:button_login)%> &#187;" class="primary" /></p>
 <% end %>
 <%= javascript_tag "Form.Element.focus('login');" %>
 
-<br>
 <% 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(" | ") %>
-</p>
 
 </div>
 </center>
\ No newline at end of file
index 057a988de11c09855a5f1ed755ca50044b44be68..f88d3f14a595c7bc25648f03ad831bbabe9c0448 100644 (file)
 <p><label><%= l(:setting_default_language) %></label>
 <%= select_tag 'settings[default_language]', options_for_select( lang_options_for_select(false), Setting.default_language) %></p>
 
-<p><label><%= l(:setting_login_required) %></label>
-<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %><%= hidden_field_tag 'settings[login_required]', 0 %></p>
-
-<p><label><%= l(:setting_self_registration) %></label>
-<%= check_box_tag 'settings[self_registration]', 1, Setting.self_registration? %><%= hidden_field_tag 'settings[self_registration]', 0 %></p>
-
-<p><label><%= l(:label_password_lost) %></label>
-<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %><%= hidden_field_tag 'settings[lost_password]', 0 %></p>
-
 <p><label><%= l(:setting_attachment_max_size) %></label>
 <%= text_field_tag 'settings[attachment_max_size]', Setting.attachment_max_size, :size => 6 %> KB</p>
 
 <%= check_box_tag 'settings[sys_api_enabled]', 1, Setting.sys_api_enabled? %><%= hidden_field_tag 'settings[sys_api_enabled]', 0 %></p>
 </div>
 
+<fieldset class="box"><legend><%= l(:label_authentication) %></legend>
+<p><label><%= l(:setting_login_required) %></label>
+<%= check_box_tag 'settings[login_required]', 1, Setting.login_required? %><%= hidden_field_tag 'settings[login_required]', 0 %></p>
+
+<p><label><%= l(:setting_autologin) %></label>
+<%= 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) %></p>
+
+<p><label><%= l(:setting_self_registration) %></label>
+<%= check_box_tag 'settings[self_registration]', 1, Setting.self_registration? %><%= hidden_field_tag 'settings[self_registration]', 0 %></p>
+
+<p><label><%= l(:label_password_lost) %></label>
+<%= check_box_tag 'settings[lost_password]', 1, Setting.lost_password? %><%= hidden_field_tag 'settings[lost_password]', 0 %></p>
+</fieldset>
+
 <fieldset class="box"><legend><%= l(:text_issues_ref_in_commit_messages) %></legend>
 <p><label><%= l(:setting_commit_ref_keywords) %></label>
 <%= text_field_tag 'settings[commit_ref_keywords]', Setting.commit_ref_keywords, :size => 30 %><br /><em><%= l(:text_coma_separated) %></em></p>
index 46324785bb11e1ea1e614c16a02f0edff8d31949..39e2e853173cc6a6da1f4c4d1317e8ec256e09ea 100644 (file)
@@ -61,4 +61,8 @@ commit_fix_keywords:
 commit_fix_status_id:\r
   format: int\r
   default: 0\r
-  
\ No newline at end of file
+# autologin duration in days\r
+# 0 means autologin is disabled \r
+autologin:\r
+  format: int\r
+  default: 0\r
index 6041f71b34e2861a69198e9c18a83875ccd63a0d..1e348cb75dc35456ae64d21ff5034f41c3c1e6f6 100644 (file)
@@ -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: Изпращане
index 35e4328cc08a22132c582d402e6c8b944e0bf775..1fc529badc29c23e00a6283be39c27fd76db05e9 100644 (file)
@@ -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
index fadcaad3fd15708e2141cca441ce851899276c5b..1800b5d33dbdadffcdcbf38db284f263534f1983 100644 (file)
@@ -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
index e6c9002e7fe6874e034eed6e9ba8cf82473fd2bd..3a66e0bcf5e7ae8698ecd923df6aeea695a06fb7 100644 (file)
@@ -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
index 394417ac9994313d11877c5889f138b4dd77979c..bd1973b4dc8f5cdd053be5dbcbcb2cc7b42b75d5 100644 (file)
@@ -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
index 2deb091153dfc07bd4937a5e3e8bd03c3552f8fe..c1e964548da2a3c2c4d88dbae062783d697e7f39 100644 (file)
@@ -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
index f746faf970a93c194660d9bd0ac23be054b74195..95579949427339101fbe336fea99210755c37648 100644 (file)
@@ -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: 変更
index 0d8bfc67c3eda58e2bb27d309eb4819611bc9ada..3c6debfbe06e5e1b9f887d621385be9a7863aa63 100644 (file)
@@ -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
index 344d8152bcd538cd5612f3ecec343315fbdb9998..f9f2a75a7170a48c648507594e9c253b4b1a9831 100644 (file)
@@ -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: 提交