From f1cf4ed3cf6dfe9c7c539068e3bd87d157539b21 Mon Sep 17 00:00:00 2001 From: jiayuqi7813 <63686458+jiayuqi7813@users.noreply.github.com> Date: Tue, 7 Jun 2022 13:29:23 +0800 Subject: [PATCH] fix bug --- api/challenge.go | 54 +++++++++++++++++++++++++++++++++++++++++------ snctf.db | Bin 65536 -> 65536 bytes 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/api/challenge.go b/api/challenge.go index 7b1da66..243767d 100644 --- a/api/challenge.go +++ b/api/challenge.go @@ -11,7 +11,7 @@ import ( //GetAllChallenges 获取全部题目 -func GetAllChallenges(c * gin.Context){ +func GetAllChallenges(c *gin.Context) { var challenges []ChallengeResponse if err := getAllChallenges(c, &challenges); err != nil { @@ -25,33 +25,75 @@ func GetAllChallenges(c * gin.Context){ //GetChallengesByCategory 获取某个分类下的题目 -func GetChallengesByCategory(c *gin.Context){ +func GetChallengesByCategory(c *gin.Context) { category := c.Param("category") if matched := CheckCategory(category); !matched { c.JSON(400, gin.H{"code": 400, "msg": "Wrong category!"}) return } var challenges []ChallengeResponse - if err := getAllChallenges(c, &challenges); err != nil { + if err := getCategory(c, &challenges); err != nil { c.JSON(400, gin.H{"code": 400, "msg": "Get all challenges failure!"}) return } c.JSON(200, gin.H{"code": 200, "data": challenges}) - } +//getCategory 操作数据库获取某个分类下的题目 +func getCategory(c *gin.Context, challenges *[]ChallengeResponse) error { + var attachmentString, hints string + Link() + DB := db.DBsnctf + category := c.Param("category") + rows, err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1 AND category=?;", category).Rows() + if err != nil { + return err + } + defer rows.Close() + for rows.Next() { + var challenge ChallengeResponse + err = rows.Scan(&challenge.ID, &challenge.Name, &challenge.Score, &challenge.Description, &attachmentString, &challenge.Category, &challenge.Tags, &hints) + fmt.Println(err) + if err != nil { + return err + } + // 解析为切片 + challenge.Attachment = strings.Split(attachmentString, ",") + challenge.Hints = strings.Split(hints, ",") + + solverCount, err := getSolverCount(challenge.ID) + if err != nil { + return err + } + challenge.SolverCount = solverCount + session, err := Store.Get(c.Request, "SNCTFSESSID") + if err != nil { + c.JSON(200, gin.H{"code": 400, "msg": "Get SNCTFSESSID error"}) + return err + } + user, ok := session.Values["user"].(User) + if !ok { + c.JSON(200, gin.H{"code": 400, "msg": "No session"}) + return errors.New("no session") + } + challenge.IsSolved = hasAlreadySolved(user.ID, challenge.ID) + *challenges = append(*challenges, challenge) + } + return rows.Err() + +} // getAllChallenges 操作数据库获取所有题目。 func getAllChallenges(c *gin.Context, challenges *[]ChallengeResponse) error { var attachmentString, hints string Link() DB := db.DBsnctf - rows,err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1;").Rows() + rows, err := DB.Raw("SELECT id, name, score, description, attachment, category, tags, hints FROM challenge WHERE visible=1;").Rows() if err != nil { return err } defer rows.Close() - for rows.Next(){ + for rows.Next() { var challenge ChallengeResponse err = rows.Scan(&challenge.ID, &challenge.Name, &challenge.Score, &challenge.Description, &attachmentString, &challenge.Category, &challenge.Tags, &hints) fmt.Println(err) diff --git a/snctf.db b/snctf.db index ad9af13ac27abbaab08fb1953dcc746ca6bbdc62..9a96cdbf5ab02d90d30dca3f9f91dcaa3747111c 100644 GIT binary patch delta 32 ocmZo@U}z>% delta 32 ocmZo@U}