mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
233 lines
7.8 KiB
PHP
233 lines
7.8 KiB
PHP
<?php
|
|
|
|
/*
|
|
* LibreNMS
|
|
*
|
|
* Copyright (c) 2014 Neil Lathwood <https://github.com/laf/ http://www.lathwood.co.uk/fa>
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation, either version 3 of the License, or (at your
|
|
* option) any later version. Please see LICENSE.txt at the top level of
|
|
* the source code distribution for details.
|
|
*/
|
|
|
|
if ($_SESSION['userlevel'] >= '10')
|
|
{
|
|
if(empty($_POST['token'])) {
|
|
$_POST['token'] = bin2hex(openssl_random_pseudo_bytes(16));
|
|
}
|
|
?>
|
|
<div class="modal fade" id="confirm-delete" tabindex="-1" role="dialog" aria-labelledby="Delete" aria-hidden="true">
|
|
<div class="modal-dialog modal-sm">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
<h5 class="modal-title" id="Delete">Confirm Delete</h5>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p>If you would like to remove the API token then please click Delete.</p>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<form role="form" class="remove_token_form">
|
|
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
|
|
<button type="submit" class="btn btn-danger danger" id="token-removal" data-target="token-removal">Delete</button>
|
|
<input type="hidden" name="token_id" id="token_id" value="">
|
|
<input type="hidden" name="type" id="type" value="token-item-remove">
|
|
<input type="hidden" name="confirm" id="confirm" value="yes">
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal fade bs-example-modal-sm" id="create-token" tabindex="-1" role="dialog" aria-labelledby="Create" aria-hidden="true">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
<h5 class="modal-title" id="Create">Create new API Access token</h5>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form role="form" class="form-horizontal create_token_form">
|
|
<div class="form-group">
|
|
<label for="user_id" class="col-sm-2 control-label">User: </label>
|
|
<div class="col-sm-4">
|
|
<select class="form-control" id="user_id" name="user_id">
|
|
<?php
|
|
|
|
foreach (dbFetchRows("SELECT user_id,username FROM `users` WHERE `level` >= '10'", array()) as $users)
|
|
{
|
|
echo('<option value="'.$users['user_id'].'">'.$users['username'].'</option>');
|
|
}
|
|
|
|
?>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="token" class="col-sm-2 control-label">Token: </label>
|
|
<div class="col-sm-8">
|
|
<input type="text" class="form-control" id="token" name="token" value="<?php echo $_POST['token'];?>" readonly>
|
|
</div>
|
|
<div class="col-sm-2">
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label for="description" class="col-sm-2 control-label">Descr: </label>
|
|
<div class="col-sm-10">
|
|
<input type="text" class="form-control" id="description" name="description" value="<?php echo $_POST['description'];?>">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<div class="form-group">
|
|
<div class="col-sm-4">
|
|
<input type="hidden" name="type" id="type" value="token-item-create">
|
|
<button type="submit" class="btn btn-success" name="token-create" id="token-create">Create API Token</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<?php
|
|
echo('
|
|
<div class="row">
|
|
<div class="col-md-12">
|
|
<span id="thanks"></span>
|
|
</div>
|
|
</div>
|
|
');
|
|
if($_SESSION['api_token'] === TRUE)
|
|
{
|
|
echo("<script>
|
|
$('#thanks').html('<div class=\"alert alert-info\">The API token has been added.</div>');</script>
|
|
");
|
|
unset($_SESSION['api_token']);
|
|
}
|
|
echo('
|
|
<div class="row">
|
|
<div class="col-sm-2">
|
|
<button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#create-token">Create API access token</button>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-12">
|
|
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-6">
|
|
<table class="table table-bordered table-condensed">
|
|
<tr>
|
|
<th>User</th>
|
|
<th>Token Hash</th>
|
|
<th>Description</th>
|
|
<th>Disabled</th>
|
|
<th>Remove</th>
|
|
</tr>
|
|
');
|
|
|
|
foreach (dbFetchRows("SELECT `AT`.*,`U`.`username` FROM `api_tokens` AS AT JOIN users AS U ON AT.user_id=U.user_id ORDER BY AT.user_id") as $api)
|
|
{
|
|
if($api['disabled'] == '1')
|
|
{
|
|
$api_disabled = 'checked';
|
|
}
|
|
else
|
|
{
|
|
$api_disabled = '';
|
|
}
|
|
echo('
|
|
<tr id="'.$api['id'].'">
|
|
<td>'.$api['username'].'</td>
|
|
<td>'.$api['token_hash'].'</td>
|
|
<td>'.$api['description'].'</td>
|
|
<td><input type="checkbox" name="token-status" data-token_id="'.$api['id'].'" data-off-text="No" data-on-text="Yes" data-on-color="danger" '.$api_disabled.' data-size="mini"></td>
|
|
<td><button type="button" class="btn btn-primary btn-xs" id="'.$api['id'].'" data-token_id="'.$api['id'].'" data-toggle="modal" data-target="#confirm-delete">Delete</button></td>
|
|
</tr>
|
|
');
|
|
}
|
|
|
|
echo('
|
|
</table>
|
|
</div>
|
|
</div>
|
|
');
|
|
?>
|
|
<script>
|
|
$("[name='token-status']").bootstrapSwitch('offColor','success');
|
|
$('input[name="token-status"]').on('switchChange.bootstrapSwitch', function(event, state) {
|
|
event.preventDefault();
|
|
var $this = $(this);
|
|
var token_id = $(this).data("token_id");
|
|
$.ajax({
|
|
type: 'POST',
|
|
url: '/ajax_form.php',
|
|
data: { type: "token-item-disable", token_id: token_id, state: state},
|
|
dataType: "html",
|
|
success: function(data){
|
|
//alert('good');
|
|
},
|
|
error:function(){
|
|
//alert('bad');
|
|
}
|
|
});
|
|
});
|
|
$('#confirm-delete').on('show.bs.modal', function(e) {
|
|
token_id = $(e.relatedTarget).data('token_id');
|
|
$("#token_id").val(token_id);
|
|
event.preventDefault();
|
|
});
|
|
$('#token-removal').click('', function(e) {
|
|
event.preventDefault();
|
|
token_id = $("#token_id").val();
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/ajax_form.php",
|
|
data: $('form.remove_token_form').serialize() ,
|
|
success: function(msg){
|
|
$("#thanks").html('<div class="alert alert-info">'+msg+'</div>');
|
|
$("#confirm-delete").modal('hide');
|
|
$("#"+token_id).remove();
|
|
},
|
|
error: function(){
|
|
$("#thanks").html('<div class="alert alert-info">An error occurred removing the token.</div>');
|
|
$("#confirm-delete").modal('hide');
|
|
}
|
|
});
|
|
});
|
|
$('#token-create').click('', function(e) {
|
|
event.preventDefault();
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/ajax_form.php",
|
|
data: $('form.create_token_form').serialize(),
|
|
success: function(msg){
|
|
$("#thanks").html('<div class="alert alert-info">'+msg+'</div>');
|
|
$("#create-token").modal('hide');
|
|
if(msg.indexOf("ERROR:") <= -1) {
|
|
location.reload();
|
|
}
|
|
},
|
|
error: function(){
|
|
$("#thanks").html('<div class="alert alert-info">An error occurred removing the token.</div>');
|
|
$("#create-token").modal('hide');
|
|
}
|
|
});
|
|
});
|
|
$('#pass-gen').click('', function(e) {
|
|
event.preventDefault();
|
|
token = $.password(32,false);
|
|
$('#token').val(token);
|
|
});
|
|
</script>
|
|
|
|
<?php
|
|
} else {
|
|
include("includes/error-no-perm.inc.php");
|
|
}
|
|
|
|
?>
|