git-lfs/lfsapi/lfsapi.go

73 lines
1.5 KiB
Go
Raw Normal View History

package lfsapi
2016-12-16 22:43:05 +00:00
import (
2016-12-22 22:31:48 +00:00
"fmt"
2016-12-20 17:02:25 +00:00
"sync"
2016-12-16 22:43:05 +00:00
"github.com/ThomsonReutersEikon/go-ntlm/ntlm"
2016-12-16 22:47:02 +00:00
"github.com/git-lfs/git-lfs/errors"
"github.com/git-lfs/git-lfs/lfshttp"
2016-12-16 22:43:05 +00:00
)
type Client struct {
2016-12-19 21:38:06 +00:00
Endpoints EndpointFinder
Credentials CredentialHelper
2016-12-19 21:53:18 +00:00
Netrc NetrcFinder
2016-12-20 17:02:25 +00:00
ntlmSessions map[string]ntlm.ClientSession
ntlmMu sync.Mutex
commandCredHelper *commandCredentialHelper
askpassCredHelper *AskPassCredentialHelper
cachingCredHelper *credentialCacher
client *lfshttp.Client
}
func NewClient(ctx lfshttp.Context) (*Client, error) {
if ctx == nil {
ctx = lfshttp.NewContext(nil, nil, nil)
2016-12-20 17:29:26 +00:00
}
gitEnv := ctx.GitEnv()
osEnv := ctx.OSEnv()
2017-09-29 17:45:52 +00:00
netrc, netrcfile, err := ParseNetrc(osEnv)
if err != nil {
2017-09-29 17:45:52 +00:00
return nil, errors.Wrap(err, fmt.Sprintf("bad netrc file %s", netrcfile))
}
httpClient, err := lfshttp.NewClient(ctx)
if err != nil {
return nil, errors.Wrap(err, fmt.Sprintf("error creating http client"))
}
c := &Client{
Endpoints: NewEndpointFinder(ctx),
Netrc: netrc,
commandCredHelper: &commandCredentialHelper{
SkipPrompt: osEnv.Bool("GIT_TERMINAL_PROMPT", false),
},
client: httpClient,
}
askpass, ok := osEnv.Get("GIT_ASKPASS")
if !ok {
askpass, ok = gitEnv.Get("core.askpass")
}
if !ok {
askpass, _ = osEnv.Get("SSH_ASKPASS")
}
if len(askpass) > 0 {
c.askpassCredHelper = &AskPassCredentialHelper{
Program: askpass,
}
}
cacheCreds := gitEnv.Bool("lfs.cachecredentials", true)
if cacheCreds {
c.cachingCredHelper = newCredentialCacher()
}
return c, nil
}