- Validate source email format (RFC 5321 local-part) - Ensure source is in the correct domain - Validate destination (single or comma-separated emails) - Check for duplicate aliases - Add GetAliasBySource database method
78 lines
1.7 KiB
Go
78 lines
1.7 KiB
Go
package db
|
|
|
|
func (d *DB) GetAllAliases() ([]AliasWithDomain, error) {
|
|
var aliases []Alias
|
|
if err := d.Preload("Domain").Find(&aliases).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result := make([]AliasWithDomain, len(aliases))
|
|
for i, a := range aliases {
|
|
result[i] = AliasWithDomain{
|
|
Alias: a,
|
|
DomainName: "",
|
|
}
|
|
if a.Domain != nil {
|
|
result[i].DomainName = a.Domain.Name
|
|
}
|
|
}
|
|
|
|
if result == nil {
|
|
result = []AliasWithDomain{}
|
|
}
|
|
return result, nil
|
|
}
|
|
|
|
func (d *DB) GetAliasesByDomain(domainID uint) ([]Alias, error) {
|
|
var aliases []Alias
|
|
if err := d.Where("domain_id = ?", domainID).Find(&aliases).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
if aliases == nil {
|
|
aliases = []Alias{}
|
|
}
|
|
return aliases, nil
|
|
}
|
|
|
|
func (d *DB) GetAliasByID(id uint) (*Alias, error) {
|
|
var alias Alias
|
|
if err := d.Preload("Domain").First(&alias, id).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &alias, nil
|
|
}
|
|
|
|
func (d *DB) GetAliasBySource(source string) (*Alias, error) {
|
|
var alias Alias
|
|
if err := d.Where("source = ?", source).First(&alias).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &alias, nil
|
|
}
|
|
|
|
func (d *DB) CreateAlias(source, destination string) (*Alias, error) {
|
|
alias := Alias{
|
|
Source: source,
|
|
Destination: destination,
|
|
}
|
|
if err := d.Create(&alias).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &alias, nil
|
|
}
|
|
|
|
func (d *DB) CreateAliasInDomain(source, destination string, domainID uint) (*Alias, error) {
|
|
alias := Alias{
|
|
DomainID: domainID,
|
|
Source: source,
|
|
Destination: destination,
|
|
}
|
|
if err := d.Create(&alias).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &alias, nil
|
|
}
|
|
|
|
func (d *DB) DeleteAlias(id uint) error {
|
|
return d.Delete(&Alias{}, id).Error
|
|
}
|