68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package verification
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"git.sendico.io/tech/sxchnge/bff/pkg/model"
|
|
"git.sendico.io/tech/sxchnge/bff/pkg/mutil/mzap"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
const hashPreviewChars = 12
|
|
|
|
func hashPreview(value string) string {
|
|
if value == "" {
|
|
return ""
|
|
}
|
|
if len(value) <= hashPreviewChars {
|
|
return value
|
|
}
|
|
return value[:hashPreviewChars] + "..."
|
|
}
|
|
|
|
func tokenIsDigitsOnly(value string) bool {
|
|
if value == "" {
|
|
return false
|
|
}
|
|
for _, ch := range value {
|
|
if ch < '0' || ch > '9' {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func tokenStateFields(token *model.VerificationToken) []zap.Field {
|
|
fields := []zap.Field{
|
|
mzap.StorableRef(token),
|
|
mzap.ObjRef("token_account_ref", token.AccountRef),
|
|
zap.String("token_purpose", string(token.Purpose)),
|
|
zap.Bool("token_has_target", strings.TrimSpace(token.Target) != ""),
|
|
zap.Bool("token_has_idempotency_key", token.IdempotencyKey != nil),
|
|
zap.String("token_verify_hash_prefix", hashPreview(token.VerifyTokenHash)),
|
|
zap.Bool("token_has_salt", token.Salt != nil),
|
|
zap.Bool("token_used", token.UsedAt != nil),
|
|
zap.Time("token_expires_at", token.ExpiresAt),
|
|
zap.Int("token_attempts", token.Attempts),
|
|
zap.Bool("token_has_max_retries", token.MaxRetries != nil),
|
|
}
|
|
|
|
if token.Salt != nil {
|
|
fields = append(fields, zap.String("token_salt_prefix", hashPreview(*token.Salt)))
|
|
}
|
|
if token.UsedAt != nil {
|
|
fields = append(fields, zap.Time("token_used_at", *token.UsedAt))
|
|
}
|
|
if token.MaxRetries != nil {
|
|
fields = append(fields, zap.Int("token_max_retries", *token.MaxRetries))
|
|
}
|
|
if token.IdempotencyKey != nil {
|
|
fields = append(fields, zap.String("token_idempotency_key_prefix", hashPreview(*token.IdempotencyKey)))
|
|
}
|
|
if strings.TrimSpace(token.ContextRef) != "" {
|
|
fields = append(fields, zap.String("token_context_ref", token.ContextRef))
|
|
}
|
|
|
|
return fields
|
|
}
|