Skip to content

Commit

Permalink
Merge pull request #6044 from chihiro-adachi/tfa-e2e
Browse files Browse the repository at this point in the history
二段階認証のE2Eテストを追加
  • Loading branch information
dotani1111 committed Oct 20, 2023
2 parents 9f20d4f + 9a176cf commit 81b68e7
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 1 deletion.
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');
}
}

0 comments on commit 81b68e7

Please sign in to comment.