Feature #19458 » 0002-Allow-to-specify-maximum-password-age.patch
| app/controllers/application_controller.rb (working copy) | ||
|---|---|---|
| 204 | 204 |
def check_password_change |
| 205 | 205 |
if session[:pwd] |
| 206 | 206 |
if User.current.must_change_password? |
| 207 |
flash[:error] = l(:error_password_expired) |
|
| 207 | 208 |
redirect_to my_password_path |
| 208 | 209 |
else |
| 209 | 210 |
session.delete(:pwd) |
| app/models/user.rb (working copy) | ||
|---|---|---|
| 323 | 323 |
return auth_source.allow_password_changes? |
| 324 | 324 |
end |
| 325 | 325 | |
| 326 |
def password_expired? |
|
| 327 |
changed_on = self.passwd_changed_on || Time.at(0) |
|
| 328 |
period = Setting.password_max_age.to_i |
|
| 329 | ||
| 330 |
if period.zero? |
|
| 331 |
false |
|
| 332 |
else |
|
| 333 |
changed_on < period.days.ago |
|
| 334 |
end |
|
| 335 |
end |
|
| 336 | ||
| 326 | 337 |
def must_change_password? |
| 327 |
must_change_passwd? && change_password_allowed?
|
|
| 338 |
(must_change_passwd? || password_expired?) && change_password_allowed?
|
|
| 328 | 339 |
end |
| 329 | 340 | |
| 330 | 341 |
def generate_password? |
| app/views/my/password.html.erb (working copy) | ||
|---|---|---|
| 17 | 17 |
<%= submit_tag l(:button_apply) %> |
| 18 | 18 |
<% end %> |
| 19 | 19 | |
| 20 |
<% unless @user.must_change_passwd? %> |
|
| 20 |
<% unless @user.must_change_passwd? || @user.password_expired? %>
|
|
| 21 | 21 |
<% content_for :sidebar do %> |
| 22 | 22 |
<%= render :partial => 'sidebar' %> |
| 23 | 23 |
<% end %> |
| app/views/settings/_authentication.html.erb (working copy) | ||
|---|---|---|
| 14 | 14 | |
| 15 | 15 |
<p><%= setting_text_field :password_min_length, :size => 6 %></p> |
| 16 | 16 | |
| 17 |
<p> |
|
| 18 |
<%= setting_select :password_max_age, [[l(:label_disabled), 0]] + [7, 30, 60, 90, 180, 365].collect{|days| [l('datetime.distance_in_words.x_days', :count => days), days.to_s]} %>
|
|
| 19 |
</p> |
|
| 20 | ||
| 17 | 21 |
<p><%= setting_check_box :lost_password, :label => :label_password_lost %></p> |
| 18 | 22 | |
| 19 | 23 |
<p><%= setting_text_field :max_additional_emails, :size => 6 %></p> |
| config/locales/de.yml (working copy) | ||
|---|---|---|
| 1026 | 1026 |
setting_non_working_week_days: Arbeitsfreie Tage |
| 1027 | 1027 |
setting_openid: Erlaube OpenID-Anmeldung und -Registrierung |
| 1028 | 1028 |
setting_password_min_length: Mindestlänge des Kennworts |
| 1029 |
setting_password_max_age: Erzwinge Passwortwechsel nach |
|
| 1029 | 1030 |
setting_per_page_options: Objekte pro Seite |
| 1030 | 1031 |
setting_plain_text_mail: Nur reinen Text (kein HTML) senden |
| 1031 | 1032 |
setting_protocol: Protokoll |
| config/locales/en.yml (working copy) | ||
|---|---|---|
| 204 | 204 |
error_attachment_too_big: "This file cannot be uploaded because it exceeds the maximum allowed file size (%{max_size})"
|
| 205 | 205 |
error_session_expired: "Your session has expired. Please login again." |
| 206 | 206 |
warning_attachments_not_saved: "%{count} file(s) could not be saved."
|
| 207 |
error_password_expired: "Your password has expired or the administrator requires you to change it." |
|
| 207 | 208 | |
| 208 | 209 |
mail_subject_lost_password: "Your %{value} password"
|
| 209 | 210 |
mail_body_lost_password: 'To change your password, click on the following link:' |
| ... | ... | |
| 386 | 387 |
setting_file_max_size_displayed: Maximum size of text files displayed inline |
| 387 | 388 |
setting_repository_log_display_limit: Maximum number of revisions displayed on file log |
| 388 | 389 |
setting_openid: Allow OpenID login and registration |
| 390 |
setting_password_max_age: Require password change after |
|
| 389 | 391 |
setting_password_min_length: Minimum password length |
| 390 | 392 |
setting_new_project_user_role_id: Role given to a non-admin user who creates a project |
| 391 | 393 |
setting_default_projects_modules: Default enabled modules for new projects |
| config/settings.yml (working copy) | ||
|---|---|---|
| 36 | 36 |
password_min_length: |
| 37 | 37 |
format: int |
| 38 | 38 |
default: 8 |
| 39 |
# Maximum password age in days |
|
| 40 |
password_max_age: |
|
| 41 |
format: int |
|
| 42 |
default: 0 |
|
| 39 | 43 |
# Maximum number of additional email addresses per user |
| 40 | 44 |
max_additional_emails: |
| 41 | 45 |
format: int |
| test/integration/account_test.rb (working copy) | ||
|---|---|---|
| 150 | 150 |
assert_equal false, User.find_by_login('jsmith').must_change_passwd?
|
| 151 | 151 |
end |
| 152 | 152 | |
| 153 |
def test_user_with_expired_password_should_be_forced_to_change_its_password |
|
| 154 |
User.find_by_login('jsmith').update_attribute :passwd_changed_on, 14.days.ago
|
|
| 155 | ||
| 156 |
with_settings :password_max_age => 7 do |
|
| 157 |
post '/login', :username => 'jsmith', :password => 'jsmith' |
|
| 158 |
assert_redirected_to '/my/page' |
|
| 159 |
follow_redirect! |
|
| 160 |
assert_redirected_to '/my/password' |
|
| 161 | ||
| 162 |
get '/issues' |
|
| 163 |
assert_redirected_to '/my/password' |
|
| 164 |
end |
|
| 165 |
end |
|
| 166 | ||
| 167 |
def test_user_with_expired_password_should_be_able_to_change_its_password |
|
| 168 |
User.find_by_login('jsmith').update_attribute :passwd_changed_on, 14.days.ago
|
|
| 169 | ||
| 170 |
with_settings :password_max_age => 7 do |
|
| 171 |
post '/login', :username => 'jsmith', :password => 'jsmith' |
|
| 172 |
assert_redirected_to '/my/page' |
|
| 173 |
follow_redirect! |
|
| 174 |
assert_redirected_to '/my/password' |
|
| 175 |
follow_redirect! |
|
| 176 |
assert_response :success |
|
| 177 |
post '/my/password', :password => 'jsmith', :new_password => 'newpassword', :new_password_confirmation => 'newpassword' |
|
| 178 |
assert_redirected_to '/my/account' |
|
| 179 |
follow_redirect! |
|
| 180 |
assert_response :success |
|
| 181 | ||
| 182 |
assert_equal false, User.find_by_login('jsmith').must_change_passwd?
|
|
| 183 |
end |
|
| 184 | ||
| 185 |
end |
|
| 186 | ||
| 153 | 187 |
def test_register_with_automatic_activation |
| 154 | 188 |
Setting.self_registration = '3' |
| 155 | 189 | |
- « Previous
- 1
- 2
- 3
- Next »