Files
sub2api-cn-relay-manager/internal/provision/access_closure_details.go
2026-05-23 17:06:52 +08:00

62 lines
1.9 KiB
Go

package provision
import (
"crypto/sha256"
"encoding/hex"
"strings"
"sub2api-cn-relay-manager/internal/access"
"sub2api-cn-relay-manager/internal/host/sub2api"
)
func BuildAccessClosureDetails(accessReq AccessRequest, gateway sub2api.GatewayAccessResult) map[string]any {
details := map[string]any{
"subscription_users": subscriptionUserIDs(accessReq.Subscriptions),
"subscription_days": subscriptionDurationDays(accessReq.Subscriptions),
"status_code": gateway.StatusCode,
"ok": gateway.OK,
"has_expected_model": gateway.HasExpectedModel,
"models": gateway.Models,
"completion_ok": gateway.CompletionOK,
"completion_status": gateway.CompletionStatus,
"completion_type": gateway.CompletionType,
"completion_preview": gateway.CompletionBody,
}
requestedProbeAPIKey := strings.TrimSpace(accessReq.ProbeAPIKey)
if requestedProbeAPIKey != "" {
details["requested_probe_api_key"] = requestedProbeAPIKey
}
effectiveProbeKeySource := strings.TrimSpace(gateway.EffectiveProbeKeySource)
if effectiveProbeKeySource != "" {
details["effective_probe_key_source"] = effectiveProbeKeySource
}
effectiveProbeAPIKey := strings.TrimSpace(gateway.EffectiveProbeAPIKey)
if effectiveProbeAPIKey != "" {
details["effective_probe_key_fingerprint"] = fingerprintSecret(effectiveProbeAPIKey)
}
if strings.TrimSpace(accessReq.Mode) == AccessModeSelfService && requestedProbeAPIKey != "" {
details["probe_api_key"] = requestedProbeAPIKey
if effectiveProbeKeySource == "" {
details["effective_probe_key_source"] = access.ProbeKeySourceRequestedProbeAPIKey
}
if effectiveProbeAPIKey == "" {
details["effective_probe_key_fingerprint"] = fingerprintSecret(requestedProbeAPIKey)
}
}
return details
}
func fingerprintSecret(value string) string {
trimmed := strings.TrimSpace(value)
if trimmed == "" {
return ""
}
sum := sha256.Sum256([]byte(trimmed))
return "sha256:" + hex.EncodeToString(sum[:])
}