From f5d55930b7463b939544dd21498ce4a76bc5498b Mon Sep 17 00:00:00 2001 From: "Steffen D. Sommer" Date: Wed, 25 Jul 2018 15:06:16 +0200 Subject: [PATCH 1/7] Update to Forms 0.7 --- Package.swift | 2 +- .../Frontend/FrontendUserControllerDelegate.swift | 8 +++----- Sources/JWTKeychain/Models/User/PasswordResetForm.swift | 8 ++++++++ 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Package.swift b/Package.swift index 796d598..677e7d5 100644 --- a/Package.swift +++ b/Package.swift @@ -10,7 +10,7 @@ let package = Package( dependencies: [ .package(url: "https://github.com/harlanhaskins/Punctual.swift.git", .upToNextMajor(from: "1.0.0")), .package(url: "https://github.com/nodes-vapor/flash.git", .upToNextMajor(from: "1.0.0")), - .package(url: "https://github.com/nodes-vapor/forms.git", .upToNextMinor(from: "0.6.1")), + .package(url: "https://github.com/nodes-vapor/forms.git", .upToNextMinor(from: "0.7.0")), .package(url: "https://github.com/nodes-vapor/sugar.git", .upToNextMajor(from: "2.0.0")), .package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.0.0")), .package(url: "https://github.com/vapor/jwt-provider.git", .upToNextMajor(from: "1.0.0")), diff --git a/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift b/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift index 2af5ac6..5f0bd8a 100644 --- a/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift +++ b/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift @@ -10,7 +10,7 @@ import SMTP import Vapor public protocol PasswordResetInfoType: - FieldsetRepresentable, + NodeRepresentable, ValidationModeValidatable { var email: String? { get } @@ -54,8 +54,7 @@ open class FrontendUserControllerDelegate: viewRenderer: ViewRenderer ) throws -> ResponseRepresentable { let fieldset = try request.fieldset ?? - U.extractPasswordResetInfo(from: request) - .makeFieldset(inValidationMode: .none) + U.extractPasswordResetInfo(from: request).makeNode(in: ValidationContext(mode: .none)) return try viewRenderer.make( pathToFormView, @@ -79,8 +78,7 @@ open class FrontendUserControllerDelegate: let passwordResetInfo = try U.extractPasswordResetInfo(from: request) // prepare common response - let fieldset = try passwordResetInfo - .makeFieldset(inValidationMode: .all) + let fieldset = try passwordResetInfo.makeNode(in: ValidationContext(mode: .all)) let redirectToForm = Response(redirect: formPath).setFieldset(fieldset) // ensure form values are valid diff --git a/Sources/JWTKeychain/Models/User/PasswordResetForm.swift b/Sources/JWTKeychain/Models/User/PasswordResetForm.swift index c5e92be..4732592 100644 --- a/Sources/JWTKeychain/Models/User/PasswordResetForm.swift +++ b/Sources/JWTKeychain/Models/User/PasswordResetForm.swift @@ -69,6 +69,14 @@ extension PasswordResetForm: JSONInitializable { // MARK: PasswordResetInfoType extension PasswordResetForm: PasswordResetInfoType { + public func makeNode(in context: Context?) throws -> Node { + return Node([ + User.Keys.email: .string(email ?? ""), + User.Keys.password: .string(password ?? ""), + User.Keys.passwordRepeat: .string(passwordRepeatField.value ?? "") + ]) + } + public var email: String? { return emailField.value } From 3e2b04e6dcffb50f633f64cdb626c75bdea83907 Mon Sep 17 00:00:00 2001 From: "Steffen D. Sommer" Date: Fri, 27 Jul 2018 12:28:14 +0200 Subject: [PATCH 2/7] Open up delegates for post-processing --- Sources/JWTKeychain/Provider/Provider.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/JWTKeychain/Provider/Provider.swift b/Sources/JWTKeychain/Provider/Provider.swift index dcf492d..21478da 100644 --- a/Sources/JWTKeychain/Provider/Provider.swift +++ b/Sources/JWTKeychain/Provider/Provider.swift @@ -37,9 +37,9 @@ extension PasswordAuthenticatable { /// - Creates User API routes /// - Creates Frontend password reset routes public final class Provider { - fileprivate let apiDelegate: APIUserControllerDelegateType + public let apiDelegate: APIUserControllerDelegateType fileprivate let apiMiddleware: [Middleware] - fileprivate let frontendDelegate: FrontendUserControllerDelegateType + public let frontendDelegate: FrontendUserControllerDelegateType fileprivate let frontendMiddleware: [Middleware] fileprivate let settings: Settings From 33c7e0043f0590c009aa9a1850e74d32d9c8457f Mon Sep 17 00:00:00 2001 From: "Steffen D. Sommer" Date: Mon, 20 Aug 2018 17:31:17 +0200 Subject: [PATCH 3/7] Align with Forms update --- .../Frontend/FrontendUserControllerDelegate.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift b/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift index 5f0bd8a..3a08afa 100644 --- a/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift +++ b/Sources/JWTKeychain/Controllers/Frontend/FrontendUserControllerDelegate.swift @@ -10,7 +10,7 @@ import SMTP import Vapor public protocol PasswordResetInfoType: - NodeRepresentable, + FieldsetRepresentable, ValidationModeValidatable { var email: String? { get } @@ -54,7 +54,7 @@ open class FrontendUserControllerDelegate: viewRenderer: ViewRenderer ) throws -> ResponseRepresentable { let fieldset = try request.fieldset ?? - U.extractPasswordResetInfo(from: request).makeNode(in: ValidationContext(mode: .none)) + U.extractPasswordResetInfo(from: request).makeFieldset(inValidationMode: .none) return try viewRenderer.make( pathToFormView, @@ -78,7 +78,7 @@ open class FrontendUserControllerDelegate: let passwordResetInfo = try U.extractPasswordResetInfo(from: request) // prepare common response - let fieldset = try passwordResetInfo.makeNode(in: ValidationContext(mode: .all)) + let fieldset = try passwordResetInfo.makeFieldset(inValidationMode: .all) let redirectToForm = Response(redirect: formPath).setFieldset(fieldset) // ensure form values are valid From db9126e70e70466e786f8eb8934e8b1054289a26 Mon Sep 17 00:00:00 2001 From: "Steffen D. Sommer" Date: Tue, 21 Aug 2018 07:02:29 +0200 Subject: [PATCH 4/7] Remove unneeded makeNode --- Sources/JWTKeychain/Models/User/PasswordResetForm.swift | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Sources/JWTKeychain/Models/User/PasswordResetForm.swift b/Sources/JWTKeychain/Models/User/PasswordResetForm.swift index 4732592..c5e92be 100644 --- a/Sources/JWTKeychain/Models/User/PasswordResetForm.swift +++ b/Sources/JWTKeychain/Models/User/PasswordResetForm.swift @@ -69,14 +69,6 @@ extension PasswordResetForm: JSONInitializable { // MARK: PasswordResetInfoType extension PasswordResetForm: PasswordResetInfoType { - public func makeNode(in context: Context?) throws -> Node { - return Node([ - User.Keys.email: .string(email ?? ""), - User.Keys.password: .string(password ?? ""), - User.Keys.passwordRepeat: .string(passwordRepeatField.value ?? "") - ]) - } - public var email: String? { return emailField.value } From 566a65d8dd9ad217b542dc99c70cf076819dbb58 Mon Sep 17 00:00:00 2001 From: "Steffen D. Sommer" Date: Fri, 23 Nov 2018 16:27:14 +0100 Subject: [PATCH 5/7] Update PasswordVersionClaim.swift --- Sources/JWTKeychain/Support/PasswordVersionClaim.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/JWTKeychain/Support/PasswordVersionClaim.swift b/Sources/JWTKeychain/Support/PasswordVersionClaim.swift index b0abb61..e1bb138 100644 --- a/Sources/JWTKeychain/Support/PasswordVersionClaim.swift +++ b/Sources/JWTKeychain/Support/PasswordVersionClaim.swift @@ -5,7 +5,7 @@ import Vapor /// This claim is used to store the password version of a user in a JWT. /// It is used with resetting passwords to see whether the User's password has /// not already been changed. -internal struct PasswordVersionClaim: EqualityClaim, StringBacked { +public struct PasswordVersionClaim: EqualityClaim, StringBacked { internal static let name = "nodes:pwd" internal let value: String From 7b6b6d1a4a13af2bdd1bbf275325319f0df30226 Mon Sep 17 00:00:00 2001 From: "Steffen D. Sommer" Date: Fri, 23 Nov 2018 16:36:33 +0100 Subject: [PATCH 6/7] Update PasswordVersionClaim.swift --- Sources/JWTKeychain/Support/PasswordVersionClaim.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/JWTKeychain/Support/PasswordVersionClaim.swift b/Sources/JWTKeychain/Support/PasswordVersionClaim.swift index e1bb138..2bf7ca6 100644 --- a/Sources/JWTKeychain/Support/PasswordVersionClaim.swift +++ b/Sources/JWTKeychain/Support/PasswordVersionClaim.swift @@ -10,11 +10,11 @@ public struct PasswordVersionClaim: EqualityClaim, StringBacked { internal let value: String - internal init(string: String) { + public init(string: String) { self.value = string } - internal init(user: PasswordUpdateable) throws { + public init(user: PasswordUpdateable) throws { self.init(string: "\(user.passwordVersion)") } } From 90254fac33a5c4583021552e8bc5247f612501cb Mon Sep 17 00:00:00 2001 From: "Steffen D. Sommer" Date: Fri, 23 Nov 2018 16:42:29 +0100 Subject: [PATCH 7/7] Update PasswordVersionClaim.swift --- Sources/JWTKeychain/Support/PasswordVersionClaim.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/JWTKeychain/Support/PasswordVersionClaim.swift b/Sources/JWTKeychain/Support/PasswordVersionClaim.swift index 2bf7ca6..39b42cc 100644 --- a/Sources/JWTKeychain/Support/PasswordVersionClaim.swift +++ b/Sources/JWTKeychain/Support/PasswordVersionClaim.swift @@ -6,9 +6,9 @@ import Vapor /// It is used with resetting passwords to see whether the User's password has /// not already been changed. public struct PasswordVersionClaim: EqualityClaim, StringBacked { - internal static let name = "nodes:pwd" + public static let name = "nodes:pwd" - internal let value: String + public let value: String public init(string: String) { self.value = string