diff --git a/cmd/mailfull/command/aliasdomainadd.go b/cmd/mailfull/cmd_aliasdomainadd.go similarity index 67% rename from cmd/mailfull/command/aliasdomainadd.go rename to cmd/mailfull/cmd_aliasdomainadd.go index 2eb90d5..1e68ad8 100644 --- a/cmd/mailfull/command/aliasdomainadd.go +++ b/cmd/mailfull/cmd_aliasdomainadd.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" - mailfull "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// AliasDomainAddCommand represents a AliasDomainAddCommand. -type AliasDomainAddCommand struct { - Meta +// CmdAliasDomainAdd represents a CmdAliasDomainAdd. +type CmdAliasDomainAdd struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *AliasDomainAddCommand) Synopsis() string { +func (c *CmdAliasDomainAdd) Synopsis() string { return "Create a new aliasdomain." } // Help returns long-form help text. -func (c *AliasDomainAddCommand) Help() string { +func (c *CmdAliasDomainAdd) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain target @@ -42,7 +43,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *AliasDomainAddCommand) Run(args []string) int { +func (c *CmdAliasDomainAdd) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -59,18 +60,18 @@ func (c *AliasDomainAddCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } aliasDomain, err := mailfull.NewAliasDomain(aliasDomainName, targetDomainName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.AliasDomainCreate(aliasDomain); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -80,13 +81,13 @@ func (c *AliasDomainAddCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/aliasdomaindel.go b/cmd/mailfull/cmd_aliasdomaindel.go similarity index 66% rename from cmd/mailfull/command/aliasdomaindel.go rename to cmd/mailfull/cmd_aliasdomaindel.go index 1310f93..aab3df5 100644 --- a/cmd/mailfull/command/aliasdomaindel.go +++ b/cmd/mailfull/cmd_aliasdomaindel.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" - mailfull "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// AliasDomainDelCommand represents a AliasDomainDelCommand. -type AliasDomainDelCommand struct { - Meta +// CmdAliasDomainDel represents a CmdAliasDomainDel. +type CmdAliasDomainDel struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *AliasDomainDelCommand) Synopsis() string { +func (c *CmdAliasDomainDel) Synopsis() string { return "Delete a aliasdomain." } // Help returns long-form help text. -func (c *AliasDomainDelCommand) Help() string { +func (c *CmdAliasDomainDel) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain @@ -40,7 +41,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *AliasDomainDelCommand) Run(args []string) int { +func (c *CmdAliasDomainDel) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -56,12 +57,12 @@ func (c *AliasDomainDelCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.AliasDomainRemove(aliasDomainName); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -71,13 +72,13 @@ func (c *AliasDomainDelCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/aliasdomains.go b/cmd/mailfull/cmd_aliasdomains.go similarity index 71% rename from cmd/mailfull/command/aliasdomains.go rename to cmd/mailfull/cmd_aliasdomains.go index 62cbac7..0a8bf2c 100644 --- a/cmd/mailfull/command/aliasdomains.go +++ b/cmd/mailfull/cmd_aliasdomains.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "sort" - mailfull "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// AliasDomainsCommand represents a AliasDomainsCommand. -type AliasDomainsCommand struct { - Meta +// CmdAliasDomains represents a CmdAliasDomains. +type CmdAliasDomains struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *AliasDomainsCommand) Synopsis() string { +func (c *CmdAliasDomains) Synopsis() string { return "Show aliasdomains." } // Help returns long-form help text. -func (c *AliasDomainsCommand) Help() string { +func (c *CmdAliasDomains) Help() string { txt := fmt.Sprintf(` Usage: %s %s [domain] @@ -37,7 +38,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *AliasDomainsCommand) Run(args []string) int { +func (c *CmdAliasDomains) Run(args []string) int { if len(args) > 1 { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) return 1 @@ -50,13 +51,13 @@ func (c *AliasDomainsCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } aliasDomains, err := repo.AliasDomains() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } sort.Sort(mailfull.AliasDomainSlice(aliasDomains)) diff --git a/cmd/mailfull/command/aliasuseradd.go b/cmd/mailfull/cmd_aliasuseradd.go similarity index 71% rename from cmd/mailfull/command/aliasuseradd.go rename to cmd/mailfull/cmd_aliasuseradd.go index 9d6ee93..8760eb6 100644 --- a/cmd/mailfull/command/aliasuseradd.go +++ b/cmd/mailfull/cmd_aliasuseradd.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "strings" - mailfull "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// AliasUserAddCommand represents a AliasUserAddCommand. -type AliasUserAddCommand struct { - Meta +// CmdAliasUserAdd represents a CmdAliasUserAdd. +type CmdAliasUserAdd struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *AliasUserAddCommand) Synopsis() string { +func (c *CmdAliasUserAdd) Synopsis() string { return "Create a new aliasuser." } // Help returns long-form help text. -func (c *AliasUserAddCommand) Help() string { +func (c *CmdAliasUserAdd) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] address target [target...] @@ -43,7 +44,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *AliasUserAddCommand) Run(args []string) int { +func (c *CmdAliasUserAdd) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -68,18 +69,18 @@ func (c *AliasUserAddCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } aliasUser, err := mailfull.NewAliasUser(aliasUserName, targets) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.AliasUserCreate(domainName, aliasUser); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -89,13 +90,13 @@ func (c *AliasUserAddCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/aliasuserdel.go b/cmd/mailfull/cmd_aliasuserdel.go similarity index 70% rename from cmd/mailfull/command/aliasuserdel.go rename to cmd/mailfull/cmd_aliasuserdel.go index 0eb5d12..6c86072 100644 --- a/cmd/mailfull/command/aliasuserdel.go +++ b/cmd/mailfull/cmd_aliasuserdel.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "strings" - mailfull "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// AliasUserDelCommand represents a AliasUserDelCommand. -type AliasUserDelCommand struct { - Meta +// CmdAliasUserDel represents a CmdAliasUserDel. +type CmdAliasUserDel struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *AliasUserDelCommand) Synopsis() string { +func (c *CmdAliasUserDel) Synopsis() string { return "Delete a aliasuser." } // Help returns long-form help text. -func (c *AliasUserDelCommand) Help() string { +func (c *CmdAliasUserDel) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] address @@ -41,7 +42,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *AliasUserDelCommand) Run(args []string) int { +func (c *CmdAliasUserDel) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -64,12 +65,12 @@ func (c *AliasUserDelCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.AliasUserRemove(domainName, aliasUserName); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -79,13 +80,13 @@ func (c *AliasUserDelCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/aliasusermod.go b/cmd/mailfull/cmd_aliasusermod.go similarity index 68% rename from cmd/mailfull/command/aliasusermod.go rename to cmd/mailfull/cmd_aliasusermod.go index 459cd67..213b683 100644 --- a/cmd/mailfull/command/aliasusermod.go +++ b/cmd/mailfull/cmd_aliasusermod.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "strings" - mailfull "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// AliasUserModCommand represents a AliasUserModCommand. -type AliasUserModCommand struct { - Meta +// CmdAliasUserMod represents a CmdAliasUserMod. +type CmdAliasUserMod struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *AliasUserModCommand) Synopsis() string { +func (c *CmdAliasUserMod) Synopsis() string { return "Modify a aliasuser." } // Help returns long-form help text. -func (c *AliasUserModCommand) Help() string { +func (c *CmdAliasUserMod) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] address target [target...] @@ -43,7 +44,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *AliasUserModCommand) Run(args []string) int { +func (c *CmdAliasUserMod) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -68,27 +69,27 @@ func (c *AliasUserModCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } aliasUser, err := repo.AliasUser(domainName, aliasUserName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if aliasUser == nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", mailfull.ErrAliasUserNotExist) + c.Meta.Errorf("%v\n", mailfull.ErrAliasUserNotExist) return 1 } if err := aliasUser.SetTargets(targets); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.AliasUserUpdate(domainName, aliasUser); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -98,13 +99,13 @@ func (c *AliasUserModCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/aliasusers.go b/cmd/mailfull/cmd_aliasusers.go similarity index 70% rename from cmd/mailfull/command/aliasusers.go rename to cmd/mailfull/cmd_aliasusers.go index 036b23a..4469f09 100644 --- a/cmd/mailfull/command/aliasusers.go +++ b/cmd/mailfull/cmd_aliasusers.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "sort" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// AliasUsersCommand represents a AliasUsersCommand. -type AliasUsersCommand struct { - Meta +// CmdAliasUsers represents a CmdAliasUsers. +type CmdAliasUsers struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *AliasUsersCommand) Synopsis() string { +func (c *CmdAliasUsers) Synopsis() string { return "Show aliasusers." } // Help returns long-form help text. -func (c *AliasUsersCommand) Help() string { +func (c *CmdAliasUsers) Help() string { txt := fmt.Sprintf(` Usage: %s %s domain @@ -37,7 +38,7 @@ Required Args: } // Run runs the command and returns the exit status. -func (c *AliasUsersCommand) Run(args []string) int { +func (c *CmdAliasUsers) Run(args []string) int { if len(args) != 1 { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) return 1 @@ -47,13 +48,13 @@ func (c *AliasUsersCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } aliasUsers, err := repo.AliasUsers(targetDomainName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } sort.Sort(mailfull.AliasUserSlice(aliasUsers)) diff --git a/cmd/mailfull/command/catchall.go b/cmd/mailfull/cmd_catchall.go similarity index 69% rename from cmd/mailfull/command/catchall.go rename to cmd/mailfull/cmd_catchall.go index 3c1db48..43615a3 100644 --- a/cmd/mailfull/command/catchall.go +++ b/cmd/mailfull/cmd_catchall.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// CatchAllCommand represents a CatchAllCommand. -type CatchAllCommand struct { - Meta +// CmdCatchAll represents a CmdCatchAll. +type CmdCatchAll struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *CatchAllCommand) Synopsis() string { +func (c *CmdCatchAll) Synopsis() string { return "Show a catchall user." } // Help returns long-form help text. -func (c *CatchAllCommand) Help() string { +func (c *CmdCatchAll) Help() string { txt := fmt.Sprintf(` Usage: %s %s domain @@ -36,7 +37,7 @@ Required Args: } // Run runs the command and returns the exit status. -func (c *CatchAllCommand) Run(args []string) int { +func (c *CmdCatchAll) Run(args []string) int { if len(args) != 1 { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) return 1 @@ -46,13 +47,13 @@ func (c *CatchAllCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } catchAllUser, err := repo.CatchAllUser(domainName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/catchallset.go b/cmd/mailfull/cmd_catchallset.go similarity index 70% rename from cmd/mailfull/command/catchallset.go rename to cmd/mailfull/cmd_catchallset.go index 24acd67..762a1b1 100644 --- a/cmd/mailfull/command/catchallset.go +++ b/cmd/mailfull/cmd_catchallset.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// CatchAllSetCommand represents a CatchAllSetCommand. -type CatchAllSetCommand struct { - Meta +// CmdCatchAllSet represents a CmdCatchAllSet. +type CmdCatchAllSet struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *CatchAllSetCommand) Synopsis() string { +func (c *CmdCatchAllSet) Synopsis() string { return "Set a catchall user." } // Help returns long-form help text. -func (c *CatchAllSetCommand) Help() string { +func (c *CmdCatchAllSet) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain user @@ -42,7 +43,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *CatchAllSetCommand) Run(args []string) int { +func (c *CmdCatchAllSet) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -59,18 +60,18 @@ func (c *CatchAllSetCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } catchAllUser, err := mailfull.NewCatchAllUser(userName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.CatchAllUserSet(domainName, catchAllUser); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -80,13 +81,13 @@ func (c *CatchAllSetCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/catchallunset.go b/cmd/mailfull/cmd_catchallunset.go similarity index 68% rename from cmd/mailfull/command/catchallunset.go rename to cmd/mailfull/cmd_catchallunset.go index a6f3fe9..8806a06 100644 --- a/cmd/mailfull/command/catchallunset.go +++ b/cmd/mailfull/cmd_catchallunset.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// CatchAllUnsetCommand represents a CatchAllUnsetCommand. -type CatchAllUnsetCommand struct { - Meta +// CmdCatchAllUnset represents a CmdCatchAllUnset. +type CmdCatchAllUnset struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *CatchAllUnsetCommand) Synopsis() string { +func (c *CmdCatchAllUnset) Synopsis() string { return "Unset a catchall user." } // Help returns long-form help text. -func (c *CatchAllUnsetCommand) Help() string { +func (c *CmdCatchAllUnset) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain @@ -40,7 +41,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *CatchAllUnsetCommand) Run(args []string) int { +func (c *CmdCatchAllUnset) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -56,12 +57,12 @@ func (c *CatchAllUnsetCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.CatchAllUserUnset(domainName); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -71,13 +72,13 @@ func (c *CatchAllUnsetCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/commit.go b/cmd/mailfull/cmd_commit.go similarity index 61% rename from cmd/mailfull/command/commit.go rename to cmd/mailfull/cmd_commit.go index 790b071..98276ef 100644 --- a/cmd/mailfull/command/commit.go +++ b/cmd/mailfull/cmd_commit.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// CommitCommand represents a CommitCommand. -type CommitCommand struct { - Meta +// CmdCommit represents a CmdCommit. +type CmdCommit struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *CommitCommand) Synopsis() string { +func (c *CmdCommit) Synopsis() string { return "Create databases from the structure of the MailData directory." } // Help returns long-form help text. -func (c *CommitCommand) Help() string { +func (c *CmdCommit) Help() string { txt := fmt.Sprintf(` Usage: %s %s @@ -32,22 +33,22 @@ Description: } // Run runs the command and returns the exit status. -func (c *CommitCommand) Run(args []string) int { +func (c *CmdCommit) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/domainadd.go b/cmd/mailfull/cmd_domainadd.go similarity index 68% rename from cmd/mailfull/command/domainadd.go rename to cmd/mailfull/cmd_domainadd.go index 1983d30..e7680d3 100644 --- a/cmd/mailfull/command/domainadd.go +++ b/cmd/mailfull/cmd_domainadd.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// DomainAddCommand represents a DomainAddCommand. -type DomainAddCommand struct { - Meta +// CmdDomainAdd represents a CmdDomainAdd. +type CmdDomainAdd struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *DomainAddCommand) Synopsis() string { +func (c *CmdDomainAdd) Synopsis() string { return "Create a new domain and postmaster." } // Help returns long-form help text. -func (c *DomainAddCommand) Help() string { +func (c *CmdDomainAdd) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain @@ -40,7 +41,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *DomainAddCommand) Run(args []string) int { +func (c *CmdDomainAdd) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -56,29 +57,29 @@ func (c *DomainAddCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } domain, err := mailfull.NewDomain(domainName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.DomainCreate(domain); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } user, err := mailfull.NewUser("postmaster", mailfull.NeverMatchHashedPassword, nil) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.UserCreate(domainName, user); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -88,13 +89,13 @@ func (c *DomainAddCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/domaindel.go b/cmd/mailfull/cmd_domaindel.go similarity index 70% rename from cmd/mailfull/command/domaindel.go rename to cmd/mailfull/cmd_domaindel.go index a8b9be9..f521a26 100644 --- a/cmd/mailfull/command/domaindel.go +++ b/cmd/mailfull/cmd_domaindel.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// DomainDelCommand represents a DomainDelCommand. -type DomainDelCommand struct { - Meta +// CmdDomainDel represents a CmdDomainDel. +type CmdDomainDel struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *DomainDelCommand) Synopsis() string { +func (c *CmdDomainDel) Synopsis() string { return "Delete and backup a domain." } // Help returns long-form help text. -func (c *DomainDelCommand) Help() string { +func (c *CmdDomainDel) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain @@ -40,7 +41,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *DomainDelCommand) Run(args []string) int { +func (c *CmdDomainDel) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -56,12 +57,12 @@ func (c *DomainDelCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.DomainRemove(domainName); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -71,13 +72,13 @@ func (c *DomainDelCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/domaindisable.go b/cmd/mailfull/cmd_domaindisable.go similarity index 66% rename from cmd/mailfull/command/domaindisable.go rename to cmd/mailfull/cmd_domaindisable.go index c254c77..3a884b5 100644 --- a/cmd/mailfull/command/domaindisable.go +++ b/cmd/mailfull/cmd_domaindisable.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// DomainDisableCommand represents a DomainDisableCommand. -type DomainDisableCommand struct { - Meta +// CmdDomainDisable represents a CmdDomainDisable. +type CmdDomainDisable struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *DomainDisableCommand) Synopsis() string { +func (c *CmdDomainDisable) Synopsis() string { return "Disable a domain temporarily." } // Help returns long-form help text. -func (c *DomainDisableCommand) Help() string { +func (c *CmdDomainDisable) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain @@ -40,7 +41,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *DomainDisableCommand) Run(args []string) int { +func (c *CmdDomainDisable) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -56,24 +57,24 @@ func (c *DomainDisableCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } domain, err := repo.Domain(domainName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if domain == nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", mailfull.ErrDomainNotExist) + c.Meta.Errorf("%v\n", mailfull.ErrDomainNotExist) return 1 } domain.SetDisabled(true) if err := repo.DomainUpdate(domain); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -83,13 +84,13 @@ func (c *DomainDisableCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/domainenable.go b/cmd/mailfull/cmd_domainenable.go similarity index 66% rename from cmd/mailfull/command/domainenable.go rename to cmd/mailfull/cmd_domainenable.go index 6fff76d..d185906 100644 --- a/cmd/mailfull/command/domainenable.go +++ b/cmd/mailfull/cmd_domainenable.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// DomainEnableCommand represents a DomainEnableCommand. -type DomainEnableCommand struct { - Meta +// CmdDomainEnable represents a CmdDomainEnable. +type CmdDomainEnable struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *DomainEnableCommand) Synopsis() string { +func (c *CmdDomainEnable) Synopsis() string { return "Enable a domain." } // Help returns long-form help text. -func (c *DomainEnableCommand) Help() string { +func (c *CmdDomainEnable) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] domain @@ -40,7 +41,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *DomainEnableCommand) Run(args []string) int { +func (c *CmdDomainEnable) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -56,24 +57,24 @@ func (c *DomainEnableCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } domain, err := repo.Domain(domainName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if domain == nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", mailfull.ErrDomainNotExist) + c.Meta.Errorf("%v\n", mailfull.ErrDomainNotExist) return 1 } domain.SetDisabled(false) if err := repo.DomainUpdate(domain); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -83,13 +84,13 @@ func (c *DomainEnableCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/domains.go b/cmd/mailfull/cmd_domains.go similarity index 69% rename from cmd/mailfull/command/domains.go rename to cmd/mailfull/cmd_domains.go index 83b65d5..bc215f2 100644 --- a/cmd/mailfull/command/domains.go +++ b/cmd/mailfull/cmd_domains.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "sort" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// DomainsCommand represents a DomainsCommand. -type DomainsCommand struct { - Meta +// CmdDomains represents a CmdDomains. +type CmdDomains struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *DomainsCommand) Synopsis() string { +func (c *CmdDomains) Synopsis() string { return "Show domains." } // Help returns long-form help text. -func (c *DomainsCommand) Help() string { +func (c *CmdDomains) Help() string { txt := fmt.Sprintf(` Usage: %s %s @@ -34,16 +35,16 @@ Description: } // Run runs the command and returns the exit status. -func (c *DomainsCommand) Run(args []string) int { +func (c *CmdDomains) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } domains, err := repo.Domains() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } sort.Sort(mailfull.DomainSlice(domains)) diff --git a/cmd/mailfull/command/genconfig.go b/cmd/mailfull/cmd_genconfig.go similarity index 71% rename from cmd/mailfull/command/genconfig.go rename to cmd/mailfull/cmd_genconfig.go index e2a4b27..5cf4dd8 100644 --- a/cmd/mailfull/command/genconfig.go +++ b/cmd/mailfull/cmd_genconfig.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// GenConfigCommand represents a GenConfigCommand. -type GenConfigCommand struct { - Meta +// CmdGenConfig represents a CmdGenConfig. +type CmdGenConfig struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *GenConfigCommand) Synopsis() string { +func (c *CmdGenConfig) Synopsis() string { return "Write a Postfix or Dovecot configuration to stdout." } // Help returns long-form help text. -func (c *GenConfigCommand) Help() string { +func (c *CmdGenConfig) Help() string { txt := fmt.Sprintf(` Usage: %s %s name @@ -37,7 +38,7 @@ Required Args: } // Run runs the command and returns the exit status. -func (c *GenConfigCommand) Run(args []string) int { +func (c *CmdGenConfig) Run(args []string) int { if len(args) != 1 { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) return 1 @@ -47,7 +48,7 @@ func (c *GenConfigCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -59,7 +60,7 @@ func (c *GenConfigCommand) Run(args []string) int { fmt.Fprintf(c.UI.Writer, "%s", repo.GenerateConfigDovecot()) default: - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] Specify \"postfix\" or \"dovecot\".\n") + c.Meta.Errorf("Specify \"postfix\" or \"dovecot\".\n") return 1 } diff --git a/cmd/mailfull/command/init.go b/cmd/mailfull/cmd_init.go similarity index 63% rename from cmd/mailfull/command/init.go rename to cmd/mailfull/cmd_init.go index b915c7c..922e30d 100644 --- a/cmd/mailfull/command/init.go +++ b/cmd/mailfull/cmd_init.go @@ -1,23 +1,24 @@ -package command +package main import ( "fmt" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// InitCommand represents a InitCommand. -type InitCommand struct { - Meta +// CmdInit represents a CmdInit. +type CmdInit struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *InitCommand) Synopsis() string { +func (c *CmdInit) Synopsis() string { return "Initializes current directory as a Mailfull repository." } // Help returns long-form help text. -func (c *InitCommand) Help() string { +func (c *CmdInit) Help() string { txt := fmt.Sprintf(` Usage: %s %s @@ -32,9 +33,9 @@ Description: } // Run runs the command and returns the exit status. -func (c *InitCommand) Run(args []string) int { +func (c *CmdInit) Run(args []string) int { if err := mailfull.InitRepository("."); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/useradd.go b/cmd/mailfull/cmd_useradd.go similarity index 73% rename from cmd/mailfull/command/useradd.go rename to cmd/mailfull/cmd_useradd.go index 943f493..b6695ab 100644 --- a/cmd/mailfull/command/useradd.go +++ b/cmd/mailfull/cmd_useradd.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "strings" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// UserAddCommand represents a UserAddCommand. -type UserAddCommand struct { - Meta +// CmdUserAdd represents a CmdUserAdd. +type CmdUserAdd struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *UserAddCommand) Synopsis() string { +func (c *CmdUserAdd) Synopsis() string { return "Create a new user." } // Help returns long-form help text. -func (c *UserAddCommand) Help() string { +func (c *CmdUserAdd) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] address @@ -41,7 +42,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *UserAddCommand) Run(args []string) int { +func (c *CmdUserAdd) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -65,18 +66,18 @@ func (c *UserAddCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } user, err := mailfull.NewUser(userName, mailfull.NeverMatchHashedPassword, nil) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if err := repo.UserCreate(domainName, user); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -86,13 +87,13 @@ func (c *UserAddCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/usercheckpw.go b/cmd/mailfull/cmd_usercheckpw.go similarity index 77% rename from cmd/mailfull/command/usercheckpw.go rename to cmd/mailfull/cmd_usercheckpw.go index 4ef780a..65542aa 100644 --- a/cmd/mailfull/command/usercheckpw.go +++ b/cmd/mailfull/cmd_usercheckpw.go @@ -1,25 +1,26 @@ -package command +package main import ( "fmt" "strings" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" "github.com/jsimonetti/pwscheme/ssha" ) -// UserCheckPwCommand represents a UserCheckPwCommand. -type UserCheckPwCommand struct { - Meta +// CmdUserCheckPw represents a CmdUserCheckPw. +type CmdUserCheckPw struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *UserCheckPwCommand) Synopsis() string { +func (c *CmdUserCheckPw) Synopsis() string { return "Check user's password." } // Help returns long-form help text. -func (c *UserCheckPwCommand) Help() string { +func (c *CmdUserCheckPw) Help() string { txt := fmt.Sprintf(` Usage: %s %s address [password] @@ -43,7 +44,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *UserCheckPwCommand) Run(args []string) int { +func (c *CmdUserCheckPw) Run(args []string) int { if len(args) != 1 && len(args) != 2 { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) return 1 @@ -66,24 +67,24 @@ func (c *UserCheckPwCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } user, err := repo.User(domainName, userName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if user == nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", mailfull.ErrUserNotExist) + c.Meta.Errorf("%v\n", mailfull.ErrUserNotExist) return 1 } if len(args) != 2 { input, err := c.UI.AskSecret(fmt.Sprintf("Enter password for %s:", address)) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/userdel.go b/cmd/mailfull/cmd_userdel.go similarity index 71% rename from cmd/mailfull/command/userdel.go rename to cmd/mailfull/cmd_userdel.go index 858b8ff..cb35a9d 100644 --- a/cmd/mailfull/command/userdel.go +++ b/cmd/mailfull/cmd_userdel.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "strings" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// UserDelCommand represents a UserDelCommand. -type UserDelCommand struct { - Meta +// CmdUserDel represents a CmdUserDel. +type CmdUserDel struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *UserDelCommand) Synopsis() string { +func (c *CmdUserDel) Synopsis() string { return "Delete and backup a user." } // Help returns long-form help text. -func (c *UserDelCommand) Help() string { +func (c *CmdUserDel) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] address @@ -41,7 +42,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *UserDelCommand) Run(args []string) int { +func (c *CmdUserDel) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -65,17 +66,17 @@ func (c *UserDelCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if userName == "postmaster" { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] Cannot delete postmaster.\n") + c.Meta.Errorf("Cannot delete postmaster.\n") return 1 } if err := repo.UserRemove(domainName, userName); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -85,13 +86,13 @@ func (c *UserDelCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/userpasswd.go b/cmd/mailfull/cmd_userpasswd.go similarity index 73% rename from cmd/mailfull/command/userpasswd.go rename to cmd/mailfull/cmd_userpasswd.go index bbd724c..1ea371e 100644 --- a/cmd/mailfull/command/userpasswd.go +++ b/cmd/mailfull/cmd_userpasswd.go @@ -1,25 +1,26 @@ -package command +package main import ( "fmt" "strings" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" "github.com/jsimonetti/pwscheme/ssha" ) -// UserPasswdCommand represents a UserPasswdCommand. -type UserPasswdCommand struct { - Meta +// CmdUserPasswd represents a CmdUserPasswd. +type CmdUserPasswd struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *UserPasswdCommand) Synopsis() string { +func (c *CmdUserPasswd) Synopsis() string { return "Update user's password." } // Help returns long-form help text. -func (c *UserPasswdCommand) Help() string { +func (c *CmdUserPasswd) Help() string { txt := fmt.Sprintf(` Usage: %s %s [-n] address [password] @@ -45,7 +46,7 @@ Optional Args: } // Run runs the command and returns the exit status. -func (c *UserPasswdCommand) Run(args []string) int { +func (c *CmdUserPasswd) Run(args []string) int { noCommit, err := noCommitFlag(&args) if err != nil { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) @@ -74,33 +75,33 @@ func (c *UserPasswdCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } user, err := repo.User(domainName, userName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if user == nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", mailfull.ErrUserNotExist) + c.Meta.Errorf("%v\n", mailfull.ErrUserNotExist) return 1 } if len(args) != 2 { input1, err := c.UI.AskSecret(fmt.Sprintf("Enter new password for %s:", address)) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } input2, err := c.UI.AskSecret("Retype new password:") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } if input1 != input2 { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] inputs do not match.\n") + c.Meta.Errorf("inputs do not match.\n") return 1 } rawPassword = input1 @@ -110,7 +111,7 @@ func (c *UserPasswdCommand) Run(args []string) int { if rawPassword != "" { str, err := ssha.Generate(rawPassword, 4) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } hashedPassword = str @@ -119,7 +120,7 @@ func (c *UserPasswdCommand) Run(args []string) int { user.SetHashedPassword(hashedPassword) if err := repo.UserUpdate(domainName, user); err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } @@ -129,13 +130,13 @@ func (c *UserPasswdCommand) Run(args []string) int { mailData, err := repo.MailData() if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } err = repo.GenerateDatabases(mailData) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } diff --git a/cmd/mailfull/command/users.go b/cmd/mailfull/cmd_users.go similarity index 71% rename from cmd/mailfull/command/users.go rename to cmd/mailfull/cmd_users.go index 2f5038d..2dc0cda 100644 --- a/cmd/mailfull/command/users.go +++ b/cmd/mailfull/cmd_users.go @@ -1,24 +1,25 @@ -package command +package main import ( "fmt" "sort" "github.com/directorz/mailfull-go" + "github.com/directorz/mailfull-go/cmd" ) -// UsersCommand represents a UsersCommand. -type UsersCommand struct { - Meta +// CmdUsers represents a CmdUsers. +type CmdUsers struct { + cmd.Meta } // Synopsis returns a one-line synopsis. -func (c *UsersCommand) Synopsis() string { +func (c *CmdUsers) Synopsis() string { return "Show users." } // Help returns long-form help text. -func (c *UsersCommand) Help() string { +func (c *CmdUsers) Help() string { txt := fmt.Sprintf(` Usage: %s %s domain @@ -37,7 +38,7 @@ Required Args: } // Run runs the command and returns the exit status. -func (c *UsersCommand) Run(args []string) int { +func (c *CmdUsers) Run(args []string) int { if len(args) != 1 { fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) return 1 @@ -47,13 +48,13 @@ func (c *UsersCommand) Run(args []string) int { repo, err := mailfull.OpenRepository(".") if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } users, err := repo.Users(targetDomainName) if err != nil { - fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + c.Meta.Errorf("%v\n", err) return 1 } sort.Sort(mailfull.UserSlice(users)) diff --git a/cmd/mailfull/command/main.go b/cmd/mailfull/command/main.go deleted file mode 100644 index 66be466..0000000 --- a/cmd/mailfull/command/main.go +++ /dev/null @@ -1,30 +0,0 @@ -package command - -import ( - "bytes" - "flag" - - "github.com/mitchellh/cli" -) - -// Meta is for `*Command` struct. -type Meta struct { - UI *cli.BasicUi - CmdName string - SubCmdName string - Version string -} - -// noCommitFlag returns true if `pargs` has "-n" flag. -// `pargs` is overwrites with non-flag arguments. -func noCommitFlag(pargs *[]string) (bool, error) { - nFlag := false - - flagSet := flag.NewFlagSet("", flag.ContinueOnError) - flagSet.SetOutput(&bytes.Buffer{}) - flagSet.BoolVar(&nFlag, "n", nFlag, "") - err := flagSet.Parse(*pargs) - *pargs = flagSet.Args() - - return nFlag, err -} diff --git a/cmd/mailfull/mailfull.go b/cmd/mailfull/main.go similarity index 65% rename from cmd/mailfull/mailfull.go rename to cmd/mailfull/main.go index 905a77a..ca74d78 100644 --- a/cmd/mailfull/mailfull.go +++ b/cmd/mailfull/main.go @@ -4,12 +4,14 @@ Command mailfull is a CLI application using the mailfull package. package main import ( + "bytes" + "flag" "fmt" "os" "path/filepath" "github.com/directorz/mailfull-go" - "github.com/directorz/mailfull-go/cmd/mailfull/command" + "github.com/directorz/mailfull-go/cmd" "github.com/mitchellh/cli" ) @@ -31,7 +33,7 @@ func main() { Args: os.Args[1:], } - meta := command.Meta{ + meta := cmd.Meta{ UI: &cli.BasicUi{ Reader: os.Stdin, Writer: os.Stdout, @@ -44,95 +46,95 @@ func main() { c.Commands = map[string]cli.CommandFactory{ "init": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.InitCommand{Meta: meta}, nil + return &CmdInit{Meta: meta}, nil }, "genconfig": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.GenConfigCommand{Meta: meta}, nil + return &CmdGenConfig{Meta: meta}, nil }, "domains": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.DomainsCommand{Meta: meta}, nil + return &CmdDomains{Meta: meta}, nil }, "domainadd": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.DomainAddCommand{Meta: meta}, nil + return &CmdDomainAdd{Meta: meta}, nil }, "domaindel": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.DomainDelCommand{Meta: meta}, nil + return &CmdDomainDel{Meta: meta}, nil }, "domaindisable": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.DomainDisableCommand{Meta: meta}, nil + return &CmdDomainDisable{Meta: meta}, nil }, "domainenable": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.DomainEnableCommand{Meta: meta}, nil + return &CmdDomainEnable{Meta: meta}, nil }, "aliasdomains": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.AliasDomainsCommand{Meta: meta}, nil + return &CmdAliasDomains{Meta: meta}, nil }, "aliasdomainadd": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.AliasDomainAddCommand{Meta: meta}, nil + return &CmdAliasDomainAdd{Meta: meta}, nil }, "aliasdomaindel": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.AliasDomainDelCommand{Meta: meta}, nil + return &CmdAliasDomainDel{Meta: meta}, nil }, "users": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.UsersCommand{Meta: meta}, nil + return &CmdUsers{Meta: meta}, nil }, "useradd": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.UserAddCommand{Meta: meta}, nil + return &CmdUserAdd{Meta: meta}, nil }, "userdel": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.UserDelCommand{Meta: meta}, nil + return &CmdUserDel{Meta: meta}, nil }, "userpasswd": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.UserPasswdCommand{Meta: meta}, nil + return &CmdUserPasswd{Meta: meta}, nil }, "usercheckpw": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.UserCheckPwCommand{Meta: meta}, nil + return &CmdUserCheckPw{Meta: meta}, nil }, "aliasusers": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.AliasUsersCommand{Meta: meta}, nil + return &CmdAliasUsers{Meta: meta}, nil }, "aliasuseradd": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.AliasUserAddCommand{Meta: meta}, nil + return &CmdAliasUserAdd{Meta: meta}, nil }, "aliasusermod": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.AliasUserModCommand{Meta: meta}, nil + return &CmdAliasUserMod{Meta: meta}, nil }, "aliasuserdel": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.AliasUserDelCommand{Meta: meta}, nil + return &CmdAliasUserDel{Meta: meta}, nil }, "catchall": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.CatchAllCommand{Meta: meta}, nil + return &CmdCatchAll{Meta: meta}, nil }, "catchallset": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.CatchAllSetCommand{Meta: meta}, nil + return &CmdCatchAllSet{Meta: meta}, nil }, "catchallunset": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.CatchAllUnsetCommand{Meta: meta}, nil + return &CmdCatchAllUnset{Meta: meta}, nil }, "commit": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() - return &command.CommitCommand{Meta: meta}, nil + return &CmdCommit{Meta: meta}, nil }, } @@ -143,3 +145,17 @@ func main() { os.Exit(exitCode) } + +// noCommitFlag returns true if `pargs` has "-n" flag. +// `pargs` is overwrites with non-flag arguments. +func noCommitFlag(pargs *[]string) (bool, error) { + nFlag := false + + flagSet := flag.NewFlagSet("", flag.ContinueOnError) + flagSet.SetOutput(&bytes.Buffer{}) + flagSet.BoolVar(&nFlag, "n", nFlag, "") + err := flagSet.Parse(*pargs) + *pargs = flagSet.Args() + + return nFlag, err +} diff --git a/cmd/meta.go b/cmd/meta.go new file mode 100644 index 0000000..02e5334 --- /dev/null +++ b/cmd/meta.go @@ -0,0 +1,20 @@ +package cmd + +import ( + "fmt" + + "github.com/mitchellh/cli" +) + +// Meta contains options to execute a command. +type Meta struct { + UI *cli.BasicUi + CmdName string + SubCmdName string + Version string +} + +// Errorf prints the error to ErrorWriter with the prefix string. +func (m Meta) Errorf(format string, v ...interface{}) { + fmt.Fprintf(m.UI.ErrorWriter, "[ERR] "+format, v...) +}