44 lines
914 B
Go
44 lines
914 B
Go
|
// +build windows
|
||
|
|
||
|
package lfsapi
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/alexbrainman/sspi"
|
||
|
"github.com/alexbrainman/sspi/ntlm"
|
||
|
)
|
||
|
|
||
|
func (c *Client) ntlmAuthenticateRequest(req *http.Request, creds *ntmlCredentials) (*http.Response, error) {
|
||
|
var sspiCreds *sspi.Credentials
|
||
|
var err error
|
||
|
if creds == nil {
|
||
|
sspiCreds, err = ntlm.AcquireCurrentUserCredentials()
|
||
|
} else {
|
||
|
sspiCreds, err = ntlm.AcquireUserCredentials(creds.domain, creds.username, creds.password)
|
||
|
}
|
||
|
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer sspiCreds.Release()
|
||
|
|
||
|
secctx, negotiate, err := ntlm.NewClientContext(sspiCreds)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer secctx.Release()
|
||
|
|
||
|
chRes, challengeMsg, err := c.ntlmSendType1Message(req, negotiate)
|
||
|
if err != nil {
|
||
|
return chRes, err
|
||
|
}
|
||
|
|
||
|
authenticateMsg, err := secctx.Update(challengeMsg)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return c.ntlmSendType3Message(req, authenticateMsg)
|
||
|
}
|