From fa008e7196e94ddff4f05e9381fb061040056554 Mon Sep 17 00:00:00 2001 From: cktsun1031 <65409152+cktsun1031@users.noreply.github.com> Date: Mon, 6 Nov 2023 16:04:13 +0800 Subject: [PATCH] Refactor and optimize code: streamline error handling, remove redundant return statements, correct gorm tag syntax, and improve type assertions in relay.go --- common/custom-event.go | 14 ++--- common/embed-file-system.go | 8 ++- common/utils.go | 26 +++++---- controller/billing.go | 7 ++- controller/channel-billing.go | 2 - controller/channel-test.go | 15 +++--- controller/channel.go | 7 --- controller/discord.go | 9 ++-- controller/github.go | 6 +-- controller/google.go | 7 ++- controller/group.go | 5 +- controller/log.go | 9 +--- controller/misc.go | 8 +++ controller/relay-aiproxy.go | 6 ++- controller/relay-ali.go | 9 +++- controller/relay-baidu.go | 9 +++- controller/relay-claude.go | 6 ++- controller/relay-image.go | 7 ++- controller/relay-palm.go | 6 ++- controller/relay-tencent.go | 8 ++- controller/relay-utils.go | 8 +-- controller/relay-zhipu.go | 10 ++-- controller/relay.go | 8 +-- go.mod | 25 ++++----- go.sum | 99 +++++++++++++++++++++++++---------- i18n/en.json | 5 +- main.go | 4 +- middleware/request-id.go | 9 +++- model/log.go | 2 +- model/option.go | 3 +- model/redemption.go | 18 ++----- model/token.go | 24 +++------ 32 files changed, 234 insertions(+), 155 deletions(-) diff --git a/common/custom-event.go b/common/custom-event.go index 69da4bc4..cebebb2b 100644 --- a/common/custom-event.go +++ b/common/custom-event.go @@ -39,10 +39,6 @@ func checkWriter(writer io.Writer) stringWriter { var contentType = []string{"text/event-stream"} var noCache = []string{"no-cache"} -var fieldReplacer = strings.NewReplacer( - "\n", "\\n", - "\r", "\\r") - var dataReplacer = strings.NewReplacer( "\n", "\ndata:", "\r", "\\r") @@ -60,9 +56,15 @@ func encode(writer io.Writer, event CustomEvent) error { } func writeData(w stringWriter, data interface{}) error { - dataReplacer.WriteString(w, fmt.Sprint(data)) + _, err := dataReplacer.WriteString(w, fmt.Sprint(data)) + if err != nil { + return err + } if strings.HasPrefix(data.(string), "data") { - w.writeString("\n\n") + _, err := w.writeString("\n\n") + if err != nil { + return err + } } return nil } diff --git a/common/embed-file-system.go b/common/embed-file-system.go index 3ea02cf8..40c9f26e 100644 --- a/common/embed-file-system.go +++ b/common/embed-file-system.go @@ -2,9 +2,10 @@ package common import ( "embed" - "github.com/gin-contrib/static" "io/fs" "net/http" + + "github.com/gin-contrib/static" ) // Credit: https://github.com/gin-contrib/static/issues/19 @@ -15,10 +16,7 @@ type embedFileSystem struct { func (e embedFileSystem) Exists(prefix string, path string) bool { _, err := e.Open(path) - if err != nil { - return false - } - return true + return err == nil } func EmbedFolder(fsEmbed embed.FS, targetPath string) static.ServeFileSystem { diff --git a/common/utils.go b/common/utils.go index 21bec8f5..3758a457 100644 --- a/common/utils.go +++ b/common/utils.go @@ -2,7 +2,6 @@ package common import ( "fmt" - "github.com/google/uuid" "html/template" "log" "math/rand" @@ -13,6 +12,8 @@ import ( "strconv" "strings" "time" + + "github.com/google/uuid" ) func OpenBrowser(url string) { @@ -106,13 +107,13 @@ func Seconds2Time(num int) (time string) { } func Interface2String(inter interface{}) string { - switch inter.(type) { + switch v := inter.(type) { case string: - return inter.(string) + return v case int: - return fmt.Sprintf("%d", inter.(int)) + return fmt.Sprintf("%d", v) case float64: - return fmt.Sprintf("%f", inter.(float64)) + return fmt.Sprintf("%f", v) } return "Not Implemented" } @@ -138,14 +139,17 @@ func GetUUID() string { const keyChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" func init() { - rand.Seed(time.Now().UnixNano()) + s := rand.NewSource(time.Now().UnixNano()) + rand.New(s) } func GenerateKey() string { - rand.Seed(time.Now().UnixNano()) + var src = rand.NewSource(time.Now().UnixNano()) + var r = rand.New(src) + key := make([]byte, 48) for i := 0; i < 16; i++ { - key[i] = keyChars[rand.Intn(len(keyChars))] + key[i] = keyChars[r.Intn(len(keyChars))] } uuid_ := GetUUID() for i := 0; i < 32; i++ { @@ -159,10 +163,12 @@ func GenerateKey() string { } func GetRandomString(length int) string { - rand.Seed(time.Now().UnixNano()) + var src = rand.NewSource(time.Now().UnixNano()) + var r = rand.New(src) + key := make([]byte, length) for i := 0; i < length; i++ { - key[i] = keyChars[rand.Intn(len(keyChars))] + key[i] = keyChars[r.Intn(len(keyChars))] } return string(key) } diff --git a/controller/billing.go b/controller/billing.go index 42e86aea..3c448729 100644 --- a/controller/billing.go +++ b/controller/billing.go @@ -1,9 +1,10 @@ package controller import ( - "github.com/gin-gonic/gin" "one-api/common" "one-api/model" + + "github.com/gin-gonic/gin" ) func GetSubscription(c *gin.Context) { @@ -20,7 +21,7 @@ func GetSubscription(c *gin.Context) { usedQuota = token.UsedQuota } else { userId := c.GetInt("id") - remainQuota, err = model.GetUserQuota(userId) + remainQuota, _ = model.GetUserQuota(userId) usedQuota, err = model.GetUserUsedQuota(userId) } if expiredTime <= 0 { @@ -53,7 +54,6 @@ func GetSubscription(c *gin.Context) { AccessUntil: expiredTime, } c.JSON(200, subscription) - return } func GetUsage(c *gin.Context) { @@ -87,5 +87,4 @@ func GetUsage(c *gin.Context) { TotalUsage: amount * 100, } c.JSON(200, usage) - return } diff --git a/controller/channel-billing.go b/controller/channel-billing.go index 6ddad7ea..09ba46a6 100644 --- a/controller/channel-billing.go +++ b/controller/channel-billing.go @@ -288,7 +288,6 @@ func UpdateChannelBalance(c *gin.Context) { "message": "", "balance": balance, }) - return } func updateAllChannelsBalance() error { @@ -332,7 +331,6 @@ func UpdateAllChannelsBalance(c *gin.Context) { "success": true, "message": "", }) - return } func AutomaticallyUpdateChannels(frequency int) { diff --git a/controller/channel-test.go b/controller/channel-test.go index af84f089..95a1b48b 100644 --- a/controller/channel-test.go +++ b/controller/channel-test.go @@ -7,7 +7,6 @@ import ( "errors" "fmt" "log" - "github.com/gin-gonic/gin" "net/http" "one-api/common" "one-api/model" @@ -15,6 +14,8 @@ import ( "strings" "sync" "time" + + "github.com/gin-gonic/gin" ) func testChannel(channel *model.Channel, request ChatRequest) (err error, openaiErr *OpenAIError) { @@ -76,8 +77,8 @@ func testChannel(channel *model.Channel, request ChatRequest) (err error, openai defer resp.Body.Close() if resp.StatusCode != http.StatusOK { // Log: Channel (channel_id) Request Error (StatusCode) - log.Print(fmt.Sprintf("Channel (%d) Request Error (%d)", channel.Id, resp.StatusCode)) - return errors.New(fmt.Sprintf("status code %d", resp.StatusCode)), nil + log.Printf("Channel (%d) Request Error (%d)", channel.Id, resp.StatusCode) + return errors.New("status code " + strconv.Itoa(resp.StatusCode)), nil } if channel.AllowStreaming == common.ChannelAllowStreamEnabled { @@ -141,7 +142,7 @@ func testChannel(channel *model.Channel, request ChatRequest) (err error, openai return err, nil } if response.Usage.CompletionTokens == 0 { - return errors.New(fmt.Sprintf("type %s, code %v, message %s", response.Error.Type, response.Error.Code, response.Error.Message)), &response.Error + return fmt.Errorf("type %s, code %v, message %s", response.Error.Type, response.Error.Code, response.Error.Message), &response.Error } } @@ -156,7 +157,7 @@ func buildTestRequest(stream bool) *ChatRequest { } testMessage := Message{ Role: "user", - Content: "hi", + Content: "Say hi only", } testRequest.Messages = append(testRequest.Messages, testMessage) return testRequest @@ -199,7 +200,6 @@ func TestChannel(c *gin.Context) { "message": "", "time": consumedTime, }) - return } var testAllChannelsLock sync.Mutex @@ -264,7 +264,7 @@ func testAllChannels(notify bool) error { milliseconds := tok.Sub(tik).Milliseconds() channelBeninDisabled := false if milliseconds > disableThreshold { - err = errors.New(fmt.Sprintf("响应时间 %.2fs 超过阈值 %.2fs", float64(milliseconds)/1000.0, float64(disableThreshold)/1000.0)) + log.Printf("响应时间 %.2fs 超过阈值 %.2fs", float64(milliseconds)/1000.0, float64(disableThreshold)/1000.0) disableChannel(channel.Id, channel.Name, err.Error()) channelBeninDisabled = true } @@ -304,7 +304,6 @@ func TestAllChannels(c *gin.Context) { "success": true, "message": "", }) - return } func AutomaticallyTestChannels(frequency int) { diff --git a/controller/channel.go b/controller/channel.go index e693a732..7b2a45f7 100644 --- a/controller/channel.go +++ b/controller/channel.go @@ -28,7 +28,6 @@ func GetAllChannels(c *gin.Context) { "message": "", "data": channels, }) - return } func SearchChannels(c *gin.Context) { @@ -46,7 +45,6 @@ func SearchChannels(c *gin.Context) { "message": "", "data": channels, }) - return } func GetChannel(c *gin.Context) { @@ -71,7 +69,6 @@ func GetChannel(c *gin.Context) { "message": "", "data": channel, }) - return } func AddChannel(c *gin.Context) { @@ -107,7 +104,6 @@ func AddChannel(c *gin.Context) { "success": true, "message": "", }) - return } func DeleteChannel(c *gin.Context) { @@ -125,7 +121,6 @@ func DeleteChannel(c *gin.Context) { "success": true, "message": "", }) - return } func DeleteDisabledChannel(c *gin.Context) { @@ -142,7 +137,6 @@ func DeleteDisabledChannel(c *gin.Context) { "message": "", "data": rows, }) - return } func UpdateChannel(c *gin.Context) { @@ -168,5 +162,4 @@ func UpdateChannel(c *gin.Context) { "message": "", "data": channel, }) - return } diff --git a/controller/discord.go b/controller/discord.go index 4daf87b8..3e04fb37 100644 --- a/controller/discord.go +++ b/controller/discord.go @@ -55,7 +55,11 @@ func getDiscordUserInfoByCode(codeFromURLParamaters string, host string) (*Disco var discordOAuthResponse DiscordOAuthResponse - json.NewDecoder(resp.Body).Decode(&discordOAuthResponse) + err = json.NewDecoder(resp.Body).Decode(&discordOAuthResponse) + + if err != nil { + return nil, err + } accessToken := fmt.Sprintf("Bearer %s", discordOAuthResponse.AccessToken) @@ -77,7 +81,7 @@ func getDiscordUserInfoByCode(codeFromURLParamaters string, host string) (*Disco var discordUser DiscordUser - json.NewDecoder(resp.Body).Decode(&discordUser) + err = json.NewDecoder(resp.Body).Decode(&discordUser) if err != nil { return nil, err @@ -219,5 +223,4 @@ func DiscordBind(c *gin.Context) { "success": true, "message": "bind", }) - return } diff --git a/controller/github.go b/controller/github.go index ee995379..00ec3a88 100644 --- a/controller/github.go +++ b/controller/github.go @@ -5,13 +5,14 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-contrib/sessions" - "github.com/gin-gonic/gin" "net/http" "one-api/common" "one-api/model" "strconv" "time" + + "github.com/gin-contrib/sessions" + "github.com/gin-gonic/gin" ) type GitHubOAuthResponse struct { @@ -211,7 +212,6 @@ func GitHubBind(c *gin.Context) { "success": true, "message": "bind", }) - return } func GenerateOAuthCode(c *gin.Context) { diff --git a/controller/google.go b/controller/google.go index fe23c3c2..cf323235 100644 --- a/controller/google.go +++ b/controller/google.go @@ -57,7 +57,11 @@ func getGoogleUserInfoByCode(codeFromURLParamaters string, host string) (*Google var googleTokenResponse GoogleAccessTokenResponse - json.NewDecoder(resp.Body).Decode(&googleTokenResponse) + err = json.NewDecoder(resp.Body).Decode(&googleTokenResponse) + + if err != nil { + return nil, err + } accessToken := "Bearer " + googleTokenResponse.AccessToken @@ -222,5 +226,4 @@ func GoogleBind(c *gin.Context) { "success": true, "message": "bind", }) - return } diff --git a/controller/group.go b/controller/group.go index 2b2f6006..76eb5df8 100644 --- a/controller/group.go +++ b/controller/group.go @@ -1,14 +1,15 @@ package controller import ( - "github.com/gin-gonic/gin" "net/http" "one-api/common" + + "github.com/gin-gonic/gin" ) func GetGroups(c *gin.Context) { groupNames := make([]string, 0) - for groupName, _ := range common.GroupRatio { + for groupName := range common.GroupRatio { groupNames = append(groupNames, groupName) } c.JSON(http.StatusOK, gin.H{ diff --git a/controller/log.go b/controller/log.go index b65867fe..04f6f8c2 100644 --- a/controller/log.go +++ b/controller/log.go @@ -1,11 +1,12 @@ package controller import ( - "github.com/gin-gonic/gin" "net/http" "one-api/common" "one-api/model" "strconv" + + "github.com/gin-gonic/gin" ) func GetAllLogs(c *gin.Context) { @@ -33,7 +34,6 @@ func GetAllLogs(c *gin.Context) { "message": "", "data": logs, }) - return } func GetUserLogs(c *gin.Context) { @@ -60,7 +60,6 @@ func GetUserLogs(c *gin.Context) { "message": "", "data": logs, }) - return } func SearchAllLogs(c *gin.Context) { @@ -78,7 +77,6 @@ func SearchAllLogs(c *gin.Context) { "message": "", "data": logs, }) - return } func SearchUserLogs(c *gin.Context) { @@ -97,7 +95,6 @@ func SearchUserLogs(c *gin.Context) { "message": "", "data": logs, }) - return } func GetLogsStat(c *gin.Context) { @@ -118,7 +115,6 @@ func GetLogsStat(c *gin.Context) { //"token": tokenNum, }, }) - return } func GetLogsSelfStat(c *gin.Context) { @@ -139,7 +135,6 @@ func GetLogsSelfStat(c *gin.Context) { //"token": tokenNum, }, }) - return } func DeleteHistoryLogs(c *gin.Context) { diff --git a/controller/misc.go b/controller/misc.go index 1f2fcc5b..1318066e 100644 --- a/controller/misc.go +++ b/controller/misc.go @@ -175,6 +175,14 @@ type PasswordResetRequest struct { func ResetPassword(c *gin.Context) { var req PasswordResetRequest err := json.NewDecoder(c.Request.Body).Decode(&req) + if err != nil { + c.JSON(http.StatusOK, gin.H{ + "success": false, + // Message: Decode Body Error + "message": "解析请求体失败", + }) + return + } if req.Email == "" || req.Token == "" { c.JSON(http.StatusOK, gin.H{ "success": false, diff --git a/controller/relay-aiproxy.go b/controller/relay-aiproxy.go index d0159ce8..c6e10102 100644 --- a/controller/relay-aiproxy.go +++ b/controller/relay-aiproxy.go @@ -4,12 +4,13 @@ import ( "bufio" "encoding/json" "fmt" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" "strconv" "strings" + + "github.com/gin-gonic/gin" ) // https://docs.aiproxy.io/dev/library#使用已经定制好的知识库进行对话问答 @@ -216,5 +217,8 @@ func aiProxyLibraryHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWit c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &fullTextResponse.Usage } diff --git a/controller/relay-ali.go b/controller/relay-ali.go index 50dc743c..e8fa01da 100644 --- a/controller/relay-ali.go +++ b/controller/relay-ali.go @@ -3,11 +3,12 @@ package controller import ( "bufio" "encoding/json" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" "strings" + + "github.com/gin-gonic/gin" ) // https://help.aliyun.com/document_detail/613695.html?spm=a2c4g.2399480.0.0.1adb778fAdzP9w#341800c0f8w0r @@ -162,6 +163,9 @@ func aliEmbeddingHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithS c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &fullTextResponse.Usage } @@ -325,5 +329,8 @@ func aliHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithStatusCode c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &fullTextResponse.Usage } diff --git a/controller/relay-baidu.go b/controller/relay-baidu.go index ed08ac04..55a48c68 100644 --- a/controller/relay-baidu.go +++ b/controller/relay-baidu.go @@ -5,13 +5,14 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" "strings" "sync" "time" + + "github.com/gin-gonic/gin" ) // https://cloud.baidu.com/doc/WENXINWORKSHOP/s/flfmc9do2 @@ -262,6 +263,9 @@ func baiduHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithStatusCo c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &fullTextResponse.Usage } @@ -298,6 +302,9 @@ func baiduEmbeddingHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWit c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &fullTextResponse.Usage } diff --git a/controller/relay-claude.go b/controller/relay-claude.go index 1f4a3e7b..df6e673a 100644 --- a/controller/relay-claude.go +++ b/controller/relay-claude.go @@ -4,11 +4,12 @@ import ( "bufio" "encoding/json" "fmt" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" "strings" + + "github.com/gin-gonic/gin" ) type ClaudeMetadata struct { @@ -216,5 +217,8 @@ func claudeHandler(c *gin.Context, resp *http.Response, promptTokens int, model c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &usage } diff --git a/controller/relay-image.go b/controller/relay-image.go index ccd52dce..193e9d30 100644 --- a/controller/relay-image.go +++ b/controller/relay-image.go @@ -6,11 +6,12 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" "one-api/model" + + "github.com/gin-gonic/gin" ) func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode { @@ -82,6 +83,10 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode ratio := modelRatio * groupRatio userQuota, err := model.CacheGetUserQuota(userId) + if err != nil { + return errorWrapper(err, "get_user_quota_failed", http.StatusInternalServerError) + } + sizeRatio := 1.0 // Size if imageRequest.Size == "256x256" { diff --git a/controller/relay-palm.go b/controller/relay-palm.go index a705b318..cbdc6cca 100644 --- a/controller/relay-palm.go +++ b/controller/relay-palm.go @@ -3,10 +3,11 @@ package controller import ( "encoding/json" "fmt" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" + + "github.com/gin-gonic/gin" ) // https://developers.generativeai.google/api/rest/generativelanguage/models/generateMessage#request-body @@ -201,5 +202,8 @@ func palmHandler(c *gin.Context, resp *http.Response, promptTokens int, model st c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &usage } diff --git a/controller/relay-tencent.go b/controller/relay-tencent.go index 024468bc..46304fb2 100644 --- a/controller/relay-tencent.go +++ b/controller/relay-tencent.go @@ -8,13 +8,14 @@ import ( "encoding/json" "errors" "fmt" - "github.com/gin-gonic/gin" "io" "net/http" "one-api/common" "sort" "strconv" "strings" + + "github.com/gin-gonic/gin" ) // https://cloud.tencent.com/document/product/1729/97732 @@ -244,6 +245,9 @@ func tencentHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithStatus c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &fullTextResponse.Usage } @@ -277,7 +281,7 @@ func getTencentSign(req TencentChatRequest, secretKey string) string { messageStr = strings.TrimSuffix(messageStr, ",") params = append(params, "messages=["+messageStr+"]") - sort.Sort(sort.StringSlice(params)) + sort.Strings(params) url := "hunyuan.cloud.tencent.com/hyllm/v1/chat/completions?" + strings.Join(params, "&") mac := hmac.New(sha1.New, []byte(secretKey)) signURL := url diff --git a/controller/relay-utils.go b/controller/relay-utils.go index 920ab5b4..a30d9f48 100644 --- a/controller/relay-utils.go +++ b/controller/relay-utils.go @@ -31,7 +31,7 @@ func InitTokenEncoders() { if err != nil { common.FatalLog(fmt.Sprintf("failed to get gpt-4 token encoder: %s", err.Error())) } - for model, _ := range common.ModelRatio { + for model := range common.ModelRatio { if strings.HasPrefix(model, "gpt-3.5") { tokenEncoderMap[model] = gpt35TokenEncoder } else if strings.HasPrefix(model, "gpt-4") { @@ -98,12 +98,12 @@ func countTokenMessages(messages []Message, model string) int { } func countTokenInput(input any, model string) int { - switch input.(type) { + switch v := input.(type) { case string: - return countTokenText(input.(string), model) + return countTokenText(v, model) case []string: text := "" - for _, s := range input.([]string) { + for _, s := range v { text += s } return countTokenText(text, model) diff --git a/controller/relay-zhipu.go b/controller/relay-zhipu.go index 7a4a582d..714edccd 100644 --- a/controller/relay-zhipu.go +++ b/controller/relay-zhipu.go @@ -3,14 +3,15 @@ package controller import ( "bufio" "encoding/json" - "github.com/gin-gonic/gin" - "github.com/golang-jwt/jwt" "io" "net/http" "one-api/common" "strings" "sync" "time" + + "github.com/gin-gonic/gin" + "github.com/golang-jwt/jwt" ) // https://open.bigmodel.cn/doc/api#chatglm_std @@ -193,7 +194,7 @@ func zhipuStreamHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithSt if atEOF && len(data) == 0 { return 0, nil, nil } - if i := strings.Index(string(data), "\n\n"); i >= 0 && strings.Index(string(data), ":") >= 0 { + if i := strings.Index(string(data), "\n\n"); i >= 0 && strings.Contains(string(data), ":") { return i + 2, data[0:i], nil } if atEOF { @@ -297,5 +298,8 @@ func zhipuHandler(c *gin.Context, resp *http.Response) (*OpenAIErrorWithStatusCo c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(resp.StatusCode) _, err = c.Writer.Write(jsonResponse) + if err != nil { + common.SysError("error writing response: " + err.Error()) + } return nil, &fullTextResponse.Usage } diff --git a/controller/relay.go b/controller/relay.go index 7e60afc0..54557a01 100644 --- a/controller/relay.go +++ b/controller/relay.go @@ -49,12 +49,12 @@ func (r GeneralOpenAIRequest) ParseInput() []string { return nil } var input []string - switch r.Input.(type) { + switch v := r.Input.(type) { case string: - input = []string{r.Input.(string)} + input = []string{v} case []any: - input = make([]string, 0, len(r.Input.([]any))) - for _, item := range r.Input.([]any) { + input = make([]string, 0, len(v)) + for _, item := range v { if str, ok := item.(string); ok { input = append(input, str) } diff --git a/go.mod b/go.mod index 2c6ec897..f7c9cc17 100644 --- a/go.mod +++ b/go.mod @@ -6,14 +6,14 @@ go 1.21 require ( github.com/gin-contrib/cors v1.4.0 github.com/gin-contrib/gzip v0.0.6 - github.com/gin-contrib/sessions v0.0.5 + github.com/gin-contrib/sessions v0.0.4 github.com/gin-contrib/static v0.0.1 github.com/gin-gonic/gin v1.9.1 - github.com/go-playground/validator/v10 v10.15.5 + github.com/go-playground/validator/v10 v10.16.0 github.com/go-redis/redis/v8 v8.11.5 github.com/golang-jwt/jwt v3.2.2+incompatible github.com/google/uuid v1.4.0 - github.com/gorilla/websocket v1.5.0 + github.com/gorilla/websocket v1.5.1 github.com/pkoukk/tiktoken-go v0.1.6 golang.org/x/crypto v0.14.0 gorm.io/driver/mysql v1.5.2 @@ -37,29 +37,30 @@ require ( github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/goccy/go-json v0.10.2 // indirect - github.com/gorilla/context v1.1.1 // indirect - github.com/gorilla/securecookie v1.1.1 // indirect - github.com/gorilla/sessions v1.2.1 // indirect + github.com/gorilla/context v1.1.2 // indirect + github.com/gorilla/securecookie v1.1.2 // indirect + github.com/gorilla/sessions v1.2.2 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgx/v5 v5.4.3 // indirect + github.com/jackc/pgx/v5 v5.5.0 // indirect + github.com/jackc/puddle/v2 v2.2.1 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect - github.com/knz/go-libedit v1.10.1 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/mattn/go-isatty v0.0.20 // indirect - github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect + github.com/mattn/go-sqlite3 v1.14.18 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect - golang.org/x/arch v0.5.0 // indirect + golang.org/x/arch v0.6.0 // indirect golang.org/x/net v0.17.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/text v0.14.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 39a6ffd8..6b74d515 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,7 @@ +github.com/antonlindstrom/pgstore v0.0.0-20200229204646-b08ebf1105e0/go.mod h1:2Ti6VUHVxpC0VSmTZzEvpzysnaGAfGBOoMIz5ykPyyw= +github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw= +github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA= +github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.2 h1:GQebETVBxYB7JGWJtLBi07OVzWwt+8dWA00gEVW2ZFE= @@ -8,34 +12,40 @@ github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= -github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= github.com/chenzhuoyu/iasm v0.9.0/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/chenzhuoyu/iasm v0.9.1 h1:tUHQJXo3NhBqw6s33wkGn9SP3bvrWLdlVIJ3hQBL7P0= github.com/chenzhuoyu/iasm v0.9.1/go.mod h1:Xjy2NpN3h7aUqeqM+woSuuvxmIe6+DDsiNLIrkAmYog= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g= github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs= github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= -github.com/gin-contrib/sessions v0.0.5 h1:CATtfHmLMQrMNpJRgzjWXD7worTh7g7ritsQfmF+0jE= -github.com/gin-contrib/sessions v0.0.5/go.mod h1:vYAuaUPqie3WUSsft6HUlCjlwwoJQs97miaG2+7neKY= +github.com/gin-contrib/sessions v0.0.4 h1:gq4fNa1Zmp564iHP5G6EBuktilEos8VKhe2sza1KMgo= +github.com/gin-contrib/sessions v0.0.4/go.mod h1:pQ3sIyviBBGcxgyR8mkeJuXbeV3h3NYmhJADQTq5+Vo= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-contrib/static v0.0.1 h1:JVxuvHPuUfkoul12N7dtQw7KRn/pSMq7Ue1Va9Swm1U= github.com/gin-contrib/static v0.0.1/go.mod h1:CSxeF+wep05e0kCOsqWdAWbSszmc31zTIbD8TvWl7Hs= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= +github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= +github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -45,9 +55,10 @@ github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= -github.com/go-playground/validator/v10 v10.15.5 h1:LEBecTWb/1j5TNY1YYG2RcOUN3R7NLylN+x8TTueE24= -github.com/go-playground/validator/v10 v10.15.5/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= +github.com/go-playground/validator/v10 v10.16.0 h1:x+plE831WK4vaKHO/jpgUGsvLKIqRRkz6M78GuJAfGE= +github.com/go-playground/validator/v10 v10.16.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= @@ -60,26 +71,34 @@ github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keL github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/securecookie v1.1.1 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ= +github.com/gorilla/context v1.1.2 h1:WRkNAv2uoa03QNIc1A6u4O7DAGMUVoopZhkiXWA2V1o= +github.com/gorilla/context v1.1.2/go.mod h1:KDPwT9i/MeWHiLl90fuTgrt4/wPcv75vFAZLaOOcbxM= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= -github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI= -github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= +github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= +github.com/gorilla/sessions v1.1.1/go.mod h1:8KCfur6+4Mqcc6S0FEfKuN15Vl5MgXW92AE8ovaJD0w= +github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/sessions v1.2.2 h1:lqzMYz6bOfvn2WriPUjNByzeXIlVzURcPmgMczkmTjY= +github.com/gorilla/sessions v1.2.2/go.mod h1:ePLdVu+jbEgHH+KWw8I1z2wqd0BAdAQh/8LRvBeoNcQ= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= -github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jackc/pgx/v5 v5.5.0 h1:NxstgwndsTRy7eq9/kqYc/BZh5w2hHJV86wjvO+1xPw= +github.com/jackc/pgx/v5 v5.5.0/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk= +github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= @@ -89,43 +108,55 @@ github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwA github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/kidstuff/mongostore v0.0.0-20181113001930-e650cd85ee4b/go.mod h1:g2nVr8KZVXJSS97Jo8pJ0jgq29P6H7dG0oplUA86MQw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/knz/go-libedit v1.10.1 h1:0pHpWtx9vcvC0xGZqEQlQdfSQs7WRlAjuPvk3fOZDCo= github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= +github.com/lib/pq v1.10.3/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-sqlite3 v2.0.3+incompatible h1:gXHsfypPkaMZrKbD5209QV9jbUTJKjyR5WD3HYQSd+U= -github.com/mattn/go-sqlite3 v2.0.3+incompatible/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-sqlite3 v1.14.18 h1:JL0eqdCOq6DJVNPSvArO/bIV9/P7fbGrV00LZHc+5aI= +github.com/mattn/go-sqlite3 v1.14.18/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/memcachier/mc v2.0.1+incompatible/go.mod h1:7bkvFE61leUBvXz+yxsOnGBQSZpBSPIMUQSmmSHvuXc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkoukk/tiktoken-go v0.1.6 h1:JF0TlJzhTbrI30wCvFuiw6FzP2+/bR+FIxUdgEAcUsw= github.com/pkoukk/tiktoken-go v0.1.6/go.mod h1:9NiV+i9mJKGj1rYOT+njbv+ZwA/zJxYdewGl6qVatpg= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b/go.mod h1:wTPjTepVu7uJBYgZ0SdWHQlIas582j6cn2jgk4DDdlg= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -138,6 +169,7 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= @@ -148,14 +180,21 @@ github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95 github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.5.0 h1:jpGode6huXQxcskEIpOCvrU+tzo81b6+oFLUYXWtH/Y= -golang.org/x/arch v0.5.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/arch v0.6.0 h1:S0JTfE48HbRj80+4tbvZDYsJ3tGv6BUU3XxyZ7CirAc= +golang.org/x/arch v0.6.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -163,15 +202,17 @@ golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= @@ -179,10 +220,14 @@ google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -190,8 +235,6 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/mysql v1.5.2 h1:QC2HRskSE75wBuOxe0+iCkyJZ+RqpudsQtqkp+IMuXs= gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb8= -gorm.io/driver/postgres v1.5.3 h1:qKGY5CPHOuj47K/VxbCXJfFvIUeqMSXXadqdCY+MbBU= -gorm.io/driver/postgres v1.5.3/go.mod h1:F+LtvlFhZT7UBiA81mC9W6Su3D4WUhSboc/36QZU0gk= gorm.io/driver/postgres v1.5.4 h1:Iyrp9Meh3GmbSuyIAGyjkN+n9K+GHX9b9MqsTL4EJCo= gorm.io/driver/postgres v1.5.4/go.mod h1:Bgo89+h0CRcdA33Y6frlaHHVuTdOf87pmyzwW9C/BH0= gorm.io/driver/sqlite v1.5.4 h1:IqXwXi8M/ZlPzH/947tn5uik3aYQslP9BVveoax0nV0= diff --git a/i18n/en.json b/i18n/en.json index dcdb4b93..8b56ed93 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -640,10 +640,13 @@ "请检查你的浏览器地址是否正确": "Please check if your browser address is correct", "重新启用之前被自动禁用的故障通道": "Re-enable the failed channel automatically disabled before", - "Turnstile 部件测试: (如果您的 Turnstile 模式设置为 不可见 模式,则不会显示此部件。)": "Turnstile widget test: (If your Turnstile mode is set to Invisible mode, this widget will not be displayed.)", + "Turnstile 部件测试: (如果您的 Turnstile 模式设置为 不可见 模式,则不会显示此部件。)": "Turnstile widget test: (If your Turnstile mode is set to Invisible mode, this widget will not be displayed.)", "通道「%s」(#%d)已被重新启用": "Channel '%s' (#%d) has been re-enabled", "通道「%s」(#%d)通道现在满足了服务器要求, 已被重新启用并重新开始运行": "Channel '%s' (#%d) now meets the server requirements, has been re-enabled and restarted", + "解析请求体失败": "Failed to parse request body", + "从 .env 文件加载环境变量": "Load environment variables from .env file", + "本项目 OneAPI 原作 JustSong ,由 ckt1031 改进,本源代码遵循 MIT 协议": "OneAPI by JustSong, improved by ckt1031, and follows MIT license", "警告": "Warning", "确定": "Confirm", diff --git a/main.go b/main.go index b08203af..7a83e42c 100644 --- a/main.go +++ b/main.go @@ -26,8 +26,8 @@ var indexPage []byte func main() { // This will load .env file if it exists, to set environment variables instead of exporting them one by one envErr := godotenv.Load() - if envErr != nil { - common.SysLog("Cannot load .env file, using environment variables, this is not an error, just a reminder") + if envErr == nil { + common.SysLog("从 .env 文件加载环境变量") } common.SetupLogger() diff --git a/middleware/request-id.go b/middleware/request-id.go index e623be7a..12bd011c 100644 --- a/middleware/request-id.go +++ b/middleware/request-id.go @@ -2,15 +2,20 @@ package middleware import ( "context" - "github.com/gin-gonic/gin" "one-api/common" + + "github.com/gin-gonic/gin" ) func RequestId() func(c *gin.Context) { return func(c *gin.Context) { + type RequestIdKeyType string + + const RequestIdKey RequestIdKeyType = common.RequestIdKey + id := common.GetTimeString() + common.GetRandomString(8) c.Set(common.RequestIdKey, id) - ctx := context.WithValue(c.Request.Context(), common.RequestIdKey, id) + ctx := context.WithValue(c.Request.Context(), RequestIdKey, id) c.Request = c.Request.WithContext(ctx) c.Header(common.RequestIdKey, id) c.Next() diff --git a/model/log.go b/model/log.go index ce5e7cf0..ea4e3160 100644 --- a/model/log.go +++ b/model/log.go @@ -9,7 +9,7 @@ import ( ) type Log struct { - Id int `json:"id;index:idx_created_at_id,priority:1"` + Id int `json:"id" gorm:"index:idx_created_at_id,priority:1"` UserId int `json:"user_id" gorm:"index"` CreatedAt int64 `json:"created_at" gorm:"bigint;index:idx_created_at_id,priority:2;index:idx_created_at_type"` Type int `json:"type" gorm:"index:idx_created_at_type"` diff --git a/model/option.go b/model/option.go index 3e329934..3da76210 100644 --- a/model/option.go +++ b/model/option.go @@ -14,8 +14,7 @@ type Option struct { func AllOption() ([]*Option, error) { var options []*Option - var err error - err = DB.Find(&options).Error + err := DB.Find(&options).Error return options, err } diff --git a/model/redemption.go b/model/redemption.go index f347345d..9641a2a2 100644 --- a/model/redemption.go +++ b/model/redemption.go @@ -22,8 +22,7 @@ type Redemption struct { func GetAllRedemptions(startIdx int, num int) ([]*Redemption, error) { var redemptions []*Redemption - var err error - err = DB.Order("id desc").Limit(num).Offset(startIdx).Find(&redemptions).Error + err := DB.Order("id desc").Limit(num).Offset(startIdx).Find(&redemptions).Error return redemptions, err } @@ -37,8 +36,7 @@ func GetRedemptionById(id int) (*Redemption, error) { return nil, errors.New("id 为空!") } redemption := Redemption{Id: id} - var err error = nil - err = DB.First(&redemption, "id = ?", id).Error + err := DB.First(&redemption, "id = ?", id).Error return &redemption, err } @@ -81,9 +79,7 @@ func Redeem(key string, userId int) (quota int, err error) { } func (redemption *Redemption) Insert() error { - var err error - err = DB.Create(redemption).Error - return err + return DB.Create(redemption).Error } func (redemption *Redemption) SelectUpdate() error { @@ -93,15 +89,11 @@ func (redemption *Redemption) SelectUpdate() error { // Update Make sure your token's fields is completed, because this will update non-zero values func (redemption *Redemption) Update() error { - var err error - err = DB.Model(redemption).Select("name", "status", "quota", "redeemed_time").Updates(redemption).Error - return err + return DB.Model(redemption).Select("name", "status", "quota", "redeemed_time").Updates(redemption).Error } func (redemption *Redemption) Delete() error { - var err error - err = DB.Delete(redemption).Error - return err + return DB.Delete(redemption).Error } func DeleteRedemptionById(id int) (err error) { diff --git a/model/token.go b/model/token.go index 0fa984d3..c9db2c70 100644 --- a/model/token.go +++ b/model/token.go @@ -3,8 +3,9 @@ package model import ( "errors" "fmt" - "gorm.io/gorm" "one-api/common" + + "gorm.io/gorm" ) type Token struct { @@ -23,8 +24,7 @@ type Token struct { func GetAllUserTokens(userId int, startIdx int, num int) ([]*Token, error) { var tokens []*Token - var err error - err = DB.Where("user_id = ?", userId).Order("id desc").Limit(num).Offset(startIdx).Find(&tokens).Error + err := DB.Where("user_id = ?", userId).Order("id desc").Limit(num).Offset(startIdx).Find(&tokens).Error return tokens, err } @@ -78,8 +78,7 @@ func GetTokenByIds(id int, userId int) (*Token, error) { return nil, errors.New("id 或 userId 为空!") } token := Token{Id: id, UserId: userId} - var err error = nil - err = DB.First(&token, "id = ? and user_id = ?", id, userId).Error + err := DB.First(&token, "id = ? and user_id = ?", id, userId).Error return &token, err } @@ -88,22 +87,17 @@ func GetTokenById(id int) (*Token, error) { return nil, errors.New("id 为空!") } token := Token{Id: id} - var err error = nil - err = DB.First(&token, "id = ?", id).Error + err := DB.First(&token, "id = ?", id).Error return &token, err } func (token *Token) Insert() error { - var err error - err = DB.Create(token).Error - return err + return DB.Create(token).Error } // Update Make sure your token's fields is completed, because this will update non-zero values func (token *Token) Update() error { - var err error - err = DB.Model(token).Select("name", "status", "expired_time", "remain_quota", "unlimited_quota").Updates(token).Error - return err + return DB.Model(token).Select("name", "status", "expired_time", "remain_quota", "unlimited_quota").Updates(token).Error } func (token *Token) SelectUpdate() error { @@ -112,9 +106,7 @@ func (token *Token) SelectUpdate() error { } func (token *Token) Delete() error { - var err error - err = DB.Delete(token).Error - return err + return DB.Delete(token).Error } func DeleteTokenById(id int, userId int) (err error) {