2024-01-21 15:21:42 +00:00
|
|
|
package config
|
|
|
|
|
|
|
|
import (
|
2024-01-28 11:38:58 +00:00
|
|
|
"github.com/songquanpeng/one-api/common/helper"
|
2024-01-21 15:21:42 +00:00
|
|
|
"os"
|
|
|
|
"strconv"
|
|
|
|
"sync"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/google/uuid"
|
|
|
|
)
|
|
|
|
|
|
|
|
var SystemName = "One API"
|
|
|
|
var ServerAddress = "http://localhost:3000"
|
|
|
|
var Footer = ""
|
|
|
|
var Logo = ""
|
|
|
|
var TopUpLink = ""
|
|
|
|
var ChatLink = ""
|
|
|
|
var QuotaPerUnit = 500 * 1000.0 // $0.002 / 1K tokens
|
|
|
|
var DisplayInCurrencyEnabled = true
|
|
|
|
var DisplayTokenStatEnabled = true
|
|
|
|
|
|
|
|
// Any options with "Secret", "Token" in its key won't be return by GetOptions
|
|
|
|
|
|
|
|
var SessionSecret = uuid.New().String()
|
|
|
|
|
|
|
|
var OptionMap map[string]string
|
|
|
|
var OptionMapRWMutex sync.RWMutex
|
|
|
|
|
|
|
|
var ItemsPerPage = 10
|
|
|
|
var MaxRecentItems = 100
|
|
|
|
|
|
|
|
var PasswordLoginEnabled = true
|
|
|
|
var PasswordRegisterEnabled = true
|
|
|
|
var EmailVerificationEnabled = false
|
|
|
|
var GitHubOAuthEnabled = false
|
|
|
|
var WeChatAuthEnabled = false
|
|
|
|
var TurnstileCheckEnabled = false
|
|
|
|
var RegisterEnabled = true
|
|
|
|
|
|
|
|
var EmailDomainRestrictionEnabled = false
|
|
|
|
var EmailDomainWhitelist = []string{
|
|
|
|
"gmail.com",
|
|
|
|
"163.com",
|
|
|
|
"126.com",
|
|
|
|
"qq.com",
|
|
|
|
"outlook.com",
|
|
|
|
"hotmail.com",
|
|
|
|
"icloud.com",
|
|
|
|
"yahoo.com",
|
|
|
|
"foxmail.com",
|
|
|
|
}
|
|
|
|
|
|
|
|
var DebugEnabled = os.Getenv("DEBUG") == "true"
|
2024-03-10 06:32:30 +00:00
|
|
|
var DebugSQLEnabled = os.Getenv("DEBUG_SQL") == "true"
|
2024-01-21 15:21:42 +00:00
|
|
|
var MemoryCacheEnabled = os.Getenv("MEMORY_CACHE_ENABLED") == "true"
|
|
|
|
|
|
|
|
var LogConsumeEnabled = true
|
|
|
|
|
|
|
|
var SMTPServer = ""
|
|
|
|
var SMTPPort = 587
|
|
|
|
var SMTPAccount = ""
|
|
|
|
var SMTPFrom = ""
|
|
|
|
var SMTPToken = ""
|
|
|
|
|
|
|
|
var GitHubClientId = ""
|
|
|
|
var GitHubClientSecret = ""
|
|
|
|
|
|
|
|
var WeChatServerAddress = ""
|
|
|
|
var WeChatServerToken = ""
|
|
|
|
var WeChatAccountQRCodeImageURL = ""
|
|
|
|
|
2024-03-10 11:16:06 +00:00
|
|
|
var MessagePusherAddress = ""
|
|
|
|
var MessagePusherToken = ""
|
|
|
|
|
2024-01-21 15:21:42 +00:00
|
|
|
var TurnstileSiteKey = ""
|
|
|
|
var TurnstileSecretKey = ""
|
|
|
|
|
|
|
|
var QuotaForNewUser = 0
|
|
|
|
var QuotaForInviter = 0
|
|
|
|
var QuotaForInvitee = 0
|
|
|
|
var ChannelDisableThreshold = 5.0
|
|
|
|
var AutomaticDisableChannelEnabled = false
|
|
|
|
var AutomaticEnableChannelEnabled = false
|
|
|
|
var QuotaRemindThreshold = 1000
|
|
|
|
var PreConsumedQuota = 500
|
|
|
|
var ApproximateTokenEnabled = false
|
|
|
|
var RetryTimes = 0
|
|
|
|
|
|
|
|
var RootUserEmail = ""
|
|
|
|
|
|
|
|
var IsMasterNode = os.Getenv("NODE_TYPE") != "slave"
|
|
|
|
|
|
|
|
var requestInterval, _ = strconv.Atoi(os.Getenv("POLLING_INTERVAL"))
|
|
|
|
var RequestInterval = time.Duration(requestInterval) * time.Second
|
|
|
|
|
|
|
|
var SyncFrequency = helper.GetOrDefaultEnvInt("SYNC_FREQUENCY", 10*60) // unit is second
|
|
|
|
|
|
|
|
var BatchUpdateEnabled = false
|
|
|
|
var BatchUpdateInterval = helper.GetOrDefaultEnvInt("BATCH_UPDATE_INTERVAL", 5)
|
|
|
|
|
|
|
|
var RelayTimeout = helper.GetOrDefaultEnvInt("RELAY_TIMEOUT", 0) // unit is second
|
|
|
|
|
|
|
|
var GeminiSafetySetting = helper.GetOrDefaultEnvString("GEMINI_SAFETY_SETTING", "BLOCK_NONE")
|
|
|
|
|
|
|
|
var Theme = helper.GetOrDefaultEnvString("THEME", "default")
|
|
|
|
var ValidThemes = map[string]bool{
|
|
|
|
"default": true,
|
|
|
|
"berry": true,
|
|
|
|
}
|
|
|
|
|
|
|
|
// All duration's unit is seconds
|
|
|
|
// Shouldn't larger then RateLimitKeyExpirationDuration
|
|
|
|
var (
|
|
|
|
GlobalApiRateLimitNum = helper.GetOrDefaultEnvInt("GLOBAL_API_RATE_LIMIT", 180)
|
|
|
|
GlobalApiRateLimitDuration int64 = 3 * 60
|
|
|
|
|
|
|
|
GlobalWebRateLimitNum = helper.GetOrDefaultEnvInt("GLOBAL_WEB_RATE_LIMIT", 60)
|
|
|
|
GlobalWebRateLimitDuration int64 = 3 * 60
|
|
|
|
|
|
|
|
UploadRateLimitNum = 10
|
|
|
|
UploadRateLimitDuration int64 = 60
|
|
|
|
|
|
|
|
DownloadRateLimitNum = 10
|
|
|
|
DownloadRateLimitDuration int64 = 60
|
|
|
|
|
|
|
|
CriticalRateLimitNum = 20
|
|
|
|
CriticalRateLimitDuration int64 = 20 * 60
|
|
|
|
)
|
|
|
|
|
|
|
|
var RateLimitKeyExpirationDuration = 20 * time.Minute
|
2024-03-10 09:57:47 +00:00
|
|
|
|
|
|
|
var EnableMetric = helper.GetOrDefaultEnvBool("ENABLE_METRIC", false)
|
|
|
|
var MetricQueueSize = helper.GetOrDefaultEnvInt("METRIC_QUEUE_SIZE", 10)
|
|
|
|
var MetricSuccessRateThreshold = helper.GetOrDefaultEnvFloat64("METRIC_SUCCESS_RATE_THRESHOLD", 0.8)
|
|
|
|
var MetricSuccessChanSize = helper.GetOrDefaultEnvInt("METRIC_SUCCESS_CHAN_SIZE", 1024)
|
|
|
|
var MetricFailChanSize = helper.GetOrDefaultEnvInt("METRIC_FAIL_CHAN_SIZE", 128)
|