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 }