mirror of
https://github.com/0rangebananaspy/authelia.git
synced 2024-09-14 22:47:21 +07:00
66 lines
2.4 KiB
Go
66 lines
2.4 KiB
Go
package suites
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/go-rod/rod"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func (rs *RodSession) doFillLoginPageAndClick(t *testing.T, page *rod.Page, username, password string, keepMeLoggedIn bool) {
|
|
usernameElement := rs.WaitElementLocatedByCSSSelector(t, page, "username-textfield")
|
|
err := usernameElement.Input(username)
|
|
require.NoError(t, err)
|
|
|
|
passwordElement := rs.WaitElementLocatedByCSSSelector(t, page, "password-textfield")
|
|
err = passwordElement.Input(password)
|
|
require.NoError(t, err)
|
|
|
|
if keepMeLoggedIn {
|
|
keepMeLoggedInElement := rs.WaitElementLocatedByCSSSelector(t, page, "remember-checkbox")
|
|
err = keepMeLoggedInElement.Click("left")
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
buttonElement := rs.WaitElementLocatedByCSSSelector(t, page, "sign-in-button")
|
|
err = buttonElement.Click("left")
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
// Login 1FA.
|
|
func (rs *RodSession) doLoginOneFactor(t *testing.T, page *rod.Page, username, password string, keepMeLoggedIn bool, targetURL string) {
|
|
rs.doVisitLoginPage(t, page, targetURL)
|
|
rs.doFillLoginPageAndClick(t, page, username, password, keepMeLoggedIn)
|
|
}
|
|
|
|
// Login 1FA and 2FA subsequently (must already be registered).
|
|
func (rs *RodSession) doLoginTwoFactor(t *testing.T, page *rod.Page, username, password string, keepMeLoggedIn bool, otpSecret, targetURL string) {
|
|
rs.doLoginOneFactor(t, page, username, password, keepMeLoggedIn, targetURL)
|
|
rs.verifyIsSecondFactorPage(t, page)
|
|
rs.doValidateTOTP(t, page, otpSecret)
|
|
// timeout when targetURL is not defined to prevent a show stopping redirect when visiting a protected domain.
|
|
if targetURL == "" {
|
|
time.Sleep(1 * time.Second)
|
|
}
|
|
}
|
|
|
|
// Login 1FA and register 2FA.
|
|
func (rs *RodSession) doLoginAndRegisterTOTP(t *testing.T, page *rod.Page, username, password string, keepMeLoggedIn bool) string {
|
|
rs.doLoginOneFactor(t, page, username, password, keepMeLoggedIn, "")
|
|
secret := rs.doRegisterTOTP(t, page)
|
|
rs.doVisit(t, page, GetLoginBaseURL())
|
|
rs.verifyIsSecondFactorPage(t, page)
|
|
|
|
return secret
|
|
}
|
|
|
|
// Register a user with TOTP, logout and then authenticate until TOTP-2FA.
|
|
func (rs *RodSession) doRegisterAndLogin2FA(t *testing.T, page *rod.Page, username, password string, keepMeLoggedIn bool, targetURL string) string { //nolint:unparam
|
|
// Register TOTP secret and logout.
|
|
secret := rs.doRegisterThenLogout(t, page, username, password)
|
|
rs.doLoginTwoFactor(t, page, username, password, keepMeLoggedIn, secret, targetURL)
|
|
|
|
return secret
|
|
}
|