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  }