author | Mikael Berthe <mikael@lilotux.net> |
Sat, 29 Apr 2017 12:16:16 +0200 | |
changeset 155 | 0c581e0108da |
parent 149 | 5f922977d7c7 |
child 159 | 408aa794d9bb |
permissions | -rw-r--r-- |
130 | 1 |
/* |
2 |
Copyright 2017 Ollivier Robert |
|
3 |
Copyright 2017 Mikael Berthe |
|
4 |
||
5 |
Licensed under the MIT license. Please see the LICENSE file is this directory. |
|
6 |
*/ |
|
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 | 56 |
Name: name, |
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 | 61 |
params := make(apiCallParams) |
62 |
params["client_name"] = name |
|
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 | 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 | 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 | 70 |
var app registerApp |
155 | 71 |
if err := mc.apiCall("apps", rest.Post, params, nil, nil, &app); err != nil { |
120 | 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 |
} |