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 }