feat(management): add auth ID normalization and file-based ID resolution

Introduce `authIDForPath` to standardize ID generation from file paths, improving consistency in authentication handling. Update `registerAuthFromFile` and `disableAuth` to utilize normalized IDs, incorporating relative path resolution and file name extraction where applicable.
This commit is contained in:
Luis Pater
2025-11-11 19:23:31 +08:00
parent dc804e96fb
commit 8ae8a5c296

View File

@@ -538,6 +538,24 @@ func (h *Handler) DeleteAuthFile(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"}) c.JSON(200, gin.H{"status": "ok"})
} }
func (h *Handler) authIDForPath(path string) string {
path = strings.TrimSpace(path)
if path == "" {
return ""
}
if h == nil || h.cfg == nil {
return path
}
authDir := strings.TrimSpace(h.cfg.AuthDir)
if authDir == "" {
return path
}
if rel, err := filepath.Rel(authDir, path); err == nil && rel != "" {
return rel
}
return path
}
func (h *Handler) registerAuthFromFile(ctx context.Context, path string, data []byte) error { func (h *Handler) registerAuthFromFile(ctx context.Context, path string, data []byte) error {
if h.authManager == nil { if h.authManager == nil {
return nil return nil
@@ -566,13 +584,18 @@ func (h *Handler) registerAuthFromFile(ctx context.Context, path string, data []
} }
lastRefresh, hasLastRefresh := extractLastRefreshTimestamp(metadata) lastRefresh, hasLastRefresh := extractLastRefreshTimestamp(metadata)
authID := h.authIDForPath(path)
if authID == "" {
authID = path
}
attr := map[string]string{ attr := map[string]string{
"path": path, "path": path,
"source": path, "source": path,
} }
auth := &coreauth.Auth{ auth := &coreauth.Auth{
ID: path, ID: authID,
Provider: provider, Provider: provider,
FileName: filepath.Base(path),
Label: label, Label: label,
Status: coreauth.StatusActive, Status: coreauth.StatusActive,
Attributes: attr, Attributes: attr,
@@ -583,7 +606,7 @@ func (h *Handler) registerAuthFromFile(ctx context.Context, path string, data []
if hasLastRefresh { if hasLastRefresh {
auth.LastRefreshedAt = lastRefresh auth.LastRefreshedAt = lastRefresh
} }
if existing, ok := h.authManager.GetByID(path); ok { if existing, ok := h.authManager.GetByID(authID); ok {
auth.CreatedAt = existing.CreatedAt auth.CreatedAt = existing.CreatedAt
if !hasLastRefresh { if !hasLastRefresh {
auth.LastRefreshedAt = existing.LastRefreshedAt auth.LastRefreshedAt = existing.LastRefreshedAt
@@ -598,10 +621,17 @@ func (h *Handler) registerAuthFromFile(ctx context.Context, path string, data []
} }
func (h *Handler) disableAuth(ctx context.Context, id string) { func (h *Handler) disableAuth(ctx context.Context, id string) {
if h.authManager == nil || id == "" { if h == nil || h.authManager == nil {
return return
} }
if auth, ok := h.authManager.GetByID(id); ok { authID := h.authIDForPath(id)
if authID == "" {
authID = strings.TrimSpace(id)
}
if authID == "" {
return
}
if auth, ok := h.authManager.GetByID(authID); ok {
auth.Disabled = true auth.Disabled = true
auth.Status = coreauth.StatusDisabled auth.Status = coreauth.StatusDisabled
auth.StatusMessage = "removed via management API" auth.StatusMessage = "removed via management API"