mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-18 04:10:51 +08:00
Fixed: #233
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:
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user