Error while disabling TwoFactor.
';
+ } else {
+ echo 'TwoFactor Disabled.
';
+ }
+ } else {
+ session_destroy();
+ echo 'Error: Supplied TwoFactor Token is wrong, you\'ve been logged out.
';
+ }
+ }
+ } else {
+ $twofactor = dbFetchRow("SELECT twofactor FROM users WHERE username = ?", array($_SESSION['username']));
+ echo '';
+ echo 'Two-Factor Authentication
';
+ if( !empty($twofactor['twofactor']) ) {
+ $twofactor = json_decode($twofactor['twofactor'],true);
+ $twofactor['text'] = "
";
+ if( $twofactor['counter'] !== false ) {
+ $twofactor['uri'] = "otpauth://hotp/".$_SESSION['username']."?issuer=LibreNMS&counter=".$twofactor['counter']."&secret=".$twofactor['key'];
+ $twofactor['text'] .= "
";
+ } else {
+ $twofactor['uri'] = "otpauth://totp/".$_SESSION['username']."?issuer=LibreNMS&secret=".$twofactor['key'];
+ }
+ echo '
';
+ echo '
+
+
+
';
+ echo '';
+ echo '
';
+ } else {
+ if( isset($_POST['gentwofactorkey']) && isset($_POST['twofactortype']) ) {
+ require_once($config['install_dir']."/html/includes/authentication/twofactor.lib.php");
+ $chk = dbFetchRow("SELECT twofactor FROM users WHERE username = ?", array($_SESSION['username']));
+ if( empty($chk['twofactor']) ) {
+ $twofactor = array('key' => twofactor_genkey());
+ if( $_POST['twofactortype'] == "counter" ) {
+ $twofactor['counter'] = 1;
+ } else {
+ $twofactor['counter'] = false;
+ }
+ if( !dbUpdate(array('twofactor' => json_encode($twofactor)),'users','username = ?',array($_SESSION['username'])) ) {
+ echo '
Error inserting TwoFactor details. Please try again later and contact Administrator if error persists.
';
+ } else {
+ echo '
Added TwoFactor credentials. Please reload page.
';
+ }
+ } else {
+ echo '
TwoFactor credentials already exists.
';
+ }
+ } else {
+ echo '
';
+ }
+ }
+ echo '
';
+ }
+}
+
echo("");
echo("
Device Permissions
");
diff --git a/sql-schema/038.sql b/sql-schema/038.sql
new file mode 100644
index 000000000..b32bab4c1
--- /dev/null
+++ b/sql-schema/038.sql
@@ -0,0 +1 @@
+ALTER TABLE `users` ADD `twofactor` VARCHAR( 255 ) NOT NULL;