feat: v0.4.0 主题切换 + LLM 全面优化 + 登录会话 + 用户管理/LDAP
主题: - 深色/浅色/跟随系统(useTheme:本地缓存先行+远端同步+matchMedia), 侧边栏快捷切换,设置页三档即选即生效 LLM(参考 opsxdb/aiops): - llm.Client.ChatStream 流式(SSE 增量解析,透传 reasoning_content, ctx 控制超时);POST /api/ai/chat/stream(平台实时数据注入降幻觉, 未配 LLM 降级规则 JSON,指令解析 action 不变) - test-llm 支持草稿直测(保存前验证,apiKey 空/掩码回退已存) - 发布失败自动 AI 分析日志尾部(结论/根因/建议),发布记录与发布 Tab 展示分析卡片 - 设置页 Provider 预设(DeepSeek/GLM/GLM编码/Qwen/Kimi/Ollama/自定义) 自动填 endpoint+模型+获取 Key 直达链接 登录与会话: - HMAC 签名 token(7 天,密钥派生自 encryption.key); authMiddleware 保护 /api/*(豁免登录/健康/SSE日志流/入站webhook) - 登录页 /login + 未登录跳转 + 登出;401 自动清理跳登录 用户管理与 LDAP(借鉴 LokiStack): - /users 页面:本地用户 CRUD、一次性密码、角色切换、来源徽章 (本地·蓝 | LDAP导入·紫);LDAP 导入按钮仅在启用且配置齐备时显示 - LDAP 配置卡(未启用仅提示语)、测试连接草稿直测+可选测试账号 - go-ldap:管理 Bind/用户搜索(防注入)/用户 DN 直连验证; 批量导入冲突策略(已LDAP跳过/本地同名转LDAP/新建); 登录分流本地 argon2id 或 LDAP 目录验证 + 首登 JIT 建号
This commit is contained in:
1 parent
555934cc64
commit
97193eb090
24 files changed
+2422
-98
No files matched your search
@@ -8,6 +8,8 @@ type User struct {
|
||||
Username string `gorm:"uniqueIndex" json:"username"`
|
||||
Password string `json:"-"` // argon2id 哈希,绝不返回给前端
|
||||
Nickname string `json:"nickname"`
|
||||
Email string `json:"email"`
|
||||
AuthSource string `gorm:"default:local" json:"authSource"` // local | ldap
|
||||
Role string `gorm:"default:user" json:"role"` // admin | user
|
||||
CreatedAt time.Time `json:"createdAt"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
@@ -79,6 +81,7 @@ type PipelineRun struct {
|
||||
Status string `gorm:"default:pending" json:"status"` // pending|queued|running|success|failed|cancelled
|
||||
DurationMs int64 `json:"durationMs"`
|
||||
BuildNumber int `json:"buildNumber"`
|
||||
Analysis string `gorm:"type:text" json:"analysis"` // 发布失败时的 AI 分析
|
||||
ExternalRunID string `json:"externalRunId"`
|
||||
ExternalURL string `json:"externalUrl"`
|
||||
NodesSnapshot string `json:"nodesSnapshot"`
|
||||
@@ -284,6 +287,18 @@ type SystemSetting struct {
|
||||
LarkWebhook string `json:"larkWebhook"` // 飞书群自定义机器人 Webhook
|
||||
LarkSecret string `gorm:"type:text" json:"-"` // 加签密钥(可选),enc:v1: 加密
|
||||
LarkSecretSet bool `gorm:"-" json:"larkSecretSet"`
|
||||
LdapEnabled bool `json:"ldapEnabled"`
|
||||
LdapHost string `json:"ldapHost"`
|
||||
LdapPort int `gorm:"default:389" json:"ldapPort"`
|
||||
LdapUseSSL bool `json:"ldapUseSSL"`
|
||||
LdapBindDN string `json:"ldapBindDN"`
|
||||
LdapBindPassword string `gorm:"type:text" json:"-"` // enc:v1: 加密只写
|
||||
LdapBindPasswordSet bool `gorm:"-" json:"ldapBindPasswordSet"`
|
||||
LdapBaseDN string `json:"ldapBaseDN"`
|
||||
LdapUserFilter string `json:"ldapUserFilter"`
|
||||
LdapUsernameAttr string `json:"ldapUsernameAttr"`
|
||||
LdapNameAttr string `json:"ldapNameAttr"`
|
||||
LdapEmailAttr string `json:"ldapEmailAttr"`
|
||||
Extra string `gorm:"type:text" json:"extra"`
|
||||
UpdatedAt time.Time `json:"updatedAt"`
|
||||
}
|
||||
Reference in new issue
Block a user