diff --git a/api/internal/model/alias_name.go b/api/internal/model/alias_name.go index 5662078..ee7bbd6 100644 --- a/api/internal/model/alias_name.go +++ b/api/internal/model/alias_name.go @@ -26,14 +26,16 @@ var ( } ) -func GenerateAlias(format string, sufix string) string { +func GenerateAlias(format string, localPart string) string { switch format { case AliasFormatRandomChars: return generateRandomChars() case AliasFormatUUID: return uuid.New().String() case AliasFormatCatchAll: - return fmt.Sprintf("*+%s", sufix) + return fmt.Sprintf("*+%s", localPart) + case AliasFormatCustom: + return localPart default: return generateRandomWords() } diff --git a/api/internal/service/alias.go b/api/internal/service/alias.go index 09d7f84..d200c81 100644 --- a/api/internal/service/alias.go +++ b/api/internal/service/alias.go @@ -101,7 +101,7 @@ func (s *Service) GetAliasByName(name string) (model.Alias, error) { return alias, nil } -func (s *Service) PostAlias(ctx context.Context, alias model.Alias, format string, domain string, sufix string) (model.Alias, error) { +func (s *Service) PostAlias(ctx context.Context, alias model.Alias, format string, domain string, localPart string) (model.Alias, error) { sub, err := s.GetSubscription(context.Background(), alias.UserID) if err != nil { log.Printf("error fetching subscription: %s", err.Error()) @@ -142,7 +142,7 @@ func (s *Service) PostAlias(ctx context.Context, alias model.Alias, format strin } } - alias.Name = model.GenerateAlias(format, sufix) + "@" + domain + alias.Name = model.GenerateAlias(format, localPart) + "@" + domain alias.CatchAll = true alias, err = s.Store.PostAlias(ctx, alias) if err != nil { @@ -155,7 +155,7 @@ func (s *Service) PostAlias(ctx context.Context, alias model.Alias, format strin // Standard alias for range 5 { - alias.Name = model.GenerateAlias(format, "") + "@" + domain + alias.Name = model.GenerateAlias(format, localPart) + "@" + domain alias, err = s.Store.PostAlias(ctx, alias) if err != nil { log.Printf("error creating standard alias: %s", err.Error()) diff --git a/api/internal/transport/api/alias.go b/api/internal/transport/api/alias.go index 69f9823..1daf509 100644 --- a/api/internal/transport/api/alias.go +++ b/api/internal/transport/api/alias.go @@ -212,7 +212,7 @@ func (h *Handler) PostAlias(c *fiber.Ctx) error { } // Validate catch-all suffix - if req.Format == model.AliasFormatCatchAll && req.CatchAllSuffix == "" { + if req.Format == model.AliasFormatCatchAll && req.LocalPart == "" { return c.Status(400).JSON(fiber.Map{ "error": ErrInvalidRequest, }) @@ -233,7 +233,7 @@ func (h *Handler) PostAlias(c *fiber.Ctx) error { FromName: req.FromName, } - alias, err = h.Service.PostAlias(c.Context(), alias, req.Format, domain, req.CatchAllSuffix) + alias, err = h.Service.PostAlias(c.Context(), alias, req.Format, domain, req.LocalPart) if err != nil { return c.Status(400).JSON(fiber.Map{ "error": err.Error(), diff --git a/api/internal/transport/api/req.go b/api/internal/transport/api/req.go index d8fe7fe..e070b5f 100644 --- a/api/internal/transport/api/req.go +++ b/api/internal/transport/api/req.go @@ -31,13 +31,13 @@ type SubscriptionReq struct { } type AliasReq struct { - Description string `json:"description"` - Enabled bool `json:"enabled"` - Recipients string `json:"recipients" validate:"required"` - FromName string `json:"from_name"` - Format string `json:"format"` - Domain string `json:"domain" validate:"required"` - CatchAllSuffix string `json:"catch_all_suffix" validate:"omitempty,alphanum,min=6,max=12"` + Description string `json:"description"` + Enabled bool `json:"enabled"` + Recipients string `json:"recipients" validate:"required"` + FromName string `json:"from_name"` + Format string `json:"format"` + Domain string `json:"domain" validate:"required"` + LocalPart string `json:"local_part" validate:"omitempty,alphanum,min=6,max=12"` } type RecipientReq struct { diff --git a/app/src/components/AliasCreate.vue b/app/src/components/AliasCreate.vue index 9de4e0a..4c7ec82 100644 --- a/app/src/components/AliasCreate.vue +++ b/app/src/components/AliasCreate.vue @@ -22,17 +22,31 @@ Alias suffix (6-12 alphanumeric chars.): -

Wildcard suffix must be between 6 and 12 characters

+

Wildcard suffix must be between 6 and 12 characters

- *+{{ alias.catch_all_suffix }}@{{ alias.domain }} + *+{{ alias.local_part }}@{{ alias.domain }}

+
+
+ + +

Custom alias must be between 6 and 12 characters

+
+