From abdd844279f1f830e3af858b05e54127188127ec Mon Sep 17 00:00:00 2001 From: charukiewicz Date: Wed, 5 Feb 2020 01:21:56 -0600 Subject: [PATCH 1/4] added registerHandler method to YesodAuthEmail class to enable override --- yesod-auth/Yesod/Auth/Email.hs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/yesod-auth/Yesod/Auth/Email.hs b/yesod-auth/Yesod/Auth/Email.hs index bfff182c..0973b0a0 100644 --- a/yesod-auth/Yesod/Auth/Email.hs +++ b/yesod-auth/Yesod/Auth/Email.hs @@ -385,6 +385,10 @@ class ( YesodAuth site -> AuthHandler site TypedContent setPasswordHandler = defaultSetPasswordHandler + + registerHelper :: Bool -> Bool -> Route Auth -> AuthHandler site TypedContent + registerHelper = defaultRegisterHelper + authEmail :: (YesodAuthEmail m) => AuthPlugin m authEmail = AuthPlugin "email" dispatch emailLoginHandler @@ -516,12 +520,12 @@ parseRegister = withObject "email" (\obj -> do pass <- obj .:? "password" return (email, pass)) -registerHelper :: YesodAuthEmail master - => Bool -- ^ allow usernames? - -> Bool -- ^ forgot password? - -> Route Auth - -> AuthHandler master TypedContent -registerHelper allowUsername forgotPassword dest = do +defaultRegisterHelper :: YesodAuthEmail master + => Bool -- ^ allow usernames? + -> Bool -- ^ forgot password? + -> Route Auth + -> AuthHandler master TypedContent +defaultRegisterHelper allowUsername forgotPassword dest = do y <- getYesod checkCsrfHeaderOrParam defaultCsrfHeaderName defaultCsrfParamName result <- runInputPostResult $ (,) From c35c2fddc2a492d6700fd607c37c53df31bb7e4f Mon Sep 17 00:00:00 2001 From: charukiewicz Date: Wed, 5 Feb 2020 23:45:02 -0600 Subject: [PATCH 2/4] added passwordResetHelper method, exposed defaultRegisterHelper --- yesod-auth/Yesod/Auth/Email.hs | 41 ++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/yesod-auth/Yesod/Auth/Email.hs b/yesod-auth/Yesod/Auth/Email.hs index 0973b0a0..2a678a6a 100644 --- a/yesod-auth/Yesod/Auth/Email.hs +++ b/yesod-auth/Yesod/Auth/Email.hs @@ -113,6 +113,8 @@ module Yesod.Auth.Email , defaultRegisterHandler , defaultForgotPasswordHandler , defaultSetPasswordHandler + -- * Default helpers + , defaultRegisterHelper ) where import Yesod.Auth @@ -386,8 +388,33 @@ class ( YesodAuth site setPasswordHandler = defaultSetPasswordHandler - registerHelper :: Bool -> Bool -> Route Auth -> AuthHandler site TypedContent - registerHelper = defaultRegisterHelper + -- | Helper that controls what happens after a user registration + -- request is submitted. This method can be overridden to completely + -- customize what happens during the user registration process, + -- such as for handling additional fields in the registration form. + -- + -- The default implementation is in terms of 'defaultRegisterHelper'. + -- + -- @since: 1.6.9 + registerHelper :: Route Auth + -- ^ Where to sent the user in the event + -- that registration fails + -> AuthHandler site TypedContent + registerHelper = defaultRegisterHelper False False + + -- | Helper that controls what happens after a forgot password + -- request is submitted. As with `registerHelper`, this method can + -- be overridden to customize the behavior when a user attempts + -- to recover their password. + -- + -- The default implementation is in terms of 'defaultRegisterHelper'. + -- + -- @since: 1.6.9 + passwordResetHelper :: Route Auth + -- ^ Where to sent the user in the event + -- that the password reset fails + -> AuthHandler site TypedContent + passwordResetHelper = defaultRegisterHelper True True authEmail :: (YesodAuthEmail m) => AuthPlugin m authEmail = @@ -521,8 +548,8 @@ parseRegister = withObject "email" (\obj -> do return (email, pass)) defaultRegisterHelper :: YesodAuthEmail master - => Bool -- ^ allow usernames? - -> Bool -- ^ forgot password? + => Bool -- ^ Allow lookup via username in addition to email + -> Bool -- ^ Set to `True` for forgot password flow, `False` for new account registration -> Route Auth -> AuthHandler master TypedContent defaultRegisterHelper allowUsername forgotPassword dest = do @@ -553,7 +580,7 @@ defaultRegisterHelper allowUsername forgotPassword dest = do _ -> Nothing case eidentifier of - Left route -> loginErrorMessageI dest route + Left failMsg -> loginErrorMessageI dest failMsg Right identifier -> do mecreds <- getEmailCreds identifier registerCreds <- @@ -590,7 +617,7 @@ defaultRegisterHelper allowUsername forgotPassword dest = do postRegisterR :: YesodAuthEmail master => AuthHandler master TypedContent -postRegisterR = registerHelper False False registerR +postRegisterR = registerHelper registerR getForgotPasswordR :: YesodAuthEmail master => AuthHandler master Html getForgotPasswordR = forgotPasswordHandler @@ -634,7 +661,7 @@ defaultForgotPasswordHandler = do } postForgotPasswordR :: YesodAuthEmail master => AuthHandler master TypedContent -postForgotPasswordR = registerHelper True True forgotPasswordR +postForgotPasswordR = passwordResetHelper forgotPasswordR getVerifyR :: YesodAuthEmail site => AuthEmailId site From 16bf146887ee6d6c3f8b0874a4fa4d130e10918f Mon Sep 17 00:00:00 2001 From: charukiewicz Date: Wed, 5 Feb 2020 23:49:16 -0600 Subject: [PATCH 3/4] version bump to 1.6.9 and changelog update --- yesod-auth/ChangeLog.md | 5 +++++ yesod-auth/yesod-auth.cabal | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/yesod-auth/ChangeLog.md b/yesod-auth/ChangeLog.md index d656e10c..1e33e71f 100644 --- a/yesod-auth/ChangeLog.md +++ b/yesod-auth/ChangeLog.md @@ -1,5 +1,10 @@ # ChangeLog for yesod-auth +## 1.6.9 + +* Added `registerHelper` and `passwordResetHelper` methods to the `YesodAuthEmail` class, allowing for customizing behavior for user registration and forgot password requests +* Exposed `defaultRegisterHelper` as default implementation for the above methods + ## 1.6.8.1 * Email: Fix typo in `defaultEmailLoginHandler` template [#1605](https://github.com/yesodweb/yesod/pull/1605) diff --git a/yesod-auth/yesod-auth.cabal b/yesod-auth/yesod-auth.cabal index 83ecf1e2..0f39f49b 100644 --- a/yesod-auth/yesod-auth.cabal +++ b/yesod-auth/yesod-auth.cabal @@ -1,5 +1,5 @@ name: yesod-auth -version: 1.6.8.1 +version: 1.6.9 license: MIT license-file: LICENSE author: Michael Snoyman, Patrick Brisbin From 4f62e39fb19be01f78e4906d11d70a3932cdd03e Mon Sep 17 00:00:00 2001 From: charukiewicz Date: Sun, 9 Feb 2020 17:03:51 -0600 Subject: [PATCH 4/4] added pull request link to ChangeLog entry --- yesod-auth/ChangeLog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yesod-auth/ChangeLog.md b/yesod-auth/ChangeLog.md index 1e33e71f..2f4c93b7 100644 --- a/yesod-auth/ChangeLog.md +++ b/yesod-auth/ChangeLog.md @@ -2,7 +2,7 @@ ## 1.6.9 -* Added `registerHelper` and `passwordResetHelper` methods to the `YesodAuthEmail` class, allowing for customizing behavior for user registration and forgot password requests +* Added `registerHelper` and `passwordResetHelper` methods to the `YesodAuthEmail` class, allowing for customizing behavior for user registration and forgot password requests [#1660](https://github.com/yesodweb/yesod/pull/1660) * Exposed `defaultRegisterHelper` as default implementation for the above methods ## 1.6.8.1