From: fr33domlover <[email protected]>

---
 src/Foundation.hs | 25 ++++++++++++++++---------
 1 file changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/Foundation.hs b/src/Foundation.hs
index 7a78f98..78797fc 100644
--- a/src/Foundation.hs
+++ b/src/Foundation.hs
@@ -17,6 +17,7 @@ import Text.Hamlet (hamletFile)
 import Text.Jasmine (minifym)
 import Web.Authenticate.BrowserId (browserIdJs)
 import Yesod hiding (runDB, (==.), count, Value)
+import Yesod.Auth.Message (AuthMessage (..))
 import Yesod.Auth.BrowserId (authBrowserId)
 import Yesod.Auth.HashDB (authHashDB, setPassword)
 import Yesod.Core.Types (Logger)
@@ -234,16 +235,22 @@ instance YesodAuth App where
     -- Override the above destinations when a Referer: header is present
     redirectToReferer _ = True
 
-    getAuthId creds = do
-        maybe_user_id <- runDB $ getBy $ UniqueUser $ credsIdent creds
+    authenticate creds = do
+        let ident = credsIdent creds
+        maybe_user_id <- runDB $ getBy $ UniqueUser ident
         case (credsPlugin creds, maybe_user_id) of
-            (_, Just (Entity user_id _)) -> return $ Just user_id
-            ("hashdb",    _) -> error "Credentials not recognized"
-            ("browserid", _) ->
-                createUser (credsIdent creds) Nothing Nothing emailStuff 
Nothing Nothing
-            _ -> error "Unhandled credentials plugin"
-      where
-        emailStuff = Just $ NewEmail True $ credsIdent creds
+            (_, Just (Entity user_id _)) -> return $ Authenticated user_id
+            ("hashdb",    _) -> return $ UserError $ IdentifierNotFound ident
+            ("browserid", _) -> do
+                let emailStuff = Just $ NewEmail True ident
+                muid <-
+                    createUser ident Nothing Nothing emailStuff Nothing Nothing
+                return $ case muid of
+                    -- The Nothing case never really runs because 'createUser'
+                    -- throws an exception on failure
+                    Nothing -> UserError InvalidLogin
+                    Just user_id -> Authenticated user_id
+            _ -> return $ ServerError "Unhandled credentials plugin"
 
     -- You can add other plugins like BrowserID, email or OAuth here
     authPlugins _ = [ snowdriftAuthBrowserId, snowdriftAuthHashDB ]
-- 
1.9.1

_______________________________________________
Dev mailing list
[email protected]
https://lists.snowdrift.coop/mailman/listinfo/dev

Reply via email to