Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

47 rader
1.1 KiB

  1. package apiclient
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "net/url"
  8. "strings"
  9. "github.com/AFASystems/presence/internal/pkg/config"
  10. )
  11. type response struct {
  12. Token string `json:"access_token"`
  13. }
  14. func GetToken(ctx context.Context, cfg *config.Config, client *http.Client) (string, error) {
  15. formData := url.Values{}
  16. formData.Set("grant_type", "password")
  17. formData.Set("client_id", cfg.HTTPClientID)
  18. formData.Set("client_secret", cfg.ClientSecret)
  19. formData.Set("username", cfg.HTTPUsername)
  20. formData.Set("password", cfg.HTTPPassword)
  21. formData.Set("audience", cfg.HTTPAudience)
  22. req, err := http.NewRequest("POST", fmt.Sprintf("%s/realms/API.Server.local/protocol/openid-connect/token", cfg.APIAuthURL), strings.NewReader(formData.Encode()))
  23. if err != nil {
  24. return "", err
  25. }
  26. req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  27. req = req.WithContext(ctx)
  28. res, err := client.Do(req)
  29. if err != nil {
  30. return "", err
  31. }
  32. var j response
  33. if err := json.NewDecoder(res.Body).Decode(&j); err != nil {
  34. return "", err
  35. }
  36. return j.Token, nil
  37. }