From 8ed9415c68d02a27a984549011c0f917220fba6b Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Tue, 24 May 2022 21:54:45 +0200 Subject: [PATCH] admin: Read challenge.json from imported directory --- admin/api/settings.go | 9 ++++++++- admin/api/theme.go | 7 ++++++- settings/challenge.go | 18 +++++++----------- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/admin/api/settings.go b/admin/api/settings.go index 2fed7856..a9e76b13 100644 --- a/admin/api/settings.go +++ b/admin/api/settings.go @@ -57,7 +57,14 @@ func getROSettings(c *gin.Context) { } func getChallengeInfo(c *gin.Context) { - s, err := settings.ReadChallengeInfo(path.Join(settings.SettingsDir, settings.ChallengeFile)) + challengeinfo, err := sync.GetFileContent(sync.GlobalImporter, "challenge.json") + if err != nil { + log.Println("Unable to retrieve challenge.json:", err.Error()) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to retrive challenge.json: %s", err.Error())}) + return + } + + s, err := settings.ReadChallengeInfo(challengeinfo) if err != nil { log.Println("Unable to ReadChallengeInfo:", err.Error()) c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to read challenge info: %s", err.Error())}) diff --git a/admin/api/theme.go b/admin/api/theme.go index bd0c4565..468e51a9 100644 --- a/admin/api/theme.go +++ b/admin/api/theme.go @@ -23,7 +23,12 @@ func declareThemesRoutes(router *gin.RouterGroup) { log.Printf("Unable to ReadSettings: %s", err.Error()) c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during settings reading."}) return - } else if ch, err := settings.ReadChallengeInfo(path.Join(settings.SettingsDir, settings.ChallengeFile)); err != nil { + + } else if challengeinfo, err := sync.GetFileContent(sync.GlobalImporter, "challenge.json"); err != nil { + log.Println("Unable to retrieve challenge.json:", err.Error()) + c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": fmt.Sprintf("Unable to retrive challenge.json: %s", err.Error())}) + return + } else if ch, err := settings.ReadChallengeInfo(challengeinfo); err != nil { log.Printf("Unable to ReadChallengeInfo: %s", err.Error()) c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"errmsg": "An error occurs during challenge info reading."}) return diff --git a/settings/challenge.go b/settings/challenge.go index 456a85a3..a6b38dee 100644 --- a/settings/challenge.go +++ b/settings/challenge.go @@ -3,6 +3,7 @@ package settings import ( "encoding/json" "os" + "strings" ) // ChallengeFile is the expected name of the file containing the challenge infos. @@ -28,20 +29,15 @@ type ChallengeInfo struct { } // ReadChallenge parses the file at the given location. -func ReadChallengeInfo(path string) (*ChallengeInfo, error) { +func ReadChallengeInfo(content string) (*ChallengeInfo, error) { var s ChallengeInfo - if fd, err := os.Open(path); err != nil { - return nil, err - } else { - defer fd.Close() - jdec := json.NewDecoder(fd) + jdec := json.NewDecoder(strings.NewReader(content)) - if err := jdec.Decode(&s); err != nil { - return &s, err - } - - return &s, nil + if err := jdec.Decode(&s); err != nil { + return &s, err } + + return &s, nil } // SaveChallenge saves challenge at the given location.