Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
|
|
@ -0,0 +1,92 @@
|
|||
package gateway
|
||||
|
||||
import (
|
||||
"go.uber.org/zap"
|
||||
|
||||
domaintenant "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/domain/tenant"
|
||||
domainuser "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/domain/user"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/pkg/logger"
|
||||
)
|
||||
|
||||
// RegisterInput represents the input for user registration validation
|
||||
type RegisterInput struct {
|
||||
Email string
|
||||
Password string
|
||||
FirstName string
|
||||
LastName string
|
||||
TenantName string
|
||||
TenantSlug string
|
||||
Timezone string
|
||||
|
||||
// Consent fields
|
||||
AgreeTermsOfService bool
|
||||
AgreePromotions bool
|
||||
AgreeToTrackingAcrossThirdPartyAppsAndServices bool
|
||||
|
||||
// Optional: IP address for audit trail
|
||||
CreatedFromIPAddress string
|
||||
}
|
||||
|
||||
// ValidateRegistrationInputUseCase validates registration input
|
||||
type ValidateRegistrationInputUseCase struct {
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// ProvideValidateRegistrationInputUseCase creates a new ValidateRegistrationInputUseCase
|
||||
func ProvideValidateRegistrationInputUseCase(logger *zap.Logger) *ValidateRegistrationInputUseCase {
|
||||
return &ValidateRegistrationInputUseCase{
|
||||
logger: logger.Named("validate-registration-input-usecase"),
|
||||
}
|
||||
}
|
||||
|
||||
// Execute validates the registration input fields
|
||||
func (uc *ValidateRegistrationInputUseCase) Execute(input *RegisterInput) error {
|
||||
if input.Email == "" {
|
||||
uc.logger.Warn("email is required")
|
||||
return domainuser.ErrEmailRequired
|
||||
}
|
||||
|
||||
if input.Password == "" {
|
||||
uc.logger.Warn("password is required")
|
||||
return domainuser.ErrPasswordRequired
|
||||
}
|
||||
|
||||
if input.FirstName == "" {
|
||||
uc.logger.Warn("first name is required")
|
||||
return domainuser.ErrFirstNameRequired
|
||||
}
|
||||
|
||||
if input.LastName == "" {
|
||||
uc.logger.Warn("last name is required")
|
||||
return domainuser.ErrLastNameRequired
|
||||
}
|
||||
|
||||
if input.TenantName == "" {
|
||||
uc.logger.Warn("tenant name is required")
|
||||
return domaintenant.ErrNameRequired
|
||||
}
|
||||
|
||||
if input.TenantSlug == "" {
|
||||
uc.logger.Warn("tenant slug is required")
|
||||
return domaintenant.ErrSlugRequired
|
||||
}
|
||||
|
||||
// Validate Terms of Service agreement (REQUIRED)
|
||||
if !input.AgreeTermsOfService {
|
||||
uc.logger.Warn("terms of service agreement is required")
|
||||
return domainuser.ErrTermsOfServiceRequired
|
||||
}
|
||||
|
||||
// Note: AgreePromotions and AgreeToTrackingAcrossThirdPartyAppsAndServices
|
||||
// are optional (defaults to false if not provided)
|
||||
|
||||
// CWE-532: Use hashed/redacted fields to prevent PII in logs
|
||||
uc.logger.Debug("registration input validated successfully",
|
||||
logger.EmailHash(input.Email),
|
||||
logger.TenantSlugHash(input.TenantSlug),
|
||||
zap.Bool("agree_terms", input.AgreeTermsOfService),
|
||||
zap.Bool("agree_promotions", input.AgreePromotions),
|
||||
zap.Bool("agree_tracking", input.AgreeToTrackingAcrossThirdPartyAppsAndServices))
|
||||
|
||||
return nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue