app.go
author Mikael Berthe <mikael@lilotux.net>
Sat, 29 Apr 2017 17:27:15 +0200
changeset 156 70aadba26338
parent 155 0c581e0108da
child 159 408aa794d9bb
permissions -rw-r--r--
Add field "All" to LimitParams, change Limit behaviour If All is true, the library will send several requests (if needed) until the API server has sent all the results. If not, and if a Limit is set, the library will try to fetch at least this number of results.
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
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
     8
package madon
21
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 (
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    11
	"errors"
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    12
	"net/url"
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    13
	"strings"
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    14
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    15
	"github.com/sendgrid/rest"
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    16
)
21
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 {
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    19
	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
    20
	ClientID     string `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
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    24
// buildInstanceURL creates the URL from the instance name or cleans up the
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    25
// provided URL
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    26
func buildInstanceURL(instanceName string) (string, error) {
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    27
	if instanceName == "" {
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    28
		return "", errors.New("no instance provided")
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    29
	}
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    30
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    31
	instanceURL := instanceName
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    32
	if !strings.Contains(instanceURL, "/") {
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    33
		instanceURL = "https://" + instanceName
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    34
	}
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    35
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    36
	u, err := url.ParseRequestURI(instanceURL)
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    37
	if err != nil {
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    38
		return "", err
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    39
	}
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    40
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    41
	u.Path = ""
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    42
	u.RawPath = ""
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    43
	u.RawQuery = ""
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    44
	u.Fragment = ""
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    45
	return u.String(), nil
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    46
}
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    47
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    48
// NewApp registers a new application with a given instance
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
    49
func NewApp(name string, scopes []string, redirectURI, instanceName string) (mc *Client, err error) {
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    50
	instanceURL, err := buildInstanceURL(instanceName)
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    51
	if err != nil {
83
adc39ae774c0 Make it work with non-defaut instances
Mikael Berthe <mikael@lilotux.net>
parents: 80
diff changeset
    52
		return nil, err
80
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    53
	}
d6e8807818c4 Remove config stuff from here.
Ollivier Robert <roberto@keltia.net>
parents: 67
diff changeset
    54
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
    55
	mc = &Client{
84
519be52bfced Some Fixes
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    56
		Name:        name,
519be52bfced Some Fixes
Mikael Berthe <mikael@lilotux.net>
parents: 83
diff changeset
    57
		InstanceURL: instanceURL,
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    58
		APIBase:     instanceURL + currentAPIPath,
35
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
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    61
	params := make(apiCallParams)
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    62
	params["client_name"] = name
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    63
	params["scopes"] = strings.Join(scopes, " ")
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    64
	if redirectURI != "" {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    65
		params["redirect_uris"] = redirectURI
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    66
	} else {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    67
		params["redirect_uris"] = NoRedirect
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    68
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    69
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    70
	var app registerApp
155
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
    71
	if err := mc.apiCall("apps", rest.Post, params, nil, nil, &app); err != nil {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    72
		return nil, err
35
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
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
    75
	mc.ID = app.ClientID
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
    76
	mc.Secret = app.ClientSecret
35
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
	return
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    79
}
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    80
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    81
// RestoreApp recreates an application client with existing secrets
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
    82
func RestoreApp(name, instanceName, appID, appSecret string, userToken *UserToken) (mc *Client, err error) {
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    83
	instanceURL, err := buildInstanceURL(instanceName)
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    84
	if err != nil {
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    85
		return nil, err
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    86
	}
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    87
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    88
	return &Client{
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    89
		Name:        name,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    90
		InstanceURL: instanceURL,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    91
		APIBase:     instanceURL + currentAPIPath,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    92
		ID:          appID,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    93
		Secret:      appSecret,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    94
		UserToken:   userToken,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    95
	}, nil
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    96
}