Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
9dc153ed
authored
Apr 29, 2025
by
lollipopkit🏳️⚧️
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: `/api/token/usage`
parent
f5c2fda2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
54 additions
and
2 deletions
+54
-2
controller/token.go
+53
-1
router/api-router.go
+1
-1
No files found.
controller/token.go
View file @
9dc153ed
package
controller
package
controller
import
(
import
(
"github.com/gin-gonic/gin"
"net/http"
"net/http"
"one-api/common"
"one-api/common"
"one-api/model"
"one-api/model"
"strconv"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
)
func
GetAllTokens
(
c
*
gin
.
Context
)
{
func
GetAllTokens
(
c
*
gin
.
Context
)
{
...
@@ -106,6 +108,56 @@ func GetTokenStatus(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
)
{
func
AddToken
(
c
*
gin
.
Context
)
{
token
:=
model
.
Token
{}
token
:=
model
.
Token
{}
err
:=
c
.
ShouldBindJSON
(
&
token
)
err
:=
c
.
ShouldBindJSON
(
&
token
)
...
...
router/api-router.go
View file @
9dc153ed
...
@@ -111,6 +111,7 @@ func SetApiRouter(router *gin.Engine) {
...
@@ -111,6 +111,7 @@ func SetApiRouter(router *gin.Engine) {
{
{
tokenRoute
.
GET
(
"/"
,
controller
.
GetAllTokens
)
tokenRoute
.
GET
(
"/"
,
controller
.
GetAllTokens
)
tokenRoute
.
GET
(
"/search"
,
controller
.
SearchTokens
)
tokenRoute
.
GET
(
"/search"
,
controller
.
SearchTokens
)
tokenRoute
.
GET
(
"/usage"
,
controller
.
GetTokenUsage
)
tokenRoute
.
GET
(
"/:id"
,
controller
.
GetToken
)
tokenRoute
.
GET
(
"/:id"
,
controller
.
GetToken
)
tokenRoute
.
POST
(
"/"
,
controller
.
AddToken
)
tokenRoute
.
POST
(
"/"
,
controller
.
AddToken
)
tokenRoute
.
PUT
(
"/"
,
controller
.
UpdateToken
)
tokenRoute
.
PUT
(
"/"
,
controller
.
UpdateToken
)
...
@@ -142,7 +143,6 @@ func SetApiRouter(router *gin.Engine) {
...
@@ -142,7 +143,6 @@ func SetApiRouter(router *gin.Engine) {
logRoute
.
Use
(
middleware
.
CORS
())
logRoute
.
Use
(
middleware
.
CORS
())
{
{
logRoute
.
GET
(
"/token"
,
controller
.
GetLogByKey
)
logRoute
.
GET
(
"/token"
,
controller
.
GetLogByKey
)
}
}
groupRoute
:=
apiRouter
.
Group
(
"/group"
)
groupRoute
:=
apiRouter
.
Group
(
"/group"
)
groupRoute
.
Use
(
middleware
.
AdminAuth
())
groupRoute
.
Use
(
middleware
.
AdminAuth
())
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment