From 5dbf60eaa214f684425ebed29c3402aee08c3d30 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 8 Dec 2018 03:13:16 +0100 Subject: [PATCH] admin: new route to try a flag --- admin/api/exercice.go | 18 ++++++++++++++++++ admin/static/js/app.js | 15 +++++++++++++++ admin/static/views/exercice.html | 14 ++++++++++++-- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/admin/api/exercice.go b/admin/api/exercice.go index 13429e29..7bb43b09 100644 --- a/admin/api/exercice.go +++ b/admin/api/exercice.go @@ -35,6 +35,7 @@ func init() { router.POST("/api/exercices/:eid/flags", apiHandler(exerciceHandler(createExerciceFlag))) router.GET("/api/exercices/:eid/flags/:kid", apiHandler(flagHandler(showExerciceFlag))) router.PUT("/api/exercices/:eid/flags/:kid", apiHandler(flagHandler(updateExerciceFlag))) + router.POST("/api/exercices/:eid/flags/:kid/try", apiHandler(flagHandler(tryExerciceFlag))) router.DELETE("/api/exercices/:eid/flags/:kid", apiHandler(flagHandler(deleteExerciceFlag))) router.GET("/api/exercices/:eid/flags/:kid/choices/", apiHandler(flagHandler(listFlagChoices))) router.GET("/api/exercices/:eid/flags/:kid/choices/:cid", apiHandler(choiceHandler(showFlagChoice))) @@ -300,6 +301,23 @@ func showExerciceFlag(flag fic.Flag, _ fic.Exercice, body []byte) (interface{}, return flag, nil } +func tryExerciceFlag(flag fic.Flag, _ fic.Exercice, body []byte) (interface{}, error) { + var uk uploadedFlag + if err := json.Unmarshal(body, &uk); err != nil { + return nil, err + } + + if len(uk.Flag) == 0 { + return nil, errors.New("Empty submission") + } + + if flag.Check([]byte(uk.Flag)) { + return true, nil + } else { + return nil, errors.New("Bad submission") + } +} + func updateExerciceFlag(flag fic.Flag, exercice fic.Exercice, body []byte) (interface{}, error) { var uk uploadedFlag if err := json.Unmarshal(body, &uk); err != nil { diff --git a/admin/static/js/app.js b/admin/static/js/app.js index a149e4dd..68a68140 100644 --- a/admin/static/js/app.js +++ b/admin/static/js/app.js @@ -1210,6 +1210,21 @@ angular.module("FICApp") } $rootScope.staticFilesNeedUpdate++; } + $scope.testFlag = function(flag) { + if (flag.test_str) { + $http({ + url: "/api/exercices/" + $routeParams.exerciceId + "/flags/" + flag.id + "/try", + data: {"flag": flag.test_str}, + method: "POST" + }).then(function(response) { + flag.test_str = ""; + $rootScope.newBox('success', "Flag Ok !"); + }, function(response) { + flag.test_str = ""; + $rootScope.newBox('danger', 'An error occurs: ', response.data.errmsg); + }); + } + } $scope.inSync = false; $scope.syncFlags = function() { $scope.inSync = true; diff --git a/admin/static/views/exercice.html b/admin/static/views/exercice.html index 246e7a8c..2717539f 100644 --- a/admin/static/views/exercice.html +++ b/admin/static/views/exercice.html @@ -105,7 +105,8 @@ -
+
+
@@ -129,7 +130,16 @@
- + +
+
+ +
+ +
+
+
+