diff --git a/src/Foundation/Navigation.hs b/src/Foundation/Navigation.hs index 8b74256d6..9f4ef54bd 100644 --- a/src/Foundation/Navigation.hs +++ b/src/Foundation/Navigation.hs @@ -442,6 +442,14 @@ defNavLink navLabel navRoute = NavLink {..} navQuick' = mempty navForceActive = False +defNavLinkModal :: (RenderMessage UniWorX msg, HasRoute UniWorX route) => msg -> route -> NavLink +defNavLinkModal navLabel navRoute = NavLink {..} + where + navAccess' = NavAccessTrue + navType = NavTypeLink { navModal = True} + navQuick' = mempty + navForceActive = False + navBaseRoute :: NavLink -> Route UniWorX navBaseRoute NavLink{navRoute} = urlRoute navRoute @@ -1196,8 +1204,9 @@ pageActions (AdminUserR cID) = return { navLink = defNavLink MsgMenuUserEdit $ ForProfileR cID , navChildren = [] } - , NavPageActionSecondary - { navLink = (defNavLink MsgUserHijack $ AdminHijackUserR cID){ navType = NavTypeLink { navModal = True }} + , NavPageActionPrimary + { navLink = defNavLinkModal MsgUserHijack $ AdminHijackUserR cID + , navChildren = [] } ] pageActions InfoR = return diff --git a/src/Handler/Users.hs b/src/Handler/Users.hs index d697feea6..23ca1e78d 100644 --- a/src/Handler/Users.hs +++ b/src/Handler/Users.hs @@ -413,22 +413,27 @@ hijackUser uid = do User{userIdent} <- runDB $ get404 uid setCredsRedirect $ Creds apDummy (CI.original userIdent) [] -getAdminHijackUserR :: CryptoUUIDUser -> Handler TypedContent -getAdminHijackUserR = postAdminHijackUserR +getAdminHijackUserR :: CryptoUUIDUser -> Handler Html +getAdminHijackUserR cID = do + (hijackWgt, hijackEnctype) <- generateFormPost hijackUserForm + let hjForm = wrapForm hijackWgt def{ formSubmit = FormNoSubmit, formEncoding = hijackEnctype, formAction = Just . SomeRoute $ AdminHijackUserR cID } + uid :: UserId <- decrypt cID + usr <- runDB $ get404 uid + siteLayoutMsg MsgUserHijack $ do + setTitleI MsgUserHijack + [whamlet| + ^{userWidget usr} + ^{hjForm} + |] postAdminHijackUserR :: CryptoUUIDUser -> Handler TypedContent -postAdminHijackUserR cID = do +postAdminHijackUserR cID = do + ((hijackRes, _), _) <- runFormPost hijackUserForm + $logWarnS "HIJACK" $ "Form Result is: " <> tshow hijackRes uid <- decrypt cID - ((hijackRes, hijackWgt), hijackEnctype) <- runFormPost hijackUserForm - case hijackRes of - (FormSuccess ()) -> hijackUser uid - _ -> selectRep $ do - provideRep . siteLayoutMsg MsgUserHijack $ do - setTitleI MsgUserHijack - let hjForm = wrapForm hijackWgt def{ formEncoding = hijackEnctype } - [whamlet| - ^{hjForm} - |] + ret <- formResultMaybe hijackRes $ \() -> Just <$> hijackUser uid + maybe (redirect UsersR) return ret + data ButtonAuthMode = BtnAuthLDAP | BtnAuthPWHash | BtnPasswordReset deriving (Eq, Ord, Read, Show, Enum, Bounded, Generic)