Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

51 linhas
1.2 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. fmt.Printf("formData: %+v\n", formData)
  23. fmt.Printf("cfg.APIAuthURL: %+v\n", cfg.APIAuthURL)
  24. req, err := http.NewRequest("POST", fmt.Sprintf("%s/realms/API.Server.local/protocol/openid-connect/token", cfg.APIAuthURL), strings.NewReader(formData.Encode()))
  25. if err != nil {
  26. return "", err
  27. }
  28. req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
  29. req = req.WithContext(ctx)
  30. res, err := client.Do(req)
  31. if err != nil {
  32. return "", err
  33. }
  34. var j response
  35. if err := json.NewDecoder(res.Body).Decode(&j); err != nil {
  36. return "", err
  37. }
  38. fmt.Printf("token: %s\n", j.Token)
  39. return j.Token, nil
  40. }