app.go
author Ollivier Robert <roberto@keltia.net>
Tue, 11 Apr 2017 11:30:23 +0200
changeset 65 0d245f3b076f
parent 35 27c58d359940
child 66 965586c1e3ed
permissions -rw-r--r--
Fix json name.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     1
package gondole
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     2
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     3
import (
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
     4
	"encoding/json"
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
     5
	"github.com/sendgrid/rest"
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
     6
	"log"
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
     7
	"strings"
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
     8
)
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     9
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    10
var (
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    11
	ourScopes = []string{
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    12
		"read",
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    13
		"write",
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    14
		"follow",
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    15
	}
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    16
)
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    17
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    18
type registerApp struct {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    19
	ID           int64  `json:"id"`
65
0d245f3b076f Fix json name.
Ollivier Robert <roberto@keltia.net>
parents: 35
diff changeset
    20
	ClientID     int64  `json:"client_id"`
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    21
	ClientSecret string `json:"client_secret"`
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    22
}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    23
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    24
func registerApplication(name string, scopes []string, redirectURI string) (g *Gondole, err error) {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    25
	g = &Gondole{
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    26
		Name: name,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    27
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    28
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    29
	req := g.prepareRequest("apps")
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    30
	if redirectURI != "" {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    31
		req.QueryParams["redirect_uris"] = redirectURI
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    32
	} else {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    33
		req.QueryParams["redirect_uris"] = NoRedirect
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    34
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    35
	req.QueryParams["client_name"] = name
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    36
	req.QueryParams["scopes"] = strings.Join(scopes, " ")
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    37
	req.Method = rest.Post
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    38
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    39
	r, err := rest.API(req)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    40
	if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    41
		log.Fatalf("error can not register app: %v", err)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    42
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    43
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    44
	var resp registerApp
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    45
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    46
	err = json.Unmarshal([]byte(r.Body), &resp)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    47
	if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    48
		log.Fatalf("error can not register app: %v", err)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    49
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    50
	g.ID = resp.ClientID
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    51
	g.Secret = resp.ClientSecret
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    52
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    53
	server := &Server{
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    54
		ID:          g.ID,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    55
		Name:        name,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    56
		BearerToken: g.Secret,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    57
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    58
	err = server.WriteToken(name)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    59
	if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    60
		log.Fatalf("error: can not write token for %s", name)
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    61
	}
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    62
	return
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    63
}
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    64
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    65
// NewApp registers a new instance
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    66
func NewApp(name string, scopes []string, redirectURI string) (g *Gondole, err error) {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    67
	// Load configuration, will register if none is found
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    68
	cnf, err := LoadConfig(name)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    69
	if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    70
		// Nothing exist yet
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    71
		cnf := Config{
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    72
			Default: name,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    73
		}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    74
		err = cnf.Write()
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    75
		if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    76
			log.Fatalf("error: can not write config for %s", name)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    77
		}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    78
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    79
		// Now register this through OAuth
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    80
		if scopes == nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    81
			scopes = ourScopes
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    82
		}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    83
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    84
		g, err = registerApplication(name, scopes, redirectURI)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    85
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    86
	} else {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    87
		g = &Gondole{
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    88
			Name:   cnf.Name,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    89
			ID:     cnf.ID,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    90
			Secret: cnf.BearerToken,
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    91
		}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    92
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    93
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    94
	return
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    95
}