diff --git a/cmd/mailfull/command/catchall.go b/cmd/mailfull/command/catchall.go new file mode 100644 index 0000000..3c1db48 --- /dev/null +++ b/cmd/mailfull/command/catchall.go @@ -0,0 +1,64 @@ +package command + +import ( + "fmt" + + "github.com/directorz/mailfull-go" +) + +// CatchAllCommand represents a CatchAllCommand. +type CatchAllCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *CatchAllCommand) Synopsis() string { + return "Show a catchall user." +} + +// Help returns long-form help text. +func (c *CatchAllCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s domain + +Description: + %s + +Required Args: + domain + The domain name. +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *CatchAllCommand) 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 + } + + catchAllUser, err := repo.CatchAllUser(domainName) + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + if catchAllUser != nil { + fmt.Fprintf(c.UI.Writer, "%s\n", catchAllUser.Name()) + } + + return 0 +} diff --git a/cmd/mailfull/command/catchallset.go b/cmd/mailfull/command/catchallset.go new file mode 100644 index 0000000..c7fa893 --- /dev/null +++ b/cmd/mailfull/command/catchallset.go @@ -0,0 +1,80 @@ +package command + +import ( + "fmt" + + "github.com/directorz/mailfull-go" +) + +// CatchAllSetCommand represents a CatchAllSetCommand. +type CatchAllSetCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *CatchAllSetCommand) Synopsis() string { + return "Set a catchall user." +} + +// Help returns long-form help text. +func (c *CatchAllSetCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s domain user + +Description: + %s + +Required Args: + domain + The domain name. + user + The user name that you want to set as catchall user. +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *CatchAllSetCommand) Run(args []string) int { + if len(args) != 2 { + fmt.Fprintf(c.UI.ErrorWriter, "%v\n", c.Help()) + return 1 + } + + domainName := args[0] + userName := args[1] + + repo, err := mailfull.OpenRepository(".") + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + catchAllUser, err := mailfull.NewCatchAllUser(userName) + if err != nil { + fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err) + return 1 + } + + if err := repo.CatchAllUserSet(domainName, catchAllUser); 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/catchallunset.go b/cmd/mailfull/command/catchallunset.go new file mode 100644 index 0000000..bf4164a --- /dev/null +++ b/cmd/mailfull/command/catchallunset.go @@ -0,0 +1,71 @@ +package command + +import ( + "fmt" + + "github.com/directorz/mailfull-go" +) + +// CatchAllUnsetCommand represents a CatchAllUnsetCommand. +type CatchAllUnsetCommand struct { + Meta +} + +// Synopsis returns a one-line synopsis. +func (c *CatchAllUnsetCommand) Synopsis() string { + return "Unset a catchall user." +} + +// Help returns long-form help text. +func (c *CatchAllUnsetCommand) Help() string { + txt := fmt.Sprintf(` +Usage: + %s %s domain + +Description: + %s + +Required Args: + domain + The domain name. +`, + c.CmdName, c.SubCmdName, + c.Synopsis()) + + return txt[1:] +} + +// Run runs the command and returns the exit status. +func (c *CatchAllUnsetCommand) 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 + } + + if err := repo.CatchAllUserUnset(domainName); 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 5d2cad0..b05b11d 100644 --- a/cmd/mailfull/main.go +++ b/cmd/mailfull/main.go @@ -87,6 +87,18 @@ func main() { meta.SubCmdName = c.Subcommand() return &command.UserCheckPwCommand{Meta: meta}, nil }, + "catchall": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.CatchAllCommand{Meta: meta}, nil + }, + "catchallset": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.CatchAllSetCommand{Meta: meta}, nil + }, + "catchallunset": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &command.CatchAllUnsetCommand{Meta: meta}, nil + }, "commit": func() (cli.Command, error) { meta.SubCmdName = c.Subcommand() return &command.CommitCommand{Meta: meta}, nil