1<h1><?= t_default('twofa2.title', 'Two-factor authentication') ?></h1>
2
3<?php if (empty($errors) === false): ?>
4 <?= output_errors($errors) ?>
5<?php endif; ?>
6
7<?php if (!empty($successes)): ?>
8 <?php foreach ($successes as $message): ?>
9 <div class="alert-box alert-success"><p><?= h($message) ?></p></div>
10 <?php endforeach; ?>
11<?php endif; ?>
12
13<h2><?= t_default('twofa2.app_title', 'Authenticator app') ?></h2>
14<?php if ($status['totp_enabled']): ?>
15 <p><?= t_default('twofa2.app_enabled', 'Enabled.') ?></p>
16 <form method="post" data-confirm="Disable the authenticator app?">
17 <?php Token::create(); ?>
18 <button type="submit" name="tfa2_totp_disable" value="1"><?= t_default('twofa2.disable', 'Disable') ?></button>
19 </form>
20<?php else:
21 $pendingRow = znote2fa_row($accountId);
22 if (empty($pendingRow['totp_secret'])) {
23 ?>
24 <form method="post">
25 <?php Token::create(); ?>
26 <button type="submit" name="tfa2_totp_start" value="1"><?= t_default('twofa2.app_start', 'Set up an authenticator app') ?></button>
27 </form>
28 <?php
29 } else {
30 ?>
31 <img
32 src="<?php echo TokenAuth6238::getBarCodeUrl($user_data['name'], $_SERVER["HTTP_HOST"], $pendingRow['totp_secret'], preg_replace('/\s+/', '', $config['site_title'])); ?>"
33 alt="Two-factor authentication QR code image for this account."
34 />
35 <form method="post">
36 <?php Token::create(); ?>
37 <input type="text" name="tfa2_totp_code" placeholder="000000" autocomplete="one-time-code">
38 <button type="submit" name="tfa2_totp_confirm" value="1"><?= t_default('twofa2.app_confirm', 'Confirm') ?></button>
39 </form>
40 <?php
41 }
42endif; ?>
43
44<h2><?= t_default('twofa2.email_title', 'E-mail codes') ?></h2>
45<?php if (znote2fa_v2_config()['email_otp_enabled']): ?>
46 <p><?= t_default('twofa2.email_help', 'Receive a one-time code by e-mail whenever you log in and have no authenticator app configured.') ?></p>
47 <form method="post">
48 <?php Token::create(); ?>
49 <label>
50 <input type="checkbox" name="tfa2_email_enabled" value="1" <?= $status['email_otp_enabled'] ? 'checked' : '' ?>>
51 <?= t_default('twofa2.email_enable', 'Enable e-mail codes') ?>
52 </label>
53 <button type="submit" name="tfa2_email_toggle" value="1"><?= t_default('twofa2.save', 'Save') ?></button>
54 </form>
55<?php else: ?>
56 <p><?= t_default('twofa2.email_unavailable', 'E-mail codes are disabled by the site administrator.') ?></p>
57<?php endif; ?>
58
59<h2><?= t_default('twofa2.recovery_title', 'Recovery codes') ?></h2>
60<?php if ($revealedRecoveryCodes): ?>
61 <p><strong><?= t_default('twofa2.recovery_reveal', 'Save these somewhere safe. Each one works once and this is the only time they are shown.') ?></strong></p>
62 <ul>
63 <?php foreach ($revealedRecoveryCodes as $code): ?>
64 <li><code><?= h($code) ?></code></li>
65 <?php endforeach; ?>
66 </ul>
67<?php else: ?>
68 <p><?= t_default('twofa2.recovery_remaining', '{n} unused recovery codes.', ['n' => $status['recovery_remaining']]) ?></p>
69<?php endif; ?>
70<form method="post" <?= $status['recovery_remaining'] > 0 ? 'data-confirm="Generating new codes invalidates the old ones. Continue?"' : '' ?>>
71 <?php Token::create(); ?>
72 <button type="submit" name="tfa2_recovery_generate" value="1"><?= t_default('twofa2.recovery_generate', 'Generate new recovery codes') ?></button>
73</form>
74
75<h2><?= t_default('twofa2.devices_title', 'Trusted devices') ?></h2>
76<?php if ($devices): ?>
77 <ul>
78 <?php foreach ($devices as $device): ?>
79 <li>
80 <?= h($device['label']) ?> - <?= h($device['ip']) ?>
81 (<?= t_default('twofa2.last_used', 'last used {when}', ['when' => getClock((int)$device['last_used_at'], true)]) ?>)
82 <form method="post" style="display:inline;">
83 <?php Token::create(); ?>
84 <button type="submit" name="tfa2_device_revoke" value="<?= (int)$device['id'] ?>"><?= t_default('twofa2.revoke', 'Revoke') ?></button>
85 </form>
86 </li>
87 <?php endforeach; ?>
88 </ul>
89<?php else: ?>
90 <p><?= t_default('twofa2.no_devices', 'No trusted devices.') ?></p>
91<?php endif; ?>
92
93<h2><?= t_default('twofa2.logout_all_title', 'Log out everywhere') ?></h2>
94<p><?= t_default('twofa2.logout_all_help', 'Forgets every trusted device and requires the two-factor code again on every session, including this one\'s next login.') ?></p>
95<form method="post" data-confirm="Log out all devices and forget trusted devices?">
96 <?php Token::create(); ?>
97 <button type="submit" name="tfa2_logout_all" value="1"><?= t_default('twofa2.logout_all', 'Log out all devices') ?></button>
98</form>
99