cmd/gondole-cli/main.go
author Ollivier Robert <roberto@keltia.net>
Wed, 12 Apr 2017 14:22:04 +0200
changeset 76 dd9b9c02bfff
parent 67 1ff7afce37fe
child 82 09f5e04b1b37
child 83 adc39ae774c0
permissions -rw-r--r--
Complete rewrite with config integration here. Not complete yet.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5
cab58bf80778 Basic CLI-tool for testing.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     1
package main
cab58bf80778 Basic CLI-tool for testing.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     2
7
0fbbac6d8e8c We have an skeleton now.
Ollivier Robert <roberto@keltia.net>
parents: 5
diff changeset
     3
import (
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
     4
	"github.com/keltia/gondole"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
     5
	"github.com/urfave/cli"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
     6
	"log"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
     7
	"os"
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
     8
	"strings"
7
0fbbac6d8e8c We have an skeleton now.
Ollivier Robert <roberto@keltia.net>
parents: 5
diff changeset
     9
)
0fbbac6d8e8c We have an skeleton now.
Ollivier Robert <roberto@keltia.net>
parents: 5
diff changeset
    10
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
    11
var (
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    12
	fVerbose  bool
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    13
	fInstance string
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    14
	fScopes   string
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    15
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    16
	instance *gondole.Client
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    17
	cnf      *Server
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    18
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    19
	// For bootstrapping, override the API endpoint w/o any possible /api/vN, that is
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    20
	// supplied by the library
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    21
	APIEndpoint string
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    22
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    23
	// Deduced though the full instance URL when registering
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    24
	InstanceName string
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    25
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    26
	// Default scopes
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    27
	ourScopes = []string{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    28
		"read",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    29
		"write",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    30
		"follow",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    31
	}
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
    32
)
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
    33
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    34
// Config holds our parameters
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    35
type Server struct {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    36
	ID          string `json:"id"`
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    37
	Name        string `json:"name"`
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    38
	BearerToken string `json:"bearer_token"`
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    39
	BaseURL     string `json:"base_url"` // Allow for overriding APIEndpoint on registration
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    40
}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    41
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    42
type Config struct {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    43
	Default string
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    44
}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    45
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    46
func setupEnvironment(c *cli.Context) (err error) {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    47
	var scopes []string
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    48
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    49
	if fInstance != "" {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    50
		InstanceName = basename(fInstance)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    51
		APIEndpoint = filterURL(fInstance)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    52
	}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    53
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    54
	// Load configuration, will register if none is found
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    55
	cnf, err = LoadConfig(InstanceName)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    56
	if err != nil {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    57
		// Nothing exist yet
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    58
		defName := Config{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    59
			Default: InstanceName,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    60
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    61
		err = defName.Write()
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    62
		if err != nil {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    63
			log.Fatalf("error: can not write config for %s", InstanceName)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    64
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    65
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    66
		// Now register this through OAuth
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    67
		if fScopes != "" {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    68
			scopes = strings.Split(fScopes, " ")
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    69
		} else {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    70
			scopes = ourScopes
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    71
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    72
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    73
		instance, err = gondole.NewApp("gondole-cli", scopes, gondole.NoRedirect, fInstance)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    74
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    75
		server := &Server{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    76
			ID:          instance.ID,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    77
			Name:        instance.Name,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    78
			BearerToken: instance.Secret,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    79
			BaseURL:     instance.APIBase,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    80
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    81
		err = server.WriteToken(InstanceName)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    82
		if err != nil {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    83
			log.Fatalf("error: can not write token for %s", instance.Name)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    84
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    85
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    86
		cnf := Config{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    87
			Default: instance.Name,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    88
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    89
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    90
		err = cnf.Write()
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    91
		if err != nil {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    92
			log.Fatalf("error: can not write config for %s", instance.Name)
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    93
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    94
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    95
	}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    96
	// Log in to the instance
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
    97
	return err
24
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
    98
}
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
    99
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   100
func init() {
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   101
	cli.VersionFlag = cli.BoolFlag{Name: "version, V"}
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
   102
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   103
	cli.VersionPrinter = func(c *cli.Context) {
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   104
		log.Printf("API wrapper: %s Mastodon CLI: %s\n", c.App.Version, gondole.APIVersion)
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   105
	}
24
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   106
}
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
   107
24
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   108
func main() {
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
   109
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   110
	app := cli.NewApp()
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   111
	app.Name = "gondole"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   112
	app.Usage = "Mastodon CLI interface"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   113
	app.Author = "Ollivier Robert <roberto@keltia.net>"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   114
	app.Version = gondole.APIVersion
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   115
	//app.HideVersion = true
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   116
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   117
	app.Before = setupEnvironment
24
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   118
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   119
	app.Flags = []cli.Flag{
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   120
		cli.BoolFlag{
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   121
			Name:        "verbose,v",
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   122
			Usage:       "verbose mode",
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   123
			Destination: &fVerbose,
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   124
		},
67
1ff7afce37fe Add a baseURL parameter to NewApp().
Ollivier Robert <roberto@keltia.net>
parents: 53
diff changeset
   125
		cli.StringFlag{
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   126
			Name:        "instance,I",
67
1ff7afce37fe Add a baseURL parameter to NewApp().
Ollivier Robert <roberto@keltia.net>
parents: 53
diff changeset
   127
			Usage:       "use that instance",
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   128
			Destination: &fInstance,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   129
		},
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   130
		cli.StringFlag{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   131
			Name:        "scopes,S",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   132
			Usage:       "use these scopes",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   133
			Destination: &fScopes,
67
1ff7afce37fe Add a baseURL parameter to NewApp().
Ollivier Robert <roberto@keltia.net>
parents: 53
diff changeset
   134
		},
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   135
	}
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   136
	app.Run(os.Args)
5
cab58bf80778 Basic CLI-tool for testing.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
   137
}