| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | // Copyright 2014 The Gogs Authors. All rights reserved.// Use of this source code is governed by a MIT-style// license that can be found in the LICENSE file.package gogsimport (	"encoding/json"	"errors"	"io"	"io/ioutil"	"net/http"	"strings")func Version() string {	return "0.12.11"}// Client represents a Gogs API client.type Client struct {	url         string	accessToken string	client      *http.Client}// NewClient initializes and returns a API client.func NewClient(url, token string) *Client {	return &Client{		url:         strings.TrimSuffix(url, "/"),		accessToken: token,		client:      &http.Client{},	}}// SetHTTPClient replaces default http.Client with user given one.func (c *Client) SetHTTPClient(client *http.Client) {	c.client = client}func (c *Client) doRequest(method, path string, header http.Header, body io.Reader) (*http.Response, error) {	req, err := http.NewRequest(method, c.url+"/api/v1"+path, body)	if err != nil {		return nil, err	}	req.Header.Set("Authorization", "token "+c.accessToken)	for k, v := range header {		req.Header[k] = v	}	return c.client.Do(req)}func (c *Client) getResponse(method, path string, header http.Header, body io.Reader) ([]byte, error) {	resp, err := c.doRequest(method, path, header, body)	if err != nil {		return nil, err	}	defer resp.Body.Close()	data, err := ioutil.ReadAll(resp.Body)	if err != nil {		return nil, err	}	switch resp.StatusCode {	case 403:		return nil, errors.New("403 Forbidden")	case 404:		return nil, errors.New("404 Not Found")	}	if resp.StatusCode/100 != 2 {		errMap := make(map[string]interface{})		if err = json.Unmarshal(data, &errMap); err != nil {			return nil, err		}		return nil, errors.New(errMap["message"].(string))	}	return data, nil}func (c *Client) getParsedResponse(method, path string, header http.Header, body io.Reader, obj interface{}) error {	data, err := c.getResponse(method, path, header, body)	if err != nil {		return err	}	return json.Unmarshal(data, obj)}
 |