mirror of
https://github.com/coaidev/coai.git
synced 2025-05-28 09:20:18 +09:00
update cli: add token generation feature
This commit is contained in:
parent
b98cd854bc
commit
fcff8ab42c
24
auth/user.go
24
auth/user.go
@ -38,6 +38,14 @@ func GetUser(c *gin.Context) *User {
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetUserById(db *sql.DB, id int64) *User {
|
||||
var user User
|
||||
if err := db.QueryRow("SELECT id, username FROM auth WHERE id = ?", id).Scan(&user.ID, &user.Username); err != nil {
|
||||
return nil
|
||||
}
|
||||
return &user
|
||||
}
|
||||
|
||||
func GetId(db *sql.DB, user *User) int64 {
|
||||
if user == nil {
|
||||
return -1
|
||||
@ -83,6 +91,22 @@ func (u *User) GenerateToken() (string, error) {
|
||||
return token, nil
|
||||
}
|
||||
|
||||
func (u *User) GenerateTokenSafe(db *sql.DB) (string, error) {
|
||||
if len(u.Username) == 0 {
|
||||
if err := db.QueryRow("SELECT username FROM auth WHERE id = ?", u.ID).Scan(&u.Username); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
if len(u.Password) == 0 {
|
||||
if err := db.QueryRow("SELECT password FROM auth WHERE id = ?", u.ID).Scan(&u.Password); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
return u.GenerateToken()
|
||||
}
|
||||
|
||||
func (u *User) IsAdmin(db *sql.DB) bool {
|
||||
if u.Admin {
|
||||
return true
|
||||
|
@ -6,15 +6,19 @@ func Run() bool {
|
||||
return false
|
||||
}
|
||||
|
||||
param := args[1:]
|
||||
switch args[0] {
|
||||
case "help":
|
||||
Help()
|
||||
return true
|
||||
case "invite":
|
||||
CreateInvitationCommand(args[1:])
|
||||
CreateInvitationCommand(param)
|
||||
return true
|
||||
case "filter":
|
||||
FilterApiKeyCommand(args[1:])
|
||||
FilterApiKeyCommand(param)
|
||||
return true
|
||||
case "token":
|
||||
CreateTokenCommand(param)
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
|
@ -13,6 +13,7 @@ func FilterApiKeyCommand(args []string) {
|
||||
keys := strings.Split(data, "|")
|
||||
|
||||
available := chatgpt.FilterKeysNative(endpoint, keys)
|
||||
fmt.Println(fmt.Sprintf("[cli] filtered %d keys, %d available, %d unavailable", len(keys), len(available), len(keys)-len(available)))
|
||||
|
||||
outputInfo("filter", fmt.Sprintf("filtered %d keys, %d available, %d unavailable", len(keys), len(available), len(keys)-len(available)))
|
||||
fmt.Println(strings.Join(available, "|"))
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ var Prompt = `
|
||||
Commands:
|
||||
- help
|
||||
- invite <type> <num> <quota>
|
||||
- token <user-id>
|
||||
`
|
||||
|
||||
func Help() {
|
||||
|
@ -18,8 +18,10 @@ func CreateInvitationCommand(args []string) {
|
||||
|
||||
resp, err := auth.GenerateInvitations(db, num, quota, t)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
outputError(err)
|
||||
return
|
||||
}
|
||||
|
||||
outputInfo("invite", fmt.Sprintf("%d invitation codes generated", len(resp)))
|
||||
fmt.Println(strings.Join(resp, "\n"))
|
||||
}
|
||||
|
@ -61,3 +61,11 @@ func GetArgInt64(args []string, idx int) int64 {
|
||||
func GetArgString(args []string, idx int) string {
|
||||
return GetArg(args, idx)
|
||||
}
|
||||
|
||||
func outputError(err error) {
|
||||
fmt.Println(fmt.Sprintf("[cli] error: %s", err.Error()))
|
||||
}
|
||||
|
||||
func outputInfo(t, msg string) {
|
||||
fmt.Println(fmt.Sprintf("[cli] %s: %s", t, msg))
|
||||
}
|
||||
|
23
cli/token.go
Normal file
23
cli/token.go
Normal file
@ -0,0 +1,23 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"chat/auth"
|
||||
"chat/connection"
|
||||
"fmt"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func CreateTokenCommand(args []string) {
|
||||
db := connection.ConnectMySQL()
|
||||
id, _ := strconv.Atoi(args[0])
|
||||
|
||||
user := auth.GetUserById(db, int64(id))
|
||||
token, err := user.GenerateTokenSafe(db)
|
||||
if err != nil {
|
||||
outputError(err)
|
||||
return
|
||||
}
|
||||
|
||||
outputInfo("token", "token generated")
|
||||
fmt.Println(token)
|
||||
}
|
@ -139,6 +139,8 @@ func ExtractUrls(data string) []string {
|
||||
}
|
||||
|
||||
func ExtractImageUrls(data string) []string {
|
||||
re := regexp.MustCompile(`(https?://\S+\.(?:png|jpg|jpeg|gif|webp|svg|bmp))`)
|
||||
// https://platform.openai.com/docs/guides/vision/what-type-of-files-can-i-upload
|
||||
|
||||
re := regexp.MustCompile(`(https?://\S+\.(?:png|jpg|jpeg|gif|webp))`)
|
||||
return re.FindAllString(data, -1)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user