mirror of
https://github.com/directorz/mailfull-go.git
synced 2026-01-10 13:15:58 +00:00
Implement create/remove a Domain
This commit is contained in:
75
domain.go
75
domain.go
@@ -5,6 +5,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Domain represents a Domain.
|
// Domain represents a Domain.
|
||||||
@@ -95,3 +96,77 @@ func (r *Repository) Domain(domainName string) (*Domain, error) {
|
|||||||
|
|
||||||
return domain, nil
|
return domain, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DomainCreate creates the input Domain.
|
||||||
|
func (r *Repository) DomainCreate(domain *Domain) error {
|
||||||
|
existDomain, err := r.Domain(domain.Name())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if existDomain != nil {
|
||||||
|
return ErrDomainAlreadyExist
|
||||||
|
}
|
||||||
|
existAliasDomain, err := r.AliasDomain(domain.Name())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if existAliasDomain != nil {
|
||||||
|
return ErrAliasDomainAlreadyExist
|
||||||
|
}
|
||||||
|
|
||||||
|
domainDirPath := filepath.Join(r.DirMailDataPath, domain.Name())
|
||||||
|
|
||||||
|
if err := os.Mkdir(domainDirPath, 0777); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
usersPasswordFile, err := os.Create(filepath.Join(domainDirPath, FileNameUsersPassword))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
usersPasswordFile.Close()
|
||||||
|
|
||||||
|
aliasUsersFile, err := os.Create(filepath.Join(domainDirPath, FileNameAliasUsers))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
aliasUsersFile.Close()
|
||||||
|
|
||||||
|
catchAllUserFile, err := os.Create(filepath.Join(domainDirPath, FileNameCatchAllUser))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
catchAllUserFile.Close()
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DomainRemove removes a Domain of the input name.
|
||||||
|
func (r *Repository) DomainRemove(domainName string) error {
|
||||||
|
existDomain, err := r.Domain(domainName)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if existDomain == nil {
|
||||||
|
return ErrDomainNotExist
|
||||||
|
}
|
||||||
|
|
||||||
|
aliasDomains, err := r.AliasDomains()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, aliasDomain := range aliasDomains {
|
||||||
|
if aliasDomain.Target() == domainName {
|
||||||
|
return ErrDomainIsAliasDomainTarget
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
domainDirPath := filepath.Join(r.DirMailDataPath, domainName)
|
||||||
|
domainBackupDirPath := filepath.Join(r.DirMailDataPath, "."+domainName+".deleted."+time.Now().Format("20060102150405"))
|
||||||
|
|
||||||
|
if err := os.Rename(domainDirPath, domainBackupDirPath); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ var (
|
|||||||
// Errors for the operation of the Repository.
|
// Errors for the operation of the Repository.
|
||||||
var (
|
var (
|
||||||
ErrDomainNotExist = errors.New("Domain: not exist")
|
ErrDomainNotExist = errors.New("Domain: not exist")
|
||||||
|
ErrDomainAlreadyExist = errors.New("Domain: already exist")
|
||||||
|
ErrDomainIsAliasDomainTarget = errors.New("Domain: is set as alias")
|
||||||
|
ErrAliasDomainAlreadyExist = errors.New("AliasDomain: already exist")
|
||||||
ErrUserNotExist = errors.New("User: not exist")
|
ErrUserNotExist = errors.New("User: not exist")
|
||||||
|
|
||||||
ErrInvalidFormatUsersPassword = errors.New("User: password file invalid format")
|
ErrInvalidFormatUsersPassword = errors.New("User: password file invalid format")
|
||||||
|
|||||||
Reference in New Issue
Block a user