Add 2FA QR Code

Save your 2FA secrets to QR-Code.
This commit is contained in:
Shine
2024-12-13 23:42:57 +01:00
parent 477d7803f0
commit 8151de4b9a
4 changed files with 88 additions and 0 deletions
+6
View File
@@ -41,6 +41,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" data-toggle="pill" href="#bitcoin" role="tab" aria-controls="custom-tabs-four-settings" aria-selected="false">Bitcoin <i class="fab fa-bitcoin"></i></a> <a class="nav-link" data-toggle="pill" href="#bitcoin" role="tab" aria-controls="custom-tabs-four-settings" aria-selected="false">Bitcoin <i class="fab fa-bitcoin"></i></a>
</li> </li>
<li class="nav-item">
<a class="nav-link" data-toggle="pill" href="#twofa" role="tab" aria-controls="custom-tabs-four-settings" aria-selected="false">2FA <i class="fa fa-key"></i></a>
</li>
</ul> </ul>
</div> </div>
<div class="card-body"> <div class="card-body">
@@ -84,6 +87,9 @@
<div class="tab-pane fade" id="bitcoin" role="tabpanel" aria-labelledby="custom-tabs-four-profile-tab"> <div class="tab-pane fade" id="bitcoin" role="tabpanel" aria-labelledby="custom-tabs-four-profile-tab">
<?php include BASE_PATH . '/forms/static/bitcoin.php'; ?> <?php include BASE_PATH . '/forms/static/bitcoin.php'; ?>
</div> </div>
<div class="tab-pane fade" id="twofa" role="tabpanel" aria-labelledby="custom-tabs-four-profile-tab">
<?php include BASE_PATH . '/forms/static/2fa.php'; ?>
</div>
</div> </div>
</div> </div>
</div><!-- /.card --> </div><!-- /.card -->
+48
View File
@@ -0,0 +1,48 @@
<form class="form" action="static_qrcode.php?type=2fa" method="post" id="static_form" enctype="multipart/form-data">
<?php include BASE_PATH.'/forms/qrcode_options.php'; ?>
<!-- Input forms -->
<div class="col-sm-12 mb-2">
<div class="row">
<div class="col-6 col-md-3">
<div class="form-group">
<label>Type *</label>
<select name="algorithms" class="form-control">
<option value="totp" Selected>Time based</option>
<option value="hotp">Counter based</option>
</select>
</div>
</div>
<div class="col-6 col-md-3">
<div class="form-group">
<label>Secret *</label>
<input type="text" name="secret" value="" placeholder="" class="form-control">
</div>
</div>
<div class="col-6 col-md-3">
<div class="form-group">
<label>Label *</label>
<input type="text" name="label" value="" placeholder="" class="form-control">
</div>
</div>
<div class="col-6 col-md-3">
<div class="form-group">
<label>Issuer</label>
<input type="text" name="issuer" value="" placeholder="" class="form-control">
</div>
</div>
</div>
</div>
<div class="col-sm-12 mb-2">
<div class="row">
<div class="col-6 col-md-3">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</div>
</form>
+31
View File
@@ -333,6 +333,37 @@ class StaticQrcode {
$this->requiredFieldsError(); $this->requiredFieldsError();
} }
/**
* create a qr code of type "2FA"
* @string algorithms -> required
* @string secret -> required
* @string label -> required
* @string issuer
* otpauth://TYPE/LABEL?PARAMETERS
* otpauth://totp/Example:alice@google.com?secret=JBSWY3DPEHPK3PXP&issuer=Example
*/
public function twofaQrcode($algorithms, $secret, $label, $issuer)
{
if($algorithms != NULL && $secret != NULL && $label != NULL){
$this->sData = 'otpauth://' . $algorithms . '/' . $label . '?secret=' . $secret;
if (!empty($issuer)) {
$this->sData .= '&issuer=' . $issuer;
}
$this->sContent = '<strong>Type:</strong> ' . $algorithms . '<br>'.'<strong>Secret:</strong> ' . $secret . '<br>';
$this->sContent .= '<strong>Label:</strong> ' . rawurldecode($label);
if (!empty($issuer)) {
$this->sContent .= '<br><strong>Issuer:</strong> '. rawurldecode($issuer);
}
$this->addQrcode("2fa");
}
else
$this->requiredFieldsError();
}
public function getQrcode($id) { public function getQrcode($id) {
return $this->qrcode_instance->getQrcode($id); return $this->qrcode_instance->getQrcode($id);
} }
+3
View File
@@ -65,6 +65,9 @@ if($_SERVER["REQUEST_METHOD"] === "POST" && !isset($_POST["edit"])) {
case 'bitcoin': $static_qrcode_instance->bitcoinQrcode($_POST['address'], $_POST['amount'], $_POST['label'], $_POST['message']); case 'bitcoin': $static_qrcode_instance->bitcoinQrcode($_POST['address'], $_POST['amount'], $_POST['label'], $_POST['message']);
break; break;
case '2fa': $static_qrcode_instance->twofaQrcode($_POST['algorithms'], $_POST['secret'], rawurlencode($_POST['label']), rawurlencode($_POST['issuer']));
break;
} }
} }
?> ?>