github.com/versent/saml2aws@v2.17.0+incompatible/pkg/provider/adfs2/ntlm.go (about)

     1  package adfs2
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"net/http"
     8  
     9  	"github.com/PuerkitoBio/goquery"
    10  	"github.com/pkg/errors"
    11  	"github.com/versent/saml2aws/pkg/creds"
    12  )
    13  
    14  func (ac *Client) authenticateNTLM(loginDetails *creds.LoginDetails) (string, error) {
    15  
    16  	ac.client.CheckRedirect = func(req *http.Request, via []*http.Request) error {
    17  		req.SetBasicAuth(loginDetails.Username, loginDetails.Password)
    18  		return nil
    19  	}
    20  
    21  	url := fmt.Sprintf("%s/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=%s", loginDetails.URL, ac.idpAccount.AmazonWebservicesURN)
    22  	req, err := http.NewRequest("GET", url, nil)
    23  	if err != nil {
    24  		return "", err
    25  	}
    26  	req.SetBasicAuth(loginDetails.Username, loginDetails.Password)
    27  
    28  	res, err := ac.client.Do(req)
    29  	if err != nil {
    30  		return "", errors.Wrap(err, "error retieving login form")
    31  	}
    32  
    33  	data, err := ioutil.ReadAll(res.Body)
    34  	if err != nil {
    35  		return "", errors.Wrap(err, "error retieving body")
    36  	}
    37  
    38  	doc, err := goquery.NewDocumentFromReader(bytes.NewBuffer(data))
    39  	if err != nil {
    40  		return "", errors.Wrap(err, "error parsing document")
    41  	}
    42  
    43  	return extractSamlAssertion(doc)
    44  }