You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

225 lines
5.4 KiB

  1. package common
  2. import (
  3. "crypto/tls"
  4. //"os"
  5. //"strconv"
  6. "sync"
  7. "time"
  8. "github.com/google/uuid"
  9. )
  10. var StartTime = time.Now().Unix() // unit: second
  11. var Version = "v0.0.0" // this hard coding will be replaced automatically when building, no need to manually change
  12. var SystemName = "New API"
  13. var Footer = ""
  14. var Logo = ""
  15. var LogoFilePath = "" // LOGO_FILE_PATH 环境变量指定的本地 Logo 文件路径
  16. func GetEffectiveLogo() string {
  17. if LogoFilePath != "" {
  18. return "/logo.png"
  19. }
  20. return Logo
  21. }
  22. var TopUpLink = ""
  23. var DefaultLanguage = "" // admin-configured default language; empty = follow browser detection
  24. // var ChatLink = ""
  25. // var ChatLink2 = ""
  26. var QuotaPerUnit = 500 * 1000.0 // $0.002 / 1K tokens
  27. // 保留旧变量以兼容历史逻辑,实际展示由 general_setting.quota_display_type 控制
  28. var DisplayInCurrencyEnabled = true
  29. var DisplayTokenStatEnabled = true
  30. var DrawingEnabled = true
  31. var TaskEnabled = true
  32. var DataExportEnabled = true
  33. var DataExportInterval = 5 // unit: minute
  34. var DataExportDefaultTime = "hour" // unit: minute
  35. var DefaultCollapseSidebar = false // default value of collapse sidebar
  36. // Any options with "Secret", "Token" in its key won't be return by GetOptions
  37. var SessionSecret = uuid.New().String()
  38. var CryptoSecret = uuid.New().String()
  39. var OptionMap map[string]string
  40. var OptionMapRWMutex sync.RWMutex
  41. var ItemsPerPage = 10
  42. var MaxRecentItems = 1000
  43. var PasswordLoginEnabled = true
  44. var PasswordRegisterEnabled = true
  45. var EmailVerificationEnabled = false
  46. var GitHubOAuthEnabled = false
  47. var LinuxDOOAuthEnabled = false
  48. var WeChatAuthEnabled = false
  49. var TelegramOAuthEnabled = false
  50. var TurnstileCheckEnabled = false
  51. var RegisterEnabled = true
  52. var EmailDomainRestrictionEnabled = false // 是否启用邮箱域名限制
  53. var EmailAliasRestrictionEnabled = false // 是否启用邮箱别名限制
  54. var EmailDomainWhitelist = []string{
  55. "gmail.com",
  56. "163.com",
  57. "126.com",
  58. "qq.com",
  59. "outlook.com",
  60. "hotmail.com",
  61. "icloud.com",
  62. "yahoo.com",
  63. "foxmail.com",
  64. }
  65. var EmailLoginAuthServerList = []string{
  66. "smtp.sendcloud.net",
  67. "smtp.azurecomm.net",
  68. }
  69. var DebugEnabled bool
  70. var MemoryCacheEnabled bool
  71. var LogConsumeEnabled = true
  72. var TLSInsecureSkipVerify bool
  73. var InsecureTLSConfig = &tls.Config{InsecureSkipVerify: true}
  74. var SMTPServer = ""
  75. var SMTPPort = 587
  76. var SMTPSSLEnabled = false
  77. var SMTPAccount = ""
  78. var SMTPFrom = ""
  79. var SMTPToken = ""
  80. var GitHubClientId = ""
  81. var GitHubClientSecret = ""
  82. var LinuxDOClientId = ""
  83. var LinuxDOClientSecret = ""
  84. var LinuxDOMinimumTrustLevel = 0
  85. var WeChatServerAddress = ""
  86. var WeChatServerToken = ""
  87. var WeChatAccountQRCodeImageURL = ""
  88. var TurnstileSiteKey = ""
  89. var TurnstileSecretKey = ""
  90. var TelegramBotToken = ""
  91. var TelegramBotName = ""
  92. var QuotaForNewUser = 0
  93. var QuotaForInviter = 0
  94. var QuotaForInvitee = 0
  95. var ChannelDisableThreshold = 5.0
  96. var AutomaticDisableChannelEnabled = false
  97. var AutomaticEnableChannelEnabled = false
  98. var QuotaRemindThreshold = 1000
  99. var PreConsumedQuota = 500
  100. var RetryTimes = 0
  101. //var RootUserEmail = ""
  102. var IsMasterNode bool
  103. var requestInterval int
  104. var RequestInterval time.Duration
  105. var SyncFrequency int // unit is second
  106. var BatchUpdateEnabled = false
  107. var BatchUpdateInterval int
  108. var RelayTimeout int // unit is second
  109. var RelayMaxIdleConns int
  110. var RelayMaxIdleConnsPerHost int
  111. var GeminiSafetySetting string
  112. // https://docs.cohere.com/docs/safety-modes Type; NONE/CONTEXTUAL/STRICT
  113. var CohereSafetySetting string
  114. const (
  115. RequestIdKey = "X-Oneapi-Request-Id"
  116. )
  117. const (
  118. RoleGuestUser = 0
  119. RoleCommonUser = 1
  120. RoleAdminUser = 10
  121. RoleRootUser = 100
  122. )
  123. func IsValidateRole(role int) bool {
  124. return role == RoleGuestUser || role == RoleCommonUser || role == RoleAdminUser || role == RoleRootUser
  125. }
  126. var (
  127. FileUploadPermission = RoleGuestUser
  128. FileDownloadPermission = RoleGuestUser
  129. ImageUploadPermission = RoleGuestUser
  130. ImageDownloadPermission = RoleGuestUser
  131. )
  132. // All duration's unit is seconds
  133. // Shouldn't larger then RateLimitKeyExpirationDuration
  134. var (
  135. GlobalApiRateLimitEnable bool
  136. GlobalApiRateLimitNum int
  137. GlobalApiRateLimitDuration int64
  138. GlobalWebRateLimitEnable bool
  139. GlobalWebRateLimitNum int
  140. GlobalWebRateLimitDuration int64
  141. CriticalRateLimitEnable bool
  142. CriticalRateLimitNum = 20
  143. CriticalRateLimitDuration int64 = 20 * 60
  144. UploadRateLimitNum = 10
  145. UploadRateLimitDuration int64 = 60
  146. DownloadRateLimitNum = 10
  147. DownloadRateLimitDuration int64 = 60
  148. // Per-user search rate limit (applies after authentication, keyed by user ID)
  149. SearchRateLimitNum = 10
  150. SearchRateLimitDuration int64 = 60
  151. )
  152. var RateLimitKeyExpirationDuration = 20 * time.Minute
  153. const (
  154. UserStatusEnabled = 1 // don't use 0, 0 is the default value!
  155. UserStatusDisabled = 2 // also don't use 0
  156. )
  157. const (
  158. TokenStatusEnabled = 1 // don't use 0, 0 is the default value!
  159. TokenStatusDisabled = 2 // also don't use 0
  160. TokenStatusExpired = 3
  161. TokenStatusExhausted = 4
  162. )
  163. const (
  164. RedemptionCodeStatusEnabled = 1 // don't use 0, 0 is the default value!
  165. RedemptionCodeStatusDisabled = 2 // also don't use 0
  166. RedemptionCodeStatusUsed = 3 // also don't use 0
  167. )
  168. const (
  169. ChannelStatusUnknown = 0
  170. ChannelStatusEnabled = 1 // don't use 0, 0 is the default value!
  171. ChannelStatusManuallyDisabled = 2 // also don't use 0
  172. ChannelStatusAutoDisabled = 3
  173. )
  174. const (
  175. TopUpStatusPending = "pending"
  176. TopUpStatusSuccess = "success"
  177. TopUpStatusExpired = "expired"
  178. )