Mercurial > gemma
view pkg/soap/oauth.go @ 5710:37c8feeecb4d
Merged branch sr-v2 into default.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 20 Feb 2024 21:28:56 +0100 |
parents | a826d84485c8 |
children |
line wrap: on
line source
// This is Free Software under GNU Affero General Public License v >= 3.0 // without warranty, see README.md and license for details. // // SPDX-License-Identifier: AGPL-3.0-or-later // License-Filename: LICENSES/AGPL-3.0.txt // // Copyright (C) 2022 by via donau // – Österreichische Wasserstraßen-Gesellschaft mbH // Software engineering by Intevation GmbH // // Author(s): // * Sascha L. Teichmann <sascha.teichmann@intevation.de> package soap import ( "encoding/base64" "encoding/json" "fmt" "net/http" "strings" ) type Token struct { AccessToken string `json:"access_token"` Scope string `json:"scope"` TokenType string `json:"token_type"` ExpiresIn int `json:"expires_in"` } func (token *Token) AddAuth(request *http.Request) { request.Header.Add("Authorization", "Bearer "+token.AccessToken) } func FetchToken(tokenURL, key, secret string) (*Token, error) { keyPair := key + ":" + secret encodedKeyPair := base64.URLEncoding.EncodeToString([]byte(keyPair)) req, err := http.NewRequest( http.MethodPost, tokenURL, strings.NewReader("grant_type=client_credentials")) if err != nil { return nil, err } req.Header.Set("Authorization", "Basic "+encodedKeyPair) resp, err := http.DefaultClient.Do(req) if err != nil { return nil, err } if resp.StatusCode != http.StatusOK { return nil, fmt.Errorf( "POST failed: %s (%d)", http.StatusText(resp.StatusCode), resp.StatusCode) } var token Token defer resp.Body.Close() if err = json.NewDecoder(resp.Body).Decode(&token); err != nil { return nil, err } return &token, err }