aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMáximo Cuadros <mcuadros@gmail.com>2018-06-11 10:26:30 +0200
committerGitHub <noreply@github.com>2018-06-11 10:26:30 +0200
commit0710c6cb710a0cdab04ab7f61cc62e23cfcacbee (patch)
tree38ca4ef4d3320aeebed55b5154926bf23dd5b3c4
parente7cf6d22593c8fcdd393b0da9d922c670b61a199 (diff)
parentbf6190841e8b6cd3a216bc056e5b71c73e18c410 (diff)
downloadgo-git-0710c6cb710a0cdab04ab7f61cc62e23cfcacbee.tar.gz
Merge pull request #859 from ebilling/fix-858/token-authentication
plumbing/transport: http, Adds token authentication support [Fixes #858]
-rw-r--r--_examples/branch/main.go2
-rw-r--r--plumbing/transport/http/common.go25
-rw-r--r--plumbing/transport/http/common_test.go13
3 files changed, 39 insertions, 1 deletions
diff --git a/_examples/branch/main.go b/_examples/branch/main.go
index fa1ad01..ff33ead 100644
--- a/_examples/branch/main.go
+++ b/_examples/branch/main.go
@@ -28,7 +28,7 @@ func main() {
// Create a new plumbing.HashReference object with the name of the branch
// and the hash from the HEAD. The reference name should be a full reference
- // name and now a abbreviated one, as is used on the git cli.
+ // name and not an abbreviated one, as is used on the git cli.
//
// For tags we should use `refs/tags/%s` instead of `refs/heads/%s` used
// for branches.
diff --git a/plumbing/transport/http/common.go b/plumbing/transport/http/common.go
index 2c337b7..c034846 100644
--- a/plumbing/transport/http/common.go
+++ b/plumbing/transport/http/common.go
@@ -201,6 +201,31 @@ func (a *BasicAuth) String() string {
return fmt.Sprintf("%s - %s:%s", a.Name(), a.Username, masked)
}
+// TokenAuth implements the go-git http.AuthMethod and transport.AuthMethod interfaces
+type TokenAuth struct {
+ Token string
+}
+
+func (a *TokenAuth) setAuth(r *http.Request) {
+ if a == nil {
+ return
+ }
+ r.Header.Add("Authorization", fmt.Sprintf("Bearer %s", a.Token))
+}
+
+// Name is name of the auth
+func (a *TokenAuth) Name() string {
+ return "http-token-auth"
+}
+
+func (a *TokenAuth) String() string {
+ masked := "*******"
+ if a.Token == "" {
+ masked = "<empty>"
+ }
+ return fmt.Sprintf("%s - %s", a.Name(), masked)
+}
+
// Err is a dedicated error to return errors based on status code
type Err struct {
Response *http.Response
diff --git a/plumbing/transport/http/common_test.go b/plumbing/transport/http/common_test.go
index 8d57996..71eede4 100644
--- a/plumbing/transport/http/common_test.go
+++ b/plumbing/transport/http/common_test.go
@@ -54,6 +54,19 @@ func (s *ClientSuite) TestNewBasicAuth(c *C) {
c.Assert(a.String(), Equals, "http-basic-auth - foo:*******")
}
+func (s *ClientSuite) TestNewTokenAuth(c *C) {
+ a := &TokenAuth{"OAUTH-TOKEN-TEXT"}
+
+ c.Assert(a.Name(), Equals, "http-token-auth")
+ c.Assert(a.String(), Equals, "http-token-auth - *******")
+
+ // Check header is set correctly
+ req, err := http.NewRequest("GET", "https://github.com/git-fixtures/basic", nil)
+ c.Assert(err, Equals, nil)
+ a.setAuth(req)
+ c.Assert(req.Header.Get("Authorization"), Equals, "Bearer OAUTH-TOKEN-TEXT")
+}
+
func (s *ClientSuite) TestNewErrOK(c *C) {
res := &http.Response{StatusCode: http.StatusOK}
err := NewErr(res)