mirror of https://github.com/veypi/OneAuth.git
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.
94 lines
3.9 KiB
Go
94 lines
3.9 KiB
Go
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)
|
|
// 第三方登录
|
|
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)
|
|
r.Extend("/auth", authRouter)
|
|
|
|
// === 当前用户 ===
|
|
meRouter := vigo.NewRouter()
|
|
meRouter.Get("/", "获取当前用户信息", auth.Me)
|
|
meRouter.Patch("/", "更新当前用户信息", auth.UpdateMe)
|
|
meRouter.Post("/change-password", "修改密码", auth.ChangePassword)
|
|
// 第三方账号绑定
|
|
meRouter.Get("/bindings", "第三方账号绑定列表", auth.ListBindings)
|
|
meRouter.Post("/bindings", "绑定第三方账号", auth.AuthorizeThirdParty)
|
|
meRouter.Delete("/bindings/{provider}", "解绑第三方账号", auth.UnbindThirdParty)
|
|
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
|
|
}
|