You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.7 KiB
HTML
77 lines
2.7 KiB
HTML
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
|
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
|
<div class="progress">
|
|
<div class="progress-bar" id="countdown" style="width: 0%;"></div>
|
|
</div>
|
|
<div id="nokeys">
|
|
<div class="app-dock-container">
|
|
<div class="app-dock" id="app-dock">
|
|
<div style="margin-top: 50px; text-align: center; font-size: 120%;">
|
|
<img src="img/nokeys.svg" alt="" style="max-width: 80%; max-height: 33%;" />
|
|
<br /><br />
|
|
You haven't added any authentication keys yet. Press the <i class="fa fa-plus"></i> icon to add one.
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="list-group" id="codelist">
|
|
</div>
|
|
<script src="js/jsOTP.min.js"></script>
|
|
<script>
|
|
setnavbar("otp", "", "home");
|
|
|
|
var totp = new jsOTP.totp();
|
|
|
|
var ls_text = localStorage.getItem("otp");
|
|
var keys = [];
|
|
if (ls_text !== null && ls_text != "") {
|
|
var keys = JSON.parse(ls_text || "[]");
|
|
if (keys.length > 0) {
|
|
$("#nokeys").css("display", "none");
|
|
}
|
|
for (var i = 0; i < keys.length; i++) {
|
|
var code = totp.getOtp(keys[i]["secret"]);
|
|
// Escape HTML characters
|
|
var label = $('<div/>').html(keys[i]["label"]).html();
|
|
var issuer = $('<div/>').text(keys[i]["issuer"]).html();
|
|
$("#codelist").append("<div class=\"list-group-item\" id=\"codeitem_" + i + "\">"
|
|
+ "<span class=\"pull-right\" style=\"color: red;\" onclick=\"deleteCode(" + i + ")\"><i class=\"fa fa-trash-o\"></i></span>"
|
|
+ "<p class=\"h6\">" + label + "</p>"
|
|
+ "<div class=\"h3 code\" style=\"font-weight: bold;\">" + code + "</div>"
|
|
+ "<p class=\"small\">" + issuer + "</p>"
|
|
+ "</div>");
|
|
}
|
|
}
|
|
|
|
function refreshCountdown() {
|
|
var percent = ((30 - ((new Date).getSeconds() % 30)) / 30) * 100;
|
|
$("#countdown").css("width", percent + "%");
|
|
}
|
|
|
|
function refreshCodes() {
|
|
for (var i = 0; i < keys.length; i++) {
|
|
var code = totp.getOtp(keys[i]["secret"]);
|
|
$("#codelist #codeitem_" + i + " .code").text(code);
|
|
}
|
|
}
|
|
|
|
function deleteCode(index) {
|
|
navigator.notification.confirm("Delete auth key? This cannot be undone, so make sure you don't need this key to login anymore!", function (result) {
|
|
if (result != 1) {
|
|
return;
|
|
}
|
|
keys.splice(index, 1);
|
|
localStorage.setItem("otp", JSON.stringify(keys));
|
|
openscreen("otp");
|
|
}, "Delete " + keys[index]["label"] + "?");
|
|
}
|
|
|
|
setInterval(function () {
|
|
refreshCountdown();
|
|
refreshCodes();
|
|
}, 1000);
|
|
|
|
refreshCountdown();
|
|
</script>
|