Files
Yunling Zhang b3c7f04c2b feat(auth): 管理端新增 AUTH_MODE=builtin|sso,默认 builtin 行为不变
- internal/auth/mode.go:Mode 解析/归一化,X-Auth-User 头常量
- server:adminAuth 按模式鉴权,sso 只认网关注入的 X-Auth-User(缺失 401 JSON)
- 新增公开 /api/admin/mode 供前端识别模式;sso 下 login/logout 返回 404
- main:读取 AUTH_MODE,sso 时跳过自带口令并打印启动提示
- 测试覆盖两种模式、伪造 header 不绕过、数据面不受影响
2026-09-29 13:43:57 +08:00

46 lines
1.0 KiB
Go

package auth
import "testing"
func TestParseMode(t *testing.T) {
cases := []struct {
in string
want Mode
bad bool
}{
{"", ModeBuiltin, false},
{"builtin", ModeBuiltin, false},
{" Builtin ", ModeBuiltin, false},
{"sso", ModeSSO, false},
{"SSO", ModeSSO, false},
{"oidc", "", true},
}
for _, c := range cases {
got, err := ParseMode(c.in)
if c.bad {
if err == nil {
t.Fatalf("ParseMode(%q) 应报错", c.in)
}
continue
}
if err != nil {
t.Fatalf("ParseMode(%q) 意外错误: %v", c.in, err)
}
if got != c.want {
t.Fatalf("ParseMode(%q) = %q,期望 %q", c.in, got, c.want)
}
}
}
func TestModeNormalize(t *testing.T) {
if got := Mode("").Normalize(); got != ModeBuiltin {
t.Fatalf("零值应归一为 builtin,实际 %q", got)
}
if got := Mode("whatever").Normalize(); got != ModeBuiltin {
t.Fatalf("非法值应归一为 builtin,实际 %q", got)
}
if got := ModeSSO.Normalize(); got != ModeSSO {
t.Fatalf("sso 应保持不变,实际 %q", got)
}
}