From f2d8b8b9637fe236eb0cb303df5fc66ecd5c03f1 Mon Sep 17 00:00:00 2001 From: Casper Rasmussen Date: Mon, 6 Mar 2017 17:52:27 +0100 Subject: [PATCH] fixed reset pw --- .../FrontendResetPasswordController.swift | 27 +-- .../Api/Users/ResetPasswordRequest.swift | 4 +- .../Resources/Views/ResetPassword/form.leaf | 178 +++++++++--------- 3 files changed, 98 insertions(+), 111 deletions(-) diff --git a/Sources/JWTKeychain/Controllers/Frontend/FrontendResetPasswordController.swift b/Sources/JWTKeychain/Controllers/Frontend/FrontendResetPasswordController.swift index b57a75c..04ef3b4 100644 --- a/Sources/JWTKeychain/Controllers/Frontend/FrontendResetPasswordController.swift +++ b/Sources/JWTKeychain/Controllers/Frontend/FrontendResetPasswordController.swift @@ -40,10 +40,11 @@ open class FrontendResetPasswordController: FrontendResetPasswordControllerType } catch { throw Abort.custom(status: .badRequest, message: "The provided token does not validate. Try to reset your password again") } - - print(request.storage) - return try drop.view.make("ResetPassword/form", ["token": token], for: request) + return try drop.view.make("ResetPassword/form", [ + "token": token, + "fieldset": request.storage["_fieldset"] as? Node ?? nil + ], for: request) } open func resetPasswordChange(request: Request) throws -> Response { @@ -68,25 +69,21 @@ open class FrontendResetPasswordController: FrontendResetPasswordControllerType let userId = jwt.payload["user"]?.object?["id"]?.int, let userPasswordHash = jwt.payload["user"]?.object?["password"]?.string, var user = try User.query().filter("id", userId).first() else { - print("Token is invalid") return Response(redirect: "/reset-password/form/" + requestData.token) .flash(.error, "Token is invalid") } if user.email != requestData.email { - print("Email did not match") return Response(redirect: "/reset-password/form/" + requestData.token) .flash(.error, "Email did not match") } if user.password != userPasswordHash { - print("Password already changed. Cannot use the same token again.") return Response(redirect: "/reset-password/form/" + requestData.token) .flash(.error, "Password already changed. Cannot use the same token again.") } if requestData.password != requestData.passwordConfirmation { - print("Password and password confirmation don't match") return Response(redirect: "/reset-password/form/" + requestData.token) .flash(.error, "Password and password confirmation don't match") } @@ -94,30 +91,20 @@ open class FrontendResetPasswordController: FrontendResetPasswordControllerType user.password = BCrypt.hash(password: requestData.password) try user.save() - print("success") return Response(redirect: "/reset-password/form/" + requestData.token) .flash(.success, "Password changed. You can close this page now.") } catch FormError.validationFailed(let fieldset) { - let response = Response(redirect: "/reset-password/form/" + (request.data["token"]?.string ?? "invalid")) - .flash(.error, "Data is invalid") - - - print("Data is invalid") - print(fieldset) - - response.storage["_fieldset"] = try fieldset.makeNode() - - return response + return Response(redirect: "/reset-password/form/" + (request.data["token"]?.string ?? "invalid")) + .flash(.error, "Validation error(s)") + .withFieldset(fieldset) } catch { - print(error) return Response(redirect: "/reset-password/form/" + (request.data["token"]?.string ?? "invalid")) .flash(.error, "Something went wrong") } - } } diff --git a/Sources/JWTKeychain/Requests/Api/Users/ResetPasswordRequest.swift b/Sources/JWTKeychain/Requests/Api/Users/ResetPasswordRequest.swift index 75bf71c..11a10b2 100644 --- a/Sources/JWTKeychain/Requests/Api/Users/ResetPasswordRequest.swift +++ b/Sources/JWTKeychain/Requests/Api/Users/ResetPasswordRequest.swift @@ -11,8 +11,8 @@ class ResetPasswordRequest: Form { static let fieldset = Fieldset([ "email": StringField(String.EmailValidator()), - "password": StringField(String.MinimumLengthValidator(characters: 6), RegexValidator(regex: "^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])")), - "password_confirmation": StringField(String.MinimumLengthValidator(characters: 6), RegexValidator(regex: "^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])")), + "password": StringField(String.MinimumLengthValidator(characters: 6), RegexValidator(regex: "^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])", message: "Must have 1 number and 1 big letter")), + "password_confirmation": StringField(String.MinimumLengthValidator(characters: 6), RegexValidator(regex: "^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])", message: "Must have 1 number and 1 big letter")), // any form of verification in order to get the field passed along "token": StringField(String.MinimumLengthValidator(characters: 10)) diff --git a/Sources/JWTKeychain/Resources/Views/ResetPassword/form.leaf b/Sources/JWTKeychain/Resources/Views/ResetPassword/form.leaf index efeb4dd..96e721e 100644 --- a/Sources/JWTKeychain/Resources/Views/ResetPassword/form.leaf +++ b/Sources/JWTKeychain/Resources/Views/ResetPassword/form.leaf @@ -1,99 +1,99 @@ - - - - - - -
-
- -
-
-
-

Reset password

-
- - - #if(request.storage._flash.error) { - - } - - - #if(request.storage._flash.success) { - - } - - - #if(request.storage._flash.warning) { - - } - - - #if(request.storage._flash.info) { - - } - -
- + + + + + + +
+
-
- - - #ifFieldHasErrors(fieldset, "email") {
    } - #loopErrorsForField(fieldset, "email", "message") {
  • #(message)
  • } - #ifFieldHasErrors(fieldset, "email") {
} +
+
+
+

Reset password

+
+ + + #if(request.storage._flash.error) { + - -
- - - #ifFieldHasErrors(fieldset, "password") {
    } - #loopErrorsForField(fieldset, "password", "message") {
  • #(message)
  • } - #ifFieldHasErrors(fieldset, "password") {
} + } + + + #if(request.storage._flash.success) { + - -
- - - #ifFieldHasErrors(fieldset, "password_confirmation") {
    } - #loopErrorsForField(fieldset, "password_confirmation", "message") {
  • #(message)
  • } - #ifFieldHasErrors(fieldset, "password_confirmation") {
} + } + + + #if(request.storage._flash.warning) { + - -
- + } + + + #if(request.storage._flash.info) { + - + } + +
+ + +
+ + + #ifFieldHasErrors(fieldset, "email") {
    } + #loopErrorsForField(fieldset, "email", "message") {
  • #(message)
  • } + #ifFieldHasErrors(fieldset, "email") {
} +
+ +
+ + + #ifFieldHasErrors(fieldset, "password") {
    } + #loopErrorsForField(fieldset, "password", "message") {
  • #(message)
  • } + #ifFieldHasErrors(fieldset, "password") {
} +
+ +
+ + + #ifFieldHasErrors(fieldset, "password_confirmation") {
    } + #loopErrorsForField(fieldset, "password_confirmation", "message") {
  • #(message)
  • } + #ifFieldHasErrors(fieldset, "password_confirmation") {
} +
+ +
+ +
+
+
-
- +