chore(foundation): fix ldap auth and user lookup
This commit is contained in:
parent
1cdb20eb60
commit
8e2a98c12b
@ -4,11 +4,11 @@
|
|||||||
|
|
||||||
module Foundation.Yesod.Auth
|
module Foundation.Yesod.Auth
|
||||||
( authenticate
|
( authenticate
|
||||||
-- , ldapLookupAndUpsert
|
, ldapLookupAndUpsert
|
||||||
, upsertLdapUser, upsertAzureUser
|
, upsertLdapUser, upsertAzureUser
|
||||||
, decodeLdapUserTest, decodeAzureUserTest
|
, decodeLdapUserTest, decodeAzureUserTest
|
||||||
, CampusUserConversionException(..)
|
, CampusUserConversionException(..)
|
||||||
, campusUserFailoverMode, updateUserLanguage
|
, updateUserLanguage
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Import.NoFoundation hiding (authenticate)
|
import Import.NoFoundation hiding (authenticate)
|
||||||
@ -36,7 +36,6 @@ import qualified Data.Text.Encoding as Text
|
|||||||
import qualified Data.ByteString as ByteString
|
import qualified Data.ByteString as ByteString
|
||||||
import qualified Data.Set as Set
|
import qualified Data.Set as Set
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import qualified Data.List.PointedList as PointedList
|
|
||||||
import qualified Data.UUID as UUID
|
import qualified Data.UUID as UUID
|
||||||
|
|
||||||
|
|
||||||
@ -110,10 +109,8 @@ authenticate creds@Creds{..} = liftHandler . runDB . withReaderT projectBackend
|
|||||||
Authenticated . entityKey <$> upsertAzureUser upsertMode' azureData
|
Authenticated . entityKey <$> upsertAzureUser upsertMode' azureData
|
||||||
UserSourceConfSingleSource (UserSourceLdap _)
|
UserSourceConfSingleSource (UserSourceLdap _)
|
||||||
| Just upsertMode' <- upsertMode -> do
|
| Just upsertMode' <- upsertMode -> do
|
||||||
-- TODO WIP
|
|
||||||
ldapPool <- fmap (fromMaybe $ error "No LDAP Pool") . getsYesod $ view _appLdapPool
|
ldapPool <- fmap (fromMaybe $ error "No LDAP Pool") . getsYesod $ view _appLdapPool
|
||||||
ldapConf <- mkFailover $ PointedList.singleton ldapPool
|
ldapData <- ldapUser ldapPool Creds{..} -- ldapUserWith withLdap ldapPool FailoverNone Creds{..}
|
||||||
ldapData <- ldapUser ldapConf FailoverNone Creds{..} -- ldapUserWith withLdap ldapPool FailoverNone Creds{..}
|
|
||||||
$logDebugS "AuthLDAP" $ "Successful LDAP lookup: " <> tshow ldapData
|
$logDebugS "AuthLDAP" $ "Successful LDAP lookup: " <> tshow ldapData
|
||||||
Authenticated . entityKey <$> upsertLdapUser upsertMode' ldapData
|
Authenticated . entityKey <$> upsertLdapUser upsertMode' ldapData
|
||||||
_other
|
_other
|
||||||
@ -158,15 +155,21 @@ _upsertUserMode mMode cs@Creds{..}
|
|||||||
defaultOther = apHash
|
defaultOther = apHash
|
||||||
|
|
||||||
|
|
||||||
-- TODO: rewrite
|
ldapLookupAndUpsert :: forall m.
|
||||||
-- ldapLookupAndUpsert :: forall m. (MonadHandler m, HandlerSite m ~ UniWorX, MonadMask m, MonadUnliftIO m) => Text -> SqlPersistT m (Entity User)
|
( MonadHandler m
|
||||||
-- ldapLookupAndUpsert ident =
|
, HandlerSite m ~ UniWorX
|
||||||
-- getsYesod (view _appLdapPool) >>= \case
|
, MonadMask m
|
||||||
-- Nothing -> throwM $ CampusUserLdapError $ LdapHostNotResolved "No LDAP configuration in Foundation."
|
, MonadUnliftIO m
|
||||||
-- Just ldapPool ->
|
)
|
||||||
-- campusUser'' ldapPool campusUserFailoverMode ident >>= \case
|
=> Text
|
||||||
-- Nothing -> throwM CampusUserNoResult
|
-> SqlPersistT m (Entity User)
|
||||||
-- Just ldapResponse -> upsertLdapUser UpsertCampusUserGuessUser ldapResponse
|
ldapLookupAndUpsert ident =
|
||||||
|
getsYesod (view _appLdapPool) >>= \case
|
||||||
|
Nothing -> throwM $ CampusUserLdapError $ LdapHostNotResolved "No LDAP configuration in Foundation."
|
||||||
|
Just ldapPool ->
|
||||||
|
ldapUser'' ldapPool ident >>= \case
|
||||||
|
Nothing -> throwM CampusUserNoResult
|
||||||
|
Just ldapResponse -> upsertLdapUser UpsertUserGuessUser ldapResponse
|
||||||
|
|
||||||
|
|
||||||
-- | Upsert User DB according to given LDAP data (does not query LDAP itself)
|
-- | Upsert User DB according to given LDAP data (does not query LDAP itself)
|
||||||
@ -579,7 +582,4 @@ updateUserLanguage Nothing = runMaybeT $ do
|
|||||||
setRegisteredCookie CookieLang lang
|
setRegisteredCookie CookieLang lang
|
||||||
return lang
|
return lang
|
||||||
|
|
||||||
campusUserFailoverMode :: FailoverMode
|
|
||||||
campusUserFailoverMode = FailoverUnlimited
|
|
||||||
|
|
||||||
embedRenderMessage ''UniWorX ''CampusUserConversionException id
|
embedRenderMessage ''UniWorX ''CampusUserConversionException id
|
||||||
|
|||||||
Reference in New Issue
Block a user