|
- package apiclient
-
- import (
- "context"
- "encoding/json"
- "fmt"
- "net/http"
- "net/url"
- "strings"
-
- "github.com/AFASystems/presence/internal/pkg/config"
- )
-
- type response struct {
- Token string `json:"access_token"`
- }
-
- func GetToken(ctx context.Context, cfg *config.Config, client *http.Client) (string, error) {
- formData := url.Values{}
- formData.Set("grant_type", "password")
- formData.Set("client_id", cfg.HTTPClientID)
- formData.Set("client_secret", cfg.ClientSecret)
- formData.Set("username", cfg.HTTPUsername)
- formData.Set("password", cfg.HTTPPassword)
- formData.Set("audience", cfg.HTTPAudience)
-
- req, err := http.NewRequest("POST", fmt.Sprintf("%s/realms/API.Server.local/protocol/openid-connect/token", cfg.APIAuthURL), strings.NewReader(formData.Encode()))
- if err != nil {
- fmt.Println("error", err)
- return "", err
- }
- req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
-
- req = req.WithContext(ctx)
- res, err := client.Do(req)
- if err != nil {
- fmt.Println("error", err)
- return "", err
- }
-
- var j response
-
- if err := json.NewDecoder(res.Body).Decode(&j); err != nil {
- fmt.Println("error", err)
- return "", err
- }
-
- return j.Token, nil
- }
|