37 lines
1,015 B
Go
37 lines
1,015 B
Go
package site
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"encoding/base64"
|
|
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// GenerateVerificationTokenUseCase generates a verification token for domain verification
|
|
type GenerateVerificationTokenUseCase struct {
|
|
logger *zap.Logger
|
|
}
|
|
|
|
// ProvideGenerateVerificationTokenUseCase creates a new GenerateVerificationTokenUseCase
|
|
func ProvideGenerateVerificationTokenUseCase(
|
|
logger *zap.Logger,
|
|
) *GenerateVerificationTokenUseCase {
|
|
return &GenerateVerificationTokenUseCase{
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// Execute generates a cryptographically secure verification token
|
|
func (uc *GenerateVerificationTokenUseCase) Execute() (string, error) {
|
|
b := make([]byte, 16) // 16 bytes = 128 bits
|
|
if _, err := rand.Read(b); err != nil {
|
|
uc.logger.Error("failed to generate random bytes", zap.Error(err))
|
|
return "", err
|
|
}
|
|
|
|
token := base64.RawURLEncoding.EncodeToString(b)
|
|
verificationToken := "mvp_" + token // mvp = maplepress verify
|
|
|
|
uc.logger.Info("verification token generated")
|
|
return verificationToken, nil
|
|
}
|