constants.go 5.8 KB

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