summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-09-24 10:48:36 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2013-09-24 10:48:36 +0300
commit642398285d21221186ad988198e85a5b60838f86 (patch)
treebc43a955d31f3cc023ef68bd2f837f9d6acba207
parent0630be3828998af1261b87ae85b42c0ef9a439ed (diff)
downloadgitlab-ce-642398285d21221186ad988198e85a5b60838f86.tar.gz
Force user to provide old password in order to change it
-rw-r--r--app/controllers/profiles_controller.rb9
-rw-r--r--app/views/profiles/account.html.haml45
-rw-r--r--features/profile/profile.feature6
-rw-r--r--features/steps/profile/profile.rb18
4 files changed, 59 insertions, 19 deletions
diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb
index 6fa635d0e36..780f47d9960 100644
--- a/app/controllers/profiles_controller.rb
+++ b/app/controllers/profiles_controller.rb
@@ -33,7 +33,14 @@ class ProfilesController < ApplicationController
end
def update_password
- params[:user].reject!{ |k, v| k != "password" && k != "password_confirmation"}
+ params[:user].select! do |key, value|
+ %w(current_password password password_confirmation).include?(key.to_s)
+ end
+
+ unless @user.valid_password?(params[:user][:current_password])
+ redirect_to account_profile_path, alert: 'You must provide a valid current password'
+ return
+ end
if @user.update_attributes(params[:user])
flash[:notice] = "Password was successfully updated. Please login with it"
diff --git a/app/views/profiles/account.html.haml b/app/views/profiles/account.html.haml
index 8f43db66249..42c7ec051cb 100644
--- a/app/views/profiles/account.html.haml
+++ b/app/views/profiles/account.html.haml
@@ -57,24 +57,33 @@
.tab-pane#tab-password
%fieldset.update-password
%legend Password
- = form_for @user, url: update_password_profile_path, method: :put do |f|
- %div
- %p.slead After a successful password update you will be redirected to login page where you should login with your new password
- -if @user.errors.any?
- .alert.alert-error
- %ul
- - @user.errors.full_messages.each do |msg|
- %li= msg
- .control-group
- = f.label :password
- .controls= f.password_field :password, required: true
- .control-group
- = f.label :password_confirmation
- .controls
- = f.password_field :password_confirmation, required: true
- .control-group
- .controls
- = f.submit 'Save password', class: "btn btn-save"
+ - if current_user.ldap_user?
+ %h3.nothing_here_message Not available for LDAP user
+ - else
+ = form_for @user, url: update_password_profile_path, method: :put do |f|
+ %div
+ %p.slead
+ You must provide current password in order to change it.
+ %br
+ After a successful password update you will be redirected to login page where you should login with your new password
+ -if @user.errors.any?
+ .alert.alert-error
+ %ul
+ - @user.errors.full_messages.each do |msg|
+ %li= msg
+ .control-group
+ = f.label :current_password, class: 'cgreen'
+ .controls= f.password_field :current_password, required: true
+ .control-group
+ = f.label :password, 'New password'
+ .controls= f.password_field :password, required: true
+ .control-group
+ = f.label :password_confirmation
+ .controls
+ = f.password_field :password_confirmation, required: true
+ .control-group
+ .controls
+ = f.submit 'Save password', class: "btn btn-save"
- if show_profile_social_tab?
.tab-pane#tab-social
diff --git a/features/profile/profile.feature b/features/profile/profile.feature
index 3b61552a73d..c74b0993fb3 100644
--- a/features/profile/profile.feature
+++ b/features/profile/profile.feature
@@ -11,6 +11,12 @@ Feature: Profile
Then I change my contact info
And I should see new contact info
+ Scenario: I change my password without old one
+ Given I visit profile account page
+ When I try change my password w/o old one
+ Then I should see a missing password error message
+ And I should be redirected to account page
+
Scenario: I change my password
Given I visit profile account page
Then I change my password
diff --git a/features/steps/profile/profile.rb b/features/steps/profile/profile.rb
index 6944977c3ff..5b2a6321265 100644
--- a/features/steps/profile/profile.rb
+++ b/features/steps/profile/profile.rb
@@ -22,8 +22,17 @@ class Profile < Spinach::FeatureSteps
@user.twitter.should == 'testtwitter'
end
+ step 'I try change my password w/o old one' do
+ within '.update-password' do
+ fill_in "user_password", with: "222333"
+ fill_in "user_password_confirmation", with: "222333"
+ click_button "Save"
+ end
+ end
+
step 'I change my password' do
within '.update-password' do
+ fill_in "user_current_password", with: "123456"
fill_in "user_password", with: "222333"
fill_in "user_password_confirmation", with: "222333"
click_button "Save"
@@ -32,12 +41,17 @@ class Profile < Spinach::FeatureSteps
step 'I unsuccessfully change my password' do
within '.update-password' do
+ fill_in "user_current_password", with: "123456"
fill_in "user_password", with: "password"
fill_in "user_password_confirmation", with: "confirmation"
click_button "Save"
end
end
+ step "I should see a missing password error message" do
+ page.should have_content "You must provide a valid current password"
+ end
+
step "I should see a password error message" do
page.should have_content "Password doesn't match confirmation"
end
@@ -110,6 +124,10 @@ class Profile < Spinach::FeatureSteps
current_path.should == new_user_session_path
end
+ step 'I should be redirected to account page' do
+ current_path.should == account_profile_path
+ end
+
step 'I click on my profile picture' do
click_link 'profile-pic'
end