Mercurial > gemma
annotate pkg/soap/oauth.go @ 5688:6281c18b109f sr-v2
Finsh serializing v2 meshes.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 12 Feb 2024 02:27:41 +0100 |
parents | a826d84485c8 |
children |
rev | line source |
---|---|
5610
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
1 // This is Free Software under GNU Affero General Public License v >= 3.0 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
2 // without warranty, see README.md and license for details. |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
3 // |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
4 // SPDX-License-Identifier: AGPL-3.0-or-later |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
5 // License-Filename: LICENSES/AGPL-3.0.txt |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
6 // |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
7 // Copyright (C) 2022 by via donau |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
8 // – Österreichische Wasserstraßen-Gesellschaft mbH |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 // Software engineering by Intevation GmbH |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 // |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
11 // Author(s): |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
12 // * Sascha L. Teichmann <sascha.teichmann@intevation.de> |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
13 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
14 package soap |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
15 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
16 import ( |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
17 "encoding/base64" |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
18 "encoding/json" |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 "fmt" |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
20 "net/http" |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 "strings" |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
22 ) |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
23 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 type Token struct { |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
25 AccessToken string `json:"access_token"` |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 Scope string `json:"scope"` |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 TokenType string `json:"token_type"` |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
28 ExpiresIn int `json:"expires_in"` |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 } |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
30 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
31 func (token *Token) AddAuth(request *http.Request) { |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 request.Header.Add("Authorization", "Bearer "+token.AccessToken) |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
33 } |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 func FetchToken(tokenURL, key, secret string) (*Token, error) { |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 keyPair := key + ":" + secret |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 encodedKeyPair := base64.URLEncoding.EncodeToString([]byte(keyPair)) |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
40 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
41 req, err := http.NewRequest( |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 http.MethodPost, |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 tokenURL, |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 strings.NewReader("grant_type=client_credentials")) |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
45 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
46 if err != nil { |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
47 return nil, err |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
48 } |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
49 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
50 req.Header.Set("Authorization", "Basic "+encodedKeyPair) |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
51 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
52 resp, err := http.DefaultClient.Do(req) |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
53 if err != nil { |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
54 return nil, err |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
55 } |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
56 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
57 if resp.StatusCode != http.StatusOK { |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
58 return nil, fmt.Errorf( |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
59 "POST failed: %s (%d)", |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
60 http.StatusText(resp.StatusCode), |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
61 resp.StatusCode) |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
62 } |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
63 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
64 var token Token |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
65 defer resp.Body.Close() |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
66 |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
67 if err = json.NewDecoder(resp.Body).Decode(&token); err != nil { |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 return nil, err |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 } |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 return &token, err |
a826d84485c8
Use token server to fetch token for ERDMS requests.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 } |