Functionality to hijack users
This commit is contained in:
parent
ed4df0ef4d
commit
dc03afa84d
@ -3,6 +3,7 @@ BtnAbort: Abbrechen
|
|||||||
BtnDelete: Löschen
|
BtnDelete: Löschen
|
||||||
BtnRegister: Anmelden
|
BtnRegister: Anmelden
|
||||||
BtnDeregister: Abmelden
|
BtnDeregister: Abmelden
|
||||||
|
BtnHijack: Sitzung übernehmen
|
||||||
|
|
||||||
RegisterFrom: Anmeldungen von
|
RegisterFrom: Anmeldungen von
|
||||||
RegisterTo: Anmeldungen bis
|
RegisterTo: Anmeldungen bis
|
||||||
|
|||||||
1
routes
1
routes
@ -35,6 +35,7 @@
|
|||||||
/users UsersR GET -- no tags, i.e. admins only
|
/users UsersR GET -- no tags, i.e. admins only
|
||||||
/admin/test AdminTestR GET POST
|
/admin/test AdminTestR GET POST
|
||||||
/admin/user/#CryptoUUIDUser AdminUserR GET
|
/admin/user/#CryptoUUIDUser AdminUserR GET
|
||||||
|
/admin/user/#CryptoUUIDUser/hijack AdminHijackUserR POST
|
||||||
/info VersionR GET !free
|
/info VersionR GET !free
|
||||||
|
|
||||||
/profile ProfileR GET POST !free !free
|
/profile ProfileR GET POST !free !free
|
||||||
|
|||||||
@ -14,11 +14,17 @@ import Handler.Utils
|
|||||||
|
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
|
|
||||||
import Colonnade hiding (fromMaybe)
|
|
||||||
|
|
||||||
import qualified Database.Esqueleto as E
|
import qualified Database.Esqueleto as E
|
||||||
|
|
||||||
|
|
||||||
|
hijackUserForm :: UserId -> Form UserId
|
||||||
|
hijackUserForm uid csrf = do
|
||||||
|
cID <- encrypt uid
|
||||||
|
(uidResult, uidView) <- mforced hiddenField "" (cID :: CryptoUUIDUser)
|
||||||
|
(btnResult, btnView) <- mreq (buttonField BtnHijack) "" Nothing
|
||||||
|
|
||||||
|
return (uid <$ uidResult <* btnResult, mconcat [toWidget csrf, fvInput uidView, fvInput btnView])
|
||||||
|
|
||||||
getUsersR :: Handler Html
|
getUsersR :: Handler Html
|
||||||
getUsersR = do
|
getUsersR = do
|
||||||
let
|
let
|
||||||
@ -53,6 +59,13 @@ getUsersR = do
|
|||||||
<li>#{sh}
|
<li>#{sh}
|
||||||
|]
|
|]
|
||||||
}
|
}
|
||||||
|
, sortable Nothing mempty $ \DBRow{ dbrOutput = Entity uid _ } -> cell $ do
|
||||||
|
(hijackView, hijackEnctype) <- liftHandlerT . generateFormPost $ hijackUserForm uid
|
||||||
|
cID <- encrypt uid
|
||||||
|
[whamlet|
|
||||||
|
<form method=POST action=@{AdminHijackUserR cID} enctype=#{hijackEnctype}>
|
||||||
|
^{hijackView}
|
||||||
|
|]
|
||||||
]
|
]
|
||||||
psValidator = def
|
psValidator = def
|
||||||
& defaultSorting [("display-name", SortAsc)]
|
& defaultSorting [("display-name", SortAsc)]
|
||||||
@ -73,3 +86,17 @@ getUsersR = do
|
|||||||
defaultLayout $ do
|
defaultLayout $ do
|
||||||
setTitleI MsgUserListTitle
|
setTitleI MsgUserListTitle
|
||||||
$(widgetFile "users")
|
$(widgetFile "users")
|
||||||
|
|
||||||
|
postAdminHijackUserR :: CryptoUUIDUser -> Handler TypedContent
|
||||||
|
postAdminHijackUserR cID = do
|
||||||
|
uid <- decrypt cID
|
||||||
|
((hijackRes, _), _) <- runFormPost $ hijackUserForm uid
|
||||||
|
|
||||||
|
case hijackRes of
|
||||||
|
FormSuccess uid'
|
||||||
|
| uid' == uid -> do
|
||||||
|
User{..} <- runDB $ get404 uid
|
||||||
|
setCredsRedirect $ Creds "dummy" (userPlugin <> ":" <> userIdent) []
|
||||||
|
| otherwise -> error "This should be impossible by definition of `hijackUserForm`"
|
||||||
|
FormFailure errs -> toTypedContent <$> mapM_ (addMessage "error" . toHtml) errs
|
||||||
|
FormMissing -> return $ toTypedContent ()
|
||||||
|
|||||||
@ -142,6 +142,18 @@ instance Button RegisterButton where
|
|||||||
cssClass BtnRegister = BCPrimary
|
cssClass BtnRegister = BCPrimary
|
||||||
cssClass BtnDeregister = BCDanger
|
cssClass BtnDeregister = BCDanger
|
||||||
|
|
||||||
|
data AdminHijackUserButton = BtnHijack
|
||||||
|
deriving (Enum, Eq, Ord, Bounded, Read, Show)
|
||||||
|
|
||||||
|
instance PathPiece AdminHijackUserButton where
|
||||||
|
toPathPiece = showToPathPiece
|
||||||
|
fromPathPiece = readFromPathPiece
|
||||||
|
|
||||||
|
instance Button AdminHijackUserButton where
|
||||||
|
label BtnHijack = [whamlet|_{MsgBtnHijack}|]
|
||||||
|
|
||||||
|
cssClass BtnHijack = BCDefault
|
||||||
|
|
||||||
|
|
||||||
-- -- Looks like a button, but is just a link (e.g. for create course, etc.)
|
-- -- Looks like a button, but is just a link (e.g. for create course, etc.)
|
||||||
-- data LinkButton = LinkButton (Route UniWorX)
|
-- data LinkButton = LinkButton (Route UniWorX)
|
||||||
|
|||||||
Reference in New Issue
Block a user