From fdd6b1a194fd2d4a1deb399cd3914e63e167d30a Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Fri, 24 Apr 2020 13:30:20 +0200 Subject: [PATCH] feat(help): attach last error message --- config/settings.yml | 2 +- messages/uniworx/de-de-formal.msg | 4 + src/Foundation.hs | 99 ++++++++++++++-------- src/Handler/Help.hs | 76 +++++++++++++---- src/Jobs/Handler/HelpRequest.hs | 16 +++- src/Jobs/Types.hs | 3 +- src/Mail.hs | 23 +++-- src/Network/HTTP/Types/Method/Instances.hs | 11 +++ src/Utils.hs | 33 ++++++++ src/Utils/Session.hs | 1 + src/Yesod/Core/Instances.hs | 15 ++++ start.sh | 1 + templates/mail/support.hamlet | 10 ++- 13 files changed, 228 insertions(+), 66 deletions(-) diff --git a/config/settings.yml b/config/settings.yml index a810f4c83..85cd909e6 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -67,6 +67,7 @@ ip-retention-time: 1209600 # Debugging auth-dummy-login: "_env:DUMMY_LOGIN:false" allow-deprecated: "_env:ALLOW_DEPRECATED:false" +encrypt-errors: "_env:ENCRYPT_ERRORS:true" server-session-acid-fallback: "_env:SERVER_SESSION_ACID_FALLBACK:false" auth-pw-hash: @@ -78,7 +79,6 @@ auth-pw-hash: # reload-templates: false # mutable-static: false # skip-combining: false -# encrypt-errors: true database: user: "_env:PGUSER:uniworx" diff --git a/messages/uniworx/de-de-formal.msg b/messages/uniworx/de-de-formal.msg index f7548e2af..11772317c 100644 --- a/messages/uniworx/de-de-formal.msg +++ b/messages/uniworx/de-de-formal.msg @@ -1075,6 +1075,10 @@ HelpRequest: Supportanfrage / Verbesserungsvorschlag HelpProblemPage: Problematische Seite HelpIntroduction: Wenn Ihnen die Benutzung dieser Webseite Schwierigkeiten bereitet oder Sie einen verbesserbaren Umstand entdecken bitten wir Sie uns das zu melden, auch wenn Sie Ihr Problem bereits selbst lösen konnten. Wir passen die Seite ständig an und versuchen sie auch für zukünftige Benutzer so einsichtig wie möglich zu halten. HelpSent: Ihre Supportanfrage wurde weitergeleitet. +HelpSendLastError: Letzte Fehlermeldung anhängen +HelpError: Letzte Fehlermeldung +HelpErrorYamlFilename mailId@MailObjectId: fehlermeldung-#{toPathPiece mailId}.yaml +HelpErrorOrRequestRequired: Bitte geben Sie entweder eine Supportanfrage bzw. einen Verbesserungsvorschlag an oder hängen Sie die letzte Fehlermeldung an InfoLecturerTitle: Hinweise für Veranstalter diff --git a/src/Foundation.hs b/src/Foundation.hs index 12d149392..77f0828d8 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -1624,43 +1624,70 @@ instance Yesod UniWorX where defaultMessageWidget _title _body = error "defaultMessageWidget: undefined" errorHandler err = do - mr <- getMessageRender - let - encrypted :: ToJSON a => a -> Widget -> Widget - encrypted plaintextJson plaintext = do - canDecrypt <- (== Authorized) <$> evalAccess AdminErrMsgR True - shouldEncrypt <- getsYesod $ view _appEncryptErrors - if - | shouldEncrypt - , not canDecrypt -> do - ciphertext <- encodedSecretBox SecretBoxPretty plaintextJson + shouldEncrypt <- do + canDecrypt <- (== Authorized) <$> evalAccess AdminErrMsgR True + shouldEncrypt <- getsYesod $ view _appEncryptErrors + return $ shouldEncrypt && not canDecrypt - [whamlet| -

_{MsgErrorResponseEncrypted} -

-                    #{ciphertext}
-                |]
-            | otherwise -> plaintext
+      sessErr <- bool return (_InternalError $ encodedSecretBox SecretBoxShort) shouldEncrypt err
+      setSessionJson SessionError sessErr
 
-        errPage = case err of
-          NotFound -> [whamlet|

_{MsgErrorResponseNotFound}|] - InternalError err' -> encrypted err' [whamlet|

#{err'}|] - InvalidArgs errs -> [whamlet| -