Skip to content

Commit fe6ec12

Browse files
authored
Merge pull request nerdapplabs#9 from aksinha-nerdapplabs/username_password_regex_added
Username and Password regex added
2 parents 79304c8 + 5f95d5e commit fe6ec12

File tree

12 files changed

+221
-362
lines changed

12 files changed

+221
-362
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ This is an example project, ready to use. This project is using below Symfony Bu
4747

4848
cd /path/to/auth
4949
php app/console doctrine:database:create
50-
php app/console doctrine:scheme:create
50+
php app/console doctrine:schema:create
5151

5252
**Step 3 - Create assets**
5353

@@ -62,7 +62,7 @@ This is an example project, ready to use. This project is using below Symfony Bu
6262

6363
Make this user admin
6464

65-
php app/console fos:user:create admin ROLE_ADMIN
65+
php app/console fos:user:promote admin ROLE_ADMIN
6666

6767
Now you are ready to use the Package!
6868

src/ApiBundle/Controller/Admin/UserController.php

Lines changed: 30 additions & 174 deletions
Original file line numberDiff line numberDiff line change
@@ -56,48 +56,17 @@ public function newAction(Request $request)
5656
$form->handleRequest($request);
5757

5858
if ($form->isSubmitted() && $form->isValid()) {
59-
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
68-
$userManager = $this->container->get('fos_user.user_manager');
69-
$user = $userManager->createUser();
70-
71-
$user->setFirstname($form['firstname']->getData());
72-
$user->setLastname($form['lastname']->getData());
73-
$user->setDob($form['dob']->getData());
74-
$user->setEmail($form['email']->getData());
75-
$user->setUsername($form['username']->getData());
76-
$user->setPlainPassword($form['password']->getData());
77-
$user->setRoles($form['roles']->getData());
78-
$user->setConfirmationToken(null);
79-
$user->setEnabled(true);
80-
$user->setLastLogin(new \DateTime());
81-
82-
$userManager->updateUser($user);
83-
$flashMsg = $this->get('translator')->trans('flash.user_created_successfully');
84-
$this->addFlash('success', $flashMsg);
85-
86-
} catch(HttpException $e) {
87-
// Error messages for this section will come from above validate methods
88-
return $this->redirectToRoute('admin_user_new');
89-
90-
// Always catch exact exception for which flash message or logger is needed,
91-
// otherwise catch block will not get executed on higher or lower ranked exceptions.
92-
} catch(\Doctrine\DBAL\Exception\UniqueConstraintViolationException $e) {
93-
$flashMsg = $this->get('translator')->trans('flash.user_already_exists');
94-
$this->logMessage(400, 'danger', $e->getMessage());
95-
$this->addFlash('danger', $flashMsg);
96-
return $this->redirectToRoute('admin_user_new');
97-
}
59+
$userManager = $this->container->get('fos_user.user_manager');
60+
$user = $userManager->createUser();
61+
62+
$this->setUserData($user, $form);
63+
64+
$userManager->updateUser($user);
65+
66+
$this->logMessageAndFlash(200, 'success', 'User successfully created: ', $this->get('translator')->trans('flash.user_creatd_successfully'), $request->getLocale() );
9867

9968
return $this->redirectToRoute('admin_user_index');
100-
} // if form is valid
69+
}
10170

10271
return $this->render('@ApiBundle/Resources/views/admin/user/new.html.twig', [
10372
'form' => $form->createView(),
@@ -128,49 +97,19 @@ public function showAction(User $user)
12897
*/
12998
public function editAction(User $user, Request $request)
13099
{
131-
$entityManager = $this->getDoctrine()->getManager();
132-
133100
$editForm = $this->createForm(UserType::class, $user);
134101
$deleteForm = $this->createDeleteForm($user);
135102
$locale = $request->getLocale();
136103

137104
$editForm->handleRequest($request);
138105

139106
if ($editForm->isSubmitted() && $editForm->isValid()) {
140-
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-
148-
$user->setFirstname($editForm['firstname']->getData());
149-
$user->setLastname($editForm['lastname']->getData());
150-
$user->setDob($editForm['dob']->getData());
151-
$user->setEmail($editForm['email']->getData());
152-
$user->setUsername($editForm['username']->getData());
153-
$user->setPlainPassword($editForm['password']->getData());
154-
$user->setRoles($editForm['roles']->getData());
155-
$user->setConfirmationToken(null);
156-
$user->setEnabled(true);
157-
$user->setLastLogin(new \DateTime());
158-
159-
$entityManager->flush();
160-
$flashMsg = $this->get('translator')->trans('flash.user_updated_successfully');
161-
$this->addFlash('success', $flashMsg);
162-
163-
// Always catch exact exception for which flash message or logger is needed,
164-
// otherwise catch block will not get executed on higher or lower ranked exceptions.
165-
} catch(HttpException $e) {
166-
// Error messages for this section will come from above validate methods
167-
return $this->redirectToRoute('admin_user_edit', ['id' => $user->getId()]);
168-
} catch(\Doctrine\DBAL\Exception\UniqueConstraintViolationException $e) {
169-
$flashMsg = $this->get('translator')->trans('flash.user_already_exists');
170-
$this->logMessage(400, 'danger', $e->getMessage());
171-
$this->addFlash('danger', $flashMsg);
172-
return $this->redirectToRoute('admin_user_edit', ['id' => $user->getId()]);
173-
}
107+
$this->setUserData($user, $editForm);
108+
109+
$entityManager = $this->getDoctrine()->getManager();
110+
$entityManager->flush();
111+
112+
$this->logMessageAndFlash(200, 'success', 'User successfully updated: ', $this->get('translator')->trans('flash.user_updated_successfully'), $request->getLocale() );
174113

175114
return $this->redirectToRoute('admin_user_index');
176115
}
@@ -182,100 +121,6 @@ public function editAction(User $user, Request $request)
182121
]);
183122
}
184123

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-
279124
/**
280125
* Deletes a User entity.
281126
*
@@ -290,9 +135,7 @@ public function deleteAction(Request $request, User $user)
290135

291136
$entityManager->flush();
292137

293-
$flashMsg = $this->get('translator')->trans('flash.user_deleted_successfully');
294-
$this->logMessage(200, 'success', 'User successfully deleted: ');
295-
$this->addFlash('success', $flashMsg);
138+
$this->logMessageAndFlash(200, 'success', 'User successfully deleted: ', $this->get('translator')->trans('flash.user_deleted_successfully'), $request->getLocale() );
296139

297140
return $this->redirectToRoute('admin_user_index');
298141
}
@@ -313,11 +156,24 @@ private function createDeleteForm(User $user)
313156
;
314157
}
315158

159+
private function setUserData(User $user, \Symfony\Component\Form\Form $form)
160+
{
161+
$user->setFirstname($form['firstname']->getData());
162+
$user->setLastname($form['lastname']->getData());
163+
$user->setDob($form['dob']->getData());
164+
$user->setEmail($form['email']->getData());
165+
$user->setUsername($form['username']->getData());
166+
$user->setPlainPassword($form['password']->getData());
167+
$user->setRoles($form['roles']->getData());
168+
$user->setConfirmationToken(null);
169+
$user->setEnabled(true);
170+
$user->setLastLogin(new \DateTime());
171+
}
172+
316173
private function logMessageAndFlash($code = 200, $type = 'success', $logMsg = '', $flashMsg = '', $locale = 'en')
317174
{
318175
$this->logMessage($code, $type, $logMsg);
319176
$this->addFlash($type, $flashMsg);
320-
throw new HttpException($code, $logMsg);
321177
}
322178

323179
private function logMessage($code = 200, $type='success', $logMsg = '') {

0 commit comments

Comments
 (0)