one-api/sdk/api/token.go
2025-04-22 14:36:42 +08:00

132 lines
3.0 KiB
Go

package sdk
import (
"encoding/json"
"strconv"
)
type Token struct {
ID int `json:"id"`
UserID int `json:"user_id"`
Key string `json:"key"`
Status int `json:"status"`
Name string `json:"name"`
CreatedTime int `json:"created_time"`
AccessedTime int `json:"accessed_time"`
ExpiredTime int `json:"expired_time"`
RemainQuota int `json:"remain_quota"`
UnlimitedQuota bool `json:"unlimited_quota"`
UsedQuota int `json:"used_quota"`
Models string `json:"models"`
Subnet string `json:"subnet"`
}
// define add token function
type Tokenimpl interface {
Add(token *Token) error
List(id int) error
Update(token *Token) error
Delete(id int) error
}
type Tokens struct {
Tokens []*Token
UserID int
Query map[string]string
}
type TokensImpl interface {
List(token *Token) error
}
type TokenRespData struct {
Data interface{} `json:"data"`
}
// add token
func (token *Token) Add(client *OneClient) error {
client.Url = "/api/token/"
data, err := json.Marshal(token)
if err != nil {
return err
}
return client.post(data)
}
// update token
func (token *Token) Update(client *OneClient) error {
client.Url = "/api/token/"
data, err := json.Marshal(token)
if err != nil {
return err
}
return client.put(data)
}
// list token
func (tokens *Tokens) List(client *OneClient) error {
if tokens.UserID != 0 {
if tokens.Query != nil {
client.Url = "/api/token/search?user_id=" + strconv.Itoa(tokens.UserID)
for k, v := range tokens.Query {
client.Url += "&" + k + "=" + v
}
client.Url += "&p=0&order="
} else {
client.Url = "/api/token/?user_id=" + strconv.Itoa(tokens.UserID) + "&p=0&order="
}
} else {
if tokens.Query != nil {
client.Url = "/api/token/search?p=0"
for k, v := range tokens.Query {
client.Url += "&" + k + "=" + v
}
} else {
client.Url = "/api/token/?p=0"
}
client.Url += "&order="
}
resp, err := client.get()
if err != nil {
return err
}
defer resp.Body.Close()
data := TokenRespData{Data: []*Token{}}
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return err
}
for _, v := range data.Data.([]interface{}) {
token := &Token{}
tokenData, _ := json.Marshal(v)
err = json.Unmarshal(tokenData, token)
if err != nil {
return err
}
tokens.Tokens = append(tokens.Tokens, token)
}
return nil
}
// delete token
func (token *Token) Delete(client *OneClient) error {
client.Url = "/api/token/" + strconv.Itoa(token.ID) + "/" + "?user_id=" + strconv.Itoa(token.UserID)
return client.delete(nil)
}
// get token
func (token *Token) Get(client *OneClient) error {
client.Url = "/api/token/" + strconv.Itoa(token.ID) + "/" + "?user_id=" + strconv.Itoa(token.UserID)
resp, err := client.get()
if err != nil {
return err
}
defer resp.Body.Close()
data := TokenRespData{Data: token}
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return err
}
tokenData, _ := json.Marshal(data.Data)
err = json.Unmarshal(tokenData, token)
return nil
}