Skip to content
This repository was archived by the owner on Jun 8, 2019. It is now read-only.

Commit 34eba81

Browse files
committed
convert body to query string in case of a GET request
1 parent 7d954d7 commit 34eba81

File tree

2 files changed

+58
-12
lines changed

2 files changed

+58
-12
lines changed

gitea/gitea.go

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,17 @@
55
package gitea
66

77
import (
8+
"bytes"
89
"encoding/json"
910
"errors"
1011
"fmt"
1112
"io"
1213
"io/ioutil"
1314
"net/http"
15+
"net/url"
1416
"strings"
17+
18+
"github.com/google/go-querystring/query"
1519
)
1620

1721
// Version return the library version
@@ -52,11 +56,57 @@ func (c *Client) SetSudo(sudo string) {
5256
c.sudo = sudo
5357
}
5458

55-
func (c *Client) doRequest(method, path string, header http.Header, body io.Reader) (*http.Response, error) {
56-
req, err := http.NewRequest(method, c.url+"/api/v1"+path, body)
59+
func (c *Client) doRequest(method, path string, header http.Header, body interface{}) (*http.Response, error) {
60+
u, err := url.Parse(c.url)
61+
if err != nil {
62+
return nil, err
63+
}
64+
65+
unescaped, err := url.PathUnescape(path)
5766
if err != nil {
5867
return nil, err
5968
}
69+
70+
// Set the encoded path data
71+
u.RawPath = "/api/v1" + path
72+
u.Path = "/api/v1" + unescaped
73+
74+
if body != nil {
75+
q, err := query.Values(body)
76+
if err != nil {
77+
return nil, err
78+
}
79+
u.RawQuery = q.Encode()
80+
}
81+
82+
req := &http.Request{
83+
Method: method,
84+
URL: u,
85+
Proto: "HTTP/1.1",
86+
ProtoMajor: 1,
87+
ProtoMinor: 1,
88+
Header: make(http.Header),
89+
Host: u.Host,
90+
}
91+
92+
if method == "POST" || method == "PUT" {
93+
bodyBytes, err := json.Marshal(body)
94+
if err != nil {
95+
return nil, err
96+
}
97+
bodyReader := bytes.NewReader(bodyBytes)
98+
99+
u.RawQuery = ""
100+
req.Body = ioutil.NopCloser(bodyReader)
101+
req.GetBody = func() (io.ReadCloser, error) {
102+
return ioutil.NopCloser(bodyReader), nil
103+
}
104+
req.ContentLength = int64(bodyReader.Len())
105+
req.Header.Set("Content-Type", "application/json")
106+
}
107+
108+
req.Header.Set("Accept", "application/json")
109+
60110
if len(c.accessToken) != 0 {
61111
req.Header.Set("Authorization", "token "+c.accessToken)
62112
}
@@ -70,7 +120,7 @@ func (c *Client) doRequest(method, path string, header http.Header, body io.Read
70120
return c.client.Do(req)
71121
}
72122

73-
func (c *Client) getResponse(method, path string, header http.Header, body io.Reader) ([]byte, error) {
123+
func (c *Client) getResponse(method, path string, header http.Header, body interface{}) ([]byte, error) {
74124
resp, err := c.doRequest(method, path, header, body)
75125
if err != nil {
76126
return nil, err
@@ -106,7 +156,7 @@ func (c *Client) getResponse(method, path string, header http.Header, body io.Re
106156
return data, nil
107157
}
108158

109-
func (c *Client) getParsedResponse(method, path string, header http.Header, body io.Reader, obj interface{}) error {
159+
func (c *Client) getParsedResponse(method, path string, header http.Header, body interface{}, obj interface{}) error {
110160
data, err := c.getResponse(method, path, header, body)
111161
if err != nil {
112162
return err

gitea/pull.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,14 @@ type PRBranchInfo struct {
6363

6464
// ListPullRequestsOptions options for listing pull requests
6565
type ListPullRequestsOptions struct {
66-
Page int `json:"page"`
67-
State string `json:"state"`
66+
Page int `url:"page"`
67+
State string `url:"state"`
6868
}
6969

7070
// ListRepoPullRequests list PRs of one repository
71-
func (c *Client) ListRepoPullRequests(owner, repo string, opt ListPullRequestsOptions) ([]*PullRequest, error) {
72-
body, err := json.Marshal(&opt)
73-
if err != nil {
74-
return nil, err
75-
}
71+
func (c *Client) ListRepoPullRequests(owner, repo string, opt *ListPullRequestsOptions) ([]*PullRequest, error) {
7672
prs := make([]*PullRequest, 0, 10)
77-
return prs, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/pulls", owner, repo), jsonHeader, bytes.NewReader(body), &prs)
73+
return prs, c.getParsedResponse("GET", fmt.Sprintf("/repos/%s/%s/pulls", owner, repo), jsonHeader, opt, &prs)
7874
}
7975

8076
// GetPullRequest get information of one PR

0 commit comments

Comments
 (0)