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

     1  package googleapps
     2  
     3  import (
     4  	"bytes"
     5  	"io/ioutil"
     6  	"net/http"
     7  	"net/http/httptest"
     8  	"net/url"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/PuerkitoBio/goquery"
    13  	"github.com/stretchr/testify/require"
    14  	"github.com/versent/saml2aws/pkg/provider"
    15  )
    16  
    17  func TestExtractInputByName(t *testing.T) {
    18  	html := `<html><body><input name="logincaptcha" value="test error message"\></body></html>`
    19  
    20  	doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    21  	require.Nil(t, err)
    22  
    23  	captcha := mustFindInputByName(doc, "logincaptcha")
    24  	require.Equal(t, "test error message", captcha)
    25  }
    26  
    27  func TestExtractInputsByFormQuery(t *testing.T) {
    28  	html := `<html><body><form id="dev" action="http://example.com/test"><input name="pass" value="test error message"\></form></body></html>`
    29  
    30  	doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    31  	require.Nil(t, err)
    32  
    33  	form, actionURL, err := extractInputsByFormQuery(doc, "#dev")
    34  	require.Nil(t, err)
    35  	require.Equal(t, "http://example.com/test", actionURL)
    36  	require.Equal(t, "test error message", form.Get("pass"))
    37  
    38  	form2, actionURL2, err := extractInputsByFormQuery(doc, `[action$="/test"]`)
    39  	require.Nil(t, err)
    40  	require.Equal(t, "http://example.com/test", actionURL2)
    41  	require.Equal(t, "test error message", form2.Get("pass"))
    42  }
    43  func TestExtractErrorMsg(t *testing.T) {
    44  	html := `<html><body><span class="error-msg">test error message</span></body></html>`
    45  
    46  	doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    47  	require.Nil(t, err)
    48  
    49  	captcha := mustFindErrorMsg(doc)
    50  	require.Equal(t, "test error message", captcha)
    51  }
    52  
    53  func TestContentContainsMessage(t *testing.T) {
    54  	html := `<html><body><h2>This extra step shows it’s really you trying to sign in</h2></body></html>`
    55  
    56  	doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    57  	require.Nil(t, err)
    58  
    59  	txt := extractNodeText(doc, "h2", "This extra step shows it’s really you trying to sign in")
    60  	require.Equal(t, "This extra step shows it’s really you trying to sign in", txt)
    61  }
    62  
    63  func TestContentContainsMessage2(t *testing.T) {
    64  	html := `<html><body><h2>This extra step shows that it’s really you trying to sign in</h2></body></html>`
    65  
    66  	doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    67  	require.Nil(t, err)
    68  
    69  	txt := extractNodeText(doc, "h2", "This extra step shows that it’s really you trying to sign in")
    70  	require.Equal(t, "This extra step shows that it’s really you trying to sign in", txt)
    71  }
    72  
    73  func TestChallengePage(t *testing.T) {
    74  
    75  	data, err := ioutil.ReadFile("example/challenge-totp.html")
    76  	require.Nil(t, err)
    77  
    78  	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    79  		w.Write(data)
    80  	}))
    81  	defer ts.Close()
    82  
    83  	kc := Client{client: &provider.HTTPClient{Client: http.Client{}}}
    84  	// loginDetails := &creds.LoginDetails{URL: ts.URL, Username: "test", Password: "test123"}
    85  	authForm := url.Values{}
    86  
    87  	challengeDoc, err := kc.loadChallengePage(ts.URL, "https://accounts.google.com/signin/challenge/sl/password", authForm)
    88  	require.Nil(t, err)
    89  	require.NotNil(t, challengeDoc)
    90  }
    91  
    92  func TestExtractDataAttributes(t *testing.T) {
    93  	data, err := ioutil.ReadFile("example/challenge-prompt.html")
    94  	require.Nil(t, err)
    95  	doc, err := goquery.NewDocumentFromReader(bytes.NewReader(data))
    96  	require.Nil(t, err)
    97  
    98  	dataAttrs := extractDataAttributes(doc, "div[data-context]", []string{"data-context", "data-gapi-url", "data-tx-id", "data-tx-lifetime"})
    99  
   100  	require.Equal(t, "https://apis.google.com/js/base.js", dataAttrs["data-gapi-url"])
   101  }