mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-18 17:46:37 +08:00
132 lines
3.0 KiB
Go
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
|
|
}
|