github.com/wtfutil/wtf@v0.43.0/modules/gitter/client.go (about)

     1  package gitter
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"strconv"
     7  
     8  	"github.com/wtfutil/wtf/utils"
     9  )
    10  
    11  func GetMessages(roomId string, numberOfMessages int, apiToken string) ([]Message, error) {
    12  	var messages []Message
    13  
    14  	resp, err := apiRequest("rooms/"+roomId+"/chatMessages?limit="+strconv.Itoa(numberOfMessages), apiToken)
    15  	if err != nil {
    16  		return nil, err
    17  	}
    18  
    19  	err = utils.ParseJSON(&messages, resp.Body)
    20  	if err != nil {
    21  		return nil, err
    22  	}
    23  
    24  	return messages, nil
    25  }
    26  
    27  func GetRoom(roomUri, apiToken string) (*Room, error) {
    28  	var rooms Rooms
    29  
    30  	resp, err := apiRequest("rooms?q="+roomUri, apiToken)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	err = utils.ParseJSON(&rooms, resp.Body)
    36  	if err != nil {
    37  		return nil, err
    38  	}
    39  
    40  	for _, room := range rooms.Results {
    41  		if room.URI == roomUri {
    42  			return &room, nil
    43  		}
    44  	}
    45  
    46  	return nil, nil
    47  }
    48  
    49  /* -------------------- Unexported Functions -------------------- */
    50  
    51  var (
    52  	apiBaseURL = "https://api.gitter.im/v1/"
    53  )
    54  
    55  func apiRequest(path, apiToken string) (*http.Response, error) {
    56  	req, err := http.NewRequest("GET", apiBaseURL+path, http.NoBody)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	bearer := fmt.Sprintf("Bearer %s", apiToken)
    62  	req.Header.Add("Authorization", bearer)
    63  
    64  	httpClient := &http.Client{}
    65  	resp, err := httpClient.Do(req)
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  	defer func() { _ = resp.Body.Close() }()
    70  
    71  	if resp.StatusCode < 200 || resp.StatusCode > 299 {
    72  		return nil, fmt.Errorf(resp.Status)
    73  	}
    74  
    75  	return resp, nil
    76  }