2008-03-09 22:49:53 +00:00
<? php
2011-10-18 14:41:19 +00:00
2017-11-18 11:33:03 +01:00
use LibreNMS\Authentication\Auth ;
2017-05-18 16:08:10 -05:00
use LibreNMS\Authentication\TwoFactor ;
2015-07-13 20:10:26 +02:00
$no_refresh = true ;
2015-03-21 21:30:55 +00:00
2015-07-13 20:10:26 +02:00
$pagetitle [] = 'Preferences' ;
2011-10-18 14:41:19 +00:00
2015-08-29 21:44:29 +05:30
echo '<h2>User Preferences</h2>' ;
echo '<hr>' ;
2008-03-09 22:49:53 +00:00
2015-02-16 23:45:28 +00:00
if ( $_SESSION [ 'userlevel' ] == 11 ) {
demo_account ();
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
if ( $_POST [ 'action' ] == 'changepass' ) {
2017-11-18 11:33:03 +01:00
if ( Auth :: get () -> authenticate ( $_SESSION [ 'username' ], $_POST [ 'old_pass' ])) {
2015-07-13 20:10:26 +02:00
if ( $_POST [ 'new_pass' ] == '' || $_POST [ 'new_pass2' ] == '' ) {
$changepass_message = 'Password must not be blank.' ;
2016-08-18 20:28:22 -05:00
} elseif ( $_POST [ 'new_pass' ] == $_POST [ 'new_pass2' ]) {
2017-11-18 11:33:03 +01:00
Auth :: get () -> changePassword ( $_SESSION [ 'username' ], $_POST [ 'new_pass' ]);
2015-07-13 20:10:26 +02:00
$changepass_message = 'Password Changed.' ;
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
$changepass_message = "Passwords don't match." ;
}
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
$changepass_message = 'Incorrect password' ;
}
}
2016-10-22 15:51:20 +00:00
if ( $vars [ 'action' ] === 'changedash' ) {
2016-10-19 15:37:26 -06:00
if ( ! empty ( $vars [ 'dashboard' ])) {
2017-04-01 16:18:00 -05:00
set_user_pref ( 'dashboard' , ( int ) $vars [ 'dashboard' ]);
2016-10-22 15:51:20 +00:00
$updatedashboard_message = "User default dashboard updated" ;
2016-10-19 15:37:26 -06:00
}
}
2010-06-21 15:39:43 +00:00
2015-07-13 20:10:26 +02:00
include 'includes/update-preferences-password.inc.php' ;
2008-03-09 22:49:53 +00:00
2017-11-18 11:33:03 +01:00
if ( Auth :: get () -> canUpdatePasswords ( $_SESSION [ 'username' ])) {
2015-07-13 20:10:26 +02:00
echo '<h3>Change Password</h3>' ;
2015-08-29 21:44:29 +05:30
echo '<hr>' ;
echo "<div class='well'>" ;
2015-07-13 20:10:26 +02:00
echo $changepass_message ;
echo "<form method='post' action='preferences/' class='form-horizontal' role='form'>
2014-01-13 10:05:19 +00:00
<input type=hidden name='action' value='changepass'>
<div class='form-group'>
2015-09-22 18:31:14 +05:30
<label for='old_pass' class='col-sm-2 control-label'>Current Password</label>
2014-01-13 10:05:19 +00:00
<div class='col-sm-4'>
<input type=password name=old_pass autocomplete='off' class='form-control input-sm'>
</div>
<div class='col-sm-6'>
</div>
</div>
<div class='form-group'>
<label for='new_pass' class='col-sm-2 control-label'>New Password</label>
<div class='col-sm-4'>
<input type=password name=new_pass autocomplete='off' class='form-control input-sm'>
</div>
<div class='col-sm-6'>
</div>
</div>
<div class='form-group'>
2014-06-17 19:56:20 +01:00
<label for='new_pass2' class='col-sm-2 control-label'>New Password</label>
2014-01-13 10:05:19 +00:00
<div class='col-sm-4'>
<input type=password name=new_pass2 autocomplete='off' class='form-control input-sm'>
2015-09-22 18:31:14 +05:30
<br>
2015-08-29 21:44:29 +05:30
<center><button type='submit' class='btn btn-default'>Submit</button></center>
2014-01-13 10:05:19 +00:00
</div>
<div class='col-sm-6'>
</div>
</div>
2015-08-29 21:44:29 +05:30
2015-07-13 20:10:26 +02:00
</form>" ;
echo '</div>' ;
} //end if
if ( $config [ 'twofactor' ] === true ) {
if ( $_POST [ 'twofactorremove' ] == 1 ) {
if ( ! isset ( $_POST [ 'twofactor' ])) {
echo '<div class="well"><form class="form-horizontal" role="form" action="" method="post" name="twofactorform">' ;
echo '<input type="hidden" name="twofactorremove" value="1" />' ;
2017-05-18 16:08:10 -05:00
echo TwoFactor :: getForm ( false );
2015-07-13 20:10:26 +02:00
echo '</form></div>' ;
2016-08-18 20:28:22 -05:00
} else {
2017-04-01 16:18:00 -05:00
$twofactor = get_user_pref ( 'twofactor' );
if ( empty ( $twofactor )) {
2015-08-11 14:54:05 -07:00
echo '<div class="alert alert-danger">Error: How did you even get here?!</div><script>window.location = "preferences/";</script>' ;
2015-07-13 20:10:26 +02:00
}
2017-05-18 16:08:10 -05:00
if ( TwoFactor :: verifyHOTP ( $twofactor [ 'key' ], $_POST [ 'twofactor' ], $twofactor [ 'counter' ])) {
2017-04-01 16:18:00 -05:00
if ( ! set_user_pref ( 'twofactor' , array ())) {
2015-07-13 20:10:26 +02:00
echo '<div class="alert alert-danger">Error while disabling TwoFactor.</div>' ;
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
echo '<div class="alert alert-success">TwoFactor Disabled.</div>' ;
}
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
session_destroy ();
2015-08-11 14:54:05 -07:00
echo '<div class="alert alert-danger">Error: Supplied TwoFactor Token is wrong, you\'ve been logged out.</div><script>window.location = "' . $config [ 'base_url' ] . '";</script>' ;
2015-07-13 20:10:26 +02:00
}
} //end if
2016-08-18 20:28:22 -05:00
} else {
2017-04-01 16:18:00 -05:00
$twofactor = get_user_pref ( 'twofactor' );
2015-08-11 14:54:05 -07:00
echo '<script src="js/jquery.qrcode.min.js"></script>' ;
2015-07-13 20:10:26 +02:00
echo '<div class="well"><h3>Two-Factor Authentication</h3>' ;
2017-04-01 16:18:00 -05:00
if ( ! empty ( $twofactor )) {
2015-07-13 20:10:26 +02:00
$twofactor [ 'text' ] = "<div class='form-group'>
2014-12-24 21:22:02 +00:00
<label for='twofactorkey' class='col-sm-2 control-label'>Secret Key</label>
<div class='col-sm-4'>
<input type='text' name='twofactorkey' autocomplete='off' disabled class='form-control input-sm' value='" . $twofactor [ 'key' ] . "' />
</div>
</div>" ;
2015-07-13 20:10:26 +02:00
if ( $twofactor [ 'counter' ] !== false ) {
$twofactor [ 'uri' ] = 'otpauth://hotp/' . $_SESSION [ 'username' ] . '?issuer=LibreNMS&counter=' . $twofactor [ 'counter' ] . '&secret=' . $twofactor [ 'key' ];
$twofactor [ 'text' ] .= "<div class='form-group'>
2014-12-24 21:22:02 +00:00
<label for='twofactorcounter' class='col-sm-2 control-label'>Counter</label>
<div class='col-sm-4'>
<input type='text' name='twofactorcounter' autocomplete='off' disabled class='form-control input-sm' value='" . $twofactor [ 'counter' ] . "' />
</div>
</div>" ;
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
$twofactor [ 'uri' ] = 'otpauth://totp/' . $_SESSION [ 'username' ] . '?issuer=LibreNMS&secret=' . $twofactor [ 'key' ];
}
echo '<div id="twofactorqrcontainer">
2014-12-24 21:22:02 +00:00
<div id="twofactorqr"></div>
<button class="btn btn-default" onclick="$(\'#twofactorkeycontainer\').show(); $(\'#twofactorqrcontainer\').hide();">Manual</button>
</div>' ;
2015-07-13 20:10:26 +02:00
echo '<div id="twofactorkeycontainer">
2014-12-24 21:22:02 +00:00
<form id="twofactorkey" class="form-horizontal" role="form">' . $twofactor [ 'text' ] . '</form>
<button class="btn btn-default" onclick="$(\'#twofactorkeycontainer\').hide(); $(\'#twofactorqrcontainer\').show();">QR</button>
</div>' ;
2015-07-13 20:10:26 +02:00
echo '<script>$("#twofactorqr").qrcode({"text": "' . $twofactor [ 'uri' ] . '"}); $("#twofactorkeycontainer").hide();</script>' ;
echo '<br/><form method="post" class="form-horizontal" role="form">
2014-12-24 21:22:02 +00:00
<input type="hidden" name="twofactorremove" value="1" />
<button class="btn btn-danger" type="submit">Disable TwoFactor</button>
</form>' ;
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
if ( isset ( $_POST [ 'gentwofactorkey' ]) && isset ( $_POST [ 'twofactortype' ])) {
2017-04-01 16:18:00 -05:00
$chk = get_user_pref ( 'twofactor' );
if ( empty ( $chk )) {
2017-05-18 16:08:10 -05:00
$twofactor = array ( 'key' => TwoFactor :: genKey ());
2015-07-13 20:10:26 +02:00
if ( $_POST [ 'twofactortype' ] == 'counter' ) {
$twofactor [ 'counter' ] = 1 ;
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
$twofactor [ 'counter' ] = false ;
}
2017-04-01 16:18:00 -05:00
if ( ! set_user_pref ( 'twofactor' , $twofactor )) {
2015-07-13 20:10:26 +02:00
echo '<div class="alert alert-danger">Error inserting TwoFactor details. Please try again later and contact Administrator if error persists.</div>' ;
2016-08-18 20:28:22 -05:00
} else {
2015-08-11 14:54:05 -07:00
echo '<div class="alert alert-success">Added TwoFactor credentials. Please reload page.</div><script>window.location = "preferences/";</script>' ;
2015-07-13 20:10:26 +02:00
}
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
echo '<div class="alert alert-danger">TwoFactor credentials already exists.</div>' ;
}
2016-08-18 20:28:22 -05:00
} else {
2015-07-13 20:10:26 +02:00
echo '<form method="post" class="form-horizontal" role="form">
2014-12-24 21:22:02 +00:00
<input type="hidden" name="gentwofactorkey" value="1" />
<div class="form-group">
<label for="twofactortype" class="col-sm-2 control-label">TwoFactor Type</label>
<div class="col-sm-4">
<select name="twofactortype">
<option value=""></option>
<option value="counter">Counter Based (HOTP)</option>
<option value="time">Time Based (TOTP)</option>
</select>
</div>
</div>
<button class="btn btn-default" type="submit">Generate TwoFactor Secret Key</button>
</form>' ;
2015-07-13 20:10:26 +02:00
} //end if
} //end if
echo '</div>' ;
} //end if
} //end if
} //end if
2016-10-19 15:37:26 -06:00
echo "<h3>Default Dashboard</h3>
<hr>
<div class='well'>" ;
2016-10-22 15:51:20 +00:00
if ( ! empty ( $updatedashboard_message )) {
print_message ( $updatedashboard_message );
}
2016-10-19 15:37:26 -06:00
echo "
<form method='post' action='preferences/' class='form-horizontal' role='form'>
<div class='form-group'>
<input type=hidden name='action' value='changedash'>
<div class='form-group'>
<label for='dashboard' class='col-sm-2 control-label'>Dashboard</label>
<div class='col-sm-4'>
<select class='form-control' name='dashboard'>" ;
2017-04-01 16:18:00 -05:00
foreach ( get_dashboards () as $dash ) {
2016-10-19 15:37:26 -06:00
echo "
2017-04-01 16:18:00 -05:00
<option value='" . $dash [ 'dashboard_id' ] . "'" . ( $dash [ 'default' ] ? ' selected' : '' ) . ">" . display ( $dash [ 'username' ]) . ':' . display ( $dash [ 'dashboard_name' ]) . "</option>" ;
2016-10-19 16:03:51 -06:00
}
echo "
2016-10-19 15:37:26 -06:00
</select>
<br>
<center><button type='submit' class='btn btn-default'>Update Dashboard</button></center>
</div>
<div class='col-sm-6'></div>
</div>
</div>
</form>
</div>" ;
2015-07-13 20:10:26 +02:00
2015-08-29 21:44:29 +05:30
echo "<h3>Device Permissions</h3>" ;
echo "<hr>" ;
echo "<div style='background-color: #e5e5e5; border: solid #e5e5e5 10px; margin-bottom:10px;'>" ;
2015-07-13 20:10:26 +02:00
if ( $_SESSION [ 'userlevel' ] == '10' ) {
echo "<strong class='blue'>Global Administrative Access</strong>" ;
2014-12-24 21:22:02 +00:00
}
2015-07-13 20:10:26 +02:00
if ( $_SESSION [ 'userlevel' ] == '5' ) {
echo "<strong class='green'>Global Viewing Access</strong>" ;
2015-02-16 23:45:28 +00:00
}
2015-07-13 20:10:26 +02:00
if ( $_SESSION [ 'userlevel' ] == '1' ) {
foreach ( dbFetchRows ( 'SELECT * FROM `devices_perms` AS P, `devices` AS D WHERE `user_id` = ? AND P.device_id = D.device_id' , array ( $_SESSION [ 'user_id' ])) as $perm ) {
// FIXME generatedevicelink?
echo "<a href='device/device=" . $perm [ 'device_id' ] . "'>" . $perm [ 'hostname' ] . '</a><br />' ;
$dev_access = 1 ;
}
2008-03-09 22:49:53 +00:00
2015-07-13 20:10:26 +02:00
if ( ! $dev_access ) {
echo 'No access!' ;
}
2011-03-17 00:09:20 +00:00
}
2008-03-09 22:49:53 +00:00
2015-07-13 20:10:26 +02:00
echo '</div>' ;