125 lines
3.4 KiB
Go
125 lines
3.4 KiB
Go
package admin
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"main.go/api"
|
|
db "main.go/database"
|
|
. "main.go/type"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// CrDb 专门用作给数据替换。
|
|
type CrDb struct {
|
|
Name string `json:"name" binding:"required"`
|
|
Score int `json:"score" binding:"required"`
|
|
Flag string `json:"flag"` // 暂时一个题只能一个flag
|
|
Description string `json:"description"`
|
|
Attachment string `json:"attachment"`
|
|
Category string `json:"category" binding:"required"`
|
|
Tags string `json:"tags"`
|
|
Hints string `json:"hints"`
|
|
Visible int `json:"visible"`
|
|
}
|
|
|
|
//NewChallenge 新建一个题目
|
|
func NewChallenge(c *gin.Context) {
|
|
var request ChallengeRequest
|
|
if err := c.ShouldBindJSON(&request); err != nil {
|
|
fmt.Println(err)
|
|
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
|
return
|
|
}
|
|
challenge := &Challenge{
|
|
Name: request.Name,
|
|
Score: request.Score,
|
|
Flag: request.Flag,
|
|
Description: request.Description,
|
|
Attachment: request.Attachment,
|
|
Category: request.Category,
|
|
Tags: request.Tags,
|
|
Hints: request.Hints,
|
|
Visible: request.Visible,
|
|
}
|
|
if err := addChallenge(challenge); err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "msg": "Add challenge failure!"})
|
|
return
|
|
}
|
|
|
|
c.JSON(200, gin.H{"code": 200, "msg": "Add challenge success!"})
|
|
}
|
|
|
|
//addChallenge 添加题目内容
|
|
func addChallenge(c *Challenge) error {
|
|
api.Link()
|
|
DB := db.DBsnctf
|
|
// 使用逗号分隔字符串
|
|
attachmentString := strings.Join(c.Attachment, ",")
|
|
hintString := strings.Join(c.Hints, ",")
|
|
crdb := &CrDb{
|
|
Name: c.Name,
|
|
Score: c.Score,
|
|
Flag: c.Flag,
|
|
Description: c.Description,
|
|
Attachment: attachmentString,
|
|
Category: c.Category,
|
|
Tags: c.Tags,
|
|
Hints: hintString,
|
|
Visible: c.Visible,
|
|
}
|
|
//插入数据
|
|
err := DB.Table("challenge").Create(crdb).Error
|
|
//command := "INSERT INTO challenge (name,score,flag,description,attachment,category,tags,hints,visible) VALUES (?,?,?,?,?,?,?,?,?);"
|
|
//err := DB.Debug().Raw(command,c.Name, c.Score, c.Flag, c.Description, attachmentString, c.Category, c.Tags, hintString, c.Visible).Error
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// DelChallenge 删除题目
|
|
func DelChallenge(c *gin.Context) {
|
|
api.Link()
|
|
DB := db.DBsnctf
|
|
id := c.Param("id")
|
|
err := DB.Table("challenge").Where("id = ?", id).Delete(&Challenge{}).Error
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "msg": "Delete challenge failure!"})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"code": 200, "msg": "Delete challenge success!"})
|
|
}
|
|
|
|
// EditChallenge 修改题目
|
|
func EditChallenge(c *gin.Context) {
|
|
api.Link()
|
|
DB := db.DBsnctf
|
|
id := c.Param("id")
|
|
cid, _ := strconv.Atoi(id)
|
|
var request ChallengeRequest
|
|
if err := c.ShouldBindJSON(&request); err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "msg": "Request format wrong!"})
|
|
return
|
|
}
|
|
challenge := &Challenge{
|
|
ID: cid,
|
|
Name: request.Name,
|
|
Score: request.Score,
|
|
Flag: request.Flag,
|
|
Description: request.Description,
|
|
Attachment: request.Attachment,
|
|
Category: request.Category,
|
|
Tags: request.Tags,
|
|
Hints: request.Hints,
|
|
Visible: request.Visible,
|
|
}
|
|
err := DB.Table("challenge").Where("id = ?", cid).Updates(challenge).Error
|
|
if err != nil {
|
|
c.JSON(400, gin.H{"code": 400, "msg": "Update challenge failure!"})
|
|
return
|
|
}
|
|
c.JSON(200, gin.H{"code": 200, "msg": "Update challenge success!"})
|
|
|
|
}
|