default
This commit is contained in:
153
api/solve.go
Normal file
153
api/solve.go
Normal file
@@ -0,0 +1,153 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"github.com/gin-gonic/gin"
|
||||
db "main.go/database"
|
||||
."main.go/type"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
//GetAllSolves 获取所有解题记录
|
||||
func GetAllSolves(c *gin.Context){
|
||||
var solves []SolveResponse
|
||||
|
||||
if err := getAllSolves(&solves); err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get all solves failure!"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"code": 200, "data": solves})
|
||||
}
|
||||
//GetSolvesByCid 获取某个用户的所有解题记录
|
||||
func GetSolvesByCid(c *gin.Context){
|
||||
var solves []SolveResponse
|
||||
|
||||
cid, err := strconv.ParseInt(c.Param("cid"), 10, 64)
|
||||
if err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get solves failure!"})
|
||||
return
|
||||
}
|
||||
|
||||
if err := getSolvesByCid(&solves, int(cid)); err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get solves failure!"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"code": 200, "data": solves})
|
||||
}
|
||||
|
||||
// GetSolvesByUid 根据用户id获取正确的flag提交记录。
|
||||
func GetSolvesByUid(c *gin.Context) {
|
||||
uid, err := strconv.ParseInt(c.Param("uid"), 10, 64)
|
||||
if err != nil {
|
||||
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Wrong uid!"})
|
||||
return
|
||||
}
|
||||
|
||||
if uid == 1 {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Not allowed!"})
|
||||
return
|
||||
}
|
||||
|
||||
var solves []SolveResponse
|
||||
if err := getSolvesByUid(&solves, int(uid)); err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get specified solves failure!"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"code": 200, "data": solves})
|
||||
}
|
||||
|
||||
// GetSelfSolves 获取当前用户的所有解题记录
|
||||
func GetSelfSolves(c *gin.Context){
|
||||
var solves []SolveResponse
|
||||
|
||||
session, err := Store.Get(c.Request, "SNCTFSESSID")
|
||||
if err != nil {
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "Get SNCTFSESSID error"})
|
||||
return
|
||||
}
|
||||
user, ok := session.Values["user"].(User)
|
||||
if !ok {
|
||||
c.JSON(200, gin.H{"code": 400, "msg": "No session"})
|
||||
return
|
||||
}
|
||||
|
||||
if err := getSolvesByUid(&solves, user.ID); err != nil {
|
||||
c.JSON(400, gin.H{"code": 400, "msg": "Get self solves failure!"})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(200, gin.H{"code": 200, "data": solves})
|
||||
}
|
||||
|
||||
// getSolverCount 操作数据库获取指定id题目的解出人数。
|
||||
func getSolverCount(id int) (count int, err error) {
|
||||
Link()
|
||||
DB := db.DBsnctf
|
||||
//SELECT COUNT(*) FROM solve WHERE cid = ?;
|
||||
err = DB.Table("solve").Select("COUNT(*)").Where("cid = ?", id).Scan(&count).Error
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
|
||||
|
||||
|
||||
// getAllSolves 操作数据库获取所有正确的提交记录,按提交时间从早到晚排序。
|
||||
func getAllSolves(solves *[]SolveResponse) error {
|
||||
DB :=db.DBsnctf
|
||||
rows,err := DB.Raw("SELECT s.id, s.uid, s.cid, u.username, c.name, s.submitted_at, c.score FROM solve AS s, user AS u, challenge AS c WHERE u.hidden=0 AND s.uid=u.id AND s.cid=c.id ORDER BY s.submitted_at ASC;").Rows()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var s SolveResponse
|
||||
err = rows.Scan(&s.ID, &s.Uid, &s.Cid, &s.Username, &s.ChallengeName, &s.SubmittedAt, &s.Score)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*solves = append(*solves, s)
|
||||
}
|
||||
return rows.Err()
|
||||
}
|
||||
|
||||
// getSolvesByUid 操作数据库根据用户id获取正确的flag提交记录,按提交时间从早到晚排序。
|
||||
func getSolvesByUid(solves *[]SolveResponse, uid int) error {
|
||||
DB :=db.DBsnctf
|
||||
rows,err := DB.Debug().Raw("SELECT s.id, s.uid, s.cid, u.username, c.name, s.submitted_at, c.score FROM solve AS s, user AS u, challenge AS c WHERE u.hidden=0 AND s.uid=? AND u.id=s.uid AND c.id=s.cid ORDER BY s.submitted_at ASC;",uid).Rows()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var s SolveResponse
|
||||
err = rows.Scan(&s.ID, &s.Uid, &s.Cid, &s.Username, &s.ChallengeName, &s.SubmittedAt, &s.Score)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*solves = append(*solves, s)
|
||||
}
|
||||
return rows.Err()
|
||||
}
|
||||
// getSolvesByCid 操作数据库根据题目id获取正确的提交记录,按提交时间从早到晚排序。
|
||||
func getSolvesByCid(solves *[]SolveResponse, cid int) error {
|
||||
DB :=db.DBsnctf
|
||||
rows,err := DB.Raw("SELECT s.id, s.uid, s.cid, u.username, c.name, s.submitted_at, c.score FROM solve AS s, user AS u, challenge AS c WHERE u.hidden=0 AND s.cid=? AND u.id=s.uid AND c.id=s.cid ORDER BY s.submitted_at ASC;",cid).Rows()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var s SolveResponse
|
||||
err = rows.Scan(&s.ID, &s.Uid, &s.Cid, &s.Username, &s.ChallengeName, &s.SubmittedAt, &s.Score)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*solves = append(*solves, s)
|
||||
}
|
||||
return rows.Err()
|
||||
}
|
Reference in New Issue
Block a user