From 97c5a686af686105409ada0878c307277df964a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Fri, 15 Sep 2023 12:15:53 +0200 Subject: [PATCH] Feat: Implement password reset --- src/BusProNet/ApiClient.php | 33 +++++++++ .../Security/PasswordResetController.php | 67 +++++++++++++++++++ templates/security/password_reset.html.twig | 25 +++++++ 3 files changed, 125 insertions(+) create mode 100644 src/Controller/Security/PasswordResetController.php create mode 100644 templates/security/password_reset.html.twig diff --git a/src/BusProNet/ApiClient.php b/src/BusProNet/ApiClient.php index c420dbf..f625fae 100644 --- a/src/BusProNet/ApiClient.php +++ b/src/BusProNet/ApiClient.php @@ -60,6 +60,39 @@ class ApiClient public function updateProfile(): void {} + public function resetPassword(string $email): BaseResponse + { + $data = [ + 'anfrage' => [ + 'user' => $this->config['bpn_username'], + 'key' => $this->createKey($this->config['bpn_username'], $this->config['bpn_password'], 'KUNDENKONTO'), + 'satz' => ['@typ' => 'KUNDENKONTO'], + 'art' => 'Passwort_Anfrage', + 'email' => $email, + ], + ]; + + $body = $this + ->serializer + ->serialize($data, 'xml') + ; + + try { + $response = $this->httpClient->request('GET', $this->config['bpn_url'], [ + 'query' => [ + 'operation' => $body, + ] + ]); + + $xml = $response->getContent(); + + return $this->responseParser->parseXmlString($xml); + } catch (\Throwable $e) { + } + + throw new ApiClientException($e->getMessage()); + } + /** * @throws ApiClientException */ diff --git a/src/Controller/Security/PasswordResetController.php b/src/Controller/Security/PasswordResetController.php new file mode 100644 index 0000000..680b32c --- /dev/null +++ b/src/Controller/Security/PasswordResetController.php @@ -0,0 +1,67 @@ +createFormBuilder() + ->add('email', EmailType::class, [ + 'label' => 'E-Mail', + 'constraints' => [ + new NotBlank([ + 'message' => 'Bitte angeben', + ]), + new Email([ + 'mode' => 'strict', + 'message' => 'Ungültige E-Mail-Adresse', + ]), + ], + ]) + ->getForm() + ; + + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + $email = $form->get('email')->getData(); + + try { + $this + ->apiClient + ->resetPassword($email) + ; + } catch (ApiClientException $e) { + } + + $this->addFlash('success', 'Passwort Reset wurde angefordert'); + + $this->logger->info('Password reset', [ + 'email' => $email, + ]); + + return $this->redirectToRoute('app_security_login'); + } + + return $this->render('security/password_reset.html.twig', [ + 'form' => $form->createView(), + ]); + } +} \ No newline at end of file diff --git a/templates/security/password_reset.html.twig b/templates/security/password_reset.html.twig new file mode 100644 index 0000000..7443797 --- /dev/null +++ b/templates/security/password_reset.html.twig @@ -0,0 +1,25 @@ +{% extends 'base.html.twig' %} + +{% block body %} +
+
+

+ MyE&P Teams +

+ {{ form_start(form) }} +
+ + {{ form_widget(form.email) }} + {{ form_errors(form.email) }} +
+ + {{ form_rest(form) }} + {{ form_end(form) }} +
+
+ +{% endblock %} \ No newline at end of file