Fix AccountForm validation & Add repeated form

This commit is contained in:
Nicolas Le Goff
2013-06-12 13:43:34 +02:00
parent a1dd8e7e1d
commit 325d54006a
6 changed files with 71 additions and 37 deletions

View File

@@ -93,18 +93,13 @@ class Account implements ControllerProviderInterface
$data = $form->getData(); $data = $form->getData();
$password = $data['password']; $password = $data['password'];
$passwordConfirm = $data['passwordConfirm'];
$user = $app['authentication']->getUser(); $user = $app['authentication']->getUser();
if ($password !== $passwordConfirm) { if (trim($password) != str_replace(array("\r\n", "\n", "\r", "\t", " "), "_", $password)) {
$app->addFlash('error', _('forms::les mots de passe ne correspondent pas'));
} elseif (strlen(trim($password)) < 5) {
$app->addFlash('error', _('forms::la valeur donnee est trop courte'));
} elseif (trim($password) != str_replace(array("\r\n", "\n", "\r", "\t", " "), "_", $password)) {
$app->addFlash('error', _('forms::la valeur donnee contient des caracteres invalides')); $app->addFlash('error', _('forms::la valeur donnee contient des caracteres invalides'));
} elseif ($app['auth.password-encoder']->isPasswordValid($user->get_password(), $data['oldPassword'], $user->get_nonce())) { } elseif ($app['auth.password-encoder']->isPasswordValid($user->get_password(), $data['oldPassword'], $user->get_nonce())) {
$user->set_password($passwordConfirm); $user->set_password($password);
$app->addFlash('success', _('login::notification: Mise a jour du mot de passe avec succes')); $app->addFlash('success', _('login::notification: Mise a jour du mot de passe avec succes'));
return $app->redirectPath('account'); return $app->redirectPath('account');

View File

@@ -20,13 +20,10 @@
<div class="span12"> <div class="span12">
{{ account_macro.flashes() }} {{ account_macro.flashes() }}
<form <form
ng-controller="passwordChangeFormCtrl"
novalidate novalidate
name="passwordChangeForm" name="passwordChangeForm"
ng-submit="submit();"
method="POST" method="POST"
action="{{ path('reset_password') }}" action="{{ path('reset_password') }}"
check-form-submission
> >
<div class="row-fluid"> <div class="row-fluid">
<div class="span12"> <div class="span12">
@@ -38,22 +35,9 @@
{{ auth_macro.fieldInput(form.oldPassword, "passwordChangeForm", 'icon-lock') }} {{ auth_macro.fieldInput(form.oldPassword, "passwordChangeForm", 'icon-lock') }}
</div> </div>
</div> </div>
<div class="row-fluid">
<div class="span12"> {{ auth_macro.repeatedInput(form.password, "passwordChangeForm", 'icon-lock') }}
{{ auth_macro.fieldInput(form.password, "passwordChangeForm", 'icon-lock') }}
</div>
</div>
<div class="row-fluid">
<div class="span12">
{{ auth_macro.fieldInput(form.passwordConfirm, "passwordChangeForm", 'icon-lock', {
"ui-validate" : " '$value==" ~ form.password.vars.name ~ "' ",
"ui-validate-watch" : "'" ~ form.password.vars.name ~ "'"
}, {
"validate_message" : "Passwords do not match"|trans
})
}}
</div>
</div>
{{ form_rest(form) }} {{ form_rest(form) }}
<div class="row-fluid"> <div class="row-fluid">
<div class="span12"> <div class="span12">
@@ -67,3 +51,8 @@
</div> </div>
</div> </div>
{% endblock %} {% endblock %}
{% block scripts %}
{{ parent() }}
<script type="text/javascript" src="/scripts/apps/login/home/renewPassword.js"></script>
{% endblock %}

View File

@@ -50,5 +50,5 @@
{% block scripts %} {% block scripts %}
{{ parent() }} {{ parent() }}
<script type="text/javascript" src="/scripts/apps/login/home/renewPassword.js"></script> <script type="text/javascript" src="/scripts/apps/login/home/recoverPassword.js"></script>
{% endblock %} {% endblock %}

View File

@@ -398,8 +398,10 @@ class AccountTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
self::$DI['app']['authentication']->getUser()->set_password($oldPassword); self::$DI['app']['authentication']->getUser()->set_password($oldPassword);
$crawler = self::$DI['client']->request('POST', '/account/reset-password/', array( $crawler = self::$DI['client']->request('POST', '/account/reset-password/', array(
'password' => array(
'password' => $password, 'password' => $password,
'passwordConfirm' => $passwordConfirm, 'confirm' => $passwordConfirm
),
'oldPassword' => $oldPassword, 'oldPassword' => $oldPassword,
'_token' => 'token', '_token' => 'token',
)); ));
@@ -407,14 +409,16 @@ class AccountTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
$response = self::$DI['client']->getResponse(); $response = self::$DI['client']->getResponse();
$this->assertFalse($response->isRedirect()); $this->assertFalse($response->isRedirect());
$this->assertFlashMessage($crawler, 'error', 1); $this->assertFormOrFlashError($crawler, 1);
} }
public function testPostRenewPasswordBadOldPassword() public function testPostRenewPasswordBadOldPassword()
{ {
$crawler = self::$DI['client']->request('POST', '/account/reset-password/', array( $crawler = self::$DI['client']->request('POST', '/account/reset-password/', array(
'password' => array(
'password' => 'password', 'password' => 'password',
'passwordConfirm' => 'password', 'confirm' => 'password'
),
'oldPassword' => 'oulala', 'oldPassword' => 'oulala',
'_token' => 'token', '_token' => 'token',
)); ));
@@ -431,8 +435,10 @@ class AccountTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
self::$DI['app']['authentication']->getUser()->set_password($password); self::$DI['app']['authentication']->getUser()->set_password($password);
$crawler = self::$DI['client']->request('POST', '/account/reset-password/', array( $crawler = self::$DI['client']->request('POST', '/account/reset-password/', array(
'password' => array(
'password' => 'password', 'password' => 'password',
'passwordConfirm' => 'password', 'confirm' => 'password'
),
'oldPassword' => $password, 'oldPassword' => $password,
)); ));
@@ -449,8 +455,10 @@ class AccountTest extends \PhraseanetWebTestCaseAuthenticatedAbstract
self::$DI['app']['authentication']->getUser()->set_password($password); self::$DI['app']['authentication']->getUser()->set_password($password);
self::$DI['client']->request('POST', '/account/reset-password/', array( self::$DI['client']->request('POST', '/account/reset-password/', array(
'password' => array(
'password' => 'password', 'password' => 'password',
'passwordConfirm' => 'password', 'confirm' => 'password'
),
'oldPassword' => $password, 'oldPassword' => $password,
'_token' => 'token', '_token' => 'token',
)); ));

View File

@@ -0,0 +1,42 @@
/*
* This file is part of Phraseanet
*
* (c) 2005-2013 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
require([
"jquery",
"i18n",
"apps/login/home/common",
"apps/login/home/views/form"
], function($, i18n, Common, RenewPassword) {
i18n.init({
resGetPath: Common.languagePath,
useLocalStorage: true
}, function() {
Common.initialize();
new RenewPassword({
el : $("form[name=passwordRenewForm]"),
rules: [{
name: "password[password]",
rules: "required",
message: i18n.t("validation_blank")
},{
name: "password[password]",
rules: "min_length[5]",
message: i18n.t("validation_length_min", {
postProcess: "sprintf",
sprintf: ["5"]
})
},{
name: "password[confirm]",
rules: "matches[password[password]]",
message: i18n.t("password_match")
}]
});
});
});

View File

@@ -20,7 +20,7 @@ require([
Common.initialize(); Common.initialize();
new RenewPassword({ new RenewPassword({
el : $("form[name=passwordRenewForm]"), el : $("form[name=passwordChangeForm]"),
rules: [{ rules: [{
name: "oldPassword", name: "oldPassword",
rules: "required", rules: "required",