mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-10-12 02:06:37 +08:00
[优化] 代码优化
This commit is contained in:
@@ -80,8 +80,6 @@ The following options are maintained on the settings page of the management cons
|
|||||||
| `DatabaseAutoCleanupRetentionDays` | In-database retention days, at least 1 day | `30` |
|
| `DatabaseAutoCleanupRetentionDays` | In-database retention days, at least 1 day | `30` |
|
||||||
| `GlobalApiRateLimitNum` / `GlobalApiRateLimitDuration` | Global API rate limit count / window | `300` / `180` |
|
| `GlobalApiRateLimitNum` / `GlobalApiRateLimitDuration` | Global API rate limit count / window | `300` / `180` |
|
||||||
| `GlobalWebRateLimitNum` / `GlobalWebRateLimitDuration` | Global Web rate limit count / window | `300` / `180` |
|
| `GlobalWebRateLimitNum` / `GlobalWebRateLimitDuration` | Global Web rate limit count / window | `300` / `180` |
|
||||||
| `UploadRateLimitNum` / `UploadRateLimitDuration` | Upload API rate limit count / window | `50` / `60` |
|
|
||||||
| `DownloadRateLimitNum` / `DownloadRateLimitDuration` | Download API rate limit count / window | `50` / `60` |
|
|
||||||
| `CriticalRateLimitNum` / `CriticalRateLimitDuration` | Sensitive API rate limit count / window | `100` / `1200` |
|
| `CriticalRateLimitNum` / `CriticalRateLimitDuration` | Sensitive API rate limit count / window | `100` / `1200` |
|
||||||
|
|
||||||
Description:
|
Description:
|
||||||
|
|||||||
@@ -80,8 +80,6 @@ go run . --port 3000 --log-dir ./logs
|
|||||||
| `DatabaseAutoCleanupRetentionDays` | 自动清理保留天数,至少 1 天 | `30` |
|
| `DatabaseAutoCleanupRetentionDays` | 自动清理保留天数,至少 1 天 | `30` |
|
||||||
| `GlobalApiRateLimitNum` / `GlobalApiRateLimitDuration` | 全局 API 限流次数 / 时间窗口 | `300` / `180` |
|
| `GlobalApiRateLimitNum` / `GlobalApiRateLimitDuration` | 全局 API 限流次数 / 时间窗口 | `300` / `180` |
|
||||||
| `GlobalWebRateLimitNum` / `GlobalWebRateLimitDuration` | 全局 Web 限流次数 / 时间窗口 | `300` / `180` |
|
| `GlobalWebRateLimitNum` / `GlobalWebRateLimitDuration` | 全局 Web 限流次数 / 时间窗口 | `300` / `180` |
|
||||||
| `UploadRateLimitNum` / `UploadRateLimitDuration` | 上传接口限流次数 / 时间窗口 | `50` / `60` |
|
|
||||||
| `DownloadRateLimitNum` / `DownloadRateLimitDuration` | 下载接口限流次数 / 时间窗口 | `50` / `60` |
|
|
||||||
| `CriticalRateLimitNum` / `CriticalRateLimitDuration` | 敏感接口限流次数 / 时间窗口 | `100` / `1200` |
|
| `CriticalRateLimitNum` / `CriticalRateLimitDuration` | 敏感接口限流次数 / 时间窗口 | `100` / `1200` |
|
||||||
|
|
||||||
说明:
|
说明:
|
||||||
|
|||||||
@@ -139,13 +139,6 @@ const (
|
|||||||
RoleRootUser = 100
|
RoleRootUser = 100
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
FileUploadPermission = RoleGuestUser
|
|
||||||
FileDownloadPermission = RoleGuestUser
|
|
||||||
ImageUploadPermission = RoleGuestUser
|
|
||||||
ImageDownloadPermission = RoleGuestUser
|
|
||||||
)
|
|
||||||
|
|
||||||
// All duration's unit is seconds
|
// All duration's unit is seconds
|
||||||
// Shouldn't larger then RateLimitKeyExpirationDuration
|
// Shouldn't larger then RateLimitKeyExpirationDuration
|
||||||
var (
|
var (
|
||||||
@@ -155,12 +148,6 @@ var (
|
|||||||
GlobalWebRateLimitNum = 300
|
GlobalWebRateLimitNum = 300
|
||||||
GlobalWebRateLimitDuration int64 = 3 * 60
|
GlobalWebRateLimitDuration int64 = 3 * 60
|
||||||
|
|
||||||
UploadRateLimitNum = 50
|
|
||||||
UploadRateLimitDuration int64 = 60
|
|
||||||
|
|
||||||
DownloadRateLimitNum = 50
|
|
||||||
DownloadRateLimitDuration int64 = 60
|
|
||||||
|
|
||||||
CriticalRateLimitNum = 100
|
CriticalRateLimitNum = 100
|
||||||
CriticalRateLimitDuration int64 = 20 * 60
|
CriticalRateLimitDuration int64 = 20 * 60
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,13 +29,13 @@ func validateRateLimitOption(key string, value string) error {
|
|||||||
maxDurationSeconds := int(common.RateLimitKeyExpirationDuration.Seconds())
|
maxDurationSeconds := int(common.RateLimitKeyExpirationDuration.Seconds())
|
||||||
|
|
||||||
switch key {
|
switch key {
|
||||||
case "GlobalApiRateLimitNum", "GlobalWebRateLimitNum", "UploadRateLimitNum", "DownloadRateLimitNum", "CriticalRateLimitNum":
|
case "GlobalApiRateLimitNum", "GlobalWebRateLimitNum", "CriticalRateLimitNum":
|
||||||
intValue, err := strconv.Atoi(value)
|
intValue, err := strconv.Atoi(value)
|
||||||
if err != nil || intValue <= 0 {
|
if err != nil || intValue <= 0 {
|
||||||
return fmt.Errorf("%s 必须为大于 0 的整数", key)
|
return fmt.Errorf("%s 必须为大于 0 的整数", key)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
case "GlobalApiRateLimitDuration", "GlobalWebRateLimitDuration", "UploadRateLimitDuration", "DownloadRateLimitDuration", "CriticalRateLimitDuration":
|
case "GlobalApiRateLimitDuration", "GlobalWebRateLimitDuration", "CriticalRateLimitDuration":
|
||||||
intValue, err := strconv.Atoi(value)
|
intValue, err := strconv.Atoi(value)
|
||||||
if err != nil || intValue <= 0 {
|
if err != nil || intValue <= 0 {
|
||||||
return fmt.Errorf("%s 必须为大于 0 的整数秒", key)
|
return fmt.Errorf("%s 必须为大于 0 的整数秒", key)
|
||||||
|
|||||||
@@ -25,10 +25,6 @@ func AllOption() ([]*Option, error) {
|
|||||||
func InitOptionMap() {
|
func InitOptionMap() {
|
||||||
common.OptionMapRWMutex.Lock()
|
common.OptionMapRWMutex.Lock()
|
||||||
common.OptionMap = make(map[string]string)
|
common.OptionMap = make(map[string]string)
|
||||||
common.OptionMap["FileUploadPermission"] = strconv.Itoa(common.FileUploadPermission)
|
|
||||||
common.OptionMap["FileDownloadPermission"] = strconv.Itoa(common.FileDownloadPermission)
|
|
||||||
common.OptionMap["ImageUploadPermission"] = strconv.Itoa(common.ImageUploadPermission)
|
|
||||||
common.OptionMap["ImageDownloadPermission"] = strconv.Itoa(common.ImageDownloadPermission)
|
|
||||||
common.OptionMap["PasswordLoginEnabled"] = strconv.FormatBool(common.PasswordLoginEnabled)
|
common.OptionMap["PasswordLoginEnabled"] = strconv.FormatBool(common.PasswordLoginEnabled)
|
||||||
common.OptionMap["PasswordRegisterEnabled"] = strconv.FormatBool(common.PasswordRegisterEnabled)
|
common.OptionMap["PasswordRegisterEnabled"] = strconv.FormatBool(common.PasswordRegisterEnabled)
|
||||||
common.OptionMap["EmailVerificationEnabled"] = strconv.FormatBool(common.EmailVerificationEnabled)
|
common.OptionMap["EmailVerificationEnabled"] = strconv.FormatBool(common.EmailVerificationEnabled)
|
||||||
@@ -95,10 +91,6 @@ func InitOptionMap() {
|
|||||||
common.OptionMap["GlobalApiRateLimitDuration"] = strconv.FormatInt(common.GlobalApiRateLimitDuration, 10)
|
common.OptionMap["GlobalApiRateLimitDuration"] = strconv.FormatInt(common.GlobalApiRateLimitDuration, 10)
|
||||||
common.OptionMap["GlobalWebRateLimitNum"] = strconv.Itoa(common.GlobalWebRateLimitNum)
|
common.OptionMap["GlobalWebRateLimitNum"] = strconv.Itoa(common.GlobalWebRateLimitNum)
|
||||||
common.OptionMap["GlobalWebRateLimitDuration"] = strconv.FormatInt(common.GlobalWebRateLimitDuration, 10)
|
common.OptionMap["GlobalWebRateLimitDuration"] = strconv.FormatInt(common.GlobalWebRateLimitDuration, 10)
|
||||||
common.OptionMap["UploadRateLimitNum"] = strconv.Itoa(common.UploadRateLimitNum)
|
|
||||||
common.OptionMap["UploadRateLimitDuration"] = strconv.FormatInt(common.UploadRateLimitDuration, 10)
|
|
||||||
common.OptionMap["DownloadRateLimitNum"] = strconv.Itoa(common.DownloadRateLimitNum)
|
|
||||||
common.OptionMap["DownloadRateLimitDuration"] = strconv.FormatInt(common.DownloadRateLimitDuration, 10)
|
|
||||||
common.OptionMap["CriticalRateLimitNum"] = strconv.Itoa(common.CriticalRateLimitNum)
|
common.OptionMap["CriticalRateLimitNum"] = strconv.Itoa(common.CriticalRateLimitNum)
|
||||||
common.OptionMap["CriticalRateLimitDuration"] = strconv.FormatInt(common.CriticalRateLimitDuration, 10)
|
common.OptionMap["CriticalRateLimitDuration"] = strconv.FormatInt(common.CriticalRateLimitDuration, 10)
|
||||||
common.OptionMapRWMutex.Unlock()
|
common.OptionMapRWMutex.Unlock()
|
||||||
@@ -151,19 +143,6 @@ func updateOptionMap(key string, value string) {
|
|||||||
common.OptionMap = make(map[string]string)
|
common.OptionMap = make(map[string]string)
|
||||||
}
|
}
|
||||||
common.OptionMap[key] = value
|
common.OptionMap[key] = value
|
||||||
if strings.HasSuffix(key, "Permission") {
|
|
||||||
intValue, _ := strconv.Atoi(value)
|
|
||||||
switch key {
|
|
||||||
case "FileUploadPermission":
|
|
||||||
common.FileUploadPermission = intValue
|
|
||||||
case "FileDownloadPermission":
|
|
||||||
common.FileDownloadPermission = intValue
|
|
||||||
case "ImageUploadPermission":
|
|
||||||
common.ImageUploadPermission = intValue
|
|
||||||
case "ImageDownloadPermission":
|
|
||||||
common.ImageDownloadPermission = intValue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if strings.HasSuffix(key, "Enabled") {
|
if strings.HasSuffix(key, "Enabled") {
|
||||||
boolValue := value == "true"
|
boolValue := value == "true"
|
||||||
switch key {
|
switch key {
|
||||||
@@ -370,22 +349,6 @@ func updateOptionMap(key string, value string) {
|
|||||||
if v, err := strconv.ParseInt(value, 10, 64); err == nil && v > 0 {
|
if v, err := strconv.ParseInt(value, 10, 64); err == nil && v > 0 {
|
||||||
common.GlobalWebRateLimitDuration = v
|
common.GlobalWebRateLimitDuration = v
|
||||||
}
|
}
|
||||||
case "UploadRateLimitNum":
|
|
||||||
if v, err := strconv.Atoi(value); err == nil && v > 0 {
|
|
||||||
common.UploadRateLimitNum = v
|
|
||||||
}
|
|
||||||
case "UploadRateLimitDuration":
|
|
||||||
if v, err := strconv.ParseInt(value, 10, 64); err == nil && v > 0 {
|
|
||||||
common.UploadRateLimitDuration = v
|
|
||||||
}
|
|
||||||
case "DownloadRateLimitNum":
|
|
||||||
if v, err := strconv.Atoi(value); err == nil && v > 0 {
|
|
||||||
common.DownloadRateLimitNum = v
|
|
||||||
}
|
|
||||||
case "DownloadRateLimitDuration":
|
|
||||||
if v, err := strconv.ParseInt(value, 10, 64); err == nil && v > 0 {
|
|
||||||
common.DownloadRateLimitDuration = v
|
|
||||||
}
|
|
||||||
case "CriticalRateLimitNum":
|
case "CriticalRateLimitNum":
|
||||||
if v, err := strconv.Atoi(value); err == nil && v > 0 {
|
if v, err := strconv.Atoi(value); err == nil && v > 0 {
|
||||||
common.CriticalRateLimitNum = v
|
common.CriticalRateLimitNum = v
|
||||||
|
|||||||
@@ -121,10 +121,6 @@ const defaultOperationFields = {
|
|||||||
GlobalApiRateLimitDuration: '180',
|
GlobalApiRateLimitDuration: '180',
|
||||||
GlobalWebRateLimitNum: '300',
|
GlobalWebRateLimitNum: '300',
|
||||||
GlobalWebRateLimitDuration: '180',
|
GlobalWebRateLimitDuration: '180',
|
||||||
UploadRateLimitNum: '50',
|
|
||||||
UploadRateLimitDuration: '60',
|
|
||||||
DownloadRateLimitNum: '50',
|
|
||||||
DownloadRateLimitDuration: '60',
|
|
||||||
CriticalRateLimitNum: '100',
|
CriticalRateLimitNum: '100',
|
||||||
CriticalRateLimitDuration: '1200',
|
CriticalRateLimitDuration: '1200',
|
||||||
ServerAddress: '',
|
ServerAddress: '',
|
||||||
@@ -428,10 +424,6 @@ export function SettingsPage() {
|
|||||||
GlobalApiRateLimitDuration: optionMap.GlobalApiRateLimitDuration ?? '180',
|
GlobalApiRateLimitDuration: optionMap.GlobalApiRateLimitDuration ?? '180',
|
||||||
GlobalWebRateLimitNum: optionMap.GlobalWebRateLimitNum ?? '300',
|
GlobalWebRateLimitNum: optionMap.GlobalWebRateLimitNum ?? '300',
|
||||||
GlobalWebRateLimitDuration: optionMap.GlobalWebRateLimitDuration ?? '180',
|
GlobalWebRateLimitDuration: optionMap.GlobalWebRateLimitDuration ?? '180',
|
||||||
UploadRateLimitNum: optionMap.UploadRateLimitNum ?? '50',
|
|
||||||
UploadRateLimitDuration: optionMap.UploadRateLimitDuration ?? '60',
|
|
||||||
DownloadRateLimitNum: optionMap.DownloadRateLimitNum ?? '50',
|
|
||||||
DownloadRateLimitDuration: optionMap.DownloadRateLimitDuration ?? '60',
|
|
||||||
CriticalRateLimitNum: optionMap.CriticalRateLimitNum ?? '100',
|
CriticalRateLimitNum: optionMap.CriticalRateLimitNum ?? '100',
|
||||||
CriticalRateLimitDuration: optionMap.CriticalRateLimitDuration ?? '1200',
|
CriticalRateLimitDuration: optionMap.CriticalRateLimitDuration ?? '1200',
|
||||||
ServerAddress: resolvedServerAddress,
|
ServerAddress: resolvedServerAddress,
|
||||||
@@ -1728,22 +1720,6 @@ export function SettingsPage() {
|
|||||||
'GlobalWebRateLimitDuration',
|
'GlobalWebRateLimitDuration',
|
||||||
operationFields.GlobalWebRateLimitDuration,
|
operationFields.GlobalWebRateLimitDuration,
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'UploadRateLimitNum',
|
|
||||||
operationFields.UploadRateLimitNum,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'UploadRateLimitDuration',
|
|
||||||
operationFields.UploadRateLimitDuration,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'DownloadRateLimitNum',
|
|
||||||
operationFields.DownloadRateLimitNum,
|
|
||||||
],
|
|
||||||
[
|
|
||||||
'DownloadRateLimitDuration',
|
|
||||||
operationFields.DownloadRateLimitDuration,
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'CriticalRateLimitNum',
|
'CriticalRateLimitNum',
|
||||||
operationFields.CriticalRateLimitNum,
|
operationFields.CriticalRateLimitNum,
|
||||||
@@ -1856,68 +1832,6 @@ export function SettingsPage() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="rounded-2xl border border-[var(--border-default)] bg-[var(--surface-elevated)] p-5">
|
|
||||||
<p className="text-sm font-semibold text-[var(--foreground-primary)]">
|
|
||||||
上传 / 下载限流
|
|
||||||
</p>
|
|
||||||
<p className="mt-1 text-sm text-[var(--foreground-muted)]">
|
|
||||||
用于文件上传与下载接口,建议保留相对严格的阈值。
|
|
||||||
</p>
|
|
||||||
<div className="mt-4 grid gap-4 sm:grid-cols-2">
|
|
||||||
<ResourceField label="上传请求次数">
|
|
||||||
<ResourceInput
|
|
||||||
type="number"
|
|
||||||
value={operationFields.UploadRateLimitNum}
|
|
||||||
onChange={(event) =>
|
|
||||||
setOperationFields((previous) => ({
|
|
||||||
...previous,
|
|
||||||
UploadRateLimitNum: event.target.value,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</ResourceField>
|
|
||||||
<ResourceField
|
|
||||||
label={`上传窗口 (${formatSecondsLabel(operationFields.UploadRateLimitDuration)})`}
|
|
||||||
>
|
|
||||||
<ResourceInput
|
|
||||||
type="number"
|
|
||||||
value={operationFields.UploadRateLimitDuration}
|
|
||||||
onChange={(event) =>
|
|
||||||
setOperationFields((previous) => ({
|
|
||||||
...previous,
|
|
||||||
UploadRateLimitDuration: event.target.value,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</ResourceField>
|
|
||||||
<ResourceField label="下载请求次数">
|
|
||||||
<ResourceInput
|
|
||||||
type="number"
|
|
||||||
value={operationFields.DownloadRateLimitNum}
|
|
||||||
onChange={(event) =>
|
|
||||||
setOperationFields((previous) => ({
|
|
||||||
...previous,
|
|
||||||
DownloadRateLimitNum: event.target.value,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</ResourceField>
|
|
||||||
<ResourceField
|
|
||||||
label={`下载窗口 (${formatSecondsLabel(operationFields.DownloadRateLimitDuration)})`}
|
|
||||||
>
|
|
||||||
<ResourceInput
|
|
||||||
type="number"
|
|
||||||
value={operationFields.DownloadRateLimitDuration}
|
|
||||||
onChange={(event) =>
|
|
||||||
setOperationFields((previous) => ({
|
|
||||||
...previous,
|
|
||||||
DownloadRateLimitDuration: event.target.value,
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</ResourceField>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="rounded-2xl border border-[var(--border-default)] bg-[var(--surface-elevated)] p-5">
|
<div className="rounded-2xl border border-[var(--border-default)] bg-[var(--surface-elevated)] p-5">
|
||||||
<p className="text-sm font-semibold text-[var(--foreground-primary)]">
|
<p className="text-sm font-semibold text-[var(--foreground-primary)]">
|
||||||
|
|||||||
Reference in New Issue
Block a user