-                                                       //Get context path
-                                                       $path = $router->getContext()->getPathInfo();
-
-                                                       //Retrieve route matching path
-                                                       $route = $router->match($path);
-
-                                                       //Get route name
-                                                       $name = $route['_route'];
-
-                                                       //Unset route name
-                                                       unset($route['_route']);
-
-                                                       //With current locale
-                                                       if ($locale == $currentLocale) {
-                                                               //Set locale locales context
-                                                               $this->config[$tag][$view]['context']['canonical'] = $router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL);
-                                                       } else {
-                                                               //Set locale locales context
-                                                               $this->config[$tag][$view]['context']['alternates'][] = [
-                                                                       'lang' => $locale,
-                                                                       'absolute' => $router->generate($name, ['_locale' => $locale]+$route, UrlGeneratorInterface::ABSOLUTE_URL),
-                                                                       'relative' => $router->generate($name, ['_locale' => $locale]+$route),
-                                                                       'title' => implode('/', $titles),
-                                                                       'translated' => $translator->trans($this->config['languages'][$locale], [], null, $locale)
-                                                               ];
-                                                       }
-                                               }
-                                       }
+               //Add error message mail already exists
+               $this->addFlash('notice', $this->translator->trans('Your account has been activated'));
+
+               //Redirect to user view
+               return $this->redirectToRoute($this->config['route']['edit']['name'], ['mail' => $smail, 'hash' => $this->slugger->hash($smail)]+$this->config['route']['edit']['context']);
+       }
+
+       /**
+        * Edit account by shorted mail
+        *
+        * @param Request $request The request
+        * @param string $hash The hashed password
+        * @param string $mail The shorted mail address
+        * @return Response The response
+        */
+       public function edit(Request $request, string $hash, string $mail): Response {
+               //With invalid hash
+               if ($hash != $this->slugger->hash($mail)) {
+                       //Throw bad request
+                       throw new BadRequestHttpException($this->translator->trans('Invalid %field% field: %value%', ['%field%' => 'hash', '%value%' => $hash]));
+               }
+
+               //Get mail
+               $mail = $this->slugger->unshort($smail = $mail);
+
+               //With existing subscriber
+               if (empty($user = $this->doctrine->getRepository($this->config['class']['user'])->findOneByMail($mail))) {
+                       //Throw not found
+                       //XXX: prevent slugger reverse engineering by not displaying decoded mail
+                       throw $this->createNotFoundException($this->translator->trans('Unable to find account %mail%', ['%mail%' => $smail]));
+               }
+
+               //Prevent access when not admin, user is not guest and not currently logged user
+               if (!$this->checker->isGranted($this->config['default']['admin']) && $user != $this->security->getUser() || !$this->checker->isGranted('IS_AUTHENTICATED_FULLY')) {
+                       //Throw access denied
+                       //XXX: prevent slugger reverse engineering by not displaying decoded mail
+                       throw $this->createAccessDeniedException($this->translator->trans('Unable to access user: %mail%', ['%mail%' => $smail]));
+               }
+               
+               //Create the EditType form and give the proper parameters
+               $edit = $this->createForm($this->config['edit']['view']['edit'], $user, [
+                       //Set action to edit route name and context
+                       'action' => $this->generateUrl($this->config['route']['edit']['name'], ['mail' => $smail, 'hash' => $this->slugger->hash($smail)]+$this->config['route']['edit']['context']),
+                       //Set civility class
+                       'civility_class' => $this->config['class']['civility'],
+                       //Set civility default
+                       'civility_default' => $this->doctrine->getRepository($this->config['class']['civility'])->findOneByTitle($this->config['default']['civility']),
+                       //Set method
+                       'method' => 'POST'
+               ]+($this->checker->isGranted($this->config['default']['admin'])?$this->config['edit']['admin']:$this->config['edit']['field']));
+
+               //With admin role
+               if ($this->checker->isGranted($this->config['default']['admin'])) {
+                       //Create the EditType form and give the proper parameters
+                       $reset = $this->createForm($this->config['edit']['view']['reset'], $user, [
+                               //Set action to edit route name and context
+                               'action' => $this->generateUrl($this->config['route']['edit']['name'], ['mail' => $smail, 'hash' => $this->slugger->hash($smail)]+$this->config['route']['edit']['context']),
+                               //Set method
+                               'method' => 'POST'
+                       ]);
+
+                       //With post method
+                       if ($request->isMethod('POST')) {
+                               //Refill the fields in case the form is not valid.
+                               $reset->handleRequest($request);
+
+                               //With reset submitted and valid
+                               if ($reset->isSubmitted() && $reset->isValid()) {
+                                       //Set data
+                                       $data = $reset->getData();
+
+                                       //Set password
+                                       $data->setPassword($this->hasher->hashPassword($data, $data->getPassword()));
+
+                                       //Queue snippet save
+                                       $this->manager->persist($data);
+
+                                       //Flush to get the ids
+                                       $this->manager->flush();
+
+                                       //Add notice
+                                       $this->addFlash('notice', $this->translator->trans('Account %mail% password updated', ['%mail%' => $mail = $data->getMail()]));
+
+                                       //Redirect to cleanup the form
+                                       return $this->redirectToRoute($this->config['route']['edit']['name'], ['mail' => $smail = $this->slugger->short($mail), 'hash' => $this->slugger->hash($smail)]+$this->config['route']['edit']['context']);