mirror of
https://github.com/coaidev/coai.git
synced 2025-05-19 04:50:14 +09:00
feat: update deeptrain mode
This commit is contained in:
parent
0bc356c4b6
commit
aa627fb61d
@ -8,7 +8,7 @@
|
||||
},
|
||||
"package": {
|
||||
"productName": "chatnio",
|
||||
"version": "3.7.8"
|
||||
"version": "3.8.0"
|
||||
},
|
||||
"tauri": {
|
||||
"allowlist": {
|
||||
|
@ -12,7 +12,7 @@ import { getMemory } from "@/utils/memory.ts";
|
||||
import { Compass, Image, Newspaper } from "lucide-react";
|
||||
import React from "react";
|
||||
|
||||
export const version = "3.7.8";
|
||||
export const version = "3.8.0";
|
||||
export const dev: boolean = getDev();
|
||||
export const deploy: boolean = true;
|
||||
export let rest_api: string = getRestApi(deploy);
|
||||
|
@ -453,6 +453,7 @@
|
||||
"mailPort": "SMTP 端口",
|
||||
"mailUser": "用户名",
|
||||
"mailPass": "密码",
|
||||
"mailFrom": "发件人",
|
||||
"searchEndpoint": "搜索接入点",
|
||||
"searchQuery": "最大搜索结果数",
|
||||
"searchTip": "DuckDuckGo 搜索接入点,如不填写自动使用 WebPilot 和 New Bing 逆向进行搜索功能。\\nDuckDuckGo API 项目搭建:[duckduckgo-api](https://github.com/binjie09/duckduckgo-api)。"
|
||||
|
@ -416,7 +416,8 @@
|
||||
"mailPass": "Password",
|
||||
"searchEndpoint": "Search Endpoint",
|
||||
"searchQuery": "Max Search Results",
|
||||
"searchTip": "DuckDuckGo search endpoint, if not filled in, use WebPilot and New Bing reverse search function by default.\nDuckDuckGo API project build: [duckduckgo-api](https://github.com/binjie09/duckduckgo-api)."
|
||||
"searchTip": "DuckDuckGo search endpoint, if not filled in, use WebPilot and New Bing reverse search function by default.\nDuckDuckGo API project build: [duckduckgo-api](https://github.com/binjie09/duckduckgo-api).",
|
||||
"mailFrom": "Sender"
|
||||
}
|
||||
},
|
||||
"mask": {
|
||||
|
@ -416,7 +416,8 @@
|
||||
"mailPass": "パスワード",
|
||||
"searchEndpoint": "アクセスポイントを検索",
|
||||
"searchQuery": "検索結果の最大数",
|
||||
"searchTip": "DuckDuckGoは、入力せずにWebPilotやNew Bing Reverse Searchなどのアクセスポイントを自動的に検索します。\\ nDuckDuckGo APIプロジェクトビルド:[ duckduckgo - api ]( https://github.com/binjie09/duckduckgo-api )。"
|
||||
"searchTip": "DuckDuckGoは、入力せずにWebPilotやNew Bing Reverse Searchなどのアクセスポイントを自動的に検索します。\\ nDuckDuckGo APIプロジェクトビルド:[ duckduckgo - api ]( https://github.com/binjie09/duckduckgo-api )。",
|
||||
"mailFrom": "発信元"
|
||||
}
|
||||
},
|
||||
"mask": {
|
||||
|
@ -416,7 +416,8 @@
|
||||
"mailPass": "Пароль",
|
||||
"searchEndpoint": "Конечная точка поиска",
|
||||
"searchQuery": "Максимальное количество результатов поиска",
|
||||
"searchTip": "Конечная точка поиска DuckDuckGo, если она не заполнена, по умолчанию используется функция обратного поиска WebPilot и New Bing.\nСборка проекта DuckDuckGo API: [duckduckgo-api](https://github.com/binjie09/duckduckgo-api)."
|
||||
"searchTip": "Конечная точка поиска DuckDuckGo, если она не заполнена, по умолчанию используется функция обратного поиска WebPilot и New Bing.\nСборка проекта DuckDuckGo API: [duckduckgo-api](https://github.com/binjie09/duckduckgo-api).",
|
||||
"mailFrom": "От"
|
||||
}
|
||||
},
|
||||
"mask": {
|
||||
|
@ -130,6 +130,19 @@ function Mail({ data, dispatch, onChange }: CompProps<MailState>) {
|
||||
placeholder={t("admin.system.mailPass")}
|
||||
/>
|
||||
</ParagraphItem>
|
||||
<ParagraphItem>
|
||||
<Label>{t("admin.system.mailFrom")}</Label>
|
||||
<Input
|
||||
value={data.from}
|
||||
onChange={(e) =>
|
||||
dispatch({
|
||||
type: "update:mail.from",
|
||||
value: e.target.value,
|
||||
})
|
||||
}
|
||||
placeholder={`bot@${location.host}`}
|
||||
/>
|
||||
</ParagraphItem>
|
||||
<ParagraphFooter>
|
||||
<div className={`grow`} />
|
||||
<Button size={`sm`} loading={true} onClick={onChange}>
|
||||
|
@ -54,7 +54,11 @@ func ParseApiKey(c *gin.Context, key string) *User {
|
||||
return &user
|
||||
}
|
||||
|
||||
func Login(c *gin.Context, token string) (string, error) {
|
||||
func DeepLogin(c *gin.Context, token string) (string, error) {
|
||||
if !useDeeptrain() {
|
||||
return "", errors.New("deeptrain feature is disabled")
|
||||
}
|
||||
|
||||
user := Validate(token)
|
||||
if user == nil {
|
||||
return "", errors.New("cannot validate access token")
|
||||
|
@ -16,6 +16,10 @@ func getDeeptrainApi(path string) string {
|
||||
return viper.GetString("auth.endpoint") + path
|
||||
}
|
||||
|
||||
func useDeeptrain() bool {
|
||||
return viper.GetBool("auth.use_deeptrain")
|
||||
}
|
||||
|
||||
func Validate(token string) *ValidateUserResponse {
|
||||
res, err := utils.Post(getDeeptrainApi("/app/validate"), map[string]string{
|
||||
"Content-Type": "application/json",
|
||||
|
@ -7,7 +7,7 @@ import (
|
||||
"strings"
|
||||
)
|
||||
|
||||
type LoginForm struct {
|
||||
type DeepLoginForm struct {
|
||||
Token string `form:"token" binding:"required"`
|
||||
}
|
||||
|
||||
@ -112,7 +112,7 @@ func RequireEnterprise(c *gin.Context) *User {
|
||||
}
|
||||
|
||||
func LoginAPI(c *gin.Context) {
|
||||
var form LoginForm
|
||||
var form DeepLoginForm
|
||||
if err := c.ShouldBind(&form); err != nil {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": false,
|
||||
@ -121,7 +121,7 @@ func LoginAPI(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
token, err := Login(c, form.Token)
|
||||
token, err := DeepLogin(c, form.Token)
|
||||
if err != nil {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"status": false,
|
||||
|
@ -59,6 +59,10 @@ func NewTeenagerPackage(db *sql.DB, user *User) bool {
|
||||
}
|
||||
|
||||
func RefreshPackage(db *sql.DB, user *User) *GiftResponse {
|
||||
if !useDeeptrain() {
|
||||
return nil
|
||||
}
|
||||
|
||||
resp := Cert(user.Username)
|
||||
if resp == nil || resp.Status == false {
|
||||
return nil
|
||||
|
@ -24,6 +24,10 @@ func GenerateOrder() string {
|
||||
}
|
||||
|
||||
func GetBalance(username string) float32 {
|
||||
if !useDeeptrain() {
|
||||
return 0.
|
||||
}
|
||||
|
||||
order := GenerateOrder()
|
||||
res, err := utils.Post(getDeeptrainApi("/app/balance"), map[string]string{
|
||||
"Content-Type": "application/json",
|
||||
@ -45,6 +49,10 @@ func GetBalance(username string) float32 {
|
||||
}
|
||||
|
||||
func Pay(username string, amount float32) bool {
|
||||
if !useDeeptrain() {
|
||||
return false
|
||||
}
|
||||
|
||||
order := GenerateOrder()
|
||||
res, err := utils.Post(getDeeptrainApi("/app/payment"), map[string]string{
|
||||
"Content-Type": "application/json",
|
||||
|
@ -22,6 +22,9 @@ func (l *Limiter) RateLimit(client *redis.Client, ip string, path string) bool {
|
||||
|
||||
var limits = map[string]Limiter{
|
||||
"/login": {Duration: 10, Count: 20},
|
||||
"/register": {Duration: 120, Count: 10},
|
||||
"/verify": {Duration: 120, Count: 5},
|
||||
"/reset": {Duration: 120, Count: 10},
|
||||
"/apikey": {Duration: 1, Count: 2},
|
||||
"/package": {Duration: 1, Count: 2},
|
||||
"/quota": {Duration: 1, Count: 2},
|
||||
|
Loading…
Reference in New Issue
Block a user