Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion pkg/provider/browser/browser.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ var logger = logrus.WithField("provider", "browser")

const DEFAULT_TIMEOUT float64 = 300000

type pageNavigator interface {
Goto(url string, options ...playwright.PageGotoOptions) (playwright.Response, error)
}

// Client client for browser based Identity Provider
type Client struct {
BrowserType string
Expand Down Expand Up @@ -171,7 +175,7 @@ var getSAMLResponse = func(page playwright.Page, loginDetails *creds.LoginDetail
data, dataErr = request.PostData()
}
})
if _, err := page.Goto(loginDetails.URL); err != nil {
if err := navigateToLoginPage(page, loginDetails.URL); err != nil {
return "", err
}

Expand Down Expand Up @@ -202,6 +206,13 @@ var getSAMLResponse = func(page playwright.Page, loginDetails *creds.LoginDetail
return values.Get("SAMLResponse"), nil
}

func navigateToLoginPage(page pageNavigator, loginURL string) error {
_, err := page.Goto(loginURL, playwright.PageGotoOptions{
WaitUntil: playwright.WaitUntilStateCommit,
})
return err
}

var autoFill = func(page playwright.Page, loginDetails *creds.LoginDetails) error {
passwordField := page.Locator("input[type='password']")
err := passwordField.WaitFor(playwright.LocatorWaitForOptions{
Expand Down
24 changes: 24 additions & 0 deletions pkg/provider/browser/browser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,30 @@ func TestGetSAMLResponse(t *testing.T) {
// assert.Equal(t, samlp, samlResp)
}

type fakePageNavigator struct {
url string
options []playwright.PageGotoOptions
}

func (f *fakePageNavigator) Goto(url string, options ...playwright.PageGotoOptions) (playwright.Response, error) {
f.url = url
f.options = options
return nil, nil
}

func TestNavigateToLoginPageWaitsForCommit(t *testing.T) {
page := &fakePageNavigator{}
loginURL := "https://idp.example.com/login"

err := navigateToLoginPage(page, loginURL)

require.NoError(t, err)
assert.Equal(t, loginURL, page.url)
require.Len(t, page.options, 1)
require.NotNil(t, page.options[0].WaitUntil)
assert.Equal(t, *playwright.WaitUntilStateCommit, *page.options[0].WaitUntil)
}

func TestExpectRequestOptions(t *testing.T) {
timeout := float64(100000)
idpAccount := cfg.IDPAccount{
Expand Down