* feat: add the ui for configuring the third-party standard OAuth2.0/OIDC. - update SystemSetting.js - add setup ui - add configuration * feat: add the ui for "allow the OAuth 2.0 to login" - update SystemSetting.js * feat: add OAuth 2.0 web ui and its process functions - update common.js - update AuthLogin.js - update config.js * fix: missing "Userinfo" endpoint configuration entry, used by OAuth clients to request user information from the IdP. - update config.js - update SystemSetting.js * feat: updated the icons for Lark and OIDC to match the style of the icons for WeChat, EMail, GitHub. - update lark.svg - new oidc.svg * refactor: Changing OAuth 2.0 to OIDC * feat: add OIDC login method * feat: Add support for OIDC login to the backend * fix: Change the AppId and AppSecret on the Web UI to the standard usage: ClientId, ClientSecret. * feat: Support quick configuration of OIDC through Well-Known Discovery Endpoint * feat: Standardize terminology, add well-known configuration - Change the AppId and AppSecret on the Server End to the standard usage: ClientId, ClientSecret. - add Well-Known configuration to store in database, no actual use in server end but store and display in web ui only
163 lines
4.2 KiB
Go
163 lines
4.2 KiB
Go
package config
|
|
|
|
import (
|
|
"github.com/songquanpeng/one-api/common/env"
|
|
"os"
|
|
"strconv"
|
|
"strings"
|
|
"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 OidcEnabled = 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 = strings.ToLower(os.Getenv("DEBUG")) == "true"
|
|
var DebugSQLEnabled = strings.ToLower(os.Getenv("DEBUG_SQL")) == "true"
|
|
var MemoryCacheEnabled = strings.ToLower(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 LarkClientId = ""
|
|
var LarkClientSecret = ""
|
|
|
|
var OidcClientId = ""
|
|
var OidcClientSecret = ""
|
|
var OidcWellKnown = ""
|
|
var OidcAuthorizationEndpoint = ""
|
|
var OidcTokenEndpoint = ""
|
|
var OidcUserinfoEndpoint = ""
|
|
|
|
var WeChatServerAddress = ""
|
|
var WeChatServerToken = ""
|
|
var WeChatAccountQRCodeImageURL = ""
|
|
|
|
var MessagePusherAddress = ""
|
|
var MessagePusherToken = ""
|
|
|
|
var TurnstileSiteKey = ""
|
|
var TurnstileSecretKey = ""
|
|
|
|
var QuotaForNewUser int64 = 0
|
|
var QuotaForInviter int64 = 0
|
|
var QuotaForInvitee int64 = 0
|
|
var ChannelDisableThreshold = 5.0
|
|
var AutomaticDisableChannelEnabled = false
|
|
var AutomaticEnableChannelEnabled = false
|
|
var QuotaRemindThreshold int64 = 1000
|
|
var PreConsumedQuota int64 = 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 = env.Int("SYNC_FREQUENCY", 10*60) // unit is second
|
|
|
|
var BatchUpdateEnabled = false
|
|
var BatchUpdateInterval = env.Int("BATCH_UPDATE_INTERVAL", 5)
|
|
|
|
var RelayTimeout = env.Int("RELAY_TIMEOUT", 0) // unit is second
|
|
|
|
var GeminiSafetySetting = env.String("GEMINI_SAFETY_SETTING", "BLOCK_NONE")
|
|
|
|
var Theme = env.String("THEME", "default")
|
|
var ValidThemes = map[string]bool{
|
|
"default": true,
|
|
"berry": true,
|
|
"air": true,
|
|
}
|
|
|
|
// All duration's unit is seconds
|
|
// Shouldn't larger then RateLimitKeyExpirationDuration
|
|
var (
|
|
GlobalApiRateLimitNum = env.Int("GLOBAL_API_RATE_LIMIT", 240)
|
|
GlobalApiRateLimitDuration int64 = 3 * 60
|
|
|
|
GlobalWebRateLimitNum = env.Int("GLOBAL_WEB_RATE_LIMIT", 120)
|
|
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
|
|
|
|
var EnableMetric = env.Bool("ENABLE_METRIC", false)
|
|
var MetricQueueSize = env.Int("METRIC_QUEUE_SIZE", 10)
|
|
var MetricSuccessRateThreshold = env.Float64("METRIC_SUCCESS_RATE_THRESHOLD", 0.8)
|
|
var MetricSuccessChanSize = env.Int("METRIC_SUCCESS_CHAN_SIZE", 1024)
|
|
var MetricFailChanSize = env.Int("METRIC_FAIL_CHAN_SIZE", 128)
|
|
|
|
var InitialRootToken = os.Getenv("INITIAL_ROOT_TOKEN")
|
|
|
|
var InitialRootAccessToken = os.Getenv("INITIAL_ROOT_ACCESS_TOKEN")
|
|
|
|
var GeminiVersion = env.String("GEMINI_VERSION", "v1")
|
|
|
|
var OnlyOneLogFile = env.Bool("ONLY_ONE_LOG_FILE", false)
|
|
|
|
var RelayProxy = env.String("RELAY_PROXY", "")
|
|
var UserContentRequestProxy = env.String("USER_CONTENT_REQUEST_PROXY", "")
|
|
var UserContentRequestTimeout = env.Int("USER_CONTENT_REQUEST_TIMEOUT", 30)
|