mirror of
https://github.com/Rain-kl/OpenFlare.git
synced 2026-09-29 22:06:38 +08:00
76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
// Copyright 2026 Arctel.net
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// Package do provides domain data objects for the auth plugin.
|
|
package do
|
|
|
|
import (
|
|
"Wavelet/plugins/domain/auth/consts"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// CapRuntimeSettings is the parsed CAPTCHA runtime configuration loaded from system_configs.
|
|
type CapRuntimeSettings struct {
|
|
LoginEnabled bool
|
|
ChallengeCount int
|
|
ChallengeSize int
|
|
ChallengeDifficulty int
|
|
ChallengeTTL time.Duration
|
|
TokenTTL time.Duration
|
|
}
|
|
|
|
// CapConfigRecord maps the columns selected from the system config table.
|
|
type CapConfigRecord struct {
|
|
Key string `gorm:"column:key"`
|
|
Value string `gorm:"column:value"`
|
|
}
|
|
|
|
// ParseCapRuntimeSettings parses system config key-value map into CapRuntimeSettings with fallback defaults.
|
|
func ParseCapRuntimeSettings(configs map[string]string) CapRuntimeSettings {
|
|
settings := CapRuntimeSettings{
|
|
ChallengeCount: consts.DefaultCapChallengeCount,
|
|
ChallengeSize: consts.DefaultCapChallengeSize,
|
|
ChallengeDifficulty: consts.DefaultCapChallengeDifficulty,
|
|
ChallengeTTL: consts.DefaultCapChallengeTTL,
|
|
TokenTTL: consts.DefaultCapTokenTTL,
|
|
}
|
|
|
|
if len(configs) == 0 {
|
|
return settings
|
|
}
|
|
|
|
if val, ok := configs[consts.ConfigKeyCapLoginEnabled]; ok {
|
|
if enabled, err := strconv.ParseBool(val); err == nil {
|
|
settings.LoginEnabled = enabled
|
|
}
|
|
}
|
|
if val, ok := configs[consts.ConfigKeyCapChallengeCount]; ok {
|
|
if count, err := strconv.Atoi(val); err == nil && count > 0 {
|
|
settings.ChallengeCount = count
|
|
}
|
|
}
|
|
if val, ok := configs[consts.ConfigKeyCapChallengeSize]; ok {
|
|
if size, err := strconv.Atoi(val); err == nil && size > 0 {
|
|
settings.ChallengeSize = size
|
|
}
|
|
}
|
|
if val, ok := configs[consts.ConfigKeyCapChallengeDifficulty]; ok {
|
|
if diff, err := strconv.Atoi(val); err == nil && diff > 0 {
|
|
settings.ChallengeDifficulty = diff
|
|
}
|
|
}
|
|
if val, ok := configs[consts.ConfigKeyCapChallengeTTL]; ok {
|
|
if ttlSeconds, err := strconv.Atoi(val); err == nil && ttlSeconds > 0 {
|
|
settings.ChallengeTTL = time.Duration(ttlSeconds) * time.Second
|
|
}
|
|
}
|
|
if val, ok := configs[consts.ConfigKeyCapTokenTTL]; ok {
|
|
if ttlSeconds, err := strconv.Atoi(val); err == nil && ttlSeconds > 0 {
|
|
settings.TokenTTL = time.Duration(ttlSeconds) * time.Second
|
|
}
|
|
}
|
|
|
|
return settings
|
|
}
|