diff --git a/cmd/mailfull/command/aliasdomainadd.go b/cmd/mailfull/command/aliasdomainadd.go new file mode 100644 index 0000000..41d1222 --- /dev/null +++ b/cmd/mailfull/command/aliasdomainadd.go @@ -0,0 +1,80 @@ +package command + +import ( + "fmt" + + mailfull "github.com/directorz/mailfull-go" +) + +// AliasDomainAddCommand represents a AliasDomainAddCommand. +type AliasDomainAddCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *AliasDomainAddCommand) Synopsis() string { + return "Create a new aliasdomain." +} + +// Help returns long-form help text. +func (c *AliasDomainAddCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s domain target + +Description: + %s + +Required Args: + domain + The domain name that you want to create. + target + The target domain name. +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *AliasDomainAddCommand) Run(args []string) int { + if len(args) != 2 { + fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) + return 1 + } + + aliasDomainName := args[0] + targetDomainName := args[1] + + repo, err := mailfull.OpenRepository(".") + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + aliasDomain, err := mailfull.NewAliasDomain(aliasDomainName, targetDomainName) + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + if err := repo.AliasDomainCreate(aliasDomain); err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + mailData, err := repo.MailData() + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + err = repo.GenerateDatabases(mailData) + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + return 0 +} diff --git a/cmd/mailfull/command/aliasdomaindel.go b/cmd/mailfull/command/aliasdomaindel.go new file mode 100644 index 0000000..a16411c --- /dev/null +++ b/cmd/mailfull/command/aliasdomaindel.go @@ -0,0 +1,71 @@ +package command + +import ( + "fmt" + + mailfull "github.com/directorz/mailfull-go" +) + +// AliasDomainDelCommand represents a AliasDomainDelCommand. +type AliasDomainDelCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *AliasDomainDelCommand) Synopsis() string { + return "Delete a aliasdomain." +} + +// Help returns long-form help text. +func (c *AliasDomainDelCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s domain + +Description: + %s + +Required Args: + domain + The domain name that you want to delete. +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *AliasDomainDelCommand) Run(args []string) int { + if len(args) != 1 { + fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) + return 1 + } + + aliasDomainName := args[0] + + repo, err := mailfull.OpenRepository(".") + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + if err := repo.AliasDomainRemove(aliasDomainName); err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + mailData, err := repo.MailData() + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + err = repo.GenerateDatabases(mailData) + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + return 0 +} diff --git a/cmd/mailfull/command/aliasdomains.go b/cmd/mailfull/command/aliasdomains.go new file mode 100644 index 0000000..62cbac7 --- /dev/null +++ b/cmd/mailfull/command/aliasdomains.go @@ -0,0 +1,75 @@ +package command + +import ( + "fmt" + "sort" + + mailfull "github.com/directorz/mailfull-go" +) + +// AliasDomainsCommand represents a AliasDomainsCommand. +type AliasDomainsCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *AliasDomainsCommand) Synopsis() string { + return "Show aliasdomains." +} + +// Help returns long-form help text. +func (c *AliasDomainsCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s [domain] + +Description: + %s + +Optional Args: + domain + Show aliasdomains that the target is "domain". +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *AliasDomainsCommand) Run(args []string) int { + if len(args) > 1 { + fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) + return 1 + } + + targetDomainName := "" + if len(args) == 1 { + targetDomainName = args[0] + } + + repo, err := mailfull.OpenRepository(".") + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + aliasDomains, err := repo.AliasDomains() + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + sort.Sort(mailfull.AliasDomainSlice(aliasDomains)) + + for _, aliasDomain := range aliasDomains { + if targetDomainName != "" { + if aliasDomain.Target() == targetDomainName { + fmt.Fprintf(c.UI.Writer, "%s\n", aliasDomain.Name()) + } + } else { + fmt.Fprintf(c.UI.Writer, "%s\n", aliasDomain.Name()) + } + } + + return 0 +} diff --git a/cmd/mailfull/main.go b/cmd/mailfull/main.go index ce03c5c..f67cef6 100644 --- a/cmd/mailfull/main.go +++ b/cmd/mailfull/main.go @@ -55,6 +55,18 @@ func main() { meta.SubCmdName = c.Subcommand() return &command.DomainDelCommand{Meta: meta}, nil }, + "aliasdomains": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.AliasDomainsCommand{Meta: meta}, nil + }, + "aliasdomainadd": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.AliasDomainAddCommand{Meta: meta}, nil + }, + "aliasdomaindel": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.AliasDomainDelCommand{Meta: meta}, nil + }, "commit": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() return &command.CommitCommand{Meta: meta}, nil