app.go
author Mikael Berthe <mikael@lilotux.net>
Wed, 12 Apr 2017 16:40:02 +0200
changeset 83 adc39ae774c0
parent 80 d6e8807818c4
child 84 519be52bfced
permissions -rw-r--r--
Make it work with non-defaut instances
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"
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
     5
	"log"
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
     6
	"net/url"
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
     7
	"strings"
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
     8
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
     9
	"github.com/sendgrid/rest"
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    10
)
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    11
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    12
type registerApp struct {
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    13
	ID           int    `json:"id"`
66
965586c1e3ed Change all ID into string, I guess this was to avoir overflow.
Ollivier Robert <roberto@keltia.net>
parents: 65
diff changeset
    14
	ClientID     string `json:"client_id"`
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    15
	ClientSecret string `json:"client_secret"`
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    16
}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    17
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    18
// NewApp registers a new instance
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    19
func NewApp(name string, scopes []string, redirectURI, instanceURL string) (g *Client, err error) {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    20
	if instanceURL == "" {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    21
		instanceURL = defaultInstanceURL
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    22
	}
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    23
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    24
	if !strings.Contains(instanceURL, "://") {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    25
		instanceURL = "https://" + instanceURL
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    26
	}
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    27
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    28
	apiPath := instanceURL + defaultAPIPath
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    29
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    30
	if _, err := url.ParseRequestURI(apiPath); err != nil {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    31
		return nil, err
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    32
	}
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    33
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    34
	g = &Client{
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    35
		Name:    name,
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    36
		APIBase: apiPath,
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    37
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    38
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    39
	req := g.prepareRequest("apps")
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    40
	if redirectURI != "" {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    41
		req.QueryParams["redirect_uris"] = redirectURI
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    42
	} else {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    43
		req.QueryParams["redirect_uris"] = NoRedirect
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    44
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    45
	req.QueryParams["client_name"] = name
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    46
	req.QueryParams["scopes"] = strings.Join(scopes, " ")
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    47
	req.Method = rest.Post
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    48
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    49
	r, err := rest.API(req)
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    50
	if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    51
		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
    52
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    53
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    54
	var resp registerApp
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    55
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    56
	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
    57
	if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    58
		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
    59
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    60
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    61
	if err != nil {
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    62
		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
    63
	}
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    64
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    65
	g.ID = resp.ClientID
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    66
	g.Secret = resp.ClientSecret
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    67
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    68
	return
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    69
}