diff --git a/Dockerfile b/Dockerfile index ccfbf76..cd73211 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,10 +8,11 @@ RUN mkdir -p /rootfs/usr/bin && \ go get -u github.com/golang/dep/cmd/dep && \ dep ensure && \ go build -o /rootfs/usr/bin/server . && \ - go build -o /rootfs/usr/bin/worker ./worker + go build -o /rootfs/usr/bin/worker ./worker && \ + go build -o /rootfs/usr/bin/ar-cli ./cli FROM alpine COPY --from=build /rootfs/usr/bin /usr/bin -RUN chmod +x /usr/bin/server /usr/bin/worker && \ +RUN chmod +x /usr/bin/server /usr/bin/worker /usr/bin/ar-cli && \ apk add -U --no-cache ca-certificates diff --git a/Gopkg.lock b/Gopkg.lock index d01e600..feb976b 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -227,6 +227,14 @@ pruneopts = "UT" revision = "70e15c650864f4fc47f5d3c82ea117285480895d" +[[projects]] + digest = "1:b24d38b282bacf9791408a080f606370efa3d364e4b5fd9ba0f7b87786d3b679" + name = "github.com/urfave/cli" + packages = ["."] + pruneopts = "UT" + revision = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1" + version = "v1.20.0" + [[projects]] digest = "1:bb78bf98bee383e091714423f2363a9a3b31a62e9ebbd887cb4f94e693d4890d" name = "github.com/yukimochi/httpsig" @@ -469,6 +477,7 @@ "github.com/Songmu/go-httpdate", "github.com/go-redis/redis", "github.com/satori/go.uuid", + "github.com/urfave/cli", "github.com/yukimochi/httpsig", ] solver-name = "gps-cdcl" diff --git a/cli/cli.go b/cli/cli.go new file mode 100644 index 0000000..e8f9f6f --- /dev/null +++ b/cli/cli.go @@ -0,0 +1,127 @@ +package main + +import ( + "fmt" + "log" + "os" + "strings" + + "github.com/go-redis/redis" + "github.com/urfave/cli" +) + +var redClient *redis.Client + +func listDomain(c *cli.Context) error { + var err error + var domains []string + var message string + switch c.String("type") { + case "limited": + message = " - Limited domain :" + domains, err = redClient.HKeys("relay:config:limitedDomain").Result() + if err != nil { + return err + } + case "blocked": + message = " - Blocked domain :" + domains, err = redClient.HKeys("relay:config:blockedDomain").Result() + if err != nil { + return err + } + default: + message = " - Subscribed domain :" + temp, err := redClient.Keys("relay:subscription:*").Result() + if err != nil { + return err + } + for _, domain := range temp { + domains = append(domains, strings.Replace(domain, "relay:subscription:", "", 1)) + } + } + fmt.Println(message) + for _, domain := range domains { + fmt.Println(domain) + } + fmt.Println(fmt.Sprintf("Total : %d", len(domains))) + return nil +} + +func manageDomain(c *cli.Context) error { + if c.String("domain") == "" { + fmt.Println("No domain given.") + return nil + } + switch c.String("type") { + case "limited": + if c.Bool("undo") { + redClient.HDel("relay:config:limitedDomain", c.String("domain")) + fmt.Println("Unregistrate [" + c.String("domain") + "] from Limited domain.") + } else { + redClient.HSet("relay:config:limitedDomain", c.String("domain"), "1") + fmt.Println("Registrate [" + c.String("domain") + "] as Limited domain.") + } + case "blocked": + if c.Bool("undo") { + redClient.HDel("relay:config:blockedDomain", c.String("domain")) + fmt.Println("Unregistrate [" + c.String("domain") + "] from Blocked domain.") + } else { + redClient.HSet("relay:config:blockedDomain", c.String("domain"), "1") + fmt.Println("Registrate [" + c.String("domain") + "] as Blocked domain.") + } + default: + fmt.Println("No type given.") + } + return nil +} + +func main() { + redClient = redis.NewClient(&redis.Options{ + Addr: os.Getenv("REDIS_URL"), + }) + + app := cli.NewApp() + app.Name = "Activity Relay Extarnal CLI" + app.Usage = "Control Relay configration" + app.Version = "0.0.2" + app.Commands = []cli.Command{ + { + Name: "list-domain", + Aliases: []string{"ld"}, + Usage: "List {subscribed,limited,blocked} domains", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "type, t", + Value: "subscribed", + Usage: "Registrate type [subscribed,limited,blocked]", + }, + }, + Action: listDomain, + }, + { + Name: "manage-domain", + Aliases: []string{"md"}, + Usage: "Manage {limited,blocked} domains", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "type, t", + Usage: "Registrate type [limited,blocked]", + }, + cli.StringFlag{ + Name: "domain, d", + Usage: "Registrate domain", + }, + cli.BoolFlag{ + Name: "undo, u", + Usage: "Undo registrate", + }, + }, + Action: manageDomain, + }, + } + + err := app.Run(os.Args) + if err != nil { + log.Fatal(err) + } +} diff --git a/readme.md b/readme.md index 3838b39..26e4c80 100644 --- a/readme.md +++ b/readme.md @@ -8,6 +8,7 @@ - `github.com/yukimochi/Activity-Relay` - `github.com/yukimochi/Activity-Relay/worker` + - `github.com/yukimochi/Activity-Relay/cli` ## Requirements