58 lines
1.4 KiB
Go
58 lines
1.4 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"git.yuntuo.hk/k2safe/orbit/internal/consoleauth"
|
|
"net/netip"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func loginPolicyFromEnv(get func(string) string) (consoleauth.LoginPolicy, error) {
|
|
p := consoleauth.DefaultLoginPolicy()
|
|
for _, f := range []struct {
|
|
name string
|
|
dst *int
|
|
}{
|
|
{"ORBIT_CONSOLE_LOGIN_FAILURE_LIMIT", &p.FailureLimit},
|
|
{"ORBIT_CONSOLE_LOGIN_ACCOUNT_LIMIT", &p.AccountLimit},
|
|
{"ORBIT_CONSOLE_LOGIN_IP_LIMIT", &p.IPLimit},
|
|
{"ORBIT_CONSOLE_LOGIN_AUDIT_DAYS", &p.AuditDays},
|
|
} {
|
|
if raw := get(f.name); raw != "" {
|
|
n, err := strconv.Atoi(raw)
|
|
if err != nil {
|
|
return p, fmt.Errorf("invalid %s", f.name)
|
|
}
|
|
*f.dst = n
|
|
}
|
|
}
|
|
for _, f := range []struct {
|
|
name string
|
|
dst *time.Duration
|
|
}{
|
|
{"ORBIT_CONSOLE_LOGIN_FAILURE_WINDOW", &p.FailureWindow},
|
|
{"ORBIT_CONSOLE_LOGIN_LOCK_DURATION", &p.LockDuration},
|
|
{"ORBIT_CONSOLE_LOGIN_RATE_WINDOW", &p.RateWindow},
|
|
} {
|
|
if raw := get(f.name); raw != "" {
|
|
d, err := time.ParseDuration(raw)
|
|
if err != nil {
|
|
return p, fmt.Errorf("invalid %s", f.name)
|
|
}
|
|
*f.dst = d
|
|
}
|
|
}
|
|
if raw := get("ORBIT_CONSOLE_TRUSTED_PROXIES"); raw != "" {
|
|
for _, item := range strings.Split(raw, ",") {
|
|
prefix, err := netip.ParsePrefix(strings.TrimSpace(item))
|
|
if err != nil {
|
|
return p, fmt.Errorf("invalid ORBIT_CONSOLE_TRUSTED_PROXIES CIDR")
|
|
}
|
|
p.TrustedProxies = append(p.TrustedProxies, prefix.Masked())
|
|
}
|
|
}
|
|
return p, p.Validate()
|
|
}
|