Added password change to profile page.
This commit is contained in:
parent
f4bb730aa9
commit
d1b17ba9cc
11 changed files with 163 additions and 33 deletions
|
@ -37,6 +37,7 @@ class App.ControllerForm extends App.Controller
|
|||
attribute.value = @params[attribute.name]
|
||||
|
||||
# rename display and name to _confirm
|
||||
if !attribute.single
|
||||
attribute.display = attribute.display + ' (confirm)'
|
||||
attribute.name = attribute.name + '_confirm';
|
||||
item = @formGenItem( attribute, @model.className, fieldset )
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
class App.ProfilePassword extends App.Controller
|
||||
events:
|
||||
'submit form': 'update'
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
return if !@authenticate()
|
||||
@render()
|
||||
|
||||
render: =>
|
||||
|
||||
# item
|
||||
html = $( App.view('profile/password')() )
|
||||
|
||||
configure_attributes = [
|
||||
{ name: 'password_old', display: 'Current Password', tag: 'input', type: 'password', limit: 100, null: false, class: 'input span4', single: true },
|
||||
{ name: 'password_new', display: 'New Password', tag: 'input', type: 'password', limit: 100, null: false, class: 'input span4', },
|
||||
]
|
||||
|
||||
@form = new App.ControllerForm(
|
||||
el: html.find('.password_item')
|
||||
model: { configure_attributes: configure_attributes }
|
||||
autofocus: false
|
||||
)
|
||||
@html html
|
||||
|
||||
update: (e) =>
|
||||
e.preventDefault()
|
||||
params = @formParam(e.target)
|
||||
error = @form.validate(params)
|
||||
if error
|
||||
@formValidate( form: e.target, errors: error )
|
||||
return false
|
||||
|
||||
@formDisable(e)
|
||||
|
||||
# get data
|
||||
App.Com.ajax(
|
||||
id: 'password_reset'
|
||||
type: 'POST'
|
||||
url: 'api/users/password_change'
|
||||
data: JSON.stringify(params)
|
||||
processData: true
|
||||
success: @success
|
||||
error: @error
|
||||
)
|
||||
|
||||
success: (data, status, xhr) =>
|
||||
@render()
|
||||
@notify(
|
||||
type: 'success'
|
||||
msg: App.i18n.translateContent( 'Password changed successfully!' )
|
||||
)
|
||||
|
||||
error: (xhr, status, error) =>
|
||||
@render()
|
||||
data = JSON.parse( xhr.responseText )
|
||||
@notify(
|
||||
type: 'error'
|
||||
msg: App.i18n.translateContent( data.message )
|
||||
)
|
|
@ -1,5 +1,3 @@
|
|||
$ = jQuery.sub()
|
||||
|
||||
class App.SettingsArea extends App.Controller
|
||||
constructor: ->
|
||||
super
|
||||
|
@ -23,7 +21,7 @@ class App.SettingsArea extends App.Controller
|
|||
|
||||
class App.SettingsAreaItem extends App.Controller
|
||||
events:
|
||||
'submit form': 'update',
|
||||
'submit form': 'update'
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
|
|
|
@ -1,21 +1,32 @@
|
|||
class Index extends App.Controller
|
||||
# events:
|
||||
# 'focusin [data-type=edit]': 'edit_in'
|
||||
class Index extends App.ControllerLevel2
|
||||
toggleable: false
|
||||
# toggleable: true
|
||||
|
||||
constructor: ->
|
||||
super
|
||||
|
||||
# set title
|
||||
@title 'Profile'
|
||||
return if !@authenticate()
|
||||
|
||||
@menu = [
|
||||
{ name: 'Password', 'target': 'password', controller: App.ProfilePassword, params: {} },
|
||||
{ name: 'Language', 'target': 'language', controller: App.ProfileLinkedAccounts, params: { area: 'Ticket::Number' } },
|
||||
{ name: 'Link Accounts', 'target': 'accounts', controller: App.ProfileLinkedAccounts, params: { area: 'Ticket::Number' } },
|
||||
# { name: 'Notifications', 'target': 'notify', controller: App.SettingsArea, params: { area: 'Ticket::Number' } },
|
||||
]
|
||||
@page = {
|
||||
title: 'Profile',
|
||||
head: 'Profile',
|
||||
sub_title: 'Settings'
|
||||
nav: '#profile',
|
||||
}
|
||||
|
||||
# render page
|
||||
@render()
|
||||
|
||||
@navupdate '#profile'
|
||||
|
||||
|
||||
render: ->
|
||||
@html App.view('profile')()
|
||||
# render: ->
|
||||
# @html App.view('profile')()
|
||||
|
||||
|
||||
App.Config.set( 'profile/:target', Index, 'Routes' )
|
||||
App.Config.set( 'profile', Index, 'Routes' )
|
||||
App.Config.set( 'Profile', { prio: 1700, parent: '#current_user', name: 'Profile', target: '#profile', role: [ 'Agent', 'Customer' ] }, 'NavBarRight' )
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
$ = jQuery.sub()
|
||||
|
||||
class Index extends App.Controller
|
||||
className: 'container'
|
||||
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
$ = jQuery.sub()
|
||||
|
||||
class Index extends App.ControllerLevel2
|
||||
toggleable: false
|
||||
# toggleable: true
|
||||
|
|
|
@ -1,14 +1,12 @@
|
|||
<div class="page-header">
|
||||
<h1><%- @T( 'Profile' ) %><small></small></h1>
|
||||
</div>
|
||||
<!--
|
||||
<ul>
|
||||
<li><%- @T( 'Password' ) %></li>
|
||||
<li><%- @T( 'Link Accounts' ) %></li>
|
||||
<li><%- @T( 'Notifications' ) %></li>
|
||||
<li></li>
|
||||
</ul>
|
||||
-->
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="span12">
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
<form class="">
|
||||
<h2><%- @T( 'Password' ) %></h2>
|
||||
<p><%- @T( 'Change your password.' ) %></p>
|
||||
<div class="password_item"></div>
|
||||
<button type="submit" class="btn"><%- @T( 'Submit' ) %></button>
|
||||
</form>
|
||||
<hr/>
|
|
@ -375,4 +375,47 @@ curl http://localhost/api/users/password_reset_verify.json -v -u #{login}:#{pass
|
|||
end
|
||||
end
|
||||
|
||||
=begin
|
||||
|
||||
Resource:
|
||||
POST /api/users/password_change
|
||||
|
||||
Payload:
|
||||
{
|
||||
"password_old": "some_password_old",
|
||||
"password_new" "some_password_new"
|
||||
}
|
||||
|
||||
Response:
|
||||
{
|
||||
:message => 'ok'
|
||||
}
|
||||
|
||||
Test:
|
||||
curl http://localhost/api/users/password_change.json -v -u #{login}:#{password} -H "Content-Type: application/json" -X POST -d '{"password_old": "password_old", "password_new" "password_new"}'
|
||||
|
||||
=end
|
||||
|
||||
def password_change
|
||||
|
||||
# check old password
|
||||
if !params[:password_old]
|
||||
render :json => { :message => 'Old password needed!' }, :status => :unprocessable_entity
|
||||
return
|
||||
end
|
||||
user = User.authenticate( current_user.login, params[:password_old] )
|
||||
if !user
|
||||
render :json => { :message => 'Old password is wrong!' }, :status => :unprocessable_entity
|
||||
return
|
||||
end
|
||||
|
||||
# set new password
|
||||
if !params[:password_new]
|
||||
render :json => { :message => 'New password needed!' }, :status => :unprocessable_entity
|
||||
return
|
||||
end
|
||||
user.update_attributes( :password => params[:password_new] )
|
||||
render :json => { :message => 'ok', :user_login => user.login }, :status => :ok
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -5,6 +5,7 @@ module ExtraRoutes
|
|||
map.match '/api/users/search', :to => 'users#search', :via => [:get, :post]
|
||||
map.match '/api/users/password_reset', :to => 'users#password_reset_send', :via => :post
|
||||
map.match '/api/users/password_reset_verify', :to => 'users#password_reset_verify', :via => :post
|
||||
map.match '/api/users/password_change', :to => 'users#password_change', :via => :post
|
||||
map.match '/api/users', :to => 'users#index', :via => :get
|
||||
map.match '/api/users/:id', :to => 'users#show', :via => :get
|
||||
map.match '/api/users', :to => 'users#create', :via => :post
|
||||
|
|
20
db/seeds.rb
20
db/seeds.rb
|
@ -512,7 +512,7 @@ Setting.create_if_not_exists(
|
|||
:title => 'Maximal failed logins',
|
||||
:name => 'password_max_login_failed',
|
||||
:area => 'Security::Password',
|
||||
:description => 'Maximal faild logins after account is inactive.',
|
||||
:description => 'Maximal failed logins after account is inactive.',
|
||||
:options => {
|
||||
:form => [
|
||||
{
|
||||
|
@ -529,12 +529,19 @@ Setting.create_if_not_exists(
|
|||
9 => 9,
|
||||
10 => 10,
|
||||
11 => 11,
|
||||
12 => 12,
|
||||
13 => 13,
|
||||
14 => 14,
|
||||
15 => 15,
|
||||
16 => 16,
|
||||
17 => 17,
|
||||
18 => 18,
|
||||
19 => 19,
|
||||
20 => 20,
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
:state => 6,
|
||||
:state => 10,
|
||||
:frontend => true
|
||||
)
|
||||
|
||||
|
@ -1738,6 +1745,13 @@ Translation.create_if_not_exists( :locale => 'de', :source => "Week", :target =>
|
|||
Translation.create_if_not_exists( :locale => 'de', :source => "Follow up possible", :target => "Nachfrage möglich", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "Assign Follow Ups", :target => "Zuweisung bei Nachfrage", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "Signature", :target => "Signatur", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "Change your password.", :target => "Ändern sie Ihr Passwort.", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "Current Password", :target => "Aktuelles Passwort", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "New Password", :target => "Neues Passwort", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "New Password (confirm)", :target => "Neues Passwort (bestätigen)", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "Language", :target => "Sprache", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "", :target => "", :updated_by_id => 1, :created_by_id => 1 )
|
||||
Translation.create_if_not_exists( :locale => 'de', :source => "", :target => "", :updated_by_id => 1, :created_by_id => 1 )
|
||||
|
||||
|
||||
#Translation.create_if_not_exists( :locale => 'de', :source => "", :target => "", :updated_by_id => 1, :created_by_id => 1 )
|
||||
|
|
Loading…
Reference in a new issue