diff --git a/src/Foundation/Yesod/Auth.hs b/src/Foundation/Yesod/Auth.hs index 5496155c1..0f186b8d0 100644 --- a/src/Foundation/Yesod/Auth.hs +++ b/src/Foundation/Yesod/Auth.hs @@ -157,14 +157,18 @@ upsertCampusUser upsertMode ldapData = do now <- liftIO getCurrentTime userDefaultConf <- getsYesod $ view _appUserDefaults - (newUser@User{..},userUpdate) <- decodeUser now userDefaultConf upsertMode ldapData - oldUsers <- for userLdapPrimaryKey $ \pKey -> selectKeysList [ UserLdapPrimaryKey ==. Just pKey ] [] + (newUser,userUpdate) <- decodeUser now userDefaultConf upsertMode ldapData + + oldUsers <- for (userLdapPrimaryKey newUser) $ \pKey -> selectKeysList [ UserLdapPrimaryKey ==. Just pKey ] [] user@(Entity userId userRec) <- case oldUsers of Just [oldUserId] -> updateGetEntity oldUserId userUpdate - _other -> upsertBy (UniqueAuthentication userIdent) newUser userUpdate - unless (validDisplayName userTitle userFirstName userSurname $ userRec ^. _userDisplayName) $ - update userId [ UserDisplayName =. userDisplayName ] + _other -> upsertBy (UniqueAuthentication (newUser ^. _userIdent)) newUser userUpdate + unless (validDisplayName (newUser ^. _userTitle) + (newUser ^. _userFirstName) + (newUser ^. _userSurname) + (userRec ^. _userDisplayName)) $ + update userId [ UserDisplayName =. (newUser ^. _userDisplayName) ] let userSystemFunctions = determineSystemFunctions . Set.fromList $ map CI.mk userSystemFunctions' @@ -201,7 +205,7 @@ decodeUser now UserDefaultConf{..} upsertMode ldapData = do userAuthentication | is _UpsertCampusUserLoginOther upsertMode - = error "Non-LDAP logins should only work for users that are already known" + = AuthPWHash (error "Non-LDAP logins should only work for users that are already known") | otherwise = AuthLDAP userLastAuthentication = guardOn isLogin now isLogin = has (_UpsertCampusUserLoginLdap <> _UpsertCampusUserLoginOther . united) upsertMode