Files
CLIProxyAPI/internal/api/server_management_v8.go
2026-09-27 14:42:26 +08:00

68 lines
2.9 KiB
Go

package api
import (
"net/http"
"github.com/gin-gonic/gin"
"github.com/router-for-me/CLIProxyAPI/v8/internal/api/handlers/management"
)
// registerManagementV8Routes defines the v8 contract independently of v0.
// Configuration paths mirror the v8 YAML tree; operational routes use its groups.
func (s *Server) registerManagementV8Routes() {
const prefix = "/v8/management"
s.engine.GET(prefix+"/oauth/callback", s.managementAvailabilityMiddleware(), s.mgmt.GetOAuthCallback)
s.engine.POST(prefix+"/oauth/callback", s.managementAvailabilityMiddleware(), s.mgmt.PostOAuthCallback)
v8 := s.engine.Group(prefix)
v8.Use(s.managementAvailabilityMiddleware(), s.mgmt.Middleware(), func(c *gin.Context) {
c.Set(management.ConfigV8ContextKey, true)
})
v8.GET("/config", s.mgmt.ConfigV8)
v8.PUT("/config", s.mgmt.ConfigV8)
v8.PATCH("/config", s.mgmt.ConfigV8)
v8.GET("/config.yaml", s.mgmt.ConfigV8)
v8.PUT("/config.yaml", s.mgmt.ConfigV8)
for _, method := range []string{http.MethodGet, http.MethodPut, http.MethodPatch, http.MethodDelete} {
v8.Handle(method, "/config/*path", s.mgmt.ConfigV8)
}
v8.GET("/server/latest-version", s.mgmt.GetLatestVersion)
v8.POST("/requests/api-call", s.mgmt.APICall)
v8.POST("/routing/cooldown/reset", s.mgmt.ResetQuota)
v8.GET("/routing/model-definitions/:channel", s.mgmt.GetStaticModelDefinitions)
v8.GET("/observability/logs", s.mgmt.GetLogs)
v8.DELETE("/observability/logs", s.mgmt.DeleteLogs)
v8.GET("/observability/logs/errors", s.mgmt.GetRequestErrorLogs)
v8.GET("/observability/logs/errors/:name", s.mgmt.DownloadRequestErrorLog)
v8.GET("/observability/logs/requests/:id", s.mgmt.GetRequestLogByID)
v8.GET("/observability/usage/api-keys", s.mgmt.GetAPIKeyUsage)
v8.GET("/observability/usage/queue", s.mgmt.GetUsageQueue)
v8.GET("/credentials/quota/providers", s.mgmt.GetQuotaProviders)
v8.POST("/credentials/quota/fetch", s.mgmt.FetchCredentialQuota)
v8.POST("/credentials/quota/reset", s.mgmt.ResetCredentialQuota)
v8.GET("/credentials", s.mgmt.ListAuthFiles)
v8.POST("/credentials", s.mgmt.UploadAuthFile)
v8.DELETE("/credentials", s.mgmt.DeleteAuthFile)
v8.GET("/credentials/models", s.mgmt.GetAuthFileModels)
v8.GET("/credentials/download", s.mgmt.DownloadAuthFile)
v8.PATCH("/credentials/status", s.mgmt.PatchAuthFileStatus)
v8.PATCH("/credentials/fields", s.mgmt.PatchAuthFileFields)
v8.POST("/credentials/refresh", s.mgmt.RefreshAuthFiles)
v8.POST("/oauth/import", s.mgmt.ImportOAuthV8)
v8.GET("/oauth/auth-url", s.mgmt.StartOAuthV8)
v8.GET("/oauth/status", s.mgmt.GetAuthStatus)
v8.DELETE("/oauth/session", s.mgmt.CancelAuthSession)
v8.GET("/plugins", s.mgmt.ListPlugins)
v8.DELETE("/plugins/:id", s.mgmt.DeletePlugin)
v8.GET("/plugins/store", s.mgmt.ListPluginStore)
v8.POST("/plugins/store/:id/install", s.mgmt.InstallPluginFromStore)
v8.GET("/plugins/:id/quota", s.mgmt.GetPluginQuota)
v8.POST("/plugins/:id/quota", s.mgmt.FetchPluginQuota)
v8.DELETE("/plugins/:id/quota", s.mgmt.ResetPluginQuota)
}