diff --git a/cmd/mailfull/command/domaindisable.go b/cmd/mailfull/command/domaindisable.go new file mode 100644 index 0000000..98e69f6 --- /dev/null +++ b/cmd/mailfull/command/domaindisable.go @@ -0,0 +1,83 @@ +package command + +import ( + "fmt" + + "github.com/directorz/mailfull-go" +) + +// DomainDisableCommand represents a DomainDisableCommand. +type DomainDisableCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *DomainDisableCommand) Synopsis() string { + return "Disable a domain temporarily." +} + +// Help returns long-form help text. +func (c *DomainDisableCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s domain + +Description: + %s + +Required Args: + domain + The domain name that you want to disable. +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *DomainDisableCommand) Run(args []string) int { + if len(args) != 1 { + fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) + return 1 + } + + domainName := args[0] + + repo, err := mailfull.OpenRepository(".") + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + domain, err := repo.Domain(domainName) + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + if domain == nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %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) + 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/domainenable.go b/cmd/mailfull/command/domainenable.go new file mode 100644 index 0000000..25e782d --- /dev/null +++ b/cmd/mailfull/command/domainenable.go @@ -0,0 +1,83 @@ +package command + +import ( + "fmt" + + "github.com/directorz/mailfull-go" +) + +// DomainEnableCommand represents a DomainEnableCommand. +type DomainEnableCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *DomainEnableCommand) Synopsis() string { + return "Enable a domain." +} + +// Help returns long-form help text. +func (c *DomainEnableCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s domain + +Description: + %s + +Required Args: + domain + The domain name that you want to enable. +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *DomainEnableCommand) Run(args []string) int { + if len(args) != 1 { + fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) + return 1 + } + + domainName := args[0] + + repo, err := mailfull.OpenRepository(".") + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + domain, err := repo.Domain(domainName) + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + if domain == nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %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) + 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/main.go b/cmd/mailfull/main.go index 83154d7..905a77a 100644 --- a/cmd/mailfull/main.go +++ b/cmd/mailfull/main.go @@ -62,6 +62,14 @@ func main() { meta.SubCmdName = c.Subcommand() return &command.DomainDelCommand{Meta: meta}, nil }, + "domaindisable": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.DomainDisableCommand{Meta: meta}, nil + }, + "domainenable": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.DomainEnableCommand{Meta: meta}, nil + }, "aliasdomains": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() return &command.AliasDomainsCommand{Meta: meta}, nil