From 47da8009aa9f3fe60450449deb4e94f331095fdd Mon Sep 17 00:00:00 2001 From: Zhang Minghan Date: Sat, 4 Nov 2023 20:46:59 +0800 Subject: [PATCH] fix service worker --- app/src/conf.ts | 4 ++-- app/src/i18n.ts | 8 +++----- app/src/routes/Auth.tsx | 2 +- app/vite.config.ts | 37 +------------------------------------ auth/rule.go | 3 +-- auth/user.go | 24 +++++++++++++----------- manager/chat.go | 2 +- middleware/throttle.go | 2 +- 8 files changed, 23 insertions(+), 59 deletions(-) diff --git a/app/src/conf.ts b/app/src/conf.ts index 65fd394..97d1728 100644 --- a/app/src/conf.ts +++ b/app/src/conf.ts @@ -8,7 +8,7 @@ import { } from "@/utils/env.ts"; import { getMemory } from "@/utils/memory.ts"; -export const version = "3.6.9rc"; +export const version = "3.6.10"; export const dev: boolean = getDev(); export const deploy: boolean = true; export let rest_api: string = getRestApi(deploy); @@ -25,7 +25,7 @@ export const supportModels: Model[] = [ { id: "gpt-4-dalle", name: "DALLE3", free: false, auth: true }, // anthropic models - { id: "claude-2", name: "Claude-2", free: true, auth: false }, + { id: "claude-2", name: "Claude-2", free: true, auth: true }, { id: "claude-2-100k", name: "Claude-2-100k", free: false, auth: true }, // spark desk diff --git a/app/src/i18n.ts b/app/src/i18n.ts index 571a3cd..86aceba 100644 --- a/app/src/i18n.ts +++ b/app/src/i18n.ts @@ -19,8 +19,7 @@ const resources = { "invalid-token": "Invalid token", "invalid-token-prompt": "Please try again.", "login-failed": "Login failed", - "login-failed-prompt": - "Login failed! Please check your token expiration and try again.", + "login-failed-prompt": "Login failed! Reason: {{reason}}", "login-success": "Login successful", "login-success-prompt": "You have been logged in successfully.", "server-error": "Server error", @@ -271,7 +270,7 @@ const resources = { "invalid-token": "无效的令牌", "invalid-token-prompt": "请重试。", "login-failed": "登录失败", - "login-failed-prompt": "登录失败!请检查您的令牌过期时间并重试。", + "login-failed-prompt": "登录失败!原因: {{reason}}", "login-success": "登录成功", "login-success-prompt": "您已成功登录。", "server-error": "服务器错误", @@ -507,8 +506,7 @@ const resources = { "invalid-token": "Неверный токен", "invalid-token-prompt": "Пожалуйста, попробуйте еще раз.", "login-failed": "Ошибка входа", - "login-failed-prompt": - "Ошибка входа! Пожалуйста, проверьте срок действия вашего токена и попробуйте еще раз.", + "login-failed-prompt": "Ошибка входа! Причина: {{reason}}", "login-success": "Успешный вход", "login-success-prompt": "Вы успешно вошли в систему.", "server-error": "Ошибка сервера", diff --git a/app/src/routes/Auth.tsx b/app/src/routes/Auth.tsx index b5e4a2c..e2157c6 100644 --- a/app/src/routes/Auth.tsx +++ b/app/src/routes/Auth.tsx @@ -42,7 +42,7 @@ function Auth() { if (!data.status) { toast({ title: t("login-failed"), - description: t("login-failed-prompt"), + description: t("login-failed-prompt", { reason: data.error }), action: ( {t("try-again")} diff --git a/app/vite.config.ts b/app/vite.config.ts index e7fd027..7f66fa4 100644 --- a/app/vite.config.ts +++ b/app/vite.config.ts @@ -2,7 +2,7 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react-swc' import path from "path" import { createHtmlPlugin } from 'vite-plugin-html' -import {VitePWA} from "vite-plugin-pwa"; +import { VitePWA } from "vite-plugin-pwa"; // https://vitejs.dev/config/ export default defineConfig({ @@ -26,41 +26,6 @@ export default defineConfig({ }], start_url: "/", }, - devOptions: { - enabled: true, - }, - workbox: { - globPatterns: [ - // except for sw.js, which is precached by workbox itself - '**/*.{js,css,html,png,svg,ico,webp}', - ], - globDirectory: 'dist', - swDest: 'dist/sw.js', - skipWaiting: true, - clientsClaim: true, - runtimeCaching: [ - { - urlPattern: /\.(?:png|gif|jpg|jpeg|svg|webp)$/, - handler: 'CacheFirst', - options: { - cacheName: 'images', - expiration: { - maxEntries: 7200, - } - } - }, { - urlPattern: new RegExp('^https://open.lightxi.com/'), - handler: 'CacheFirst', - options: { - cacheName: 'lightxi-cdn', - expiration: { - maxEntries: 7200, - maxAgeSeconds: 60 * 60 * 24 * 30, - } - } - } - ], - } }), ], resolve: { diff --git a/auth/rule.go b/auth/rule.go index 47a61b0..b750dbf 100644 --- a/auth/rule.go +++ b/auth/rule.go @@ -9,8 +9,7 @@ import ( // CanEnableModel returns whether the model can be enabled (without subscription) func CanEnableModel(db *sql.DB, user *User, model string) bool { switch model { - case globals.GPT3Turbo, globals.GPT3TurboInstruct, globals.GPT3Turbo0301, globals.GPT3Turbo0613, - globals.Claude2: + case globals.GPT3Turbo, globals.GPT3TurboInstruct, globals.GPT3Turbo0301, globals.GPT3Turbo0613: return true case globals.GPT4, globals.GPT40613, globals.GPT40314: return user != nil && user.GetQuota(db) >= 5 diff --git a/auth/user.go b/auth/user.go index 789fdf6..7e3bc15 100644 --- a/auth/user.go +++ b/auth/user.go @@ -4,6 +4,7 @@ import ( "chat/globals" "chat/utils" "database/sql" + "errors" "fmt" "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" @@ -63,7 +64,7 @@ func (u *User) Validate(c *gin.Context) bool { return true } -func (u *User) GenerateToken() string { +func (u *User) GenerateToken() (string, error) { instance := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "username": u.Username, "password": u.Password, @@ -71,9 +72,9 @@ func (u *User) GenerateToken() string { }) token, err := instance.SignedString([]byte(viper.GetString("secret"))) if err != nil { - return "" + return "", err } - return token + return token, nil } func (u *User) GetID(db *sql.DB) int64 { @@ -273,11 +274,11 @@ func ParseApiKey(c *gin.Context, key string) *User { return &user } -func Login(c *gin.Context, token string) (bool, string) { +func Login(c *gin.Context, token string) (string, error) { // DeepTrain Token Validation user := Validate(token) if user == nil { - return false, "" + return "", errors.New("cannot validate access token") } db := utils.GetDBFromContext(c) @@ -290,7 +291,7 @@ func Login(c *gin.Context, token string) (bool, string) { Username: user.Username, Password: password, } - return true, u.GenerateToken() + return u.GenerateToken() } // login @@ -298,13 +299,13 @@ func Login(c *gin.Context, token string) (bool, string) { var password string err := db.QueryRow("SELECT password FROM auth WHERE username = ?", user.Username).Scan(&password) if err != nil { - return false, "" + return "", err } u := &User{ Username: user.Username, Password: password, } - return true, u.GenerateToken() + return u.GenerateToken() } func LoginAPI(c *gin.Context) { @@ -317,14 +318,15 @@ func LoginAPI(c *gin.Context) { return } - state, token := Login(c, form.Token) - if !state { + token, err := Login(c, form.Token) + if err != nil { c.JSON(http.StatusOK, gin.H{ "status": false, - "error": "user not found", + "error": err.Error(), }) return } + c.JSON(http.StatusOK, gin.H{ "status": true, "token": token, diff --git a/manager/chat.go b/manager/chat.go index ccb542c..855cb94 100644 --- a/manager/chat.go +++ b/manager/chat.go @@ -13,7 +13,7 @@ import ( ) const defaultMessage = "Sorry, I don't understand. Please try again." -const defaultQuotaMessage = "You don't have enough quota to use this model. please [buy](/buy) or [subscribe](/subscribe) to get more." +const defaultQuotaMessage = "You don't have enough quota to use this model. please [buy](/buy) or [subscribe](/subscribe) to get more. (or please check if you are logged in)" func GetErrorQuota(model string) float32 { return utils.Multi[float32](globals.IsGPT4Model(model), -0xe, 0) // special value for error diff --git a/middleware/throttle.go b/middleware/throttle.go index 7cc0bb2..bf24b77 100644 --- a/middleware/throttle.go +++ b/middleware/throttle.go @@ -27,7 +27,7 @@ func (l *Limiter) RateLimit(ctx *gin.Context, rds *redis.Client, ip string, path } var limits = map[string]Limiter{ - "/login": {Duration: 10, Count: 5}, + "/login": {Duration: 10, Count: 20}, "/apikey": {Duration: 1, Count: 2}, "/package": {Duration: 1, Count: 2}, "/quota": {Duration: 1, Count: 2},