Commit 642398285d21221186ad988198e85a5b60838f86
1 parent
0630be38
Exists in
master
and in
4 other branches
Force user to provide old password in order to change it
Showing
4 changed files
with
59 additions
and
19 deletions
Show diff stats
app/controllers/profiles_controller.rb
| ... | ... | @@ -33,7 +33,14 @@ class ProfilesController < ApplicationController |
| 33 | 33 | end |
| 34 | 34 | |
| 35 | 35 | def update_password |
| 36 | - params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"} | |
| 36 | + params[:user].select! do |key, value| | |
| 37 | + %w(current_password password password_confirmation).include?(key.to_s) | |
| 38 | + end | |
| 39 | + | |
| 40 | + unless @user.valid_password?(params[:user][:current_password]) | |
| 41 | + redirect_to account_profile_path, alert: 'You must provide a valid current password' | |
| 42 | + return | |
| 43 | + end | |
| 37 | 44 | |
| 38 | 45 | if @user.update_attributes(params[:user]) |
| 39 | 46 | flash[:notice] = "Password was successfully updated. Please login with it" | ... | ... |
app/views/profiles/account.html.haml
| ... | ... | @@ -57,24 +57,33 @@ |
| 57 | 57 | .tab-pane#tab-password |
| 58 | 58 | %fieldset.update-password |
| 59 | 59 | %legend Password |
| 60 | - = form_for @user, url: update_password_profile_path, method: :put do |f| | |
| 61 | - %div | |
| 62 | - %p.slead After a successful password update you will be redirected to login page where you should login with your new password | |
| 63 | - -if @user.errors.any? | |
| 64 | - .alert.alert-error | |
| 65 | - %ul | |
| 66 | - - @user.errors.full_messages.each do |msg| | |
| 67 | - %li= msg | |
| 68 | - .control-group | |
| 69 | - = f.label :password | |
| 70 | - .controls= f.password_field :password, required: true | |
| 71 | - .control-group | |
| 72 | - = f.label :password_confirmation | |
| 73 | - .controls | |
| 74 | - = f.password_field :password_confirmation, required: true | |
| 75 | - .control-group | |
| 76 | - .controls | |
| 77 | - = f.submit 'Save password', class: "btn btn-save" | |
| 60 | + - if current_user.ldap_user? | |
| 61 | + %h3.nothing_here_message Not available for LDAP user | |
| 62 | + - else | |
| 63 | + = form_for @user, url: update_password_profile_path, method: :put do |f| | |
| 64 | + %div | |
| 65 | + %p.slead | |
| 66 | + You must provide current password in order to change it. | |
| 67 | + %br | |
| 68 | + After a successful password update you will be redirected to login page where you should login with your new password | |
| 69 | + -if @user.errors.any? | |
| 70 | + .alert.alert-error | |
| 71 | + %ul | |
| 72 | + - @user.errors.full_messages.each do |msg| | |
| 73 | + %li= msg | |
| 74 | + .control-group | |
| 75 | + = f.label :current_password, class: 'cgreen' | |
| 76 | + .controls= f.password_field :current_password, required: true | |
| 77 | + .control-group | |
| 78 | + = f.label :password, 'New password' | |
| 79 | + .controls= f.password_field :password, required: true | |
| 80 | + .control-group | |
| 81 | + = f.label :password_confirmation | |
| 82 | + .controls | |
| 83 | + = f.password_field :password_confirmation, required: true | |
| 84 | + .control-group | |
| 85 | + .controls | |
| 86 | + = f.submit 'Save password', class: "btn btn-save" | |
| 78 | 87 | |
| 79 | 88 | - if show_profile_social_tab? |
| 80 | 89 | .tab-pane#tab-social | ... | ... |
features/profile/profile.feature
| ... | ... | @@ -11,6 +11,12 @@ Feature: Profile |
| 11 | 11 | Then I change my contact info |
| 12 | 12 | And I should see new contact info |
| 13 | 13 | |
| 14 | + Scenario: I change my password without old one | |
| 15 | + Given I visit profile account page | |
| 16 | + When I try change my password w/o old one | |
| 17 | + Then I should see a missing password error message | |
| 18 | + And I should be redirected to account page | |
| 19 | + | |
| 14 | 20 | Scenario: I change my password |
| 15 | 21 | Given I visit profile account page |
| 16 | 22 | Then I change my password | ... | ... |
features/steps/profile/profile.rb
| ... | ... | @@ -22,8 +22,17 @@ class Profile < Spinach::FeatureSteps |
| 22 | 22 | @user.twitter.should == 'testtwitter' |
| 23 | 23 | end |
| 24 | 24 | |
| 25 | + step 'I try change my password w/o old one' do | |
| 26 | + within '.update-password' do | |
| 27 | + fill_in "user_password", with: "222333" | |
| 28 | + fill_in "user_password_confirmation", with: "222333" | |
| 29 | + click_button "Save" | |
| 30 | + end | |
| 31 | + end | |
| 32 | + | |
| 25 | 33 | step 'I change my password' do |
| 26 | 34 | within '.update-password' do |
| 35 | + fill_in "user_current_password", with: "123456" | |
| 27 | 36 | fill_in "user_password", with: "222333" |
| 28 | 37 | fill_in "user_password_confirmation", with: "222333" |
| 29 | 38 | click_button "Save" |
| ... | ... | @@ -32,12 +41,17 @@ class Profile < Spinach::FeatureSteps |
| 32 | 41 | |
| 33 | 42 | step 'I unsuccessfully change my password' do |
| 34 | 43 | within '.update-password' do |
| 44 | + fill_in "user_current_password", with: "123456" | |
| 35 | 45 | fill_in "user_password", with: "password" |
| 36 | 46 | fill_in "user_password_confirmation", with: "confirmation" |
| 37 | 47 | click_button "Save" |
| 38 | 48 | end |
| 39 | 49 | end |
| 40 | 50 | |
| 51 | + step "I should see a missing password error message" do | |
| 52 | + page.should have_content "You must provide a valid current password" | |
| 53 | + end | |
| 54 | + | |
| 41 | 55 | step "I should see a password error message" do |
| 42 | 56 | page.should have_content "Password doesn't match confirmation" |
| 43 | 57 | end |
| ... | ... | @@ -110,6 +124,10 @@ class Profile < Spinach::FeatureSteps |
| 110 | 124 | current_path.should == new_user_session_path |
| 111 | 125 | end |
| 112 | 126 | |
| 127 | + step 'I should be redirected to account page' do | |
| 128 | + current_path.should == account_profile_path | |
| 129 | + end | |
| 130 | + | |
| 113 | 131 | step 'I click on my profile picture' do |
| 114 | 132 | click_link 'profile-pic' |
| 115 | 133 | end | ... | ... |