Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

二段階認証のE2Eテストを追加 #6044

Merged
merged 3 commits into from
Oct 20, 2023
Merged
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
2 changes: 1 addition & 1 deletion .github/workflows/e2e-test-throttling.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
matrix:
php: [ 8.1 ]
db: [ pgsql ]
method: [ フロント画面ログイン_IP, フロント画面ログイン_会員, 管理画面ログイン_IP, 管理画面ログイン_会員, 会員登録, 問い合わせ, パスワード再発行, 注文確認_非会員購入, 注文確認_会員購入, 注文完了_非会員購入, 注文完了_会員購入, 会員情報編集, 配送先情報_追加, 配送先情報_編集, 配送先情報_削除, order_お届け先追加, order_お届け先変更, 新規会員登録_入力 ]
method: [ フロント画面ログイン_IP, フロント画面ログイン_会員, 管理画面ログイン_IP, 管理画面ログイン_会員, 会員登録, 問い合わせ, パスワード再発行, 注文確認_非会員購入, 注文確認_会員購入, 注文完了_非会員購入, 注文完了_会員購入, 会員情報編集, 配送先情報_追加, 配送先情報_編集, 配送先情報_削除, order_お届け先追加, order_お届け先変更, 新規会員登録_入力, 管理画面二段階認証 ]
include:
- db: pgsql
database_url: postgres://postgres:password@127.0.0.1:5432/eccube_db
Expand Down
61 changes: 61 additions & 0 deletions codeception/acceptance/EF09ThrottlingCest.php
Original file line number Diff line number Diff line change
Expand Up @@ -772,4 +772,65 @@ public function 新規会員登録_入力(AcceptanceTester $I)
$I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p.ec-reportDescription');
}

public function 管理画面二段階認証(AcceptanceTester $I)
{
$I->loginAsAdmin();

// 二段階認証を有効にしてメンバーを新規作成
$config = Fixtures::get('config');
$I->amOnPage('/'.$config['eccube_admin_route'].'/setting/system/member/new');
$I->see('メンバー登録システム設定', '.c-pageTitle');

$login_id = 'admin_'.\Eccube\Util\StringUtil::random(6);
$password = 'password1234';
$I->fillField(['id' => 'admin_member_name'], '管理者');
$I->fillField(['id' => 'admin_member_department'], 'admin_throttling');
$I->fillField(['id' => 'admin_member_login_id'], $login_id);
$I->fillField(['id' => 'admin_member_plain_password_first'], $password);
$I->fillField(['id' => 'admin_member_plain_password_second'], $password);
$I->selectOption(['id' => 'admin_member_Authority'], 'システム管理者');
$I->click("label[for='admin_member_Work_1']"); // 稼働
$I->click("label[for='admin_member_two_factor_auth_enabled']"); // 有効
$I->click('#member_form .c-conversionArea__container button');
$I->see('保存しました', '.c-contentsArea .alert-success');

$I->logoutAsAdmin();

// 作成したメンバーでログイン
$I->submitForm('#form1', [
'login_id' => $login_id,
'password' => $password,
]);

// 二段階認証のセットアップ
$secret = $I->executeJS('return $("#admin_two_factor_auth_auth_key").val();');
$tfa = new \RobThree\Auth\TwoFactorAuth();
$code = $tfa->getCode($secret);
$I->fillField(['id' => 'admin_two_factor_auth_device_token'], $code);
$I->click('登録');
$I->see('ホーム', '.c-contentsArea .c-pageTitle > .c-pageTitle__titles');

// ログアウトし、二段階認証を試行する
$I->logoutAsAdmin();

$I->resetCookie('eccube_2fa'); // 2要素認証のクッキーを削除

$I->submitForm('#form1', [
'login_id' => $login_id,
'password' => $password,
]);

// トークン入力画面で5回入力
for ($i = 0; $i < 5; $i++) {
$I->fillField(['id' => 'admin_two_factor_auth_device_token'], 'aaaaa'.$i);
$I->click('認証');
$I->waitForText('トークンに誤りがあります。再度入力してください。');
}

// トークン入力の試行回数制限を超過
$I->fillField(['id' => 'admin_two_factor_auth_device_token'], 'aaaaaa');
$I->click('認証');

$I->see('試行回数の上限を超過しました。しばらくお待ちいただき、再度お試しください。', 'p');
}
}
Loading