parent
6fbb1888c5
commit
f75c1bdb70
@ -6,7 +6,7 @@ module Auth.LDAP
|
|||||||
, Ldap.AttrList, Ldap.Attr(..), Ldap.AttrValue
|
, Ldap.AttrList, Ldap.Attr(..), Ldap.AttrValue
|
||||||
) where
|
) where
|
||||||
|
|
||||||
import Import.NoFoundation
|
import Import.NoFoundation hiding (userEmail, userDisplayName)
|
||||||
import Control.Lens
|
import Control.Lens
|
||||||
import Network.Connection
|
import Network.Connection
|
||||||
|
|
||||||
@ -39,9 +39,16 @@ data CampusMessage = MsgCampusIdentNote
|
|||||||
|
|
||||||
|
|
||||||
findUser :: LdapConf -> Ldap -> Text -> [Ldap.Attr] -> IO [Ldap.SearchEntry]
|
findUser :: LdapConf -> Ldap -> Text -> [Ldap.Attr] -> IO [Ldap.SearchEntry]
|
||||||
findUser LdapConf{..} ldap campusIdent = Ldap.search ldap ldapBase userSearchSettings userFilter
|
findUser LdapConf{..} ldap ident retAttrs = fromMaybe [] <$> findM (assertM (not . null) . lift . flip (Ldap.search ldap ldapBase userSearchSettings) retAttrs) userFilters
|
||||||
where
|
where
|
||||||
userFilter = userPrincipalName Ldap.:= Text.encodeUtf8 campusIdent
|
userFilters =
|
||||||
|
[ userPrincipalName Ldap.:= Text.encodeUtf8 ident
|
||||||
|
, userPrincipalName Ldap.:= Text.encodeUtf8 [st|#{ident}@campus.lmu.de|]
|
||||||
|
, userEmail Ldap.:= Text.encodeUtf8 ident
|
||||||
|
, userEmail Ldap.:= Text.encodeUtf8 [st|#{ident}@lmu.de|]
|
||||||
|
, userEmail Ldap.:= Text.encodeUtf8 [st|#{ident}@campus.lmu.de|]
|
||||||
|
, userDisplayName Ldap.:= Text.encodeUtf8 ident
|
||||||
|
]
|
||||||
userSearchSettings = mconcat
|
userSearchSettings = mconcat
|
||||||
[ Ldap.scope ldapScope
|
[ Ldap.scope ldapScope
|
||||||
, Ldap.size 2
|
, Ldap.size 2
|
||||||
@ -49,8 +56,10 @@ findUser LdapConf{..} ldap campusIdent = Ldap.search ldap ldapBase userSearchSet
|
|||||||
, Ldap.derefAliases Ldap.DerefAlways
|
, Ldap.derefAliases Ldap.DerefAlways
|
||||||
]
|
]
|
||||||
|
|
||||||
userPrincipalName :: Ldap.Attr
|
userPrincipalName, userEmail, userDisplayName :: Ldap.Attr
|
||||||
userPrincipalName = Ldap.Attr "userPrincipalName"
|
userPrincipalName = Ldap.Attr "userPrincipalName"
|
||||||
|
userEmail = Ldap.Attr "mail"
|
||||||
|
userDisplayName = Ldap.Attr "displayName"
|
||||||
|
|
||||||
campusForm :: ( RenderMessage site FormMessage
|
campusForm :: ( RenderMessage site FormMessage
|
||||||
, RenderMessage site CampusMessage
|
, RenderMessage site CampusMessage
|
||||||
|
|||||||
@ -587,6 +587,9 @@ mconcatMapM f = foldM (\x my -> mappend x <$> my) mempty . map f . Fold.toList
|
|||||||
mconcatForM :: (Monoid b, Monad m, Foldable f) => f a -> (a -> m b) -> m b
|
mconcatForM :: (Monoid b, Monad m, Foldable f) => f a -> (a -> m b) -> m b
|
||||||
mconcatForM = flip mconcatMapM
|
mconcatForM = flip mconcatMapM
|
||||||
|
|
||||||
|
findM :: (Monad m, Foldable f) => (a -> MaybeT m b) -> f a -> m (Maybe b)
|
||||||
|
findM f = runMaybeT . Fold.foldr (\x as -> f x <|> as) mzero
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
-- Alternative --
|
-- Alternative --
|
||||||
-----------------
|
-----------------
|
||||||
|
|||||||
Reference in New Issue
Block a user