diff --git a/src/Handler/Exam/Correct.hs b/src/Handler/Exam/Correct.hs index 772fcef85..fbd89ff81 100644 --- a/src/Handler/Exam/Correct.hs +++ b/src/Handler/Exam/Correct.hs @@ -17,6 +17,11 @@ import Handler.Utils.Exam (fetchExam) import Utils.Exam +-- | Minimum length of a participant identifier. Identifiers that are shorter would result in too many query results and are therefor rejected. +minNeedleLength :: Int +minNeedleLength = 3 + + getECorrectR :: TermId -> SchoolId -> CourseShorthand -> ExamName -> Handler Html getECorrectR tid ssh csh examn = do MsgRenderer mr <- getMsgRenderer @@ -54,12 +59,12 @@ postECorrectR tid ssh csh examn = do CorrectInterfaceRequest{..} <- requireCheckJsonBody mayEditResults <- hasWriteAccessTo $ CExamR tid ssh csh examn EUsersR - + response <- runDB . exceptT (<$ transactionUndo) return $ do Entity eId Exam{..} <- lift $ fetchExam tid ssh csh examn euid <- traverse decrypt ciqUser - guardMExceptT (maybe True ((>= 3) . length) $ euid ^? _Left) $ + guardMExceptT (maybe True ((>= minNeedleLength) . length) $ euid ^? _Left) $ CorrectInterfaceResponseFailure Nothing <$> (getMessageRender <*> pure MsgExamCorrectErrorNeedleTooShort) diff --git a/src/Handler/ExternalExam/Correct.hs b/src/Handler/ExternalExam/Correct.hs index 349dd6154..18583e385 100644 --- a/src/Handler/ExternalExam/Correct.hs +++ b/src/Handler/ExternalExam/Correct.hs @@ -15,6 +15,10 @@ import Handler.Utils.ExternalExam import Utils.Exam +-- | Minimum length of a participant identifier. Identifiers that are shorter would result in too many query results and are therefor rejected. +minNeedleLength :: Int +minNeedleLength = 3 -- TODO rethink + getEECorrectR :: TermId -> SchoolId -> CourseName -> ExamName -> Handler Html getEECorrectR tid ssh coursen examn = do @@ -59,7 +63,7 @@ postEECorrectR tid ssh coursen examn = do Entity eeId ExternalExam{..} <- lift $ fetchExternalExam tid ssh coursen examn euid <- traverse decrypt ciqUser - guardMExceptT (maybe True ((>= 3) . length) $ euid ^? _Left) $ -- TODO rethink max needle length + guardMExceptT (maybe True ((>= minNeedleLength) . length) $ euid ^? _Left) $ CorrectInterfaceResponseFailure Nothing <$> (getMessageRender <*> pure MsgExamCorrectErrorNeedleTooShort) matches <- lift . E.select . E.from $ \user -> do diff --git a/templates/exam-correct.hamlet b/templates/exam-correct.hamlet index 47ab48deb..309889bc1 100644 --- a/templates/exam-correct.hamlet +++ b/templates/exam-correct.hamlet @@ -23,7 +23,7 @@ $newline never