mirror of
https://github.com/directorz/mailfull-go.git
synced 2025-12-17 17:47:04 +00:00
Implement create/remove a AliasDomain
This commit is contained in:
@@ -2,8 +2,10 @@ package mailfull
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -117,3 +119,84 @@ func (r *Repository) AliasDomain(aliasDomainName string) (*AliasDomain, error) {
|
|||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AliasDomainCreate creates the input AliasDomain.
|
||||||
|
func (r *Repository) AliasDomainCreate(aliasDomain *AliasDomain) error {
|
||||||
|
aliasDomains, err := r.AliasDomains()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ad := range aliasDomains {
|
||||||
|
if ad.Name() == aliasDomain.Name() {
|
||||||
|
return ErrAliasDomainAlreadyExist
|
||||||
|
}
|
||||||
|
}
|
||||||
|
existDomain, err := r.Domain(aliasDomain.Name())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if existDomain != nil {
|
||||||
|
return ErrDomainAlreadyExist
|
||||||
|
}
|
||||||
|
existDomain, err = r.Domain(aliasDomain.Target())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if existDomain == nil {
|
||||||
|
return ErrDomainNotExist
|
||||||
|
}
|
||||||
|
|
||||||
|
aliasDomains = append(aliasDomains, aliasDomain)
|
||||||
|
|
||||||
|
if err := r.writeAliasDomainsFile(aliasDomains); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AliasDomainRemove removes a AliasDomain of the input name.
|
||||||
|
func (r *Repository) AliasDomainRemove(aliasDomainName string) error {
|
||||||
|
aliasDomains, err := r.AliasDomains()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
idx := -1
|
||||||
|
for i, aliasDomain := range aliasDomains {
|
||||||
|
if aliasDomain.Name() == aliasDomainName {
|
||||||
|
idx = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if idx < 0 {
|
||||||
|
return ErrAliasDomainNotExist
|
||||||
|
}
|
||||||
|
|
||||||
|
aliasDomains = append(aliasDomains[:idx], aliasDomains[idx+1:]...)
|
||||||
|
|
||||||
|
if err := r.writeAliasDomainsFile(aliasDomains); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// writeAliasDomainsFile writes a AliasDomain slice to the file.
|
||||||
|
func (r *Repository) writeAliasDomainsFile(aliasDomains []*AliasDomain) error {
|
||||||
|
file, err := os.OpenFile(filepath.Join(r.DirMailDataPath, FileNameAliasDomains), os.O_RDWR|os.O_TRUNC, 0666)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
sort.Sort(AliasDomainSlice(aliasDomains))
|
||||||
|
|
||||||
|
for _, aliasDomain := range aliasDomains {
|
||||||
|
if _, err := fmt.Fprintf(file, "%s:%s\n", aliasDomain.Name(), aliasDomain.Target()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -21,8 +21,11 @@ var (
|
|||||||
ErrDomainNotExist = errors.New("Domain: not exist")
|
ErrDomainNotExist = errors.New("Domain: not exist")
|
||||||
ErrDomainAlreadyExist = errors.New("Domain: already exist")
|
ErrDomainAlreadyExist = errors.New("Domain: already exist")
|
||||||
ErrDomainIsAliasDomainTarget = errors.New("Domain: is set as alias")
|
ErrDomainIsAliasDomainTarget = errors.New("Domain: is set as alias")
|
||||||
ErrAliasDomainAlreadyExist = errors.New("AliasDomain: already exist")
|
|
||||||
ErrUserNotExist = errors.New("User: not exist")
|
ErrAliasDomainNotExist = errors.New("AliasDomain: not exist")
|
||||||
|
ErrAliasDomainAlreadyExist = errors.New("AliasDomain: already exist")
|
||||||
|
|
||||||
|
ErrUserNotExist = errors.New("User: not exist")
|
||||||
|
|
||||||
ErrInvalidFormatUsersPassword = errors.New("User: password file invalid format")
|
ErrInvalidFormatUsersPassword = errors.New("User: password file invalid format")
|
||||||
ErrInvalidFormatAliasDomain = errors.New("AliasDomain: file invalid format")
|
ErrInvalidFormatAliasDomain = errors.New("AliasDomain: file invalid format")
|
||||||
|
|||||||
Reference in New Issue
Block a user