mirror of
				https://github.com/therootcompany/telebit.git
				synced 2025-10-31 05:12:47 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			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
 | |
| }
 |