Add domain-blocks command
authorMikael Berthe <mikael@lilotux.net>
Sat, 27 May 2017 19:13:24 +0200
changeset 151 466aabf6c90a
parent 150 7f46bcaf240c
child 152 4397b8c740e5
Add domain-blocks command
cmd/domainblocks.go
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cmd/domainblocks.go	Sat May 27 19:13:24 2017 +0200
@@ -0,0 +1,123 @@
+// Copyright © 2017 Mikael Berthe <mikael@lilotux.net>
+//
+// Licensed under the MIT license.
+// Please see the LICENSE file is this directory.
+
+package cmd
+
+import (
+	"os"
+
+	"github.com/pkg/errors"
+	"github.com/spf13/cobra"
+
+	"github.com/McKael/madon"
+)
+
+var domainBlocksOpts struct {
+	show, block, unblock bool
+
+	limit          uint  // Limit the results
+	sinceID, maxID int64 // Query boundaries
+	all            bool  // Try to fetch all results
+}
+
+// timelinesCmd represents the timelines command
+var domainBlocksCmd = &cobra.Command{
+	Use:     "domain-blocks --show|--block|--unblock [DOMAINNAME]",
+	Aliases: []string{"domain-block"},
+	Short:   "Display, add or remove user-blocked domains",
+	RunE:    domainBlocksRunE,
+	Example: `  madonctl domain-blocks --show
+  madonctl domain-blocks --block   example.com
+  madonctl domain-blocks --unblock example.com`,
+}
+
+func init() {
+	RootCmd.AddCommand(domainBlocksCmd)
+
+	domainBlocksCmd.Flags().BoolVar(&domainBlocksOpts.show, "show", false, "List current user-blocked domains")
+	domainBlocksCmd.Flags().BoolVar(&domainBlocksOpts.block, "block", false, "Block domain")
+	domainBlocksCmd.Flags().BoolVar(&domainBlocksOpts.unblock, "unblock", false, "Unblock domain")
+
+	domainBlocksCmd.Flags().UintVarP(&domainBlocksOpts.limit, "limit", "l", 0, "Limit number of results")
+	domainBlocksCmd.Flags().Int64Var(&domainBlocksOpts.sinceID, "since-id", 0, "Request IDs greater than a value")
+	domainBlocksCmd.Flags().Int64Var(&domainBlocksOpts.maxID, "max-id", 0, "Request IDs less (or equal) than a value")
+	domainBlocksCmd.Flags().BoolVar(&domainBlocksOpts.all, "all", false, "Fetch all results")
+}
+
+func domainBlocksRunE(cmd *cobra.Command, args []string) error {
+	opt := domainBlocksOpts
+	var domName madon.DomainName
+
+	// Check flags
+	if opt.block && opt.unblock {
+		return errors.New("cannot use both --block and --unblock")
+	}
+
+	if opt.block || opt.unblock {
+		if opt.show {
+			return errors.New("cannot use both --[un]block and --show")
+		}
+		if len(args) != 1 {
+			return errors.New("missing domain name")
+		}
+		domName = madon.DomainName(args[0])
+	}
+
+	if !opt.show && !opt.block && !opt.unblock {
+		return errors.New("missing flag: please provide --show, --block or --unblock")
+	}
+
+	// Set up LimitParams
+	var limOpts *madon.LimitParams
+	if opt.all || opt.limit > 0 || opt.sinceID > 0 || opt.maxID > 0 {
+		limOpts = new(madon.LimitParams)
+		limOpts.All = opt.all
+	}
+	if opt.limit > 0 {
+		limOpts.Limit = int(opt.limit)
+	}
+	if opt.maxID > 0 {
+		limOpts.MaxID = opt.maxID
+	}
+	if opt.sinceID > 0 {
+		limOpts.SinceID = opt.sinceID
+	}
+
+	// Log in
+	if err := madonInit(true); err != nil {
+		return err
+	}
+
+	var obj interface{}
+	var err error
+
+	switch {
+	case opt.show:
+		var domainList []madon.DomainName
+		domainList, err = gClient.GetDomainBlocks(limOpts)
+		obj = domainList
+	case opt.block:
+		err = gClient.DomainBlock(domName)
+	case opt.unblock:
+		err = gClient.DomainUnblock(domName)
+	default:
+		return errors.New("domainBlocksCmd: internal error")
+	}
+
+	if err != nil {
+		errPrint("Error: %s", err.Error())
+		os.Exit(1)
+	}
+	if obj == nil {
+		return nil
+	}
+
+	p, err := getPrinter()
+	if err != nil {
+		errPrint("Error: %v", err)
+		os.Exit(1)
+	}
+	return p.printObj(obj)
+}