aboutsummaryrefslogtreecommitdiffstats
path: root/view
diff options
context:
space:
mode:
authorMario <mario@mariovavti.com>2023-03-08 10:04:29 +0000
committerMario <mario@mariovavti.com>2023-03-08 10:04:29 +0000
commit234bb6425021b72f0db71667191b2c36dc593791 (patch)
tree2966d68516cebae70d4a75aace9962a809532339 /view
parentd43a56614cd93982d19f4f82aae6e62f9ca533a9 (diff)
downloadvolse-hubzilla-234bb6425021b72f0db71667191b2c36dc593791.tar.gz
volse-hubzilla-234bb6425021b72f0db71667191b2c36dc593791.tar.bz2
volse-hubzilla-234bb6425021b72f0db71667191b2c36dc593791.zip
port totp mfa from streams with some adjustions
Diffstat (limited to 'view')
-rw-r--r--view/tpl/totp.tpl26
-rw-r--r--view/tpl/totp_setup.tpl130
2 files changed, 156 insertions, 0 deletions
diff --git a/view/tpl/totp.tpl b/view/tpl/totp.tpl
new file mode 100644
index 000000000..0367483eb
--- /dev/null
+++ b/view/tpl/totp.tpl
@@ -0,0 +1,26 @@
+<!DOCTYPE html >
+<html data-bs-theme="light">
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=0">
+ <head>
+ <link rel="stylesheet" href="vendor/twbs/bootstrap/dist/css/bootstrap.min.css" type="text/css" media="screen">
+ </head>
+ <body>
+ <nav class="navbar bg-body-tertiary">
+ <div class="container-sm">
+ <span class="navbar-brand">{{$header}}</span>
+ </div>
+ </nav>
+ <main class="container-sm mt-4">
+ <h5>{{$id}}</h5>
+ <form action="totp_check" method="post">
+ <input type="hidden" class="form-control" name="totp_code_static" value="1"/>
+ <div class="mb-3">
+ <label for="totp-input" class="form-label">{{$desc}}</label>
+ <input id="totp-input" type="text" class="form-control" name="totp_code" value=""/>
+ </div>
+ <input type="submit" value="{{$submit}}" class="btn btn-primary">
+ </form>
+ </main>
+ </body>
+</html>
diff --git a/view/tpl/totp_setup.tpl b/view/tpl/totp_setup.tpl
new file mode 100644
index 000000000..6bf5885f7
--- /dev/null
+++ b/view/tpl/totp_setup.tpl
@@ -0,0 +1,130 @@
+<div class="generic-content-wrapper">
+ <div class="section-title-wrapper">
+ <h2>{{$title}}</h2>
+ </div>
+
+ <div class="section-content-tools-wrapper">
+
+ {{if $secret}}
+ <div>
+ <div>{{$secret_text}}</div>
+ <br>
+ <div><strong>{{$secret}}</strong></div>
+ </div>
+ {{/if}}
+
+ <img src="{{$qrcode}}" alt="{{$uri}}" title="{{$uri}}">
+
+ <form action="#" id="totp-test-form" method="post" autocomplete="off" >
+ <div id="otp-test-wrapper">
+ <div style="margin-top: 1rem">
+ <label for="totp_test">{{$test_title}}</label>
+ </div>
+ <div style="margin-top: 1rem">
+ <input title="{{$test_title}}" type="text" id="totp_test"
+ style="width: 30%;"
+ onkeydown="hitkey(event)"
+ onfocus="totp_clear_code()"/>
+ </div>
+ <div style="margin-top: 1rem">
+ <strong id="otptest_results"></strong>
+ </div>
+ </div>
+ <div class="settings-submit-wrapper" >
+ <button id="otp-test-submit" type="submit"
+ name="submit" class="btn btn-primary" onclick="totp_test_code(); return false;">{{$test}}
+ </button>
+ </div>
+ </form>
+
+
+ <form action="settings/multifactor" id="settings-mfa-form" method="post" autocomplete="off" >
+ <input type='hidden' name='form_security_token' value='{{$form_security_token}}'>
+ {{include file="field_checkbox.tpl" field=$enable_mfa}}
+ <div class="settings-submit-wrapper" >
+ <button id="otp-enable-submit" type="submit"
+ name="submit" class="btn btn-primary">{{$submit}}
+ </button>
+ </div>
+
+ </form>
+
+
+ </div>
+ </form>
+</div>
+
+<script type="text/javascript">
+
+$(window).on("load", function() {
+ totp_clear_code();
+});
+
+function totp_clear_code() {
+ var box = document.getElementById("totp_test");
+ box.value = "";
+ box.focus();
+ document.getElementById("otptest_results").innerHTML = "";
+}
+
+function totp_test_code() {
+ $.post('/totp_check',
+ {totp_code: document.getElementById('totp_test').value},
+ function(data) {
+ document.getElementById("otptest_results").innerHTML =
+ (data['status']) ? '{{$test_pass}}' : '{{$test_fail}}';
+ });
+}
+function totp_generate_secret() {
+ $.post('/settings/totp',
+ {
+ set_secret: '1',
+ password: document.getElementById("totp_password").value
+ },
+ function(data) {
+ if (!data['auth']) {
+ var box = document.getElementById("totp_password");
+ box.value = "";
+ box.focus();
+ document.getElementById('totp_note').innerHTML =
+ "{{$note_password}}";
+ return;
+ }
+ var div = document.getElementById("password_form");
+ div.style.display = "none";
+ choose_message(true);
+ document.getElementById('totp_secret').innerHTML =
+ data['secret'];
+ document.getElementById('totp_qrcode').src =
+ "{{$qrcode_url}}" + (new Date()).getTime();
+ document.getElementById('totp_note').innerHTML =
+ "{{$note_scan}}";
+ totp_clear_code();
+ }
+ );
+}
+
+function go_generate(ev) {
+ if (ev.which == 13) {
+ totp_generate_secret();
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+}
+function hitkey(ev) {
+ if (ev.which == 13) {
+ totp_test_code();
+ ev.preventDefault();
+ ev.stopPropagation();
+ }
+}
+function expose_password() {
+ var div = document.getElementById("password_form");
+ div.style.display = "block";
+ var box = document.getElementById("totp_password");
+ box.value = "";
+ box.focus();
+}
+</script>
+
+