Merge branch 'master' of gitlab.ifi.lmu.de:fradrive/fradrive

This commit is contained in:
Sarah Vaupel 2023-05-01 17:27:50 +00:00
commit ef7c61ff11
4 changed files with 76 additions and 66 deletions

View File

@ -111,15 +111,15 @@ CampusUserInvalidFeaturesOfStudy parseErr@Text: Konnte anhand des Fraport Büko-
CampusUserInvalidAssociatedSchools parseErr@Text: Konnte anhand des Fraport Büko-Logins keine Institute ermitteln CampusUserInvalidAssociatedSchools parseErr@Text: Konnte anhand des Fraport Büko-Logins keine Institute ermitteln
InvalidCredentialsADNoSuchObject: Benutzereintrag existiert nicht InvalidCredentialsADNoSuchObject: Benutzereintrag existiert nicht
InvalidCredentialsADLogonFailure: Ungültiges Passwort InvalidCredentialsADLogonFailure: Ungültiges Passwort
InvalidCredentialsADAccountRestriction: Kontobeschränkungen verhindern Login InvalidCredentialsADAccountRestriction: Beschränkungen des Fraport Accounts verhindern Login
InvalidCredentialsADInvalidLogonHours: Benutzer:in darf sich zur aktuellen Tageszeit nicht anmelden InvalidCredentialsADInvalidLogonHours: Benutzer:in darf sich zur aktuellen Tageszeit nicht anmelden
InvalidCredentialsADInvalidWorkstation: Benutzer:in darf sich von diesem System aus nicht anmelden InvalidCredentialsADInvalidWorkstation: Benutzer:in darf sich von diesem System aus nicht anmelden
InvalidCredentialsADPasswordExpired: Passwort abgelaufen InvalidCredentialsADPasswordExpired: Passwort abgelaufen; ändern Sie Ihr Fraport Passwort auf dem üblichen Weg (z.B. E-Account Nutzer per Azure-Portal)
InvalidCredentialsADAccountDisabled: Benutzereintrag gesperrt InvalidCredentialsADAccountDisabled: Ihr Fraport Account wurde gesperrt, bitte wenden Sie sich an den allgemeinen IT Support
InvalidCredentialsADTooManyContextIds: Benutzereintrag trägt zu viele Sicherheitskennzeichen InvalidCredentialsADTooManyContextIds: Benutzereintrag trägt zu viele Sicherheitskennzeichen
InvalidCredentialsADAccountExpired: Benutzereintrag abgelaufen InvalidCredentialsADAccountExpired: Benutzereintrag abgelaufen, bitte wenden Sie sich an den allgemeinen IT Support
InvalidCredentialsADPasswordMustChange: Passwort muss geändert werden InvalidCredentialsADPasswordMustChange: Passwort muss geändert werden; ändern Sie Ihr Fraport Passwort auf dem üblichen Weg (z.B. E-Account Nutzer per Azure-Portal)
InvalidCredentialsADAccountLockedOut: Benutzereintrag wurde durch Eindringlingserkennung gesperrt InvalidCredentialsADAccountLockedOut: Benutzereintrag wurde durch Eindringlingserkennung gesperrt, bitte wenden Sie sich an den allgemeinen IT Support
LoginTitle: Authentifizierung LoginTitle: Authentifizierung

View File

@ -111,16 +111,16 @@ CampusUserInvalidTitle: Could not determine title during Fraport Büko login
CampusUserInvalidFeaturesOfStudy parseErr: Could not determine features of study during Fraport Büko login CampusUserInvalidFeaturesOfStudy parseErr: Could not determine features of study during Fraport Büko login
CampusUserInvalidAssociatedSchools parseErr: Could not determine associated departments during Fraport Büko login CampusUserInvalidAssociatedSchools parseErr: Could not determine associated departments during Fraport Büko login
InvalidCredentialsADNoSuchObject: User entry does not exist InvalidCredentialsADNoSuchObject: User entry does not exist
InvalidCredentialsADLogonFailure: Invalid passwod InvalidCredentialsADLogonFailure: Invalid password
InvalidCredentialsADAccountRestriction: Account restrictions are preventing login InvalidCredentialsADAccountRestriction: Restrictions on your Fraport account prevent a login
InvalidCredentialsADInvalidLogonHours: User may not login at the current time of day InvalidCredentialsADInvalidLogonHours: User may not login at the current time of day
InvalidCredentialsADInvalidWorkstation: User may not login from this system InvalidCredentialsADInvalidWorkstation: User may not login from this system
InvalidCredentialsADPasswordExpired: Password expired InvalidCredentialsADPasswordExpired: Password expired, please change your Fraport account password by the usual way (eg. E-account users via Azure portal)
InvalidCredentialsADAccountDisabled: Account disabled InvalidCredentialsADAccountDisabled: Fraport account disabled, please contact general IT support
InvalidCredentialsADTooManyContextIds: Account carries to many security identifiers InvalidCredentialsADTooManyContextIds: Account carries to many security identifiers
InvalidCredentialsADAccountExpired: Account expired InvalidCredentialsADAccountExpired: Account expired, please contact general IT support
InvalidCredentialsADPasswordMustChange: Password needs to be changed InvalidCredentialsADPasswordMustChange: Password needs to be changed, please change your Fraport account password by the usual way (eg. E-account users via Azure portal)
InvalidCredentialsADAccountLockedOut: Account disabled by intruder detection InvalidCredentialsADAccountLockedOut: Account disabled by intruder detection, please contact general IT support
LoginTitle: Authentication LoginTitle: Authentication

View File

@ -9,9 +9,9 @@ module Foundation.Yesod.ErrorHandler
import Import.NoFoundation hiding (errorHandler) import Import.NoFoundation hiding (errorHandler)
import Foundation.Type import Foundation.Type
import Foundation.I18n -- import Foundation.I18n
import Foundation.Authorization import Foundation.Authorization
import Foundation.SiteLayout -- import Foundation.SiteLayout
import Foundation.Routes import Foundation.Routes
import Foundation.DB import Foundation.DB
@ -20,15 +20,15 @@ import qualified Data.Text as Text
import qualified Network.Wai as W import qualified Network.Wai as W
import System.Exit -- DEBUG: just for testing -- import System.Exit -- DEBUG: just for testing
import System.Posix.Process -- DEBUG: just for testing -- import System.Posix.Process -- DEBUG: just for testing
errorHandler :: ( MonadSecretBox (HandlerFor UniWorX) errorHandler :: ( MonadSecretBox (HandlerFor UniWorX)
, MonadSecretBox (WidgetFor UniWorX) -- , MonadSecretBox (WidgetFor UniWorX)
, MonadSecretBox (ExceptT EncodedSecretBoxException (HandlerFor UniWorX)) , MonadSecretBox (ExceptT EncodedSecretBoxException (HandlerFor UniWorX))
, MonadAuth (HandlerFor UniWorX) , MonadAuth (HandlerFor UniWorX)
, BearerAuthSite UniWorX , BearerAuthSite UniWorX
, YesodPersistBackend UniWorX ~ SqlBackend -- , YesodPersistBackend UniWorX ~ SqlBackend
) )
=> ErrorResponse -> HandlerFor UniWorX TypedContent => ErrorResponse -> HandlerFor UniWorX TypedContent
errorHandler err = do errorHandler err = do
@ -72,39 +72,51 @@ errorHandler err = do
setSessionJson SessionError sessErr setSessionJson SessionError sessErr
selectRep $ do selectRep $ do
provideRep $ do -- provideRep $ do
mr <- getMessageRender -- mr <- getMessageRender
let -- let
encrypted :: Text -> WidgetFor UniWorX () -> WidgetFor UniWorX () -- encrypted :: Text -> WidgetFor UniWorX () -> WidgetFor UniWorX ()
encrypted plaintextJson plaintext = do -- encrypted plaintextJson plaintext = do
let displayEncrypted ciphertext = -- let displayEncrypted ciphertext =
[whamlet| -- [whamlet|
$newline never -- $newline never
<p>_{MsgErrorResponseEncrypted} -- <p>_{MsgErrorResponseEncrypted}
<pre .literal-error> -- <pre .literal-error>
#{ciphertext} -- #{ciphertext}
|] -- |]
if -- if
| isEncrypted && shouldEncrypt -> displayEncrypted plaintextJson -- | isEncrypted && shouldEncrypt -> displayEncrypted plaintextJson
| shouldEncrypt -> displayEncrypted =<< encodedSecretBox SecretBoxPretty plaintextJson -- | shouldEncrypt -> displayEncrypted =<< encodedSecretBox SecretBoxPretty plaintextJson
| otherwise -> plaintext -- | otherwise -> plaintext
errPage = case err of -- errPage = case err of
NotFound -> [whamlet|<p>_{MsgErrorResponseNotFound}|] -- NotFound -> [whamlet|<p>_{MsgErrorResponseNotFound}|]
InternalError err' -- InternalError err'
| "Crash Button" `isPrefixOf` err' -> liftIO $ exitImmediately ExitSuccess -- DEBUG: just for Testing -- | "Crash Button" `isPrefixOf` err' -> liftIO $ exitImmediately ExitSuccess -- DEBUG: just for Testing
| otherwise -> encrypted err' [whamlet|<p .literal-error>#{fromMaybe err' decrypted}|] -- | otherwise -> encrypted err' [whamlet|<p .literal-error>#{fromMaybe err' decrypted}|]
InvalidArgs errs -> [whamlet| -- InvalidArgs errs -> [whamlet|
<ul> -- <ul>
$forall err' <- errs -- $forall err' <- errs
<li .literal-error> -- <li .literal-error>
#{err'} -- #{err'}
|] -- |]
NotAuthenticated -> [whamlet|<p>_{MsgErrorResponseNotAuthenticated}|] -- NotAuthenticated -> [whamlet|<p>_{MsgErrorResponseNotAuthenticated}|]
PermissionDenied err' -> [whamlet|<p .errMsg>#{err'}|] -- PermissionDenied err' -> [whamlet|<p .errMsg>#{err'}|]
BadMethod method -> [whamlet|<p>_{MsgErrorResponseBadMethod (decodeUtf8 method)}|] -- BadMethod method -> [whamlet|<p>_{MsgErrorResponseBadMethod (decodeUtf8 method)}|]
siteLayout (toWgt . mr $ ErrorResponseTitle err) $ do -- siteLayout (toWgt . mr $ ErrorResponseTitle err) $ do
errPage -- errPage
provideRep $ case err of
PermissionDenied err' -> return err'
InternalError err'
| isEncrypted && shouldEncrypt -> do
addHeader "Encrypted-Error-Message" "True"
return err'
| shouldEncrypt -> do
addHeader "Encrypted-Error-Message" "True"
encodedSecretBox SecretBoxPretty err'
| otherwise -> return $ fromMaybe err' decrypted
InvalidArgs errs -> return . Text.unlines . map (Text.replace "\n" "\n\t") $ errs
_other -> return Text.empty
provideRep . fmap PrettyValue $ case err of provideRep . fmap PrettyValue $ case err of
PermissionDenied err' -> return $ object [ "message" JSON..= err' ] PermissionDenied err' -> return $ object [ "message" JSON..= err' ]
InternalError err' InternalError err'
@ -120,15 +132,3 @@ errorHandler err = do
| otherwise -> return $ object [ "message" JSON..= fromMaybe err' decrypted ] | otherwise -> return $ object [ "message" JSON..= fromMaybe err' decrypted ]
InvalidArgs errs -> return $ object [ "messages" JSON..= errs ] InvalidArgs errs -> return $ object [ "messages" JSON..= errs ]
_other -> return $ object [] _other -> return $ object []
provideRep $ case err of
PermissionDenied err' -> return err'
InternalError err'
| isEncrypted && shouldEncrypt -> do
addHeader "Encrypted-Error-Message" "True"
return err'
| shouldEncrypt -> do
addHeader "Encrypted-Error-Message" "True"
encodedSecretBox SecretBoxPretty err'
| otherwise -> return $ fromMaybe err' decrypted
InvalidArgs errs -> return . Text.unlines . map (Text.replace "\n" "\n\t") $ errs
_other -> return Text.empty

View File

@ -32,10 +32,10 @@ type AVSGetRampLicences = "RampDrivingLicenceInfo" :> ReqBody '[JSON] AvsQueryG
type AVSSetRampLicences = "RampDrivingLicence" :> ReqBody '[JSON] AvsQuerySetLicences :> Post '[JSON] AvsResponseSetLicences type AVSSetRampLicences = "RampDrivingLicence" :> ReqBody '[JSON] AvsQuerySetLicences :> Post '[JSON] AvsResponseSetLicences
avsMaxSetLicenceAtOnce :: Int avsMaxSetLicenceAtOnce :: Int
avsMaxSetLicenceAtOnce = 99 -- maximum input set size for avsQuerySetLicences as enforced by AVS avsMaxSetLicenceAtOnce = 90 -- maximum input set size for avsQuerySetLicences as enforced by AVS
avsMaxGetStatusAtOnce :: Int avsMaxGetStatusAtOnce :: Int
avsMaxGetStatusAtOnce = 990 -- maximum input set size for avsQueryStatus as enforced by AVS avsMaxGetStatusAtOnce = 900 -- maximum input set size for avsQueryStatus as enforced by AVS
avsApi :: Proxy AVS avsApi :: Proxy AVS
@ -105,6 +105,16 @@ mkAvsQuery baseUrl basicAuth cliEnv = AvsQuery
res1 <- rawQueryStatus (AvsQueryStatus avid_1) res1 <- rawQueryStatus (AvsQueryStatus avid_1)
res2 <- splitQueryStatus (AvsQueryStatus avid_2) res2 <- splitQueryStatus (AvsQueryStatus avid_2)
return $ res1 <> res2 return $ res1 <> res2
-- splitQuery :: (a -> Set b) -> (Set b -> a) -> (a -> ClientM c) -> a -> ClientM c
-- splitQuery toSet fromSet rawQuery q
-- | Set.size (toSet q) <= avsMaxGetStatusAtOnce = rawQueryStatus q
-- | otherwise = do
-- let (fromSet -> avid_1,fromSet -> avid_2) = Set.splitAt avsMaxGetStatusAtOnce (toSet q)
-- res1 <- rawQuery avid_1
-- res2 <- splitQuery toSet fromSet rawQuery avid_2
-- return $ fromSet (toSet res1 <> toSet res2)
#endif #endif
----------------------- -----------------------