github.com/versent/saml2aws@v2.17.0+incompatible/pkg/provider/adfs2/rsa_test.go (about) 1 package adfs2 2 3 import ( 4 "io/ioutil" 5 "net/http" 6 "net/http/httptest" 7 "net/url" 8 "os" 9 "strings" 10 "testing" 11 12 "github.com/PuerkitoBio/goquery" 13 14 "github.com/stretchr/testify/require" 15 "github.com/versent/saml2aws/pkg/cfg" 16 "github.com/versent/saml2aws/pkg/creds" 17 ) 18 19 const ( 20 exampleLoginURL = "https://id.example.com" 21 ) 22 23 func TestClient_getLoginForm(t *testing.T) { 24 25 data, err := ioutil.ReadFile("example/loginpage.html") 26 require.Nil(t, err) 27 28 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 29 w.Write(data) 30 })) 31 defer ts.Close() 32 33 c := Client{ 34 idpAccount: &cfg.IDPAccount{AmazonWebservicesURN: ""}, 35 client: &http.Client{}, 36 } 37 loginDetails := &creds.LoginDetails{URL: ts.URL, Username: "test", Password: "test123"} 38 39 submitURL, authForm, err := c.getLoginForm(loginDetails) 40 require.Nil(t, err) 41 require.True(t, strings.HasSuffix(submitURL, "/adfs/ls/idpinitiatedsignon")) 42 require.Equal(t, url.Values{ 43 "UserName": []string{"test"}, 44 "Password": []string{"test123"}, 45 "AuthMethod": []string{"FormsAuthentication"}, 46 }, authForm) 47 } 48 49 func TestClient_postLoginForm(t *testing.T) { 50 51 data, err := ioutil.ReadFile("example/passcode.html") 52 require.Nil(t, err) 53 54 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 55 w.Write(data) 56 })) 57 defer ts.Close() 58 59 loginForm := url.Values{ 60 "UserName": []string{"test"}, 61 "Password": []string{"test123"}, 62 "AuthMethod": []string{"FormsAuthentication"}, 63 } 64 65 c := Client{ 66 idpAccount: &cfg.IDPAccount{AmazonWebservicesURN: ""}, 67 client: &http.Client{}, 68 } 69 content, err := c.postLoginForm(ts.URL, loginForm) 70 require.Nil(t, err) 71 require.NotNil(t, content) 72 } 73 74 func TestClient_extractFormData(t *testing.T) { 75 76 file, err := os.Open("example/passcode.html") 77 require.Nil(t, err) 78 79 doc, err := goquery.NewDocumentFromReader(file) 80 require.Nil(t, err) 81 form, actionURL, err := extractFormData(doc) 82 require.Nil(t, err) 83 require.Equal(t, "https://id.example.com:443/adfs/ls/idpinitiatedsignon", actionURL) 84 require.Equal(t, "", form.Get("Passcode")) 85 require.Equal(t, "Submit", form.Get("Submit")) 86 }