github.com/git-lfs/git-lfs@v2.5.2+incompatible/lfsapi/ntlm_auth_windows.go (about)

     1  // +build windows
     2  
     3  package lfsapi
     4  
     5  import (
     6  	"net/http"
     7  
     8  	"github.com/alexbrainman/sspi"
     9  	"github.com/alexbrainman/sspi/ntlm"
    10  )
    11  
    12  func (c *Client) ntlmAuthenticateRequest(req *http.Request, creds *ntmlCredentials) (*http.Response, error) {
    13  	var sspiCreds *sspi.Credentials
    14  	var err error
    15  	if creds == nil {
    16  		sspiCreds, err = ntlm.AcquireCurrentUserCredentials()
    17  	} else {
    18  		sspiCreds, err = ntlm.AcquireUserCredentials(creds.domain, creds.username, creds.password)
    19  	}
    20  
    21  	if err != nil {
    22  		return nil, err
    23  	}
    24  	defer sspiCreds.Release()
    25  
    26  	secctx, negotiate, err := ntlm.NewClientContext(sspiCreds)
    27  	if err != nil {
    28  		return nil, err
    29  	}
    30  	defer secctx.Release()
    31  
    32  	chRes, challengeMsg, err := c.ntlmSendType1Message(req, negotiate)
    33  	if err != nil {
    34  		return chRes, err
    35  	}
    36  
    37  	authenticateMsg, err := secctx.Update(challengeMsg)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	return c.ntlmSendType3Message(req, authenticateMsg)
    43  }