From 9c92ac965605a370902ff9c672f6f25e2920e03e Mon Sep 17 00:00:00 2001 From: teru Date: Tue, 25 Jul 2017 12:48:54 +0900 Subject: [PATCH] Remove type MailData --- cmd/mailfull/cmd_aliasdomainadd.go | 10 +-- cmd/mailfull/cmd_aliasdomaindel.go | 10 +-- cmd/mailfull/cmd_aliasuseradd.go | 10 +-- cmd/mailfull/cmd_aliasuserdel.go | 10 +-- cmd/mailfull/cmd_aliasusermod.go | 10 +-- cmd/mailfull/cmd_catchallset.go | 10 +-- cmd/mailfull/cmd_catchallunset.go | 10 +-- cmd/mailfull/cmd_commit.go | 9 +-- cmd/mailfull/cmd_domainadd.go | 10 +-- cmd/mailfull/cmd_domaindel.go | 10 +-- cmd/mailfull/cmd_domaindisable.go | 10 +-- cmd/mailfull/cmd_domainenable.go | 10 +-- cmd/mailfull/cmd_useradd.go | 10 +-- cmd/mailfull/cmd_userdel.go | 10 +-- cmd/mailfull/cmd_userpasswd.go | 10 +-- database.go | 103 +++++++++++++++++++++-------- maildata.go | 47 ------------- 17 files changed, 92 insertions(+), 207 deletions(-) delete mode 100644 maildata.go diff --git a/cmd/mailfull/cmd_aliasdomainadd.go b/cmd/mailfull/cmd_aliasdomainadd.go index 1e68ad8..d7b51e1 100644 --- a/cmd/mailfull/cmd_aliasdomainadd.go +++ b/cmd/mailfull/cmd_aliasdomainadd.go @@ -78,15 +78,7 @@ func (c *CmdAliasDomainAdd) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_aliasdomaindel.go b/cmd/mailfull/cmd_aliasdomaindel.go index aab3df5..370dcfc 100644 --- a/cmd/mailfull/cmd_aliasdomaindel.go +++ b/cmd/mailfull/cmd_aliasdomaindel.go @@ -69,15 +69,7 @@ func (c *CmdAliasDomainDel) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_aliasuseradd.go b/cmd/mailfull/cmd_aliasuseradd.go index 8760eb6..edef4c6 100644 --- a/cmd/mailfull/cmd_aliasuseradd.go +++ b/cmd/mailfull/cmd_aliasuseradd.go @@ -87,15 +87,7 @@ func (c *CmdAliasUserAdd) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_aliasuserdel.go b/cmd/mailfull/cmd_aliasuserdel.go index 6c86072..56dc398 100644 --- a/cmd/mailfull/cmd_aliasuserdel.go +++ b/cmd/mailfull/cmd_aliasuserdel.go @@ -77,15 +77,7 @@ func (c *CmdAliasUserDel) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_aliasusermod.go b/cmd/mailfull/cmd_aliasusermod.go index 213b683..5081138 100644 --- a/cmd/mailfull/cmd_aliasusermod.go +++ b/cmd/mailfull/cmd_aliasusermod.go @@ -96,15 +96,7 @@ func (c *CmdAliasUserMod) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_catchallset.go b/cmd/mailfull/cmd_catchallset.go index 762a1b1..632e0f1 100644 --- a/cmd/mailfull/cmd_catchallset.go +++ b/cmd/mailfull/cmd_catchallset.go @@ -78,15 +78,7 @@ func (c *CmdCatchAllSet) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_catchallunset.go b/cmd/mailfull/cmd_catchallunset.go index 8806a06..81859f8 100644 --- a/cmd/mailfull/cmd_catchallunset.go +++ b/cmd/mailfull/cmd_catchallunset.go @@ -69,15 +69,7 @@ func (c *CmdCatchAllUnset) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_commit.go b/cmd/mailfull/cmd_commit.go index 98276ef..ade21f1 100644 --- a/cmd/mailfull/cmd_commit.go +++ b/cmd/mailfull/cmd_commit.go @@ -40,14 +40,7 @@ func (c *CmdCommit) Run(args []string) int { return 1 } - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_domainadd.go b/cmd/mailfull/cmd_domainadd.go index e7680d3..72a47b1 100644 --- a/cmd/mailfull/cmd_domainadd.go +++ b/cmd/mailfull/cmd_domainadd.go @@ -86,15 +86,7 @@ func (c *CmdDomainAdd) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_domaindel.go b/cmd/mailfull/cmd_domaindel.go index f521a26..5845ff9 100644 --- a/cmd/mailfull/cmd_domaindel.go +++ b/cmd/mailfull/cmd_domaindel.go @@ -69,15 +69,7 @@ func (c *CmdDomainDel) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_domaindisable.go b/cmd/mailfull/cmd_domaindisable.go index 3a884b5..ff44139 100644 --- a/cmd/mailfull/cmd_domaindisable.go +++ b/cmd/mailfull/cmd_domaindisable.go @@ -81,15 +81,7 @@ func (c *CmdDomainDisable) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_domainenable.go b/cmd/mailfull/cmd_domainenable.go index d185906..42f1542 100644 --- a/cmd/mailfull/cmd_domainenable.go +++ b/cmd/mailfull/cmd_domainenable.go @@ -81,15 +81,7 @@ func (c *CmdDomainEnable) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_useradd.go b/cmd/mailfull/cmd_useradd.go index b6695ab..5259db4 100644 --- a/cmd/mailfull/cmd_useradd.go +++ b/cmd/mailfull/cmd_useradd.go @@ -84,15 +84,7 @@ func (c *CmdUserAdd) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_userdel.go b/cmd/mailfull/cmd_userdel.go index cb35a9d..448f7fd 100644 --- a/cmd/mailfull/cmd_userdel.go +++ b/cmd/mailfull/cmd_userdel.go @@ -83,15 +83,7 @@ func (c *CmdUserDel) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/cmd_userpasswd.go b/cmd/mailfull/cmd_userpasswd.go index 1ea371e..07ea488 100644 --- a/cmd/mailfull/cmd_userpasswd.go +++ b/cmd/mailfull/cmd_userpasswd.go @@ -127,15 +127,7 @@ func (c *CmdUserPasswd) Run(args []string) int { if noCommit { return 0 } - - mailData, err := repo.MailData() - if err != nil { - c.Meta.Errorf("%v\n", err) - return 1 - } - - err = repo.GenerateDatabases(mailData) - if err != nil { + if err = repo.GenerateDatabases(); err != nil { c.Meta.Errorf("%v\n", err) return 1 } diff --git a/database.go b/database.go index 4383e82..3dd0d30 100644 --- a/database.go +++ b/database.go @@ -9,33 +9,84 @@ import ( "strings" ) -// GenerateDatabases generates databases from the MailData directory. -func (r *Repository) GenerateDatabases(md *MailData) error { - sort.Slice(md.Domains, func(i, j int) bool { return md.Domains[i].Name() < md.Domains[j].Name() }) - sort.Slice(md.AliasDomains, func(i, j int) bool { return md.AliasDomains[i].Name() < md.AliasDomains[j].Name() }) +// repoData represents a repoData. +type repoData struct { + Domains []*Domain + 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.AliasUsers, func(i, j int) bool { return domain.AliasUsers[i].Name() < domain.AliasUsers[j].Name() }) } // Generate files - if err := r.generateDbDomains(md); err != nil { + if err := r.generateDbDomains(rd); err != nil { return err } - if err := r.generateDbDestinations(md); err != nil { + if err := r.generateDbDestinations(rd); err != nil { return err } - if err := r.generateDbMaildirs(md); err != nil { + if err := r.generateDbMaildirs(rd); err != nil { return err } - if err := r.generateDbLocaltable(md); err != nil { + if err := r.generateDbLocaltable(rd); err != nil { return err } - if err := r.generateDbForwards(md); err != nil { + if err := r.generateDbForwards(rd); err != nil { return err } - if err := r.generateDbPasswords(md); err != nil { + if err := r.generateDbPasswords(rd); err != nil { return err } @@ -59,7 +110,7 @@ func (r *Repository) GenerateDatabases(md *MailData) error { 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)) if err != nil { return err @@ -69,7 +120,7 @@ func (r *Repository) generateDbDomains(md *MailData) error { } defer dbDomains.Close() - for _, domain := range md.Domains { + for _, domain := range rd.Domains { if domain.Disabled() { 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 { return err } @@ -88,7 +139,7 @@ func (r *Repository) generateDbDomains(md *MailData) error { 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)) if err != nil { return err @@ -98,7 +149,7 @@ func (r *Repository) generateDbDestinations(md *MailData) error { } defer dbDestinations.Close() - for _, domain := range md.Domains { + for _, domain := range rd.Domains { if domain.Disabled() { 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 _, err := fmt.Fprintf(dbDestinations, "%s@%s %s@%s\n", userName, aliasDomain.Name(), user.Name(), domain.Name()); err != nil { return err @@ -137,7 +188,7 @@ func (r *Repository) generateDbDestinations(md *MailData) error { return err } - for _, aliasDomain := range md.AliasDomains { + for _, aliasDomain := range rd.AliasDomains { 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 { return err @@ -150,7 +201,7 @@ func (r *Repository) generateDbDestinations(md *MailData) error { 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)) if err != nil { return err @@ -160,7 +211,7 @@ func (r *Repository) generateDbMaildirs(md *MailData) error { } defer dbMaildirs.Close() - for _, domain := range md.Domains { + for _, domain := range rd.Domains { if domain.Disabled() { continue } @@ -175,7 +226,7 @@ func (r *Repository) generateDbMaildirs(md *MailData) error { 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)) if err != nil { return err @@ -185,7 +236,7 @@ func (r *Repository) generateDbLocaltable(md *MailData) error { } defer dbLocaltable.Close() - for _, domain := range md.Domains { + for _, domain := range rd.Domains { if domain.Disabled() { continue } @@ -203,7 +254,7 @@ func (r *Repository) generateDbLocaltable(md *MailData) error { 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)) if err != nil { return err @@ -213,7 +264,7 @@ func (r *Repository) generateDbForwards(md *MailData) error { } defer dbForwards.Close() - for _, domain := range md.Domains { + for _, domain := range rd.Domains { if domain.Disabled() { continue } @@ -243,7 +294,7 @@ func (r *Repository) generateDbForwards(md *MailData) error { 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)) if err != nil { return err @@ -253,7 +304,7 @@ func (r *Repository) generateDbPasswords(md *MailData) error { } defer dbPasswords.Close() - for _, domain := range md.Domains { + for _, domain := range rd.Domains { if domain.Disabled() { continue } diff --git a/maildata.go b/maildata.go deleted file mode 100644 index 7e32b38..0000000 --- a/maildata.go +++ /dev/null @@ -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 -}