Skip to content

Commit 89ba0d0

Browse files
Symfony validation added and custom validations removed from UserController.php. Language files added for validation error messages.
1 parent 787b56e commit 89ba0d0

File tree

6 files changed

+109
-114
lines changed

6 files changed

+109
-114
lines changed

src/ApiBundle/Controller/Admin/UserController.php

Lines changed: 0 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,6 @@ public function newAction(Request $request)
5757

5858
if ($form->isSubmitted() && $form->isValid()) {
5959
try {
60-
$this->validateUsername($form, $locale, new User());
61-
$this->validatePassword($form, $locale);
62-
$this->validateEmail($form, $locale, new User());
63-
$this->validateFirstname($form, $locale);
64-
$this->validateDob($form, $locale);
65-
$this->validateRoles($form, $locale);
66-
67-
// Everything ok, now proceed to create the user
6860
$userManager = $this->container->get('fos_user.user_manager');
6961
$user = $userManager->createUser();
7062

@@ -84,7 +76,6 @@ public function newAction(Request $request)
8476
$this->addFlash('success', $flashMsg);
8577

8678
} catch(HttpException $e) {
87-
// Error messages for this section will come from above validate methods
8879
return $this->redirectToRoute('admin_user_new');
8980

9081
// Always catch exact exception for which flash message or logger is needed,
@@ -138,13 +129,6 @@ public function editAction(User $user, Request $request)
138129

139130
if ($editForm->isSubmitted() && $editForm->isValid()) {
140131
try {
141-
$this->validateUsername($editForm, $locale, $user);
142-
$this->validatePassword($editForm, $locale);
143-
$this->validateEmail($editForm, $locale, $user);
144-
$this->validateFirstname($editForm, $locale);
145-
$this->validateDob($editForm, $locale);
146-
$this->validateRoles($editForm, $locale);
147-
148132
$user->setFirstname($editForm['firstname']->getData());
149133
$user->setLastname($editForm['lastname']->getData());
150134
$user->setDob($editForm['dob']->getData());
@@ -163,7 +147,6 @@ public function editAction(User $user, Request $request)
163147
// Always catch exact exception for which flash message or logger is needed,
164148
// otherwise catch block will not get executed on higher or lower ranked exceptions.
165149
} catch(HttpException $e) {
166-
// Error messages for this section will come from above validate methods
167150
return $this->redirectToRoute('admin_user_edit', ['id' => $user->getId()]);
168151
} catch(\Doctrine\DBAL\Exception\UniqueConstraintViolationException $e) {
169152
$flashMsg = $this->get('translator')->trans('flash.user_already_exists');
@@ -182,100 +165,6 @@ public function editAction(User $user, Request $request)
182165
]);
183166
}
184167

185-
/**
186-
* Validate username
187-
*/
188-
private function validateUsername(\Symfony\Component\Form\Form $form, $locale, User $user) {
189-
$username = $form['username']->getData();
190-
191-
// Check if username is empty
192-
if (null == $username) {
193-
$this->logMessageAndFlash(400, 'danger', 'Empty username', $this->get('translator')->trans('api.show_error_username_missing', array(), 'messages', $locale), $locale);
194-
}
195-
196-
// If the username belongs to same user, no need to further check
197-
if (!($user->getUsername() == $username)) {
198-
// Do a check for existing user with userManager->findByUsername
199-
/** @var $user UserInterface */
200-
$user = $this->container->get('fos_user.user_manager')->findUserByUsernameOrEmail($username);
201-
if (null != $user) {
202-
$this->logMessageAndFlash(400, 'danger', 'User already exists. Username: '.$user->getUsername(), $this->get('translator')->trans('api.show_error_username_taken', array(), 'messages', $locale), $locale);
203-
}
204-
}
205-
}
206-
207-
/**
208-
* Validate password
209-
*/
210-
private function validatePassword(\Symfony\Component\Form\Form $form, $locale) {
211-
$password = $form['password']->getData();
212-
213-
// Check if password is empty
214-
if (null == $password) {
215-
$this->logMessageAndFlash(400, 'danger', 'Invalid empty password', $this->get('translator')->trans('api.show_error_password', array(), 'messages', $locale), $locale);
216-
}
217-
}
218-
219-
/**
220-
* Validate email
221-
*/
222-
private function validateEmail(\Symfony\Component\Form\Form $form, $locale, User $user) {
223-
$email = $form['email']->getData();
224-
225-
// Check if email is valid
226-
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
227-
$this->logMessageAndFlash(400, 'danger', 'Invalid email: '.$email, $this->get('translator')->trans('api.show_error_email', array(), 'messages', $locale), $locale);
228-
}
229-
230-
// If the email belongs to same user, no need to further check
231-
if (!($user->getEmail() == $email )) {
232-
$user = $this->container->get('fos_user.user_manager')->findUserByUsernameOrEmail($email);
233-
if (null != $user) {
234-
$this->logMessageAndFlash(400, 'danger', 'Email '.$user->getEmail().' already taken by Username: '.$user->getUsername(), $this->get('translator')->trans('api.show_error_email_taken', array(), 'messages', $locale), $locale);
235-
}
236-
}
237-
}
238-
239-
/**
240-
* Validate firstname
241-
*/
242-
private function validateFirstname(\Symfony\Component\Form\Form $form, $locale) {
243-
$firstname = $form['firstname']->getData();
244-
245-
// Check if firstname is empty. At least firstname is required.
246-
if (null == $firstname) {
247-
$this->logMessageAndFlash(400, 'danger', 'Invalid empty firstname', $this->get('translator')->trans('api.show_error_firstname', array(), 'messages', $locale), $locale);
248-
}
249-
250-
}
251-
252-
/**
253-
* Validate dob
254-
*/
255-
private function validateDob(\Symfony\Component\Form\Form $form, $locale) {
256-
$dob = $form['dob']->getData();
257-
258-
// Check if dob is valid
259-
list($mm,$dd,$yyyy) = explode('/', $dob->format('m/d/Y') );
260-
if (!checkdate($mm,$dd,$yyyy)) {
261-
$this->logMessageAndFlash(400, 'danger', 'Invalid mm/dd/yyyy DOB: '.$dob, $this->get('translator')->trans('api.show_error_dob', array(), 'messages', $locale), $locale);
262-
}
263-
}
264-
265-
/**
266-
* Validate roles
267-
*/
268-
private function validateRoles(\Symfony\Component\Form\Form $form, $locale) {
269-
$roles = $form['roles']->getData();
270-
$permittedRoles = ['ROLE_API', "ROLE_USER"];
271-
272-
foreach ($roles as $role) {
273-
// Check if role is valid
274-
if (!in_array($role, $permittedRoles) )
275-
$this->logMessageAndFlash(400, 'warning', 'Invalid role: '.$role, $this->get('translator')->trans('api.show_error_role'.' '.$role, array(), 'messages', $locale), $locale);
276-
}
277-
}
278-
279168
/**
280169
* Deletes a User entity.
281170
*

src/ApiBundle/Entity/User.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,12 @@
55

66
use FOS\UserBundle\Entity\User as BaseUser;
77
use Doctrine\ORM\Mapping as ORM;
8-
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
98

109
/**
1110
* User
1211
*
1312
* @ORM\Table("users")
1413
* @ORM\Entity
15-
* @UniqueEntity("username")
16-
* @UniqueEntity("email")
1714
*/
1815
class User extends BaseUser
1916
{
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# src/ApiBundle/Resources/config/validation.yml
2+
ApiBundle\Entity\User:
3+
constraints:
4+
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
5+
fields: username
6+
message: "user.show_error_username_taken"
7+
- Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity:
8+
fields: email
9+
message: "user.show_error_email_taken"
10+
properties:
11+
firstname:
12+
- NotBlank:
13+
message: "user.show_error_firstname"
14+
username:
15+
- Regex:
16+
pattern: '/^[a-z0-9_-]{3,16}$/'
17+
match: true
18+
message: "user.show_error_username_policy"
19+
password:
20+
- Regex:
21+
pattern: '/^([a-zA-Z0-9@*#]{8,15})$/'
22+
match: true
23+
message: "user.show_error_password_policy"
24+
email:
25+
- Email:
26+
message: "user.show_error_email"
27+
checkMX: false
28+
dob:
29+
- Date:
30+
message: "user.show_error_dob"
31+
roles:
32+
- Type:
33+
type: array
34+
message: The value {{ value }} is not a valid {{ type }}.
35+
- Choice:
36+
choices: ['ROLE_USER', 'ROLE_API']
37+
message: "user.show_error_role"
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
client:
2+
show_error_client_name: Sorry, Client Name cannot be empty!
3+
show_error_url: Sorry, Redirect URL cannot be empty!
4+
show_error_non_admin: Sorry, you are not an Admin!
5+
user:
6+
show_error_password: Sorry, Wrong/Missing Password!
7+
show_error_username_missing: Sorry, Wrong/Missing Username!
8+
show_error_credentials: Sorry, Invalid Client Credentials!
9+
show_error_username_empty: Sorry, Empty Username!
10+
show_error_username_taken: Sorry, Username already taken!
11+
show_error_email: Sorry, Wrong/Missing Email!
12+
show_error_email_taken: Sorry, Email already taken!
13+
show_error_dob: Sorry, Invalid date of birth!
14+
show_error_scope: Sorry, Invalid scope!
15+
show_error_firstname: Sorry, Firstname cannot be empty!
16+
show_error_password_change: Sorry, You are not allowed to change password!
17+
show_error_password_old: Sorry, Invalid old password!
18+
show_error_perm_show: Sorry, You are not permitted to view user profile!
19+
show_error_perm_edit: Sorry, You are not permitted to edit user profile!
20+
show_error_password_reset: Sorry, You are not permitted to request for password reset!
21+
show_error_reset_req: Password reset request already received
22+
show_error_username_policy: Username should be 3-16 characters long with any lowercase letter (a-z), number (0-9), an underscore, or a hyphen
23+
show_error_password_policy: Password should be 8-15 characters long and must contain alphanumeric and @*# characters
24+
show_error_role: Sorry! Not a valid Role!
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
client:
2+
show_error_client_name: Désolé, le nom du client ne peut pas être vide!
3+
show_error_url: Désolé, l'URL de redirection ne peut pas être vide!
4+
show_error_non_admin: Désolé, vous n'êtes pas Admin!
5+
user:
6+
show_error_password: Désolé, mot de passe erroné / manquant!
7+
show_error_username_missing: Désolé, Nom d'utilisateur erroné / manquant!
8+
show_error_credentials: Désolé, Invalid Client Credentials!
9+
show_error_username_empty: Désolé, Nom d'utilisateur vide!
10+
show_error_username_taken: Désolé, Nom d'utilisateur déjà pris!
11+
show_error_email: Désolé, E-mail erroné / manquant!
12+
show_error_email_taken: Désolé, Courriel déjà pris!
13+
show_error_dob: Désolé, date de naissance non valide!
14+
show_error_scope: Désolé, champ non valide!
15+
show_error_firstname: Désolé, le prénom ne peut pas être vide!
16+
show_error_password_change: Désolé, Vous n'êtes pas autorisé à changer de mot de passe!
17+
show_error_password_old: Désolé, ancien mot de passe invalide!
18+
show_error_perm_show: Désolé, Vous n'êtes pas autorisé à voir le profil!
19+
show_error_perm_edit: Désolé, Vous n'êtes pas autorisé à modifier le profil de l'utilisateur!
20+
show_error_password_reset: Désolé, vous n'êtes pas autorisé à demander une réinitialisation du mot de passe!
21+
show_error_reset_req: Réinitialisation du mot de passe déjà reçue
22+
show_error_server_fault: Erreur du serveur! Veuillez réessayer après un certain temps !!
23+
show_error_username_policy: Le nom d'utilisateur doit comporter entre 3 et 16 caractères avec une lettre minuscule (a-z), un chiffre (0-9), un trait de soulignement ou un tiret
24+
show_error_password_policy: Le mot de passe doit comporter entre 8 et 15 caractères et contenir des caractères alphanumériques et @*#
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
client:
2+
show_error_client_name: क्षमा करें, क्लाइंट का नाम रिक्त नहीं हो सकता!
3+
show_error_url: क्षमा करें, पुनर्निर्देशन यूआरएल खाली नहीं हो सकता!
4+
show_error_non_admin: क्षमा करें, आप एक व्यवस्थापक नहीं हैं!
5+
user:
6+
show_error_password: माफ करना, गलत / लापता पासवर्ड!
7+
show_error_username_missing: माफ करना, गलत / लापता यूजर का नाम!
8+
show_error_credentials: क्षमा करें, हमारे ग्राहकों का अवैध साख!
9+
show_error_username_empty: क्षमा करें, खाली यूजर का नाम!
10+
show_error_username_taken: क्षमा करें, प्रयोक्ता नाम पहले ही ले लिया!
11+
show_error_email: माफ करना, गलत / लापता ईमेल
12+
show_error_email_taken: क्षमा करें, ईमेल पहले ही ले लिया!
13+
show_error_dob: क्षमा करें, जन्म की तारीख गलत!
14+
show_error_scope: क्षमा करें, अमान्य दायरा!
15+
show_error_firstname: क्षमा करें, प्रथम खाली नहीं हो सकता!
16+
show_error_password_change: क्षमा करें, आप पासवर्ड बदलने की अनुमति नहीं कर रहे हैं!
17+
show_error_password_old: क्षमा करें, अमान्य पुराने पासवर्ड के लिए!
18+
show_error_perm_show: क्षमा करें, आप उपयोगकर्ता प्रोफ़ाइल देखने के लिए अनुमति नहीं है!
19+
show_error_perm_edit: क्षमा करें, आप उपयोगकर्ता के प्रोफ़ाइल को संपादित करने की अनुमति नहीं है!
20+
show_error_password_reset: क्षमा करें, आप पासवर्ड रीसेट के लिए अनुरोध करने के लिए अनुमति नहीं है!
21+
show_error_reset_req: पासवर्ड रीसेट अनुरोध पहले से ही प्राप्त
22+
show_error_server_fault: सर्वर त्रुटि! कुछ समय के बाद फिर से कोशिश करें !!
23+
show_error_username_policy: यूजर का नाम किसी भी छोटा अक्षर (a-z), संख्या (0-9), एक अंडरस्कोर, या एक हाइफन के साथ 3-16 अक्षर का होना चाहिए
24+
show_error_password_policy: पासवर्ड 8-15 अक्षर का होना चाहिए और अल्फान्यूमेरिक और शामिल होना चाहिए @#* अक्षर

0 commit comments

Comments
 (0)