Преглед изворни кода

feat: 前端不显示敏感信息

CaIon пре 1 година
родитељ
комит
818bd824da

+ 0 - 9
common/constants.go

@@ -9,15 +9,6 @@ import (
 	"github.com/google/uuid"
 )
 
-// Pay Settings
-
-var PayAddress = ""
-var CustomCallbackAddress = ""
-var EpayId = ""
-var EpayKey = ""
-var Price = 7.3
-var MinTopUp = 1
-
 var StartTime = time.Now().Unix() // unit: second
 var Version = "v0.0.0"            // this hard coding will be replaced automatically when building, no need to manually change
 var SystemName = "New API"

+ 86 - 86
common/model-ratio.go

@@ -14,91 +14,91 @@ import (
 // 1 === ¥0.014 / 1k tokens
 var DefaultModelRatio = map[string]float64{
 	//"midjourney":                50,
-	"gpt-4-gizmo-*":             15,
-	"gpt-4":                     15,
-	"gpt-4-0314":                15,
-	"gpt-4-0613":                15,
-	"gpt-4-32k":                 30,
-	"gpt-4-32k-0314":            30,
-	"gpt-4-32k-0613":            30,
-	"gpt-4-1106-preview":        5,    // $0.01 / 1K tokens
-	"gpt-4-0125-preview":        5,    // $0.01 / 1K tokens
-	"gpt-4-turbo-preview":       5,    // $0.01 / 1K tokens
-	"gpt-4-vision-preview":      5,    // $0.01 / 1K tokens
-	"gpt-4-1106-vision-preview": 5,    // $0.01 / 1K tokens
-	"gpt-4-turbo":               5,    // $0.01 / 1K tokens
-	"gpt-3.5-turbo":             0.25, // $0.0015 / 1K tokens
-	"gpt-3.5-turbo-0301":        0.75,
-	"gpt-3.5-turbo-0613":        0.75,
-	"gpt-3.5-turbo-16k":         1.5, // $0.003 / 1K tokens
-	"gpt-3.5-turbo-16k-0613":    1.5,
-	"gpt-3.5-turbo-instruct":    0.75, // $0.0015 / 1K tokens
-	"gpt-3.5-turbo-1106":        0.5,  // $0.001 / 1K tokens
-	"gpt-3.5-turbo-0125":        0.25,
-	"babbage-002":               0.2, // $0.0004 / 1K tokens
-	"davinci-002":               1,   // $0.002 / 1K tokens
-	"text-ada-001":              0.2,
-	"text-babbage-001":          0.25,
-	"text-curie-001":            1,
-	"text-davinci-002":          10,
-	"text-davinci-003":          10,
-	"text-davinci-edit-001":     10,
-	"code-davinci-edit-001":     10,
-	"whisper-1":                 15,  // $0.006 / minute -> $0.006 / 150 words -> $0.006 / 200 tokens -> $0.03 / 1k tokens
-	"tts-1":                     7.5, // 1k characters -> $0.015
-	"tts-1-1106":                7.5, // 1k characters -> $0.015
-	"tts-1-hd":                  15,  // 1k characters -> $0.03
-	"tts-1-hd-1106":             15,  // 1k characters -> $0.03
-	"davinci":                   10,
-	"curie":                     10,
-	"babbage":                   10,
-	"ada":                       10,
-	"text-embedding-3-small":    0.01,
-	"text-embedding-3-large":    0.065,
-	"text-embedding-ada-002":    0.05,
-	"text-search-ada-doc-001":   10,
-	"text-moderation-stable":    0.1,
-	"text-moderation-latest":    0.1,
-	"dall-e-2":                  8,
-	"dall-e-3":                  16,
-	"claude-instant-1":          0.4,    // $0.8 / 1M tokens
-	"claude-2.0":                4,      // $8 / 1M tokens
-	"claude-2.1":                4,      // $8 / 1M tokens
-	"claude-3-haiku-20240307":   0.125,  // $0.25 / 1M tokens
-	"claude-3-sonnet-20240229":  1.5,    // $3 / 1M tokens
-	"claude-3-opus-20240229":    7.5,    // $15 / 1M tokens
-	"ERNIE-Bot":                 0.8572, // ¥0.012 / 1k tokens
-	"ERNIE-Bot-turbo":           0.5715, // ¥0.008 / 1k tokens
-	"ERNIE-Bot-4":               8.572,  // ¥0.12 / 1k tokens
-	"Embedding-V1":              0.1429, // ¥0.002 / 1k tokens
-	"PaLM-2":                    1,
-	"gemini-pro":                1, // $0.00025 / 1k characters -> $0.001 / 1k tokens
-	"gemini-pro-vision":         1, // $0.00025 / 1k characters -> $0.001 / 1k tokens
-	"gemini-1.0-pro-vision-001": 1,
-	"gemini-1.0-pro-001":        1,
-	"gemini-1.5-pro-latest":     1,
-	"gemini-1.0-pro-latest":     1,
-	"gemini-1.0-pro-vision-latest":   1,
-	"gemini-ultra":              1,
-	"chatglm_turbo":             0.3572, // ¥0.005 / 1k tokens
-	"chatglm_pro":               0.7143, // ¥0.01 / 1k tokens
-	"chatglm_std":               0.3572, // ¥0.005 / 1k tokens
-	"chatglm_lite":              0.1429, // ¥0.002 / 1k tokens
-	"glm-4":                     7.143,  // ¥0.1 / 1k tokens
-	"glm-4v":                    7.143,  // ¥0.1 / 1k tokens
-	"glm-3-turbo":               0.3572,
-	"qwen-turbo":                0.8572, // ¥0.012 / 1k tokens
-	"qwen-plus":                 10,     // ¥0.14 / 1k tokens
-	"text-embedding-v1":         0.05,   // ¥0.0007 / 1k tokens
-	"SparkDesk-v1.1":            1.2858, // ¥0.018 / 1k tokens
-	"SparkDesk-v2.1":            1.2858, // ¥0.018 / 1k tokens
-	"SparkDesk-v3.1":            1.2858, // ¥0.018 / 1k tokens
-	"SparkDesk-v3.5":            1.2858, // ¥0.018 / 1k tokens
-	"360GPT_S2_V9":              0.8572, // ¥0.012 / 1k tokens
-	"embedding-bert-512-v1":     0.0715, // ¥0.001 / 1k tokens
-	"embedding_s1_v1":           0.0715, // ¥0.001 / 1k tokens
-	"semantic_similarity_s1_v1": 0.0715, // ¥0.001 / 1k tokens
-	"hunyuan":                   7.143,  // ¥0.1 / 1k tokens  // https://cloud.tencent.com/document/product/1729/97731#e0e6be58-60c8-469f-bdeb-6c264ce3b4d0
+	"gpt-4-gizmo-*":                15,
+	"gpt-4":                        15,
+	"gpt-4-0314":                   15,
+	"gpt-4-0613":                   15,
+	"gpt-4-32k":                    30,
+	"gpt-4-32k-0314":               30,
+	"gpt-4-32k-0613":               30,
+	"gpt-4-1106-preview":           5,    // $0.01 / 1K tokens
+	"gpt-4-0125-preview":           5,    // $0.01 / 1K tokens
+	"gpt-4-turbo-preview":          5,    // $0.01 / 1K tokens
+	"gpt-4-vision-preview":         5,    // $0.01 / 1K tokens
+	"gpt-4-1106-vision-preview":    5,    // $0.01 / 1K tokens
+	"gpt-4-turbo":                  5,    // $0.01 / 1K tokens
+	"gpt-3.5-turbo":                0.25, // $0.0015 / 1K tokens
+	"gpt-3.5-turbo-0301":           0.75,
+	"gpt-3.5-turbo-0613":           0.75,
+	"gpt-3.5-turbo-16k":            1.5, // $0.003 / 1K tokens
+	"gpt-3.5-turbo-16k-0613":       1.5,
+	"gpt-3.5-turbo-instruct":       0.75, // $0.0015 / 1K tokens
+	"gpt-3.5-turbo-1106":           0.5,  // $0.001 / 1K tokens
+	"gpt-3.5-turbo-0125":           0.25,
+	"babbage-002":                  0.2, // $0.0004 / 1K tokens
+	"davinci-002":                  1,   // $0.002 / 1K tokens
+	"text-ada-001":                 0.2,
+	"text-babbage-001":             0.25,
+	"text-curie-001":               1,
+	"text-davinci-002":             10,
+	"text-davinci-003":             10,
+	"text-davinci-edit-001":        10,
+	"code-davinci-edit-001":        10,
+	"whisper-1":                    15,  // $0.006 / minute -> $0.006 / 150 words -> $0.006 / 200 tokens -> $0.03 / 1k tokens
+	"tts-1":                        7.5, // 1k characters -> $0.015
+	"tts-1-1106":                   7.5, // 1k characters -> $0.015
+	"tts-1-hd":                     15,  // 1k characters -> $0.03
+	"tts-1-hd-1106":                15,  // 1k characters -> $0.03
+	"davinci":                      10,
+	"curie":                        10,
+	"babbage":                      10,
+	"ada":                          10,
+	"text-embedding-3-small":       0.01,
+	"text-embedding-3-large":       0.065,
+	"text-embedding-ada-002":       0.05,
+	"text-search-ada-doc-001":      10,
+	"text-moderation-stable":       0.1,
+	"text-moderation-latest":       0.1,
+	"dall-e-2":                     8,
+	"dall-e-3":                     16,
+	"claude-instant-1":             0.4,    // $0.8 / 1M tokens
+	"claude-2.0":                   4,      // $8 / 1M tokens
+	"claude-2.1":                   4,      // $8 / 1M tokens
+	"claude-3-haiku-20240307":      0.125,  // $0.25 / 1M tokens
+	"claude-3-sonnet-20240229":     1.5,    // $3 / 1M tokens
+	"claude-3-opus-20240229":       7.5,    // $15 / 1M tokens
+	"ERNIE-Bot":                    0.8572, // ¥0.012 / 1k tokens
+	"ERNIE-Bot-turbo":              0.5715, // ¥0.008 / 1k tokens
+	"ERNIE-Bot-4":                  8.572,  // ¥0.12 / 1k tokens
+	"Embedding-V1":                 0.1429, // ¥0.002 / 1k tokens
+	"PaLM-2":                       1,
+	"gemini-pro":                   1, // $0.00025 / 1k characters -> $0.001 / 1k tokens
+	"gemini-pro-vision":            1, // $0.00025 / 1k characters -> $0.001 / 1k tokens
+	"gemini-1.0-pro-vision-001":    1,
+	"gemini-1.0-pro-001":           1,
+	"gemini-1.5-pro-latest":        1,
+	"gemini-1.0-pro-latest":        1,
+	"gemini-1.0-pro-vision-latest": 1,
+	"gemini-ultra":                 1,
+	"chatglm_turbo":                0.3572, // ¥0.005 / 1k tokens
+	"chatglm_pro":                  0.7143, // ¥0.01 / 1k tokens
+	"chatglm_std":                  0.3572, // ¥0.005 / 1k tokens
+	"chatglm_lite":                 0.1429, // ¥0.002 / 1k tokens
+	"glm-4":                        7.143,  // ¥0.1 / 1k tokens
+	"glm-4v":                       7.143,  // ¥0.1 / 1k tokens
+	"glm-3-turbo":                  0.3572,
+	"qwen-turbo":                   0.8572, // ¥0.012 / 1k tokens
+	"qwen-plus":                    10,     // ¥0.14 / 1k tokens
+	"text-embedding-v1":            0.05,   // ¥0.0007 / 1k tokens
+	"SparkDesk-v1.1":               1.2858, // ¥0.018 / 1k tokens
+	"SparkDesk-v2.1":               1.2858, // ¥0.018 / 1k tokens
+	"SparkDesk-v3.1":               1.2858, // ¥0.018 / 1k tokens
+	"SparkDesk-v3.5":               1.2858, // ¥0.018 / 1k tokens
+	"360GPT_S2_V9":                 0.8572, // ¥0.012 / 1k tokens
+	"embedding-bert-512-v1":        0.0715, // ¥0.001 / 1k tokens
+	"embedding_s1_v1":              0.0715, // ¥0.001 / 1k tokens
+	"semantic_similarity_s1_v1":    0.0715, // ¥0.001 / 1k tokens
+	"hunyuan":                      7.143,  // ¥0.1 / 1k tokens  // https://cloud.tencent.com/document/product/1729/97731#e0e6be58-60c8-469f-bdeb-6c264ce3b4d0
 	// https://platform.lingyiwanwu.com/docs#-计费单元
 	// 已经按照 7.2 来换算美元价格
 	"yi-34b-chat-0205": 0.018,
@@ -205,7 +205,7 @@ func GetCompletionRatio(name string) float64 {
 		return 4.0 / 3.0
 	}
 	if strings.HasPrefix(name, "gpt-4") {
-		if strings.HasPrefix(name, "gpt-4-turbo")|| strings.HasSuffix(name, "preview") {
+		if strings.HasPrefix(name, "gpt-4-turbo") || strings.HasSuffix(name, "preview") {
 			return 3
 		}
 		return 2

+ 8 - 0
constant/payment.go

@@ -0,0 +1,8 @@
+package constant
+
+var PayAddress = ""
+var CustomCallbackAddress = ""
+var EpayId = ""
+var EpayKey = ""
+var Price = 7.3
+var MinTopUp = 1

+ 3 - 3
controller/misc.go

@@ -46,8 +46,8 @@ func GetStatus(c *gin.Context) {
 			"wechat_qrcode":            common.WeChatAccountQRCodeImageURL,
 			"wechat_login":             common.WeChatAuthEnabled,
 			"server_address":           common.ServerAddress,
-			"price":                    common.Price,
-			"min_topup":                common.MinTopUp,
+			"price":                    constant.Price,
+			"min_topup":                constant.MinTopUp,
 			"turnstile_check":          common.TurnstileCheckEnabled,
 			"turnstile_site_key":       common.TurnstileSiteKey,
 			"top_up_link":              common.TopUpLink,
@@ -60,7 +60,7 @@ func GetStatus(c *gin.Context) {
 			"enable_data_export":       common.DataExportEnabled,
 			"data_export_default_time": common.DataExportDefaultTime,
 			"default_collapse_sidebar": common.DefaultCollapseSidebar,
-			"enable_online_topup":      common.PayAddress != "" && common.EpayId != "" && common.EpayKey != "",
+			"enable_online_topup":      constant.PayAddress != "" && constant.EpayId != "" && constant.EpayKey != "",
 			"mj_notify_enabled":        constant.MjNotifyEnabled,
 		},
 	})

+ 1 - 1
controller/option.go

@@ -14,7 +14,7 @@ func GetOptions(c *gin.Context) {
 	var options []*model.Option
 	common.OptionMapRWMutex.Lock()
 	for k, v := range common.OptionMap {
-		if strings.HasSuffix(k, "Token") || strings.HasSuffix(k, "Secret") {
+		if strings.HasSuffix(k, "Token") || strings.HasSuffix(k, "Secret") || strings.HasSuffix(k, "Key") {
 			continue
 		}
 		options = append(options, &model.Option{

+ 7 - 6
controller/topup.go

@@ -5,6 +5,7 @@ import (
 	"github.com/Calcium-Ion/go-epay/epay"
 	"github.com/gin-gonic/gin"
 	"github.com/samber/lo"
+	"one-api/constant"
 
 	"log"
 	"net/url"
@@ -28,13 +29,13 @@ type AmountRequest struct {
 }
 
 func GetEpayClient() *epay.Client {
-	if common.PayAddress == "" || common.EpayId == "" || common.EpayKey == "" {
+	if constant.PayAddress == "" || constant.EpayId == "" || constant.EpayKey == "" {
 		return nil
 	}
 	withUrl, err := epay.NewClient(&epay.Config{
-		PartnerID: common.EpayId,
-		Key:       common.EpayKey,
-	}, common.PayAddress)
+		PartnerID: constant.EpayId,
+		Key:       constant.EpayKey,
+	}, constant.PayAddress)
 	if err != nil {
 		return nil
 	}
@@ -50,12 +51,12 @@ func getPayMoney(amount float64, user model.User) float64 {
 	if topupGroupRatio == 0 {
 		topupGroupRatio = 1
 	}
-	payMoney := amount * common.Price * topupGroupRatio
+	payMoney := amount * constant.Price * topupGroupRatio
 	return payMoney
 }
 
 func getMinTopup() int {
-	minTopup := common.MinTopUp
+	minTopup := constant.MinTopUp
 	if !common.DisplayInCurrencyEnabled {
 		minTopup = minTopup * int(common.QuotaPerUnit)
 	}

+ 8 - 8
model/option.go

@@ -63,8 +63,8 @@ func InitOptionMap() {
 	common.OptionMap["CustomCallbackAddress"] = ""
 	common.OptionMap["EpayId"] = ""
 	common.OptionMap["EpayKey"] = ""
-	common.OptionMap["Price"] = strconv.FormatFloat(common.Price, 'f', -1, 64)
-	common.OptionMap["MinTopUp"] = strconv.Itoa(common.MinTopUp)
+	common.OptionMap["Price"] = strconv.FormatFloat(constant.Price, 'f', -1, 64)
+	common.OptionMap["MinTopUp"] = strconv.Itoa(constant.MinTopUp)
 	common.OptionMap["TopupGroupRatio"] = common.TopupGroupRatio2JSONString()
 	common.OptionMap["GitHubClientId"] = ""
 	common.OptionMap["GitHubClientSecret"] = ""
@@ -227,17 +227,17 @@ func updateOptionMap(key string, value string) (err error) {
 	case "ServerAddress":
 		common.ServerAddress = value
 	case "PayAddress":
-		common.PayAddress = value
+		constant.PayAddress = value
 	case "CustomCallbackAddress":
-		common.CustomCallbackAddress = value
+		constant.CustomCallbackAddress = value
 	case "EpayId":
-		common.EpayId = value
+		constant.EpayId = value
 	case "EpayKey":
-		common.EpayKey = value
+		constant.EpayKey = value
 	case "Price":
-		common.Price, _ = strconv.ParseFloat(value, 64)
+		constant.Price, _ = strconv.ParseFloat(value, 64)
 	case "MinTopUp":
-		common.MinTopUp, _ = strconv.Atoi(value)
+		constant.MinTopUp, _ = strconv.Atoi(value)
 	case "TopupGroupRatio":
 		err = common.UpdateTopupGroupRatioByJSONString(value)
 	case "GitHubClientId":

+ 6 - 3
service/epay.go

@@ -1,10 +1,13 @@
 package service
 
-import "one-api/common"
+import (
+	"one-api/common"
+	"one-api/constant"
+)
 
 func GetCallbackAddress() string {
-	if common.CustomCallbackAddress == "" {
+	if constant.CustomCallbackAddress == "" {
 		return common.ServerAddress
 	}
-	return common.CustomCallbackAddress
+	return constant.CustomCallbackAddress
 }

+ 10 - 4
web/src/components/SystemSetting.js

@@ -312,7 +312,9 @@ const SystemSetting = () => {
     <Grid columns={1}>
       <Grid.Column>
         <Form loading={loading} inverted={isDark}>
-          <Header as='h3' inverted={isDark}>通用设置</Header>
+          <Header as='h3' inverted={isDark}>
+            通用设置
+          </Header>
           <Form.Group widths='equal'>
             <Form.Input
               label='服务器地址'
@@ -346,7 +348,7 @@ const SystemSetting = () => {
             />
             <Form.Input
               label='易支付商户密钥'
-              placeholder='例如:dejhfueqhujasjmndbjkqaw'
+              placeholder='敏感信息不会发送到前端显示'
               value={inputs.EpayKey}
               name='EpayKey'
               onChange={handleInputChange}
@@ -390,7 +392,9 @@ const SystemSetting = () => {
           </Form.Group>
           <Form.Button onClick={submitPayAddress}>更新支付设置</Form.Button>
           <Divider />
-          <Header as='h3' inverted={isDark}>配置登录注册</Header>
+          <Header as='h3' inverted={isDark}>
+            配置登录注册
+          </Header>
           <Form.Group inline>
             <Form.Checkbox
               checked={inputs.PasswordLoginEnabled === 'true'}
@@ -684,7 +688,9 @@ const SystemSetting = () => {
             保存 WeChat Server 设置
           </Form.Button>
           <Divider />
-          <Header as='h3' inverted={isDark}>配置 Telegram 登录</Header>
+          <Header as='h3' inverted={isDark}>
+            配置 Telegram 登录
+          </Header>
           <Form.Group inline>
             <Form.Input
               label='Telegram Bot Token'