fix merge

This commit is contained in:
risk danger olson 2016-12-20 14:42:25 -07:00
commit c1dbf53f42
4 changed files with 63 additions and 7 deletions

@ -2,6 +2,7 @@ package lfsapi
import (
"encoding/base64"
"encoding/json"
"fmt"
"net/http"
"net/http/httptest"
@ -14,6 +15,10 @@ import (
"github.com/stretchr/testify/require"
)
type authRequest struct {
Test string
}
func TestAuthenticateHeaderAccess(t *testing.T) {
tests := map[string]Access{
"": BasicAccess,
@ -47,6 +52,11 @@ func TestDoWithAuthApprove(t *testing.T) {
atomic.AddUint32(&called, 1)
w.Header().Set("Lfs-Authenticate", "Basic")
body := &authRequest{}
err := json.NewDecoder(req.Body).Decode(body)
assert.Nil(t, err)
assert.Equal(t, "Approve", body.Test)
actual := req.Header.Get("Authorization")
if len(actual) == 0 {
w.WriteHeader(http.StatusUnauthorized)
@ -73,6 +83,9 @@ func TestDoWithAuthApprove(t *testing.T) {
req, err := http.NewRequest("GET", srv.URL, nil)
require.Nil(t, err)
err = MarshalToRequest(req, &authRequest{Test: "Approve"})
require.Nil(t, err)
res, err := c.DoWithAuth("", req)
require.Nil(t, err)
@ -95,6 +108,11 @@ func TestDoWithAuthReject(t *testing.T) {
atomic.AddUint32(&called, 1)
w.Header().Set("Lfs-Authenticate", "Basic")
body := &authRequest{}
err := json.NewDecoder(req.Body).Decode(body)
assert.Nil(t, err)
assert.Equal(t, "Reject", body.Test)
actual := req.Header.Get("Authorization")
expected := "Basic " + strings.TrimSpace(
base64.StdEncoding.EncodeToString([]byte("user:pass")),
@ -133,6 +151,9 @@ func TestDoWithAuthReject(t *testing.T) {
req, err := http.NewRequest("GET", srv.URL, nil)
require.Nil(t, err)
err = MarshalToRequest(req, &authRequest{Test: "Reject"})
require.Nil(t, err)
res, err := c.DoWithAuth("", req)
require.Nil(t, err)

32
lfsapi/body.go Normal file

@ -0,0 +1,32 @@
package lfsapi
import (
"bytes"
"encoding/json"
"io"
"net/http"
)
type ReadSeekCloser interface {
io.Seeker
io.ReadCloser
}
func MarshalToRequest(req *http.Request, obj interface{}) error {
by, err := json.Marshal(obj)
if err != nil {
return err
}
req.ContentLength = int64(len(by))
req.Body = &closingByteReader{Reader: bytes.NewReader(by)}
return nil
}
type closingByteReader struct {
*bytes.Reader
}
func (r *closingByteReader) Close() error {
return nil
}

@ -3,6 +3,7 @@ package lfsapi
import (
"crypto/tls"
"encoding/json"
"io"
"net"
"net/http"
"regexp"
@ -79,6 +80,10 @@ func NewClient(osEnv env, gitEnv env) (*Client, error) {
}
func (c *Client) Do(req *http.Request) (*http.Response, error) {
if seeker, ok := req.Body.(io.Seeker); ok {
seeker.Seek(0, io.SeekStart)
}
res, err := c.httpClient(req.Host).Do(req)
if err != nil {
return res, err

@ -1,8 +1,6 @@
package tq
import (
"bytes"
"encoding/json"
"net/http"
"github.com/git-lfs/git-lfs/lfsapi"
@ -17,15 +15,15 @@ func verifyUpload(c *lfsapi.Client, t *Transfer) error {
return err
}
by, err := json.Marshal(struct {
Oid string `json:"oid"`
Size int64 `json:"size"`
}{Oid: t.Oid, Size: t.Size})
req, err := http.NewRequest("POST", action.Href, nil)
if err != nil {
return err
}
req, err := http.NewRequest("POST", action.Href, bytes.NewReader(by))
err = lfsapi.MarshalToRequest(req, struct {
Oid string `json:"oid"`
Size int64 `json:"size"`
}{Oid: t.Oid, Size: t.Size})
if err != nil {
return err
}