mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 21:10:51 +08:00
39 lines
1002 B
Go
39 lines
1002 B
Go
package iflow
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// NormalizeCookie normalizes raw cookie strings for iFlow authentication flows.
|
|
func NormalizeCookie(raw string) (string, error) {
|
|
trimmed := strings.TrimSpace(raw)
|
|
if trimmed == "" {
|
|
return "", fmt.Errorf("cookie cannot be empty")
|
|
}
|
|
|
|
combined := strings.Join(strings.Fields(trimmed), " ")
|
|
if !strings.HasSuffix(combined, ";") {
|
|
combined += ";"
|
|
}
|
|
if !strings.Contains(combined, "BXAuth=") {
|
|
return "", fmt.Errorf("cookie missing BXAuth field")
|
|
}
|
|
return combined, nil
|
|
}
|
|
|
|
// SanitizeIFlowFileName normalizes user identifiers for safe filename usage.
|
|
func SanitizeIFlowFileName(raw string) string {
|
|
if raw == "" {
|
|
return ""
|
|
}
|
|
cleanEmail := strings.ReplaceAll(raw, "*", "x")
|
|
var result strings.Builder
|
|
for _, r := range cleanEmail {
|
|
if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') || r == '_' || r == '@' || r == '.' || r == '-' {
|
|
result.WriteRune(r)
|
|
}
|
|
}
|
|
return strings.TrimSpace(result.String())
|
|
}
|