fe3294ed60
- 新增UserAuth中间件用于验证用户登录状态和权限 - 移除Linux.do登录中的redirectUri和minimumTrustLevel配置项 - 修改Linux.do登录流程以支持动态构建回调URL - 将API v1接口组迁移至需要用户认证的路由 - 在远程AI服务调用中添加用户令牌认证 - 修复被封禁用户的认证检查逻辑 - 更新登录重定向函数以处理请求来源 - 添加RequestOrigin函数解析转发的主机和协议头
68 lines
2.8 KiB
Go
68 lines
2.8 KiB
Go
package router
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/basketikun/infinite-canvas/handler"
|
|
"github.com/basketikun/infinite-canvas/middleware"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func New() *gin.Engine {
|
|
router := gin.Default()
|
|
router.RedirectTrailingSlash = false
|
|
_ = router.SetTrustedProxies(nil)
|
|
api := router.Group("/api")
|
|
api.GET("/health", func(c *gin.Context) {
|
|
c.String(http.StatusOK, "ok")
|
|
})
|
|
api.POST("/auth/register", gin.WrapF(handler.Register))
|
|
api.POST("/auth/login", gin.WrapF(handler.Login))
|
|
api.GET("/auth/linux-do/authorize", gin.WrapF(handler.LinuxDoAuthorize))
|
|
api.GET("/auth/linux-do/callback", gin.WrapF(handler.LinuxDoCallback))
|
|
api.GET("/auth/me", middleware.OptionalAuth, gin.WrapF(handler.CurrentUser))
|
|
api.GET("/settings", gin.WrapF(handler.Settings))
|
|
v1 := api.Group("/v1", middleware.UserAuth)
|
|
v1.POST("/images/generations", gin.WrapF(handler.AIImagesGenerations))
|
|
v1.POST("/images/edits", gin.WrapF(handler.AIImagesEdits))
|
|
v1.POST("/chat/completions", gin.WrapF(handler.AIChatCompletions))
|
|
v1.POST("/videos", gin.WrapF(handler.AIVideos))
|
|
v1.GET("/videos/:id", func(c *gin.Context) {
|
|
handler.AIVideo(c.Writer, c.Request, c.Param("id"))
|
|
})
|
|
v1.GET("/videos/:id/content", func(c *gin.Context) {
|
|
handler.AIVideoContent(c.Writer, c.Request, c.Param("id"))
|
|
})
|
|
api.GET("/prompts", middleware.OptionalAuth, gin.WrapF(handler.Prompts))
|
|
api.GET("/assets", middleware.OptionalAuth, gin.WrapF(handler.Assets))
|
|
api.POST("/admin/login", gin.WrapF(handler.AdminLogin))
|
|
|
|
admin := api.Group("/admin", middleware.AdminAuth)
|
|
admin.GET("/users", gin.WrapF(handler.AdminUsers))
|
|
admin.POST("/users", gin.WrapF(handler.AdminSaveUser))
|
|
admin.DELETE("/users/:id", func(c *gin.Context) {
|
|
handler.AdminDeleteUser(c.Writer, c.Request, c.Param("id"))
|
|
})
|
|
admin.GET("/settings", gin.WrapF(handler.AdminSettings))
|
|
admin.POST("/settings", gin.WrapF(handler.AdminSaveSettings))
|
|
admin.POST("/settings/channel-models", gin.WrapF(handler.AdminChannelModels))
|
|
admin.POST("/settings/channel-test", gin.WrapF(handler.AdminTestChannelModel))
|
|
admin.GET("/prompt-categories", gin.WrapF(handler.AdminPromptCategories))
|
|
admin.POST("/prompt-categories/sync", gin.WrapF(handler.AdminSyncPromptCategories))
|
|
admin.GET("/prompts", gin.WrapF(handler.AdminPrompts))
|
|
admin.POST("/prompts", gin.WrapF(handler.AdminSavePrompt))
|
|
admin.POST("/prompts/batch-delete", gin.WrapF(handler.AdminDeletePrompts))
|
|
admin.DELETE("/prompts/:id", func(c *gin.Context) {
|
|
handler.AdminDeletePrompt(c.Writer, c.Request, c.Param("id"))
|
|
})
|
|
admin.GET("/assets", gin.WrapF(handler.AdminAssets))
|
|
admin.POST("/assets", gin.WrapF(handler.AdminSaveAsset))
|
|
admin.DELETE("/assets/:id", func(c *gin.Context) {
|
|
handler.AdminDeleteAsset(c.Writer, c.Request, c.Param("id"))
|
|
})
|
|
|
|
router.NoRoute(middleware.NotFoundJSON)
|
|
|
|
return router
|
|
}
|