You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/internal/api/router.go

94 lines
3.9 KiB
Go

2 weeks ago
package api
import (
"github.com/veypi/vbase/internal/api/auth"
"github.com/veypi/vbase/internal/api/middleware"
"github.com/veypi/vbase/internal/api/oauth"
"github.com/veypi/vbase/internal/api/org"
"github.com/veypi/vbase/internal/api/user"
"github.com/veypi/vigo"
"github.com/veypi/vigo/contrib/common"
)
// NewRouter 创建API路由
func NewRouter() vigo.Router {
r := vigo.NewRouter()
// 全局中间件
r.Use(middleware.AuthRequired())
r.Use(middleware.OrgContext())
r.After(common.JsonResponse, common.JsonErrorResponse)
// === 公开路由 ===
authRouter := vigo.NewRouter()
authRouter.Use(vigo.SkipBefore)
authRouter.Post("/login", "用户登录", auth.Login)
authRouter.Post("/register", "用户注册", auth.Register)
authRouter.Post("/refresh", "刷新Token", auth.Refresh)
authRouter.Post("/logout", "用户登出", auth.Logout)
2 weeks ago
// 第三方登录
authRouter.Get("/providers", "支持的登录提供商", auth.ListProviders)
authRouter.Get("/authorize/thirdparty", "第三方登录授权", auth.AuthorizeThirdParty)
authRouter.Get("/callback/{provider}", "第三方登录回调", auth.CallbackThirdParty)
authRouter.Post("/bind", "绑定第三方账号", auth.BindThirdParty)
authRouter.Post("/bind-register", "绑定并注册", auth.BindWithRegister)
2 weeks ago
r.Extend("/auth", authRouter)
// === 当前用户 ===
meRouter := vigo.NewRouter()
meRouter.Get("/", "获取当前用户信息", auth.Me)
meRouter.Patch("/", "更新当前用户信息", auth.UpdateMe)
meRouter.Post("/change-password", "修改密码", auth.ChangePassword)
2 weeks ago
// 第三方账号绑定
meRouter.Get("/bindings", "第三方账号绑定列表", auth.ListBindings)
meRouter.Post("/bindings", "绑定第三方账号", auth.AuthorizeThirdParty)
meRouter.Delete("/bindings/{provider}", "解绑第三方账号", auth.UnbindThirdParty)
2 weeks ago
r.Extend("/me", meRouter)
// === 用户管理 ===
userRouter := vigo.NewRouter()
userRouter.Get("/", "用户列表", user.List)
userRouter.Post("/", "创建用户", user.Create)
userRouter.Get("/{user_id}", "获取用户详情", user.Get)
userRouter.Patch("/{user_id}", "更新用户", user.Update)
userRouter.Delete("/{user_id}", "删除用户", user.Delete)
userRouter.Patch("/{user_id}/status", "更新用户状态", user.UpdateStatus)
r.Extend("/users", userRouter)
// === 组织管理 ===
orgRouter := vigo.NewRouter()
orgRouter.Get("/", "组织列表", org.List)
orgRouter.Post("/", "创建组织", org.Create)
orgRouter.Get("/{org_id}", "获取组织详情", org.Get)
orgRouter.Patch("/{org_id}", "更新组织", org.Update)
orgRouter.Delete("/{org_id}", "删除组织", org.Delete)
orgRouter.Get("/tree", "组织树", org.Tree)
orgRouter.Get("/{org_id}/members", "组织成员列表", org.ListMembers)
r.Extend("/orgs", orgRouter)
// === OAuth2.0服务端 ===
oauthRouter := vigo.NewRouter()
// OAuth公开端点
oauthRouter.Use(vigo.SkipBefore)
oauthRouter.Get("/authorize", "授权端点", oauth.Authorize)
oauthRouter.Post("/token", "令牌端点", oauth.Token)
oauthRouter.Post("/revoke", "撤销令牌", oauth.Revoke)
oauthRouter.Post("/introspect", "令牌内省", oauth.Introspect)
oauthRouter.Get("/userinfo", "用户信息(OIDC)", oauth.UserInfo)
oauthRouter.Get("/.well-known/openid-configuration", "OIDC发现文档", oauth.Discovery)
oauthRouter.Get("/jwks", "JWKS公钥", oauth.JWKS)
r.Extend("/oauth", oauthRouter)
// OAuth客户端管理
oauthClientRouter := vigo.NewRouter()
oauthClientRouter.Get("/", "OAuth客户端列表", oauth.ListClients)
oauthClientRouter.Post("/", "创建OAuth客户端", oauth.CreateClient)
oauthClientRouter.Get("/{client_id}", "获取客户端详情", oauth.GetClient)
oauthClientRouter.Patch("/{client_id}", "更新OAuth客户端", oauth.UpdateClient)
oauthClientRouter.Delete("/{client_id}", "删除OAuth客户端", oauth.DeleteClient)
oauthClientRouter.Post("/{client_id}/regenerate-secret", "重新生成密钥", oauth.RegenerateSecret)
r.Extend("/oauth/clients", oauthClientRouter)
return r
}