+ // user will be disabled BY DEFAULT to avoid spamming account to be enabled
+ $user->setEnabled(false);
+
+ $form = $this->createForm('Wallabag\UserBundle\Form\NewUserType', $user, [
+ 'csrf_protection' => false,
+ ]);
+
+ // simulate form submission
+ $form->submit([
+ 'username' => $request->request->get('username'),
+ 'plainPassword' => [
+ 'first' => $request->request->get('password'),
+ 'second' => $request->request->get('password'),
+ ],
+ 'email' => $request->request->get('email'),
+ ]);
+
+ if ($form->isSubmitted() && false === $form->isValid()) {
+ $view = $this->view($form, 400);
+ $view->setFormat('json');
+
+ // handle errors in a more beautiful way than the default view
+ $data = json_decode($this->handleView($view)->getContent(), true)['children'];
+ $errors = [];
+
+ if (isset($data['username']['errors'])) {
+ $errors['username'] = $this->translateErrors($data['username']['errors']);
+ }
+
+ if (isset($data['email']['errors'])) {
+ $errors['email'] = $this->translateErrors($data['email']['errors']);
+ }
+
+ if (isset($data['plainPassword']['children']['first']['errors'])) {
+ $errors['password'] = $this->translateErrors($data['plainPassword']['children']['first']['errors']);
+ }
+
+ $json = $this->get('serializer')->serialize(['error' => $errors], 'json');
+
+ return (new JsonResponse())
+ ->setJson($json)
+ ->setStatusCode(JsonResponse::HTTP_BAD_REQUEST);
+ }