app.go
author Mikael Berthe <mikael@lilotux.net>
Wed, 10 May 2017 20:12:26 +0200
changeset 179 fbe21b4aabda
parent 165 6fe8c96e7263
child 197 485f5cfb4378
permissions -rw-r--r--
Version 1.5.0
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 (
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
162
68df3a01e1a7 Use github.com/pkg/errors
Mikael Berthe <mikael@lilotux.net>
parents: 159
diff changeset
    14
	"github.com/pkg/errors"
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 {
159
408aa794d9bb s/int/int64/ for IDs and time integers
Mikael Berthe <mikael@lilotux.net>
parents: 155
diff changeset
    19
	ID           int64  `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
165
6fe8c96e7263 Add 'website' parameter to application registration
Mikael Berthe <mikael@lilotux.net>
parents: 162
diff changeset
    49
func NewApp(name, website 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
165
6fe8c96e7263 Add 'website' parameter to application registration
Mikael Berthe <mikael@lilotux.net>
parents: 162
diff changeset
    63
	if website != "" {
6fe8c96e7263 Add 'website' parameter to application registration
Mikael Berthe <mikael@lilotux.net>
parents: 162
diff changeset
    64
		params["website"] = website
6fe8c96e7263 Add 'website' parameter to application registration
Mikael Berthe <mikael@lilotux.net>
parents: 162
diff changeset
    65
	}
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    66
	params["scopes"] = strings.Join(scopes, " ")
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    67
	if redirectURI != "" {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    68
		params["redirect_uris"] = redirectURI
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    69
	} else {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    70
		params["redirect_uris"] = NoRedirect
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    71
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    72
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 84
diff changeset
    73
	var app registerApp
155
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
    74
	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
    75
		return nil, err
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    76
	}
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    77
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
    78
	mc.ID = app.ClientID
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 131
diff changeset
    79
	mc.Secret = app.ClientSecret
35
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    80
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    81
	return
27c58d359940 Register the new client if not already done.
Ollivier Robert <roberto@keltia.net>
parents: 27
diff changeset
    82
}
131
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    83
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    84
// 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
    85
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
    86
	instanceURL, err := buildInstanceURL(instanceName)
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    87
	if err != nil {
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    88
		return nil, err
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    89
	}
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    90
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    91
	return &Client{
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    92
		Name:        name,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    93
		InstanceURL: instanceURL,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    94
		APIBase:     instanceURL + currentAPIPath,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    95
		ID:          appID,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    96
		Secret:      appSecret,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    97
		UserToken:   userToken,
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    98
	}, nil
68ef6504637e Introduce RestoreApp(), bump library version
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
    99
}