routes.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package auth
  2. import (
  3. "github.com/gin-gonic/gin"
  4. )
  5. // Routes 注册认证相关路由。
  6. //
  7. // 鉴权归属见 api.md 第二节:
  8. // - /login、/login/totp:匿名;
  9. // - /logout、/totp/setup、/totp/verify:登录(Token 不可用,凭证管理只允许会话);
  10. // - /totp/disable、/password:登录 + TOTP(api.md 2.6、2.7)。
  11. //
  12. // base 提供 Authenticate 中间件已经注入的身份与可见性,本函数只负责权限档位。
  13. func RegisterRoutes(r gin.IRouter, h *Handler) {
  14. r.POST("/api/auth/login", h.Login)
  15. r.POST("/api/auth/login/totp", h.LoginTotp)
  16. sessionOnly := r.Group("/api/auth", RequireSession())
  17. sessionOnly.POST("/logout", h.Logout)
  18. sessionOnly.POST("/totp/setup", h.SetupTotp)
  19. sessionOnly.POST("/totp/verify", h.VerifyTotp)
  20. totpOnly := r.Group("/api/auth", RequireSession(), RequireTotpVerified())
  21. totpOnly.POST("/totp/disable", h.DisableTotp)
  22. totpOnly.POST("/password", h.ChangePassword)
  23. }
  24. // RegisterManageRoutes 注册会话 / 授信设备 / Token 路由(api.md 第三、四、五节)。
  25. //
  26. // 全部要求会话身份:
  27. // - 会话与授信设备的列表/撤销:会话即可;
  28. // - Token 的增删查:会话 + TOTP(api.md 5.1–5.3)。
  29. func RegisterManageRoutes(r gin.IRouter, h *Handler) {
  30. s := r.Group("/api/sessions", RequireSession())
  31. s.GET("", h.ListSessions)
  32. s.DELETE("/:id", h.DeleteSession)
  33. d := r.Group("/api/trusted-devices", RequireSession())
  34. d.GET("", h.ListTrustedDevices)
  35. d.DELETE("/:id", h.DeleteTrustedDevice)
  36. t := r.Group("/api/tokens", RequireSession(), RequireTotpVerified())
  37. t.GET("", h.ListTokens)
  38. t.POST("", h.CreateToken)
  39. t.DELETE("/:id", h.DeleteToken)
  40. }
  41. // RegisterMeRoute 注册 GET /api/me(api.md 11.1),匿名可访问。
  42. func RegisterMeRoute(r gin.IRouter, h *Handler) {
  43. r.GET("/api/me", h.Me)
  44. }
苏ICP备2026082406号
苏公网安备 待审核