author | Mikael Berthe <mikael@lilotux.net> |
Sun, 30 Jun 2024 16:26:45 +0200 | |
changeset 272 | 47373202f982 |
parent 263 | a6e005442f8b |
permissions | -rw-r--r-- |
130 | 1 |
/* |
207 | 2 |
Copyright 2017-2018 Mikael Berthe |
130 | 3 |
Copyright 2017 Ollivier Robert |
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 ( |
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 { |
263 | 19 |
ID ActivityID `json:"id"` |
20 |
ClientID string `json:"client_id"` |
|
21 |
ClientSecret string `json:"client_secret"` |
|
35
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 | 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 |
|
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 | 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 | 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 | 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 | 73 |
var app registerApp |
245
304b518cabbf
Fix endpoint for app registration (broken by 9dcadf72)
Mikael Berthe <mikael@lilotux.net>
parents:
207
diff
changeset
|
74 |
if err := mc.apiCall("v1/apps", rest.Post, params, nil, nil, &app); err != nil { |
120 | 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 |
} |