cmd/gondole-cli/main.go
author Mikael Berthe <mikael@lilotux.net>
Wed, 12 Apr 2017 17:33:17 +0200
changeset 84 519be52bfced
parent 83 adc39ae774c0
child 85 abf0f5e40281
permissions -rw-r--r--
Some Fixes
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
	// Default scopes
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    20
	ourScopes = []string{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    21
		"read",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    22
		"write",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    23
		"follow",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    24
	}
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    25
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    26
	defaultInstanceURL = "https://mastodon.social"
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
    27
)
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
    28
84
519be52bfced Some Fixes
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    29
// Server holds our application details
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    30
type Server struct {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    31
	ID          string `json:"id"`
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    32
	Name        string `json:"name"`
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    33
	BearerToken string `json:"bearer_token"`
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    34
	APIBase     string `json:"base_url"`
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    35
	InstanceURL string `json:"base_url"`
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    36
}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    37
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    38
type Config struct {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    39
	Default string
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
func setupEnvironment(c *cli.Context) (err error) {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    43
	var scopes []string
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    44
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    45
	instanceURL := defaultInstanceURL
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    46
	if fInstance != "" {
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    47
		if strings.Contains(fInstance, "://") {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    48
			instanceURL = fInstance
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    49
		} else {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    50
			instanceURL = "https://" + fInstance
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    51
		}
76
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
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    54
	instanceName := basename(instanceURL)
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    55
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    56
	// Load configuration, will register if none is found
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    57
	cnf, err = LoadConfig(instanceName)
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    58
	if err != nil {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    59
		// Nothing exist yet
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    60
		defName := Config{
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    61
			Default: instanceName,
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    62
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    63
		err = defName.Write()
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    64
		if err != nil {
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    65
			log.Fatalf("error: can not write config for %s", instanceName)
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    66
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    67
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    68
		// Now register this through OAuth
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    69
		if fScopes != "" {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    70
			scopes = strings.Split(fScopes, " ")
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    71
		} else {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    72
			scopes = ourScopes
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    73
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    74
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    75
		instance, err = gondole.NewApp("gondole-cli", scopes, gondole.NoRedirect, instanceURL)
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    77
		server := &Server{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    78
			ID:          instance.ID,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    79
			Name:        instance.Name,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    80
			BearerToken: instance.Secret,
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    81
			APIBase:     instance.APIBase,
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    82
			InstanceURL: instance.InstanceURL,
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    83
		}
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
    84
		err = server.WriteToken(instanceName)
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    85
		if err != nil {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    86
			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
    87
		}
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
		cnf := Config{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    90
			Default: instance.Name,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    91
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    92
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    93
		err = cnf.Write()
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    94
		if err != nil {
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    95
			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
    96
		}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    97
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    98
	}
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    99
	// Log in to the instance
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   100
	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
   101
}
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   102
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   103
func init() {
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   104
	cli.VersionFlag = cli.BoolFlag{Name: "version, V"}
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
   105
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   106
	cli.VersionPrinter = func(c *cli.Context) {
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
   107
		log.Printf("API wrapper: %s Mastodon CLI: %s\n", c.App.Version, gondole.GondoleVersion)
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   108
	}
24
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   109
}
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
   110
24
a01761bc5837 Register() will be used to load the config & create on first run.
Ollivier Robert <roberto@keltia.net>
parents: 19
diff changeset
   111
func main() {
19
9f4ae6d2a995 Barebone CLI app.
Ollivier Robert <roberto@keltia.net>
parents: 7
diff changeset
   112
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   113
	app := cli.NewApp()
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   114
	app.Name = "gondole"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   115
	app.Usage = "Mastodon CLI interface"
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   116
	app.Author = "Ollivier Robert <roberto@keltia.net>"
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 76
diff changeset
   117
	app.Version = gondole.GondoleVersion
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   118
	//app.HideVersion = true
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   119
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   120
	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
   121
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   122
	app.Flags = []cli.Flag{
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   123
		cli.BoolFlag{
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   124
			Name:        "verbose,v",
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   125
			Usage:       "verbose mode",
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   126
			Destination: &fVerbose,
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   127
		},
67
1ff7afce37fe Add a baseURL parameter to NewApp().
Ollivier Robert <roberto@keltia.net>
parents: 53
diff changeset
   128
		cli.StringFlag{
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   129
			Name:        "instance,I",
67
1ff7afce37fe Add a baseURL parameter to NewApp().
Ollivier Robert <roberto@keltia.net>
parents: 53
diff changeset
   130
			Usage:       "use that instance",
76
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   131
			Destination: &fInstance,
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   132
		},
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   133
		cli.StringFlag{
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   134
			Name:        "scopes,S",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   135
			Usage:       "use these scopes",
dd9b9c02bfff Complete rewrite with config integration here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
   136
			Destination: &fScopes,
67
1ff7afce37fe Add a baseURL parameter to NewApp().
Ollivier Robert <roberto@keltia.net>
parents: 53
diff changeset
   137
		},
38
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   138
	}
8343e5264a9b Hook up the application registration + gofmt.
Ollivier Robert <roberto@keltia.net>
parents: 31
diff changeset
   139
	app.Run(os.Args)
5
cab58bf80778 Basic CLI-tool for testing.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
   140
}