69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package authutil
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type SuccessResponse struct {
|
|
Success bool `json:"success"`
|
|
}
|
|
|
|
// Request makes an HTTP request the way we like...
|
|
func Request(method, fullurl, token string, payload io.Reader) (io.Reader, error) {
|
|
HTTPClient := &http.Client{
|
|
Timeout: 15 * time.Second,
|
|
}
|
|
req, err := http.NewRequest(method, fullurl, payload)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(token) > 0 {
|
|
req.Header.Set("Authorization", "Bearer "+token)
|
|
}
|
|
if nil != payload {
|
|
req.Header.Set("Content-Type", "application/json")
|
|
}
|
|
|
|
resp, err := HTTPClient.Do(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
body, err := ioutil.ReadAll(resp.Body)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("%d: failed to read response body: %w", resp.StatusCode, err)
|
|
}
|
|
|
|
if resp.StatusCode >= http.StatusBadRequest {
|
|
return nil, fmt.Errorf("%d: request failed: %v", resp.StatusCode, string(body))
|
|
}
|
|
|
|
return bytes.NewBuffer(body), nil
|
|
}
|
|
|
|
func Ping(authURL, token string) error {
|
|
msg, err := Request("POST", authURL+"/ping", token, nil)
|
|
if nil != err {
|
|
return err
|
|
}
|
|
if nil == msg {
|
|
return fmt.Errorf("invalid response")
|
|
}
|
|
resp := SuccessResponse{}
|
|
err = json.NewDecoder(msg).Decode(&resp)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if true != resp.Success {
|
|
return fmt.Errorf("expected successful response")
|
|
}
|
|
return nil
|
|
}
|