Files
SNCTF/routers/router.go
2022-07-20 22:29:16 +08:00

118 lines
3.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package routers
import (
"github.com/gin-gonic/gin"
"main.go/api"
"main.go/api/admin"
)
func Initrouter() {
router := gin.Default()
router.Use(Cors())
api_v1 := router.Group("/api/v1")
//公共接口(无需登录)
public := api_v1.Group("")
{
//用户登录
public.POST("/login", api.Login)
//用户注册
public.POST("/register", api.Register)
//用户登出
public.GET("/logout", api.Logout)
//获取指定id用户可公开信息
public.GET("/user/:id", api.GetInfoByUserId)
//获取指定id用户分数
public.GET("/score/:id", api.GetScoreByUserId)
//获取所有用户分数,降序排列
public.GET("/score", api.GetAllScore)
//获取全部公告
public.GET("/notice", api.GetAllNotices)
}
// 普通用户api需要用户登陆且Role=0才能访问
personal := api_v1.Group("/user")
personal.Use(api.AuthRequired())
{
// 获取当前用户信息
personal.GET("/session", api.Session)
// 修改当前用户的信息
personal.PUT("/userinfo", api.UpdateUserInfo)
// 获取题目分类
personal.GET("/category", api.GetCategories)
// 获取所有题目信息
personal.GET("/challenges/all", api.GetAllChallenges)
// 获取指定分类题目信息
personal.GET("/challenges/:category", api.GetChallengesByCategory)
// 提交flag
personal.POST("/submitflag", api.SubmitFlag)
// 获取所有正确的flag提交记录
personal.GET("/solves/all", api.GetAllSolves)
// 获取指定用户正确的flag提交记录
personal.GET("/solves/uid/:uid", api.GetSolvesByUid)
// 获取指定题目正确的flag提交记录
personal.GET("/solves/cid/:cid", api.GetSolvesByCid)
// 获取当前用户正确flag提交记录即解题记录按时间从早到晚排序
personal.GET("/solves/self", api.GetSelfSolves)
// 获取当前用户分数、排名
personal.GET("/score/self", api.GetSelfScoreAndRank)
// 获取所有用户信息
personal.GET("/users", api.GetAllUserInfo)
// 校内排行api暂时留空
}
// 管理员api需要用户登陆且Role=1才能访问
manager := api_v1.Group("/admin")
manager.Use(admin.AuthRequired())
{
// 创建新题目
manager.POST("/challenge", admin.NewChallenge)
// 删除题目 测试通过,但是分数不会同步删除
manager.DELETE("/challenge/:id", admin.DelChallenge)
// 获取所有题目,包括不可见题目
manager.GET("/challenges", admin.GetAllChallenges)
// 更新题目信息
manager.PUT("/challenge/:id", admin.EditChallenge)
//创建新公告
manager.POST("/notice", api.AddNewNotices)
//删除公告
manager.DELETE("/notice/:id", api.DelNotice)
//显示数据库中所有用户信息
manager.GET("/users", admin.GetAllUserInfo)
//删除用户信息
manager.DELETE("/user/:id", admin.DelUser)
//修改用户信息
manager.PUT("/user/:id", admin.EditUser)
//新增用户
manager.POST("/user", admin.AddUser)
}
err := router.Run(":9000")
if err != nil {
return
}
}
// 跨域
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
origin := c.Request.Header.Get("Origin") //请求头部
if origin != "" {
c.Header("Access-Control-Allow-Origin", origin) //"http://172.20.10.10:8081")
c.Header("Access-Control-Allow-Headers", "Content-Category, AccessToken, X-CSRF-Token, Authorization, Token, Content-Type")
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PATCH, DELETE, PUT")
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Category")
c.Header("Access-Control-Max-Age", "172800")
c.Header("Access-Control-Allow-Credentials", "true")
}
if method == "OPTIONS" {
c.JSON(200, "ok")
}
// 处理请求
c.Next()
}
}