|
|
package common |
|
|
|
|
|
import ( |
|
|
"os" |
|
|
"strconv" |
|
|
"sync" |
|
|
"time" |
|
|
|
|
|
"github.com/google/uuid" |
|
|
) |
|
|
|
|
|
var StartTime = time.Now().Unix() |
|
|
var Version = "v0.0.0" |
|
|
var SystemName = "One API" |
|
|
var ServerAddress = "http://localhost:3000" |
|
|
var Footer = "" |
|
|
var Logo = "" |
|
|
var TopUpLink = "" |
|
|
var ChatLink = "" |
|
|
var QuotaPerUnit = 500 * 1000.0 |
|
|
var DisplayInCurrencyEnabled = true |
|
|
var DisplayTokenStatEnabled = true |
|
|
|
|
|
var UsingSQLite = false |
|
|
|
|
|
|
|
|
|
|
|
var SessionSecret = uuid.New().String() |
|
|
var SQLitePath = "one-api.db" |
|
|
|
|
|
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" |
|
|
|
|
|
var LogConsumeEnabled = true |
|
|
|
|
|
var SMTPServer = "" |
|
|
var SMTPPort = 587 |
|
|
var SMTPAccount = "" |
|
|
var SMTPFrom = "" |
|
|
var SMTPToken = "" |
|
|
|
|
|
var GitHubClientId = "" |
|
|
var GitHubClientSecret = "" |
|
|
|
|
|
var WeChatServerAddress = "" |
|
|
var WeChatServerToken = "" |
|
|
var WeChatAccountQRCodeImageURL = "" |
|
|
|
|
|
var TurnstileSiteKey = "" |
|
|
var TurnstileSecretKey = "" |
|
|
|
|
|
var QuotaForNewUser = 0 |
|
|
var QuotaForInviter = 0 |
|
|
var QuotaForInvitee = 0 |
|
|
var ChannelDisableThreshold = 5.0 |
|
|
var AutomaticDisableChannelEnabled = 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 = 10 * 60 |
|
|
|
|
|
const ( |
|
|
RoleGuestUser = 0 |
|
|
RoleCommonUser = 1 |
|
|
RoleAdminUser = 10 |
|
|
RoleRootUser = 100 |
|
|
) |
|
|
|
|
|
var ( |
|
|
FileUploadPermission = RoleGuestUser |
|
|
FileDownloadPermission = RoleGuestUser |
|
|
ImageUploadPermission = RoleGuestUser |
|
|
ImageDownloadPermission = RoleGuestUser |
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
var ( |
|
|
GlobalApiRateLimitNum = 180 |
|
|
GlobalApiRateLimitDuration int64 = 3 * 60 |
|
|
|
|
|
GlobalWebRateLimitNum = 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 |
|
|
|
|
|
const ( |
|
|
UserStatusEnabled = 1 |
|
|
UserStatusDisabled = 2 |
|
|
) |
|
|
|
|
|
const ( |
|
|
TokenStatusEnabled = 1 |
|
|
TokenStatusDisabled = 2 |
|
|
TokenStatusExpired = 3 |
|
|
TokenStatusExhausted = 4 |
|
|
) |
|
|
|
|
|
const ( |
|
|
RedemptionCodeStatusEnabled = 1 |
|
|
RedemptionCodeStatusDisabled = 2 |
|
|
RedemptionCodeStatusUsed = 3 |
|
|
) |
|
|
|
|
|
const ( |
|
|
ChannelStatusUnknown = 0 |
|
|
ChannelStatusEnabled = 1 |
|
|
ChannelStatusDisabled = 2 |
|
|
) |
|
|
|
|
|
const ( |
|
|
ChannelTypeUnknown = 0 |
|
|
ChannelTypeOpenAI = 1 |
|
|
ChannelTypeAPI2D = 2 |
|
|
ChannelTypeAzure = 3 |
|
|
ChannelTypeCloseAI = 4 |
|
|
ChannelTypeOpenAISB = 5 |
|
|
ChannelTypeOpenAIMax = 6 |
|
|
ChannelTypeOhMyGPT = 7 |
|
|
ChannelTypeCustom = 8 |
|
|
ChannelTypeAILS = 9 |
|
|
ChannelTypeAIProxy = 10 |
|
|
ChannelTypePaLM = 11 |
|
|
ChannelTypeAPI2GPT = 12 |
|
|
ChannelTypeAIGC2D = 13 |
|
|
ChannelTypeAnthropic = 14 |
|
|
ChannelTypeBaidu = 15 |
|
|
ChannelTypeZhipu = 16 |
|
|
ChannelTypeAli = 17 |
|
|
ChannelTypeXunfei = 18 |
|
|
ChannelType360 = 19 |
|
|
ChannelTypeOpenRouter = 20 |
|
|
) |
|
|
|
|
|
var ChannelBaseURLs = []string{ |
|
|
"", |
|
|
"https://api.openai.com", |
|
|
"https://oa.api2d.net", |
|
|
"", |
|
|
"https://api.closeai-proxy.xyz", |
|
|
"https://api.openai-sb.com", |
|
|
"https://api.openaimax.com", |
|
|
"https://api.ohmygpt.com", |
|
|
"", |
|
|
"https://api.caipacity.com", |
|
|
"https://api.aiproxy.io", |
|
|
"", |
|
|
"https://api.api2gpt.com", |
|
|
"https://api.aigc2d.com", |
|
|
"https://api.anthropic.com", |
|
|
"https://aip.baidubce.com", |
|
|
"https://open.bigmodel.cn", |
|
|
"https://dashscope.aliyuncs.com", |
|
|
"", |
|
|
"https://ai.360.cn", |
|
|
"https://openrouter.ai/api", |
|
|
} |
|
|
|