diff --git a/controller/token.go b/controller/token.go index a8803279..0afb1391 100644 --- a/controller/token.go +++ b/controller/token.go @@ -1,11 +1,13 @@ package controller import ( - "github.com/gin-gonic/gin" "net/http" "one-api/common" "one-api/model" "strconv" + "strings" + + "github.com/gin-gonic/gin" ) func GetAllTokens(c *gin.Context) { @@ -106,6 +108,56 @@ func GetTokenStatus(c *gin.Context) { }) } +func GetTokenUsage(c *gin.Context) { + authHeader := c.GetHeader("Authorization") + if authHeader == "" { + c.JSON(http.StatusUnauthorized, gin.H{ + "success": false, + "message": "No Authorization header", + }) + return + } + + parts := strings.Split(authHeader, " ") + if len(parts) != 2 || strings.ToLower(parts[0]) != "bearer" { + c.JSON(http.StatusUnauthorized, gin.H{ + "success": false, + "message": "Invalid Bearer token", + }) + return + } + tokenKey := parts[1] + + token, err := model.GetTokenByKey(tokenKey, true) + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "success": false, + "message": err.Error(), + }) + return + } + + expiredAt := token.ExpiredTime + if expiredAt == -1 { + expiredAt = 0 + } + + c.JSON(http.StatusOK, gin.H{ + "code": true, + "message": "ok", + "data": gin.H{ + "object": "token_usage", + "id": token.Id, + "name": token.Name, + "total_granted": token.RemainQuota + token.UsedQuota, + "total_used": token.UsedQuota, + "total_available": token.RemainQuota, + "unlimited_quota": token.UnlimitedQuota, + "expires_at": expiredAt, + }, + }) +} + func AddToken(c *gin.Context) { token := model.Token{} err := c.ShouldBindJSON(&token) diff --git a/router/api-router.go b/router/api-router.go index 1720ff57..7bbc654a 100644 --- a/router/api-router.go +++ b/router/api-router.go @@ -111,6 +111,7 @@ func SetApiRouter(router *gin.Engine) { { tokenRoute.GET("/", controller.GetAllTokens) tokenRoute.GET("/search", controller.SearchTokens) + tokenRoute.GET("/usage", controller.GetTokenUsage) tokenRoute.GET("/:id", controller.GetToken) tokenRoute.POST("/", controller.AddToken) tokenRoute.PUT("/", controller.UpdateToken) @@ -142,7 +143,6 @@ func SetApiRouter(router *gin.Engine) { logRoute.Use(middleware.CORS()) { logRoute.GET("/token", controller.GetLogByKey) - } groupRoute := apiRouter.Group("/group") groupRoute.Use(middleware.AdminAuth())