From 5135fd7f53f0b8092180022e5a7aacf11d841d6c Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sat, 21 Nov 2015 15:04:41 +0100 Subject: [PATCH] User registration --- app/config/routing.yml | 4 ++ app/locales/en.yml | 11 ++++ app/locales/fr.yml | 12 ++++ src/Gist/Command/UserCreateCommand.php | 5 +- src/Gist/Controller/LoginController.php | 56 +++++++++++++++++++ src/Gist/Form/AbstractForm.php | 2 +- src/Gist/Form/UserRegisterForm.php | 52 +++++++++++++++++ .../Resources/views/Login/register.html.twig | 56 +++++++++++++++++++ src/Gist/Service/UserProvider.php | 13 ++--- 9 files changed, 202 insertions(+), 9 deletions(-) create mode 100644 src/Gist/Controller/LoginController.php create mode 100644 src/Gist/Form/UserRegisterForm.php create mode 100644 src/Gist/Resources/views/Login/register.html.twig diff --git a/app/config/routing.yml b/app/config/routing.yml index 285e296..eff74d4 100644 --- a/app/config/routing.yml +++ b/app/config/routing.yml @@ -26,6 +26,10 @@ download: path: /download/{gist}/{commit} defaults: {_controller: Gist\Controller\ViewController::downloadAction, _locale: en, commit: 0} +login_register: + path: /login + defaults: {_controller: Gist\Controller\LoginController::registerAction, _locale: en} + revisions: path: /revs/{gist} defaults: {_controller: Gist\Controller\ViewController::revisionsAction, _locale: en} diff --git a/app/locales/en.yml b/app/locales/en.yml index b3595c7..f9ffa13 100644 --- a/app/locales/en.yml +++ b/app/locales/en.yml @@ -27,6 +27,17 @@ date: footer: text: '

Powered by GIST, it''s open source :) - API

' +login: + register: + title: 'New account' + already_exists: 'This username is already registred!' + registred: 'Congratulations, your account is created!' + form: + username: + placeholder: 'Username' + password: + placeholder: 'Password' + form: error: not_blank: 'This value should not be blank bro!' diff --git a/app/locales/fr.yml b/app/locales/fr.yml index 4d5d3c2..aa6c8b7 100644 --- a/app/locales/fr.yml +++ b/app/locales/fr.yml @@ -27,6 +27,18 @@ date: footer: text: '

Propulsé par GIST, c''est libre :) - API

' +login: + register: + title: 'Nouveau compte' + already_exists: 'Ce nom d''utilisateur est déjà enregistré' + registred: 'Félicitation, votre compte a bien été créé !' + form: + username: + placeholder: 'Nom d''utilisateur' + password: + placeholder: 'Mot de passe' + + form: error: not_blank: 'Vous devez saisir cette donnée.' diff --git a/src/Gist/Command/UserCreateCommand.php b/src/Gist/Command/UserCreateCommand.php index a3dc742..28e6a73 100644 --- a/src/Gist/Command/UserCreateCommand.php +++ b/src/Gist/Command/UserCreateCommand.php @@ -40,6 +40,9 @@ class UserCreateCommand extends Command $password = $helper->ask($input, $output, $question); } - $userProvider->registerUser($username, $password); + $user = $userProvider->createUser(); + $user->setUsername($username); + + $userProvider->registerUser($user, $password); } } diff --git a/src/Gist/Controller/LoginController.php b/src/Gist/Controller/LoginController.php new file mode 100644 index 0000000..33e2cac --- /dev/null +++ b/src/Gist/Controller/LoginController.php @@ -0,0 +1,56 @@ + + */ +class LoginController extends Controller +{ + public function registerAction(Request $request, Application $app) + { + $user = $app['user.provider']->createUser(); + + $form = new UserRegisterForm( + $app['form.factory'], + $app['translator'], + $user + ); + + $form = $form->build()->getForm(); + + if ($request->isMethod('post')) { + $form->submit($request); + + if ($form->isValid()) { + if ($app['user.provider']->userExists($user->getUsername())) { + $error = $app['translator']->trans('login.register.already_exists'); + } else { + $app['user.provider']->registerUser( + $user, + $user->getPassword() + ); + + $success = $app['translator']->trans('login.register.registred'); + } + } + } + + return $app['twig']->render( + 'Login/register.html.twig', + [ + 'form' => $form->createView(), + 'error' => isset($error) ? $error : '', + 'success' => isset($success) ? $success : '', + ] + ); + } +} + diff --git a/src/Gist/Form/AbstractForm.php b/src/Gist/Form/AbstractForm.php index b437487..05d5c78 100644 --- a/src/Gist/Form/AbstractForm.php +++ b/src/Gist/Form/AbstractForm.php @@ -15,7 +15,7 @@ abstract class AbstractForm protected $translator; - public function __construct(FormFactory $formFactory, Translator $translator, array $data = array(), $formFactoryOptions = array()) + public function __construct(FormFactory $formFactory, Translator $translator, $data = null, $formFactoryOptions = array()) { $this->translator = $translator; diff --git a/src/Gist/Form/UserRegisterForm.php b/src/Gist/Form/UserRegisterForm.php new file mode 100644 index 0000000..e2807a4 --- /dev/null +++ b/src/Gist/Form/UserRegisterForm.php @@ -0,0 +1,52 @@ + + */ +class UserRegisterForm extends AbstractForm +{ + public function build(array $options = array()) + { + $this->builder->add( + 'username', + 'text', + array( + 'required' => true, + 'attr' => array( + 'class' => 'form-control', + 'placeholder' => $this->translator->trans('login.register.form.username.placeholder'), + ), + 'constraints' => array( + new NotBlank(array( + 'message' => $this->translator->trans('form.error.not_blank'), + )), + ), + ) + ); + + $this->builder->add( + 'password', + 'password', + array( + 'required' => true, + 'attr' => array( + 'class' => 'form-control', + 'placeholder' => $this->translator->trans('login.register.form.password.placeholder'), + ), + 'trim' => false, + 'constraints' => array( + new NotBlank(array( + 'message' => $this->translator->trans('form.error.not_blank'), + )), + ), + ) + ); + + return $this->builder; + } +} diff --git a/src/Gist/Resources/views/Login/register.html.twig b/src/Gist/Resources/views/Login/register.html.twig new file mode 100644 index 0000000..66d5204 --- /dev/null +++ b/src/Gist/Resources/views/Login/register.html.twig @@ -0,0 +1,56 @@ +{% extends 'base.html.twig' %} + +{% block title %} + {{ 'login.register.title'|trans }} +{% endblock %} + +{% block langs %} + +{% endblock %} + +{% block body %} +
+ {% if error %} +
+
+ {{ error }} +
+
+ {% endif %} + + {% if success %} +
+
+ {{ success }} +
+
+ {% endif %} + +
+
+
+
+ {{ 'login.register.title'|trans }} +
+
+

+ {{ form_errors(form.username) }} + {{ form_widget(form.username) }} +

+ +

+ {{ form_errors(form.password) }} + {{ form_widget(form.password) }} +

+ +

+ +

+ + {{ form_rest(form) }} +
+
+
+
+
+{% endblock %} diff --git a/src/Gist/Service/UserProvider.php b/src/Gist/Service/UserProvider.php index 60fc181..2cca08c 100644 --- a/src/Gist/Service/UserProvider.php +++ b/src/Gist/Service/UserProvider.php @@ -58,18 +58,17 @@ class UserProvider implements UserProviderInterface ->count() > 0; } - public function registerUser($username, $password) + public function createUser() { - $user = new User(); + return new User(); + } - $salt = $this->saltGenerator->generate(64); + public function registerUser(User $user, $password) + { + $user->setSalt($this->saltGenerator->generate(64)); $user - ->setUsername($username) ->setRoles('ROLE_USER') - ->setSalt($salt); - - $user ->setPassword($this->encoder->encodePassword($user, $password)) ->save();