1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
module Fig.Web.LDAP where
import Fig.Prelude
import System.Exit (ExitCode(..))
import qualified System.Process as Proc
import qualified Data.UUID as UUID
import qualified Data.UUID.V4 as UUID
import qualified Data.Text as Text
import Fig.Web.Utils
-- | Reset the password in LDAP for the specified user (creating the user if necessary)
resetUserPassword :: MonadIO m => Config -> Text -> Text -> m (Maybe Text)
resetUserPassword cfg user uid = do
let login = Text.toLower user
password <- UUID.toText <$> liftIO UUID.nextRandom
exitCode <- liftIO $ Proc.withCreateProcess
(Proc.proc cfg.lldapCli $ unpack <$>
[ "-H", cfg.lldapHost
, "-D", cfg.lldapUser
, "-w", cfg.lldapPassword
, "user", "add", login, login <> "@users.colonq.computer"
, "-p", password
, "-f", uid
])
\_ _ _ h -> Proc.waitForProcess h
liftIO $ Proc.withCreateProcess
(Proc.proc cfg.lldapCli $ unpack <$>
[ "-H", cfg.lldapHost
, "-D", cfg.lldapUser
, "-w", cfg.lldapPassword
, "user", "group", "add", login, "fig_users"
])
\_ _ _ h -> void $ Proc.waitForProcess h
case exitCode of
ExitSuccess -> pure $ Just password
ExitFailure _ -> pure Nothing
|