Skip to content

Commit 5bccfc3

Browse files
authored
validate bitbucket api url (#138)
1 parent ec39e8b commit 5bccfc3

File tree

1 file changed

+19
-11
lines changed

1 file changed

+19
-11
lines changed

client.go

+19-11
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ const DEFAULT_PAGE_LENGTH = 10
2525
const DEFAULT_MAX_DEPTH = 1
2626
const DEFAULT_BITBUCKET_API_BASE_URL = "https://api.bitbucket.org/2.0"
2727

28-
func apiBaseUrl() string {
28+
func apiBaseUrl() (*url.URL, error) {
2929
ev := os.Getenv("BITBUCKET_API_BASE_URL")
30-
if ev != "" {
31-
return ev
30+
if ev == "" {
31+
ev = DEFAULT_BITBUCKET_API_BASE_URL
3232
}
3333

34-
return DEFAULT_BITBUCKET_API_BASE_URL
34+
return url.Parse(ev)
3535
}
3636

3737
type Client struct {
@@ -43,7 +43,7 @@ type Client struct {
4343
Workspaces *Workspace
4444
Pagelen uint64
4545
MaxDepth uint64
46-
apiBaseURL string
46+
apiBaseURL *url.URL
4747

4848
HttpClient *http.Client
4949
}
@@ -135,7 +135,11 @@ func NewBasicAuth(u, p string) *Client {
135135
}
136136

137137
func injectClient(a *auth) *Client {
138-
c := &Client{Auth: a, Pagelen: DEFAULT_PAGE_LENGTH, MaxDepth: DEFAULT_MAX_DEPTH, apiBaseURL: apiBaseUrl()}
138+
bitbucketUrl, err := apiBaseUrl()
139+
if err != nil {
140+
log.Fatalf("invalid bitbucket url")
141+
}
142+
c := &Client{Auth: a, Pagelen: DEFAULT_PAGE_LENGTH, MaxDepth: DEFAULT_MAX_DEPTH, apiBaseURL: bitbucketUrl}
139143
c.Repositories = &Repositories{
140144
c: c,
141145
PullRequests: &PullRequests{c: c},
@@ -157,11 +161,15 @@ func injectClient(a *auth) *Client {
157161
}
158162

159163
func (c *Client) GetApiBaseURL() string {
160-
return c.apiBaseURL
164+
return fmt.Sprintf("%s%s", c.apiBaseURL.GetApiHostnameURL(), c.apiBaseURL.Path)
165+
}
166+
167+
func (c *Client) GetApiHostnameURL() string {
168+
return fmt.Sprintf("%s://%s", c.apiBaseURL.Scheme, c.apiBaseURL.Host)
161169
}
162170

163-
func (c *Client) SetApiBaseURL(urlStr string) {
164-
c.apiBaseURL = urlStr
171+
func (c *Client) SetApiBaseURL(urlStr url.URL) {
172+
c.apiBaseURL = &urlStr
165173
}
166174

167175
func (c *Client) executeRaw(method string, urlStr string, text string) (io.ReadCloser, error) {
@@ -379,7 +387,7 @@ func unexpectedHttpStatusCode(statusCode int) bool {
379387
func (c *Client) requestUrl(template string, args ...interface{}) string {
380388

381389
if len(args) == 1 && args[0] == "" {
382-
return c.apiBaseURL + template
390+
return c.GetApiBaseURL() + template
383391
}
384-
return c.apiBaseURL + fmt.Sprintf(template, args...)
392+
return c.GetApiBaseURL() + fmt.Sprintf(template, args...)
385393
}

0 commit comments

Comments
 (0)