1
0
mirror of https://github.com/directorz/mailfull-go.git synced 2025-12-17 09:37:02 +00:00

Remove type MailData

This commit is contained in:
teru
2017-07-25 12:48:54 +09:00
parent 30f0279751
commit 9c92ac9656
17 changed files with 92 additions and 207 deletions

View File

@@ -78,15 +78,7 @@ func (c *CmdAliasDomainAdd) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -69,15 +69,7 @@ func (c *CmdAliasDomainDel) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -87,15 +87,7 @@ func (c *CmdAliasUserAdd) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -77,15 +77,7 @@ func (c *CmdAliasUserDel) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -96,15 +96,7 @@ func (c *CmdAliasUserMod) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -78,15 +78,7 @@ func (c *CmdCatchAllSet) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -69,15 +69,7 @@ func (c *CmdCatchAllUnset) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -40,14 +40,7 @@ func (c *CmdCommit) Run(args []string) int {
return 1 return 1
} }
mailData, err := repo.MailData() if err = repo.GenerateDatabases(); err != nil {
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -86,15 +86,7 @@ func (c *CmdDomainAdd) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -69,15 +69,7 @@ func (c *CmdDomainDel) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -81,15 +81,7 @@ func (c *CmdDomainDisable) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -81,15 +81,7 @@ func (c *CmdDomainEnable) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -84,15 +84,7 @@ func (c *CmdUserAdd) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -83,15 +83,7 @@ func (c *CmdUserDel) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -127,15 +127,7 @@ func (c *CmdUserPasswd) Run(args []string) int {
if noCommit { if noCommit {
return 0 return 0
} }
if err = repo.GenerateDatabases(); err != nil {
mailData, err := repo.MailData()
if err != nil {
c.Meta.Errorf("%v\n", err)
return 1
}
err = repo.GenerateDatabases(mailData)
if err != nil {
c.Meta.Errorf("%v\n", err) c.Meta.Errorf("%v\n", err)
return 1 return 1
} }

View File

@@ -9,33 +9,84 @@ import (
"strings" "strings"
) )
// GenerateDatabases generates databases from the MailData directory. // repoData represents a repoData.
func (r *Repository) GenerateDatabases(md *MailData) error { type repoData struct {
sort.Slice(md.Domains, func(i, j int) bool { return md.Domains[i].Name() < md.Domains[j].Name() }) Domains []*Domain
sort.Slice(md.AliasDomains, func(i, j int) bool { return md.AliasDomains[i].Name() < md.AliasDomains[j].Name() }) AliasDomains []*AliasDomain
}
for _, domain := range md.Domains { // repoData returns a repoData.
func (r *Repository) repoData() (*repoData, error) {
domains, err := r.Domains()
if err != nil {
return nil, err
}
aliasDomains, err := r.AliasDomains()
if err != nil {
return nil, err
}
for _, domain := range domains {
users, err := r.Users(domain.Name())
if err != nil {
return nil, err
}
domain.Users = users
aliasUsers, err := r.AliasUsers(domain.Name())
if err != nil {
return nil, err
}
domain.AliasUsers = aliasUsers
catchAllUser, err := r.CatchAllUser(domain.Name())
if err != nil {
return nil, err
}
domain.CatchAllUser = catchAllUser
}
rd := &repoData{
Domains: domains,
AliasDomains: aliasDomains,
}
return rd, nil
}
// GenerateDatabases generates databases from the Repository.
func (r *Repository) GenerateDatabases() error {
rd, err := r.repoData()
if err != nil {
return err
}
sort.Slice(rd.Domains, func(i, j int) bool { return rd.Domains[i].Name() < rd.Domains[j].Name() })
sort.Slice(rd.AliasDomains, func(i, j int) bool { return rd.AliasDomains[i].Name() < rd.AliasDomains[j].Name() })
for _, domain := range rd.Domains {
sort.Slice(domain.Users, func(i, j int) bool { return domain.Users[i].Name() < domain.Users[j].Name() }) sort.Slice(domain.Users, func(i, j int) bool { return domain.Users[i].Name() < domain.Users[j].Name() })
sort.Slice(domain.AliasUsers, func(i, j int) bool { return domain.AliasUsers[i].Name() < domain.AliasUsers[j].Name() }) sort.Slice(domain.AliasUsers, func(i, j int) bool { return domain.AliasUsers[i].Name() < domain.AliasUsers[j].Name() })
} }
// Generate files // Generate files
if err := r.generateDbDomains(md); err != nil { if err := r.generateDbDomains(rd); err != nil {
return err return err
} }
if err := r.generateDbDestinations(md); err != nil { if err := r.generateDbDestinations(rd); err != nil {
return err return err
} }
if err := r.generateDbMaildirs(md); err != nil { if err := r.generateDbMaildirs(rd); err != nil {
return err return err
} }
if err := r.generateDbLocaltable(md); err != nil { if err := r.generateDbLocaltable(rd); err != nil {
return err return err
} }
if err := r.generateDbForwards(md); err != nil { if err := r.generateDbForwards(rd); err != nil {
return err return err
} }
if err := r.generateDbPasswords(md); err != nil { if err := r.generateDbPasswords(rd); err != nil {
return err return err
} }
@@ -59,7 +110,7 @@ func (r *Repository) GenerateDatabases(md *MailData) error {
return nil return nil
} }
func (r *Repository) generateDbDomains(md *MailData) error { func (r *Repository) generateDbDomains(rd *repoData) error {
dbDomains, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbDomains)) dbDomains, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbDomains))
if err != nil { if err != nil {
return err return err
@@ -69,7 +120,7 @@ func (r *Repository) generateDbDomains(md *MailData) error {
} }
defer dbDomains.Close() defer dbDomains.Close()
for _, domain := range md.Domains { for _, domain := range rd.Domains {
if domain.Disabled() { if domain.Disabled() {
continue continue
} }
@@ -79,7 +130,7 @@ func (r *Repository) generateDbDomains(md *MailData) error {
} }
} }
for _, aliasDomain := range md.AliasDomains { for _, aliasDomain := range rd.AliasDomains {
if _, err := fmt.Fprintf(dbDomains, "%s virtual\n", aliasDomain.Name()); err != nil { if _, err := fmt.Fprintf(dbDomains, "%s virtual\n", aliasDomain.Name()); err != nil {
return err return err
} }
@@ -88,7 +139,7 @@ func (r *Repository) generateDbDomains(md *MailData) error {
return nil return nil
} }
func (r *Repository) generateDbDestinations(md *MailData) error { func (r *Repository) generateDbDestinations(rd *repoData) error {
dbDestinations, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbDestinations)) dbDestinations, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbDestinations))
if err != nil { if err != nil {
return err return err
@@ -98,7 +149,7 @@ func (r *Repository) generateDbDestinations(md *MailData) error {
} }
defer dbDestinations.Close() defer dbDestinations.Close()
for _, domain := range md.Domains { for _, domain := range rd.Domains {
if domain.Disabled() { if domain.Disabled() {
continue continue
} }
@@ -123,7 +174,7 @@ func (r *Repository) generateDbDestinations(md *MailData) error {
} }
} }
for _, aliasDomain := range md.AliasDomains { for _, aliasDomain := range rd.AliasDomains {
if aliasDomain.Target() == domain.Name() { if aliasDomain.Target() == domain.Name() {
if _, err := fmt.Fprintf(dbDestinations, "%s@%s %s@%s\n", userName, aliasDomain.Name(), user.Name(), domain.Name()); err != nil { if _, err := fmt.Fprintf(dbDestinations, "%s@%s %s@%s\n", userName, aliasDomain.Name(), user.Name(), domain.Name()); err != nil {
return err return err
@@ -137,7 +188,7 @@ func (r *Repository) generateDbDestinations(md *MailData) error {
return err return err
} }
for _, aliasDomain := range md.AliasDomains { for _, aliasDomain := range rd.AliasDomains {
if aliasDomain.Target() == domain.Name() { if aliasDomain.Target() == domain.Name() {
if _, err := fmt.Fprintf(dbDestinations, "%s@%s %s@%s\n", aliasUser.Name(), aliasDomain.Name(), aliasUser.Name(), domain.Name()); err != nil { if _, err := fmt.Fprintf(dbDestinations, "%s@%s %s@%s\n", aliasUser.Name(), aliasDomain.Name(), aliasUser.Name(), domain.Name()); err != nil {
return err return err
@@ -150,7 +201,7 @@ func (r *Repository) generateDbDestinations(md *MailData) error {
return nil return nil
} }
func (r *Repository) generateDbMaildirs(md *MailData) error { func (r *Repository) generateDbMaildirs(rd *repoData) error {
dbMaildirs, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbMaildirs)) dbMaildirs, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbMaildirs))
if err != nil { if err != nil {
return err return err
@@ -160,7 +211,7 @@ func (r *Repository) generateDbMaildirs(md *MailData) error {
} }
defer dbMaildirs.Close() defer dbMaildirs.Close()
for _, domain := range md.Domains { for _, domain := range rd.Domains {
if domain.Disabled() { if domain.Disabled() {
continue continue
} }
@@ -175,7 +226,7 @@ func (r *Repository) generateDbMaildirs(md *MailData) error {
return nil return nil
} }
func (r *Repository) generateDbLocaltable(md *MailData) error { func (r *Repository) generateDbLocaltable(rd *repoData) error {
dbLocaltable, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbLocaltable)) dbLocaltable, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbLocaltable))
if err != nil { if err != nil {
return err return err
@@ -185,7 +236,7 @@ func (r *Repository) generateDbLocaltable(md *MailData) error {
} }
defer dbLocaltable.Close() defer dbLocaltable.Close()
for _, domain := range md.Domains { for _, domain := range rd.Domains {
if domain.Disabled() { if domain.Disabled() {
continue continue
} }
@@ -203,7 +254,7 @@ func (r *Repository) generateDbLocaltable(md *MailData) error {
return nil return nil
} }
func (r *Repository) generateDbForwards(md *MailData) error { func (r *Repository) generateDbForwards(rd *repoData) error {
dbForwards, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbForwards)) dbForwards, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbForwards))
if err != nil { if err != nil {
return err return err
@@ -213,7 +264,7 @@ func (r *Repository) generateDbForwards(md *MailData) error {
} }
defer dbForwards.Close() defer dbForwards.Close()
for _, domain := range md.Domains { for _, domain := range rd.Domains {
if domain.Disabled() { if domain.Disabled() {
continue continue
} }
@@ -243,7 +294,7 @@ func (r *Repository) generateDbForwards(md *MailData) error {
return nil return nil
} }
func (r *Repository) generateDbPasswords(md *MailData) error { func (r *Repository) generateDbPasswords(rd *repoData) error {
dbPasswords, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbPasswords)) dbPasswords, err := os.Create(filepath.Join(r.DirDatabasePath, FileNameDbPasswords))
if err != nil { if err != nil {
return err return err
@@ -253,7 +304,7 @@ func (r *Repository) generateDbPasswords(md *MailData) error {
} }
defer dbPasswords.Close() defer dbPasswords.Close()
for _, domain := range md.Domains { for _, domain := range rd.Domains {
if domain.Disabled() { if domain.Disabled() {
continue continue
} }

View File

@@ -1,47 +0,0 @@
package mailfull
// MailData represents a MailData.
type MailData struct {
Domains []*Domain
AliasDomains []*AliasDomain
}
// MailData returns a MailData.
func (r *Repository) MailData() (*MailData, error) {
domains, err := r.Domains()
if err != nil {
return nil, err
}
aliasDomains, err := r.AliasDomains()
if err != nil {
return nil, err
}
for _, domain := range domains {
users, err := r.Users(domain.Name())
if err != nil {
return nil, err
}
domain.Users = users
aliasUsers, err := r.AliasUsers(domain.Name())
if err != nil {
return nil, err
}
domain.AliasUsers = aliasUsers
catchAllUser, err := r.CatchAllUser(domain.Name())
if err != nil {
return nil, err
}
domain.CatchAllUser = catchAllUser
}
mailData := &MailData{
Domains: domains,
AliasDomains: aliasDomains,
}
return mailData, nil
}