Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Keeps the dashboard sessions from expiring. #9263

Merged
merged 2 commits into from
Oct 1, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
14 changes: 14 additions & 0 deletions LibreNMS/Util/Laravel.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,20 @@

class Laravel
{
public static function bootCli()
{
// make sure Laravel isn't already booted
if (class_exists('App') && App::isBooted()) {
return;
}

define('LARAVEL_START', microtime(true));
$install_dir = realpath(__DIR__ . '/../..');
$app = require_once $install_dir . '/bootstrap/app.php';
$kernel = $app->make(\Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();
}

public static function enableQueryDebug()
{
$db = Eloquent::DB();
Expand Down
10 changes: 10 additions & 0 deletions app/Http/Controllers/LegacyController.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,14 @@ public function api($path = '')
{
include base_path('html/legacy_api_v0.php');
}

public function dash()
{
ob_start();
include base_path('html/legacy/ajax_dash.php');
$output = ob_get_contents();
ob_end_clean();

return response($output, 200, ['Content-Type' => 'application/json']);
}
}
5 changes: 5 additions & 0 deletions app/Http/Kernel.php
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ class Kernel extends HttpKernel
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],

'minimal' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
],

'api' => [
'bindings',
'auth:token'
Expand Down
13 changes: 13 additions & 0 deletions app/Providers/RouteServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,26 @@ public function boot()
*/
public function map()
{
$this->mapLegacyRoutes();

$this->mapApiRoutes();

$this->mapWebRoutes();

//
}

/**
* Define legacy routes for the application.
* Only initializing minimal middleware: Cookies and Session.
*/
protected function mapLegacyRoutes()
{
Route::middleware('minimal')
->namespace($this->namespace)
->group(base_path('routes/legacy.php'));
}

/**
* Define the "web" routes for the application.
*
Expand Down
113 changes: 56 additions & 57 deletions html/ajax_dash.php
Original file line number Diff line number Diff line change
@@ -1,62 +1,61 @@
<?php

/*
* LibreNMS
*
* Copyright (c) 2014 Neil Lathwood <https://github.com/laf/ http://www.lathwood.co.uk/fa>
/**
* Laravel - A PHP Framework For Web Artisans
*
* 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.
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/

use LibreNMS\Authentication\LegacyAuth;

$init_modules = array('web', 'auth');
require realpath(__DIR__ . '/..') . '/includes/init.php';

set_debug($_REQUEST['debug']);

header('Content-type: application/json');

if (!LegacyAuth::check()) {
$response = array(
'status' => 'error',
'message' => 'Unauthenticated',
);
echo _json_encode($response);
exit;
}

$type = $vars['type'];

if ($type == 'placeholder') {
$output = "<span style='text-align:left;'><br><h3>Click on the Edit Dashboard button (next to the list of dashboards) to add widgets</h3><br><h4><strong>Remember:</strong> You can only move & resize widgets when you're in <strong>Edit Mode</strong>.</h4><span>";
$status = 'ok';
$title = 'Placeholder';
} elseif (is_file('includes/common/'.$type.'.inc.php')) {
$results_limit = 10;
$typeahead_limit = $config['webui']['global_search_result_limit'];
$no_form = true;
$unique_id = str_replace(array("-","."), "_", uniqid($type, true));
$widget_id = $vars['id'];
$widget_settings = json_decode(dbFetchCell('select settings from users_widgets where user_widget_id = ?', array($widget_id)), true);
$widget_dimensions = $vars['dimensions'];
if (!empty($vars['settings'])) {
define('SHOW_SETTINGS', true);
}
include 'includes/common/'.$type.'.inc.php';
$output = implode('', $common_output);
$status = 'ok';
$title = display($widget_settings['title']) ?: ucfirst(display($type));
}

$response = array(
'status' => $status,
'html' => $output,
'title' => $title,
);

echo _json_encode($response);
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| our application. We just need to utilize it! We'll simply require it
| into the script here so that we don't have to worry about manual
| loading any of our classes later on. It feels great to relax.
|
*/

require __DIR__.'/../bootstrap/autoload.php';

/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/

$app = require_once __DIR__.'/../bootstrap/app.php';

/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request
| through the kernel, and send the associated response back to
| the client's browser allowing them to enjoy the creative
| and wonderful application we have prepared for them.
|
*/

$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

// rewrite the request uri
$_SERVER['REQUEST_URI'] = '/legacy_ajax_dash';

$response = $kernel->handle(
$request = Illuminate\Http\Request::capture()
);

$response->send();

$kernel->terminate($request, $response);
64 changes: 64 additions & 0 deletions html/legacy/ajax_dash.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?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.
* @package Laravel
* @author Taylor Otwell <taylor@laravel.com>
*/

use LibreNMS\Authentication\LegacyAuth;

$init_modules = ['web', 'auth'];
require realpath(__DIR__ . '/../..') . '/includes/init.php';

set_debug(isset($_REQUEST['debug']) && $_REQUEST['debug']);

header('Content-type: application/json');

if (!LegacyAuth::check()) {
$response = array(
'status' => 'error',
'message' => 'Unauthenticated',
);
echo _json_encode($response);
exit;
}

$type = isset($vars['type']) ? $vars['type'] : 'placeholder';

if ($type == 'placeholder') {
$output = "<span style='text-align:left;'><br><h3>Click on the Edit Dashboard button (next to the list of dashboards) to add widgets</h3><br><h4><strong>Remember:</strong> You can only move & resize widgets when you're in <strong>Edit Mode</strong>.</h4><span>";
$status = 'ok';
$title = 'Placeholder';
} elseif (is_file('includes/common/'.$type.'.inc.php')) {
$results_limit = 10;
$typeahead_limit = $config['webui']['global_search_result_limit'];
$no_form = true;
$unique_id = str_replace(array("-","."), "_", uniqid($type, true));
$widget_id = $vars['id'];
$widget_settings = json_decode(dbFetchCell('select settings from users_widgets where user_widget_id = ?', array($widget_id)), true);
$widget_dimensions = $vars['dimensions'];
if (!empty($vars['settings'])) {
define('SHOW_SETTINGS', true);
}
include 'includes/common/'.$type.'.inc.php';
$output = implode('', $common_output);
$status = 'ok';
$title = display($widget_settings['title']) ?: ucfirst(display($type));
}

$response = array(
'status' => $status,
'html' => $output,
'title' => $title,
);

echo _json_encode($response);
8 changes: 6 additions & 2 deletions html/pages/front/tiles.php
Original file line number Diff line number Diff line change
Expand Up @@ -653,8 +653,12 @@ function widget_reload(id,data_type) {
$("#widget_body_"+id).html('<div class="alert alert-info">' + data.message + '</div>');
}
},
error: function () {
$("#widget_body_"+id).html('<div class="alert alert-info">Problem with backend</div>');
error: function (data) {
if (data.responseJSON.error) {
$("#widget_body_"+id).html('<div class="alert alert-info">' + data.responseJSON.error + '</div>');
} else {
$("#widget_body_"+id).html('<div class="alert alert-info">Problem with backend</div>');
}
}
});
}
Expand Down
8 changes: 1 addition & 7 deletions includes/init.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,7 @@ function module_selected($module, $modules)
}

if (module_selected('laravel', $init_modules)) {
// make sure Laravel isn't already booted
if (!class_exists('App') || !App::isBooted()) {
define(LARAVEL_START, microtime(true));
$app = require_once $install_dir . '/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
$kernel->bootstrap();
}
\LibreNMS\Util\Laravel::bootCli();
}

if (!module_selected('nodb', $init_modules)) {
Expand Down
6 changes: 6 additions & 0 deletions routes/legacy.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?php


Route::group(['middleware' => ['auth'], 'guard' => 'auth'], function () {
Route::any('legacy_ajax_dash', 'LegacyController@dash');
});