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() } }