app.go
author Mikael Berthe <mikael@lilotux.net>
Mon, 17 Apr 2017 10:28:10 +0200
changeset 130 c450bb73f59a
parent 120 579912e9d0ef
child 131 68ef6504637e
permissions -rw-r--r--
Update credits
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
130
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     1
/*
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     2
Copyright 2017 Ollivier Robert
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     3
Copyright 2017 Mikael Berthe
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     4
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     5
Licensed under the MIT license.  Please see the LICENSE file is this directory.
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     6
*/
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     7
21
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     8
package gondole
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
     9
555716349f64 Move App stuff into app.go.
Ollivier Robert <roberto@keltia.net>
parents:
diff changeset
    10
import (
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    11
	"net/url"
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    12
	"strings"
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    13
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    14
	"github.com/sendgrid/rest"
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
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    17
type registerApp struct {
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    18
	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
    19
	ClientID     string `json:"client_id"`
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    20
	ClientSecret string `json:"client_secret"`
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    21
}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    22
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    23
// NewApp registers a new instance
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    24
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
    25
	if instanceURL == "" {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    26
		instanceURL = defaultInstanceURL
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    27
	}
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    28
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    29
	if !strings.Contains(instanceURL, "://") {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    30
		instanceURL = "https://" + instanceURL
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    31
	}
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    32
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    33
	apiPath := instanceURL + defaultAPIPath
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    34
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    35
	if _, err := url.ParseRequestURI(apiPath); err != nil {
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    36
		return nil, err
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    37
	}
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    38
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    39
	g = &Client{
84
519be52bfced Some Fixes
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    40
		Name:        name,
519be52bfced Some Fixes
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    41
		APIBase:     apiPath,
519be52bfced Some Fixes
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    42
		InstanceURL: instanceURL,
35
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
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    45
	params := make(apiCallParams)
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    46
	params["client_name"] = name
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    47
	params["scopes"] = strings.Join(scopes, " ")
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    48
	if redirectURI != "" {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    49
		params["redirect_uris"] = redirectURI
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    50
	} else {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    51
		params["redirect_uris"] = NoRedirect
35
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
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    54
	var app registerApp
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    55
	if err := g.apiCall("apps", rest.Post, params, &app); err != nil {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    56
		return nil, err
35
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
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    59
	g.ID = app.ClientID
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    60
	g.Secret = app.ClientSecret
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    61
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    62
	return
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    63
}