diff --git a/controller/token.go b/controller/token.go index 9622e51c..cff2e6a6 100644 --- a/controller/token.go +++ b/controller/token.go @@ -75,6 +75,30 @@ func GetToken(c *gin.Context) { return } +func GetTokenStatus(c *gin.Context) { + tokenId := c.GetInt("token_id") + userId := c.GetInt("id") + token, err := model.GetTokenByIds(tokenId, userId) + 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{ + "object": "credit_summary", + "total_granted": token.RemainQuota, + "total_used": 0, // not supported currently + "total_available": token.RemainQuota, + "expires_at": expiredAt * 1000, + }) +} + func AddToken(c *gin.Context) { isAdmin := c.GetInt("role") >= common.RoleAdminUser token := model.Token{} diff --git a/router/dashboard.go b/router/dashboard.go new file mode 100644 index 00000000..3eacaf9a --- /dev/null +++ b/router/dashboard.go @@ -0,0 +1,18 @@ +package router + +import ( + "github.com/gin-contrib/gzip" + "github.com/gin-gonic/gin" + "one-api/controller" + "one-api/middleware" +) + +func SetDashboardRouter(router *gin.Engine) { + apiRouter := router.Group("/dashboard") + apiRouter.Use(gzip.Gzip(gzip.DefaultCompression)) + apiRouter.Use(middleware.GlobalAPIRateLimit()) + apiRouter.Use(middleware.TokenAuth()) + { + apiRouter.GET("/billing/credit_grants", controller.GetTokenStatus) + } +} diff --git a/router/main.go b/router/main.go index d0908560..04132719 100644 --- a/router/main.go +++ b/router/main.go @@ -7,6 +7,7 @@ import ( func SetRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) { SetApiRouter(router) + SetDashboardRouter(router) SetRelayRouter(router) setWebRouter(router, buildFS, indexPage) } diff --git a/router/relay-router.go b/router/relay-router.go index 2fd0021e..e5804388 100644 --- a/router/relay-router.go +++ b/router/relay-router.go @@ -35,9 +35,4 @@ func SetRelayRouter(router *gin.Engine) { relayV1Router.DELETE("/models/:model", controller.RelayNotImplemented) relayV1Router.POST("/moderations", controller.RelayNotImplemented) } - relayDashboardRouter := router.Group("/dashboard") // TODO: return system's own token info - relayDashboardRouter.Use(middleware.TokenAuth(), middleware.Distribute()) - { - relayDashboardRouter.Any("/*path", controller.Relay) - } }