func setRequestAuthFromUrl(cfg *config.Configuration, req *http.Request, u *url.URL) bool { if !cfg.NtlmAccess(GetOperationForRequest(req)) && u.User != nil { if pass, ok := u.User.Password(); ok { fmt.Fprintln(os.Stderr, "warning: current Git remote contains credentials") setRequestAuth(cfg, req, u.User.Username(), pass) return true } } return false }
func skipCredsCheck(cfg *config.Configuration, req *http.Request) bool { if cfg.NtlmAccess(GetOperationForRequest(req)) { return false } if len(req.Header.Get("Authorization")) > 0 { return true } q := req.URL.Query() return len(q["token"]) > 0 }
func setRequestAuth(cfg *config.Configuration, req *http.Request, user, pass string) { if cfg.NtlmAccess(GetOperationForRequest(req)) { return } if len(user) == 0 && len(pass) == 0 { return } token := fmt.Sprintf("%s:%s", user, pass) auth := "Basic " + strings.TrimSpace(base64.StdEncoding.EncodeToString([]byte(token))) req.Header.Set("Authorization", auth) }
// Internal http request management func doHttpRequest(cfg *config.Configuration, req *http.Request, creds auth.Creds) (*http.Response, error) { var ( res *http.Response cause string err error ) if cfg.NtlmAccess(auth.GetOperationForRequest(req)) { cause = "ntlm" res, err = doNTLMRequest(cfg, req, true) } else { cause = "http" res, err = NewHttpClient(cfg, req.Host).Do(req) } if res == nil { res = &http.Response{ StatusCode: 0, Header: make(http.Header), Request: req, Body: ioutil.NopCloser(bytes.NewBufferString("")), } } if err != nil { if errors.IsAuthError(err) { SetAuthType(cfg, req, res) doHttpRequest(cfg, req, creds) } else { err = errors.Wrap(err, cause) } } else { err = handleResponse(cfg, res, creds) } if err != nil { if res != nil { SetErrorResponseContext(cfg, err, res) } else { setErrorRequestContext(cfg, err, req) } } return res, err }