update cli: add token generation feature

This commit is contained in:
Zhang Minghan 2023-11-22 12:29:08 +08:00
parent b98cd854bc
commit fcff8ab42c
8 changed files with 70 additions and 5 deletions

View File

@ -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

View File

@ -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

View File

@ -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, "|"))
}

View File

@ -6,6 +6,7 @@ var Prompt = `
Commands:
- help
- invite <type> <num> <quota>
- token <user-id>
`
func Help() {

View File

@ -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"))
}

View File

@ -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
View 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)
}

View File

@ -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)
}