mirror of
https://github.com/librenms/librenms.git
synced 2024-09-21 02:18:39 +00:00
Update to Laravel 5.7 (PHP 7.3 support) (#9800)
* Move assets to 5.7 location * Add 5.7 SVGs * add cache data dir * update QUEUE_DRIVER -> QUEUE_CONNECTION * Update trusted proxy config * update composer.json * 5.5 command loading * @php and @endphp can't be inline * Laravel 5.6 logging, Nice! * Update blade directives * improved redirects * remove unneeded service providers * Improved debugbar loading * no need to emulate renderable exceptions anymore * merge updated 5.7 files (WIP) * Enable CSRF * database_path() call causes issue in init.php * fix old testcase name * generic phpunit 7 fixes * add missed file_get_contents Keep migrations table content * fix duplicate key * Drop old php versions from travis-ci * remove hhvm * fix code climate message * remove use of deprecated function assertInternalType * Disable CSRF, we'll enable it separately. All forms need to be updated to work. * Update document references
This commit is contained in:
parent
25954ccda6
commit
e18f4522d5
@ -1,19 +1,15 @@
|
|||||||
# EditorConfig is awesome: http://EditorConfig.org
|
|
||||||
|
|
||||||
# top-most EditorConfig file
|
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
# Unix-style newlines with a newline ending every file
|
|
||||||
[*]
|
[*]
|
||||||
end_of_line = lf
|
|
||||||
charset = utf-8
|
charset = utf-8
|
||||||
trim_trailing_whitespace = true
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
[**.css]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[**.php]
|
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 4
|
indent_size = 4
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
trim_trailing_whitespace = false
|
||||||
|
|
||||||
|
[*.yml]
|
||||||
|
indent_size = 2
|
||||||
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -29,6 +29,8 @@ patches
|
|||||||
!/lib/yaml
|
!/lib/yaml
|
||||||
/vendor
|
/vendor
|
||||||
/node_modules
|
/node_modules
|
||||||
|
npm-debug.log
|
||||||
|
yarn-error.log
|
||||||
composer.phar
|
composer.phar
|
||||||
_ide_helper.php
|
_ide_helper.php
|
||||||
|
|
||||||
|
13
.travis.yml
13
.travis.yml
@ -5,19 +5,12 @@ services:
|
|||||||
matrix:
|
matrix:
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
include:
|
include:
|
||||||
- php: 7.2
|
- php: 7.3
|
||||||
env: SKIP_STYLE_CHECK=1
|
env: SKIP_STYLE_CHECK=1
|
||||||
- php: 7.1
|
- php: 7.2
|
||||||
env: SKIP_UNIT_CHECK=1
|
env: SKIP_UNIT_CHECK=1
|
||||||
- php: 7.0
|
- php: 7.1
|
||||||
env: SKIP_STYLE_CHECK=1 SKIP_UNIT_CHECK=1
|
|
||||||
- php: 5.6
|
|
||||||
env: SKIP_STYLE_CHECK=1 EXECUTE_BUILD_DOCS=true
|
env: SKIP_STYLE_CHECK=1 EXECUTE_BUILD_DOCS=true
|
||||||
# - php: hhvm
|
|
||||||
# env: SKIP_STYLE_CHECK=1
|
|
||||||
|
|
||||||
allow_failures:
|
|
||||||
- php: hhvm
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
|
@ -83,48 +83,15 @@ class Laravel
|
|||||||
|
|
||||||
public static function enableCliDebugOutput()
|
public static function enableCliDebugOutput()
|
||||||
{
|
{
|
||||||
if (class_exists('\Log')) {
|
if (class_exists('\Log') && App::runningInConsole()) {
|
||||||
$logger = Log::getMonolog();
|
Log::setDefaultDriver('console');
|
||||||
|
|
||||||
// only install if not existing
|
|
||||||
$install = true;
|
|
||||||
$logfile = Config::get('log_file', base_path('logs/librenms.log'));
|
|
||||||
foreach ($logger->getHandlers() as $handler) {
|
|
||||||
if ($handler instanceof \Monolog\Handler\StreamHandler) {
|
|
||||||
if ($handler->getUrl() == 'php://stdout') {
|
|
||||||
$install = false;
|
|
||||||
} elseif ($handler->getUrl() == $logfile) {
|
|
||||||
// send to librenms log file if not a cli app
|
|
||||||
if (!App::runningInConsole()) {
|
|
||||||
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
|
|
||||||
Log::error("$errno $errfile:$errline $errstr");
|
|
||||||
});
|
|
||||||
$handler->setLevel(\Monolog\Logger::DEBUG);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($install) {
|
|
||||||
$handler = new \Monolog\Handler\StreamHandler(
|
|
||||||
'php://stdout',
|
|
||||||
\Monolog\Logger::DEBUG
|
|
||||||
);
|
|
||||||
|
|
||||||
$handler->setFormatter(new CliColorFormatter());
|
|
||||||
|
|
||||||
$logger->pushHandler($handler);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function disableCliDebugOutput()
|
public static function disableCliDebugOutput()
|
||||||
{
|
{
|
||||||
if (class_exists('Log')) {
|
if (class_exists('Log')) {
|
||||||
$handlers = Log::getMonolog()->getHandlers();
|
Log::setDefaultDriver('logfile');
|
||||||
if (isset($handlers[0]) && $handlers[0]->getUrl() == 'php://stdout') {
|
|
||||||
Log::getMonolog()->popHandler();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +95,7 @@ class ModuleTestHelper
|
|||||||
|
|
||||||
if (is_null(self::$module_tables)) {
|
if (is_null(self::$module_tables)) {
|
||||||
// only load the yaml once, then keep it in memory
|
// only load the yaml once, then keep it in memory
|
||||||
self::$module_tables = Yaml::parse($install_dir . '/tests/module_tables.yaml');
|
self::$module_tables = Yaml::parse(file_get_contents($install_dir . '/tests/module_tables.yaml'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ class Kernel extends ConsoleKernel
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $commands = [
|
protected $commands = [
|
||||||
\App\Console\Commands\BashCompletionCommand::class,
|
//
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -30,12 +30,14 @@ class Kernel extends ConsoleKernel
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register the Closure based commands for the application.
|
* Register the commands for the application.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
protected function commands()
|
protected function commands()
|
||||||
{
|
{
|
||||||
|
$this->load(__DIR__.'/Commands');
|
||||||
|
|
||||||
require base_path('routes/console.php');
|
require base_path('routes/console.php');
|
||||||
|
|
||||||
if ($this->app->environment() !== 'production') {
|
if ($this->app->environment() !== 'production') {
|
||||||
|
@ -27,11 +27,6 @@ class Handler extends ExceptionHandler
|
|||||||
|
|
||||||
public function render($request, Exception $exception)
|
public function render($request, Exception $exception)
|
||||||
{
|
{
|
||||||
// emulate Laravel 5.5 renderable exceptions
|
|
||||||
if (method_exists($exception, 'render')) {
|
|
||||||
return $exception->render($request);
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::render($request, $exception);
|
return parent::render($request, $exception);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ namespace App\Http\Controllers\Auth;
|
|||||||
|
|
||||||
use App\User;
|
use App\User;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||||
|
|
||||||
@ -48,9 +49,9 @@ class RegisterController extends Controller
|
|||||||
protected function validator(array $data)
|
protected function validator(array $data)
|
||||||
{
|
{
|
||||||
return Validator::make($data, [
|
return Validator::make($data, [
|
||||||
'name' => 'required|string|max:255',
|
'name' => ['required', 'string', 'max:255'],
|
||||||
'email' => 'required|string|email|max:255|unique:users',
|
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
|
||||||
'password' => 'required|string|min:6|confirmed',
|
'password' => ['required', 'string', 'min:6', 'confirmed'],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +66,7 @@ class RegisterController extends Controller
|
|||||||
return User::create([
|
return User::create([
|
||||||
'name' => $data['name'],
|
'name' => $data['name'],
|
||||||
'email' => $data['email'],
|
'email' => $data['email'],
|
||||||
'password' => bcrypt($data['password']),
|
'password' => Hash::make($data['password']),
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
41
app/Http/Controllers/Auth/VerificationController.php
Normal file
41
app/Http/Controllers/Auth/VerificationController.php
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use Illuminate\Foundation\Auth\VerifiesEmails;
|
||||||
|
|
||||||
|
class VerificationController extends Controller
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Email Verification Controller
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This controller is responsible for handling email verification for any
|
||||||
|
| user that recently registered with the application. Emails may also
|
||||||
|
| be re-sent if the user didn't receive the original email message.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
use VerifiesEmails;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Where to redirect users after verification.
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $redirectTo = '/home';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new controller instance.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->middleware('auth');
|
||||||
|
$this->middleware('signed')->only('verify');
|
||||||
|
$this->middleware('throttle:6,1')->only('verify', 'resend');
|
||||||
|
}
|
||||||
|
}
|
@ -33,7 +33,7 @@ class Kernel extends HttpKernel
|
|||||||
\App\Http\Middleware\EncryptCookies::class,
|
\App\Http\Middleware\EncryptCookies::class,
|
||||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||||
\Illuminate\Session\Middleware\StartSession::class,
|
\Illuminate\Session\Middleware\StartSession::class,
|
||||||
// \Illuminate\Session\Middleware\AuthenticateSession::class, // Works in Laravel 5.5
|
// \Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||||
\App\Http\Middleware\VerifyCsrfToken::class,
|
\App\Http\Middleware\VerifyCsrfToken::class,
|
||||||
\App\Http\Middleware\LegacyExternalAuth::class,
|
\App\Http\Middleware\LegacyExternalAuth::class,
|
||||||
@ -64,11 +64,29 @@ class Kernel extends HttpKernel
|
|||||||
'2fa' => \App\Http\Middleware\VerifyTwoFactor::class,
|
'2fa' => \App\Http\Middleware\VerifyTwoFactor::class,
|
||||||
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
|
||||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||||
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
'can' => \Illuminate\Auth\Middleware\Authorize::class,
|
||||||
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
|
||||||
|
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||||
|
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The priority-sorted list of middleware.
|
||||||
|
*
|
||||||
|
* This forces non-global middleware to always be in the given order.
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
protected $middlewarePriority = [
|
||||||
|
\Illuminate\Session\Middleware\StartSession::class,
|
||||||
|
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||||
|
\Illuminate\Auth\Middleware\Authenticate::class,
|
||||||
|
\Illuminate\Session\Middleware\AuthenticateSession::class,
|
||||||
|
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||||
|
\Illuminate\Auth\Middleware\Authorize::class,
|
||||||
|
];
|
||||||
|
|
||||||
public function bootstrap()
|
public function bootstrap()
|
||||||
{
|
{
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace App\Http\Middleware;
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
|
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||||
|
|
||||||
class EncryptCookies extends BaseEncrypter
|
class EncryptCookies extends Middleware
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The names of the cookies that should not be encrypted.
|
* The names of the cookies that should not be encrypted.
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
namespace App\Http\Middleware;
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as BaseTrimmer;
|
use Illuminate\Foundation\Http\Middleware\TrimStrings as Middleware;
|
||||||
|
|
||||||
class TrimStrings extends BaseTrimmer
|
class TrimStrings extends Middleware
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* The names of the attributes that should not be trimmed.
|
* The names of the attributes that should not be trimmed.
|
||||||
|
@ -2,10 +2,17 @@
|
|||||||
|
|
||||||
namespace App\Http\Middleware;
|
namespace App\Http\Middleware;
|
||||||
|
|
||||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
|
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
|
||||||
|
|
||||||
class VerifyCsrfToken extends BaseVerifier
|
class VerifyCsrfToken extends Middleware
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Indicates whether the XSRF-TOKEN cookie should be set on the response.
|
||||||
|
*
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $addHttpCookie = true;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The URIs that should be excluded from CSRF verification.
|
* The URIs that should be excluded from CSRF verification.
|
||||||
*
|
*
|
||||||
|
@ -31,43 +31,9 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
// load config
|
// load config
|
||||||
Config::load();
|
Config::load();
|
||||||
|
|
||||||
// replace early boot logging redirect log to config location, unless APP_LOG is set
|
$this->bootCustomBladeDirectives();
|
||||||
Log::getMonolog()->popHandler(); // remove existing errorlog logger
|
|
||||||
Log::useFiles(config('app.log') ?: Config::get('log_file', base_path('logs/librenms.log')), 'error');
|
|
||||||
|
|
||||||
// Blade directives (Yucky because of < L5.5)
|
|
||||||
Blade::directive('config', function ($key) {
|
|
||||||
return "<?php if (\LibreNMS\Config::get(($key))): ?>";
|
|
||||||
});
|
|
||||||
Blade::directive('notconfig', function ($key) {
|
|
||||||
return "<?php if (!\LibreNMS\Config::get(($key))): ?>";
|
|
||||||
});
|
|
||||||
Blade::directive('endconfig', function () {
|
|
||||||
return "<?php endif; ?>";
|
|
||||||
});
|
|
||||||
Blade::directive('admin', function () {
|
|
||||||
return "<?php if (auth()->check() && auth()->user()->isAdmin()): ?>";
|
|
||||||
});
|
|
||||||
Blade::directive('endadmin', function () {
|
|
||||||
return "<?php endif; ?>";
|
|
||||||
});
|
|
||||||
|
|
||||||
$this->bootCustomValidators();
|
$this->bootCustomValidators();
|
||||||
$this->configureMorphAliases();
|
$this->configureMorphAliases();
|
||||||
|
|
||||||
// Development service providers
|
|
||||||
if ($this->app->environment() !== 'production') {
|
|
||||||
if (class_exists(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class)) {
|
|
||||||
$this->app->register(\Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config('app.debug') && class_exists(\Barryvdh\Debugbar\ServiceProvider::class)) {
|
|
||||||
// disable debugbar for api routes
|
|
||||||
if (!Request::is('api/*')) {
|
|
||||||
$this->app->register(\Barryvdh\Debugbar\ServiceProvider::class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -80,6 +46,19 @@ class AppServiceProvider extends ServiceProvider
|
|||||||
$this->registerGeocoder();
|
$this->registerGeocoder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function bootCustomBladeDirectives()
|
||||||
|
{
|
||||||
|
Blade::if('config', function ($key) {
|
||||||
|
return \LibreNMS\Config::get($key);
|
||||||
|
});
|
||||||
|
Blade::if('notconfig', function ($key) {
|
||||||
|
return !\LibreNMS\Config::get($key);
|
||||||
|
});
|
||||||
|
Blade::if('admin', function () {
|
||||||
|
return auth()->check() && auth()->user()->isAdmin();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private function configureMorphAliases()
|
private function configureMorphAliases()
|
||||||
{
|
{
|
||||||
Relation::morphMap([
|
Relation::morphMap([
|
||||||
|
@ -12,8 +12,8 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
protected $listen = [
|
protected $listen = [
|
||||||
'Illuminate\Auth\Events\Login' => ['App\Listeners\AuthEventListener@login'],
|
\Illuminate\Auth\Events\Login::class => ['App\Listeners\AuthEventListener@login'],
|
||||||
'Illuminate\Auth\Events\Logout' => ['App\Listeners\AuthEventListener@logout'],
|
\Illuminate\Auth\Events\Logout::class => ['App\Listeners\AuthEventListener@logout'],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
$app = new Illuminate\Foundation\Application(
|
$app = new Illuminate\Foundation\Application(
|
||||||
realpath(__DIR__.'/../')
|
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
|
||||||
);
|
);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -41,11 +41,6 @@ $app->singleton(
|
|||||||
App\Exceptions\Handler::class
|
App\Exceptions\Handler::class
|
||||||
);
|
);
|
||||||
|
|
||||||
$app->configureMonologUsing(function (Monolog\Logger $logger) use ($app) {
|
|
||||||
$path = config('app.log') ?: $app->basePath('logs/librenms.log');
|
|
||||||
$logger->pushHandler(new \Monolog\Handler\StreamHandler($path, \Monolog\Logger::toMonologLevel(config('app.log_level', 'debug'))));
|
|
||||||
});
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Return The Application
|
| Return The Application
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.6.4",
|
"php": "^7.1.3",
|
||||||
"ext-pdo": "*",
|
"ext-pdo": "*",
|
||||||
"ext-pcre": "*",
|
"ext-pcre": "*",
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
@ -29,6 +29,7 @@
|
|||||||
"ext-gd": "*",
|
"ext-gd": "*",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"ext-mbstring": "*",
|
"ext-mbstring": "*",
|
||||||
|
"laravel/laravel": "5.7.*",
|
||||||
"ezyang/htmlpurifier": "^4.8",
|
"ezyang/htmlpurifier": "^4.8",
|
||||||
"phpmailer/phpmailer": "^5.2.21",
|
"phpmailer/phpmailer": "^5.2.21",
|
||||||
"slim/slim": "^2.6",
|
"slim/slim": "^2.6",
|
||||||
@ -40,27 +41,29 @@
|
|||||||
"pear/console_table": "^1.3",
|
"pear/console_table": "^1.3",
|
||||||
"dapphp/radius": "^2.0",
|
"dapphp/radius": "^2.0",
|
||||||
"php-amqplib/php-amqplib": "^2.0",
|
"php-amqplib/php-amqplib": "^2.0",
|
||||||
"symfony/yaml": "^2.8",
|
"symfony/yaml": "^4.0",
|
||||||
"rmccue/requests": "^1.7",
|
"rmccue/requests": "^1.7",
|
||||||
"palanik/corsslim": "^1.1",
|
"palanik/corsslim": "^1.1",
|
||||||
"influxdb/influxdb-php": "^1.14",
|
"influxdb/influxdb-php": "^1.14",
|
||||||
"laravel/laravel": "5.4.*",
|
|
||||||
"oriceon/toastr-5-laravel": "dev-master",
|
"oriceon/toastr-5-laravel": "dev-master",
|
||||||
"wpb/string-blade-compiler": "3.4.x-dev",
|
"wpb/string-blade-compiler": "3.7.x-dev",
|
||||||
"fico7489/laravel-pivot": "2.*",
|
"fico7489/laravel-pivot": "^3.0",
|
||||||
"fideloper/proxy": "^4.0",
|
"fideloper/proxy": "^4.0",
|
||||||
"doctrine/dbal": "^2.5"
|
"doctrine/dbal": "^2.9"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"beyondcode/laravel-dump-server": "^1.0",
|
||||||
|
"filp/whoops": "^2.0",
|
||||||
|
"fzaninotto/faker": "^1.4",
|
||||||
|
"mockery/mockery": "^1.0",
|
||||||
|
"nunomaduro/collision": "^2.0",
|
||||||
|
"phpunit/phpunit": "^7.0",
|
||||||
"squizlabs/php_codesniffer": "^2.9.1",
|
"squizlabs/php_codesniffer": "^2.9.1",
|
||||||
"phpunit/phpunit": "5.*",
|
|
||||||
"jakub-onderka/php-parallel-lint": "*",
|
"jakub-onderka/php-parallel-lint": "*",
|
||||||
"jakub-onderka/php-console-highlighter": "*",
|
"jakub-onderka/php-console-highlighter": "*",
|
||||||
"fojuth/readmegen": "1.*",
|
"barryvdh/laravel-ide-helper": "^2.5",
|
||||||
"barryvdh/laravel-ide-helper": "^2.4",
|
"barryvdh/laravel-debugbar": "^3.2",
|
||||||
"barryvdh/laravel-debugbar": "~2.4",
|
"justinrainbow/json-schema": "^5.2"
|
||||||
"justinrainbow/json-schema": "^5.2",
|
|
||||||
"fzaninotto/faker": "^1.8"
|
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-memcached": "Required if you utilize distributed polling",
|
"ext-memcached": "Required if you utilize distributed polling",
|
||||||
@ -69,10 +72,13 @@
|
|||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"exclude-from-classmap": [
|
"exclude-from-classmap": [
|
||||||
"/vendor/laravel/laravel/database/"
|
"/vendor/laravel/laravel/database/",
|
||||||
|
"/vendor/laravel/laravel/app/",
|
||||||
|
"/vendor/jakub-onderka/php-parallel-lint/src/JsonSerializable.php"
|
||||||
],
|
],
|
||||||
"classmap": [
|
"classmap": [
|
||||||
"database"
|
"database/seeds",
|
||||||
|
"database/factories"
|
||||||
],
|
],
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"App\\": "app",
|
"App\\": "app",
|
||||||
@ -84,21 +90,28 @@
|
|||||||
"includes/helpers.php"
|
"includes/helpers.php"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"config": {
|
||||||
|
"optimize-autoloader": true,
|
||||||
|
"preferred-install": "dist",
|
||||||
|
"sort-packages": true
|
||||||
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pre-update-cmd": "LibreNMS\\ComposerHelper::preUpdate",
|
"pre-update-cmd": "LibreNMS\\ComposerHelper::preUpdate",
|
||||||
"pre-install-cmd": "LibreNMS\\ComposerHelper::preInstall",
|
"pre-install-cmd": "LibreNMS\\ComposerHelper::preInstall",
|
||||||
"post-root-package-install": "LibreNMS\\ComposerHelper::postRootPackageInstall",
|
"post-root-package-install": "LibreNMS\\ComposerHelper::postRootPackageInstall",
|
||||||
|
"post-autoload-dump": [
|
||||||
|
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
|
||||||
|
"@php artisan package:discover --ansi"
|
||||||
|
],
|
||||||
"post-create-project-cmd": [
|
"post-create-project-cmd": [
|
||||||
"php artisan key:generate"
|
"@php artisan key:generate --ansi"
|
||||||
],
|
],
|
||||||
"post-install-cmd": [
|
"post-install-cmd": [
|
||||||
"LibreNMS\\ComposerHelper::postInstall",
|
"LibreNMS\\ComposerHelper::postInstall",
|
||||||
"Illuminate\\Foundation\\ComposerScripts::postInstall",
|
"Illuminate\\Foundation\\ComposerScripts::postInstall"
|
||||||
"php artisan optimize"
|
|
||||||
],
|
],
|
||||||
"post-update-cmd": [
|
"post-update-cmd": [
|
||||||
"Illuminate\\Foundation\\ComposerScripts::postUpdate",
|
"Illuminate\\Foundation\\ComposerScripts::postUpdate"
|
||||||
"php artisan optimize"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3129
composer.lock
generated
3129
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@ -10,6 +10,7 @@ return [
|
|||||||
| This value is the name of your application. This value is used when the
|
| This value is the name of your application. This value is used when the
|
||||||
| framework needs to place the application's name in a notification or
|
| framework needs to place the application's name in a notification or
|
||||||
| any other location as required by the application or its packages.
|
| any other location as required by the application or its packages.
|
||||||
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'name' => env('APP_NAME', 'LibreNMS'),
|
'name' => env('APP_NAME', 'LibreNMS'),
|
||||||
@ -21,7 +22,7 @@ return [
|
|||||||
|
|
|
|
||||||
| This value determines the "environment" your application is currently
|
| This value determines the "environment" your application is currently
|
||||||
| running in. This may determine how you prefer to configure various
|
| running in. This may determine how you prefer to configure various
|
||||||
| services your application utilizes. Set this in your ".env" file.
|
| services the application utilizes. Set this in your ".env" file.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -53,6 +54,8 @@ return [
|
|||||||
|
|
||||||
'url' => env('APP_URL'),
|
'url' => env('APP_URL'),
|
||||||
|
|
||||||
|
'asset_url' => env('ASSET_URL', null),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Application Timezone
|
| Application Timezone
|
||||||
@ -92,6 +95,19 @@ return [
|
|||||||
|
|
||||||
'fallback_locale' => 'en',
|
'fallback_locale' => 'en',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Faker Locale
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This locale will be used by the Faker PHP library when generating fake
|
||||||
|
| data for your database seeds. For example, this will be used to get
|
||||||
|
| localized telephone numbers, street address information and more.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'faker_locale' => 'en_US',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Encryption Key
|
| Encryption Key
|
||||||
@ -107,23 +123,6 @@ return [
|
|||||||
|
|
||||||
'cipher' => 'AES-256-CBC',
|
'cipher' => 'AES-256-CBC',
|
||||||
|
|
||||||
/*
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
| Logging Configuration
|
|
||||||
|--------------------------------------------------------------------------
|
|
||||||
|
|
|
||||||
| Here you may configure the log settings for your application. Out of
|
|
||||||
| the box, Laravel uses the Monolog PHP logging library. This gives
|
|
||||||
| you a variety of powerful log handlers / formatters to utilize.
|
|
||||||
|
|
|
||||||
| Available Settings: "single", "daily", "syslog", "errorlog"
|
|
||||||
|
|
|
||||||
*/
|
|
||||||
|
|
||||||
'log' => env('APP_LOG'), // log file to write to
|
|
||||||
|
|
||||||
'log_level' => env('APP_LOG_LEVEL', 'error'),
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Autoloaded Service Providers
|
| Autoloaded Service Providers
|
||||||
@ -162,12 +161,6 @@ return [
|
|||||||
Illuminate\Translation\TranslationServiceProvider::class,
|
Illuminate\Translation\TranslationServiceProvider::class,
|
||||||
Illuminate\Validation\ValidationServiceProvider::class,
|
Illuminate\Validation\ValidationServiceProvider::class,
|
||||||
|
|
||||||
/*
|
|
||||||
* Package Service Providers...
|
|
||||||
*/
|
|
||||||
Kamaln7\Toastr\ToastrServiceProvider::class,
|
|
||||||
Fideloper\Proxy\TrustedProxyServiceProvider::class,
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Application Service Providers...
|
* Application Service Providers...
|
||||||
*/
|
*/
|
||||||
|
@ -36,7 +36,8 @@ return [
|
|||||||
'secret' => env('PUSHER_APP_SECRET'),
|
'secret' => env('PUSHER_APP_SECRET'),
|
||||||
'app_id' => env('PUSHER_APP_ID'),
|
'app_id' => env('PUSHER_APP_ID'),
|
||||||
'options' => [
|
'options' => [
|
||||||
//
|
'cluster' => env('PUSHER_APP_CLUSTER'),
|
||||||
|
'encrypted' => true,
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -57,7 +59,7 @@ return [
|
|||||||
env('MEMCACHED_PASSWORD'),
|
env('MEMCACHED_PASSWORD'),
|
||||||
],
|
],
|
||||||
'options' => [
|
'options' => [
|
||||||
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
|
// Memcached::OPT_CONNECT_TIMEOUT => 2000,
|
||||||
],
|
],
|
||||||
'servers' => [
|
'servers' => [
|
||||||
[
|
[
|
||||||
@ -70,7 +72,7 @@ return [
|
|||||||
|
|
||||||
'redis' => [
|
'redis' => [
|
||||||
'driver' => 'redis',
|
'driver' => 'redis',
|
||||||
'connection' => 'default',
|
'connection' => 'cache',
|
||||||
],
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -86,6 +88,6 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'prefix' => 'laravel',
|
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -41,6 +41,7 @@ return [
|
|||||||
// 'driver' => 'sqlite',
|
// 'driver' => 'sqlite',
|
||||||
// 'database' => env('DB_DATABASE', database_path('database.sqlite')),
|
// 'database' => env('DB_DATABASE', database_path('database.sqlite')),
|
||||||
// 'prefix' => '',
|
// 'prefix' => '',
|
||||||
|
// 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
|
||||||
// ],
|
// ],
|
||||||
|
|
||||||
'mysql' => [
|
'mysql' => [
|
||||||
@ -54,6 +55,7 @@ return [
|
|||||||
'charset' => 'utf8',
|
'charset' => 'utf8',
|
||||||
'collation' => 'utf8_unicode_ci',
|
'collation' => 'utf8_unicode_ci',
|
||||||
'prefix' => '',
|
'prefix' => '',
|
||||||
|
'prefix_indexes' => true,
|
||||||
'strict' => true,
|
'strict' => true,
|
||||||
'engine' => null,
|
'engine' => null,
|
||||||
],
|
],
|
||||||
@ -67,6 +69,7 @@ return [
|
|||||||
'password' => env('DB_PASSWORD', ''),
|
'password' => env('DB_PASSWORD', ''),
|
||||||
'charset' => 'utf8',
|
'charset' => 'utf8',
|
||||||
'prefix' => '',
|
'prefix' => '',
|
||||||
|
'prefix_indexes' => true,
|
||||||
'schema' => 'public',
|
'schema' => 'public',
|
||||||
'sslmode' => 'prefer',
|
'sslmode' => 'prefer',
|
||||||
],
|
],
|
||||||
@ -80,6 +83,7 @@ return [
|
|||||||
'password' => env('DB_PASSWORD', ''),
|
'password' => env('DB_PASSWORD', ''),
|
||||||
'charset' => 'utf8',
|
'charset' => 'utf8',
|
||||||
'prefix' => '',
|
'prefix' => '',
|
||||||
|
'prefix_indexes' => true,
|
||||||
],
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
@ -103,7 +107,7 @@ return [
|
|||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| Redis is an open source, fast, and advanced key-value store that also
|
| Redis is an open source, fast, and advanced key-value store that also
|
||||||
| provides a richer set of commands than a typical key-value systems
|
| provides a richer body of commands than a typical key-value system
|
||||||
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
@ -116,7 +120,14 @@ return [
|
|||||||
'host' => env('REDIS_HOST', '127.0.0.1'),
|
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||||
'password' => env('REDIS_PASSWORD', null),
|
'password' => env('REDIS_PASSWORD', null),
|
||||||
'port' => env('REDIS_PORT', 6379),
|
'port' => env('REDIS_PORT', 6379),
|
||||||
'database' => 0,
|
'database' => env('REDIS_DB', 0),
|
||||||
|
],
|
||||||
|
|
||||||
|
'cache' => [
|
||||||
|
'host' => env('REDIS_HOST', '127.0.0.1'),
|
||||||
|
'password' => env('REDIS_PASSWORD', null),
|
||||||
|
'port' => env('REDIS_PORT', 6379),
|
||||||
|
'database' => env('REDIS_CACHE_DB', 1),
|
||||||
],
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
@ -10,11 +10,13 @@ return [
|
|||||||
| Debugbar is enabled by default, when debug is set to true in app.php.
|
| Debugbar is enabled by default, when debug is set to true in app.php.
|
||||||
| You can override the value by setting enable to true or false instead of null.
|
| You can override the value by setting enable to true or false instead of null.
|
||||||
|
|
|
|
||||||
|
| You can provide an array of URI's that must be ignored (eg. 'api/*')
|
||||||
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'enabled' => env('DEBUGBAR_ENABLED', null),
|
'enabled' => env('DEBUGBAR_ENABLED', null),
|
||||||
'except' => [
|
'except' => [
|
||||||
'api*' // won't work until DebugBar 3.*
|
'api*'
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -119,6 +121,7 @@ return [
|
|||||||
'logs' => false, // Add the latest log messages
|
'logs' => false, // Add the latest log messages
|
||||||
'files' => false, // Show the included files
|
'files' => false, // Show the included files
|
||||||
'config' => false, // Display config settings
|
'config' => false, // Display config settings
|
||||||
|
'cache' => false, // Display cache events
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -140,7 +143,7 @@ return [
|
|||||||
'timeline' => false, // Add the queries to the timeline
|
'timeline' => false, // Add the queries to the timeline
|
||||||
'explain' => [ // Show EXPLAIN output on queries
|
'explain' => [ // Show EXPLAIN output on queries
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'types' => ['SELECT'], // ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
|
'types' => ['SELECT'], // // workaround ['SELECT'] only. https://github.com/barryvdh/laravel-debugbar/issues/888 ['SELECT', 'INSERT', 'UPDATE', 'DELETE']; for MySQL 5.6.3+
|
||||||
],
|
],
|
||||||
'hints' => true, // Show hints for common mistakes
|
'hints' => true, // Show hints for common mistakes
|
||||||
],
|
],
|
||||||
@ -156,6 +159,9 @@ return [
|
|||||||
'logs' => [
|
'logs' => [
|
||||||
'file' => null
|
'file' => null
|
||||||
],
|
],
|
||||||
|
'cache' => [
|
||||||
|
'values' => true // collect cache values
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -37,7 +37,7 @@ return [
|
|||||||
| may even configure multiple disks of the same driver. Defaults have
|
| may even configure multiple disks of the same driver. Defaults have
|
||||||
| been setup for each driver as an example of the required options.
|
| been setup for each driver as an example of the required options.
|
||||||
|
|
|
|
||||||
| Supported Drivers: "local", "ftp", "s3", "rackspace"
|
| Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace"
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -57,10 +57,11 @@ return [
|
|||||||
|
|
||||||
's3' => [
|
's3' => [
|
||||||
'driver' => 's3',
|
'driver' => 's3',
|
||||||
'key' => env('AWS_KEY'),
|
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||||
'secret' => env('AWS_SECRET'),
|
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||||
'region' => env('AWS_REGION'),
|
'region' => env('AWS_DEFAULT_REGION'),
|
||||||
'bucket' => env('AWS_BUCKET'),
|
'bucket' => env('AWS_BUCKET'),
|
||||||
|
'url' => env('AWS_URL'),
|
||||||
],
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
52
config/hashing.php
Normal file
52
config/hashing.php
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Default Hash Driver
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This option controls the default hash driver that will be used to hash
|
||||||
|
| passwords for your application. By default, the bcrypt algorithm is
|
||||||
|
| used; however, you remain free to modify this option if you wish.
|
||||||
|
|
|
||||||
|
| Supported: "bcrypt", "argon", "argon2id"
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'driver' => 'bcrypt',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Bcrypt Options
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here you may specify the configuration options that should be used when
|
||||||
|
| passwords are hashed using the Bcrypt algorithm. This will allow you
|
||||||
|
| to control the amount of time it takes to hash the given password.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'bcrypt' => [
|
||||||
|
'rounds' => env('BCRYPT_ROUNDS', 10),
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Argon Options
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here you may specify the configuration options that should be used when
|
||||||
|
| passwords are hashed using the Argon algorithm. These will allow you
|
||||||
|
| to control the amount of time it takes to hash the given password.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'argon' => [
|
||||||
|
'memory' => 1024,
|
||||||
|
'threads' => 2,
|
||||||
|
'time' => 2,
|
||||||
|
],
|
||||||
|
|
||||||
|
];
|
100
config/logging.php
Normal file
100
config/logging.php
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Monolog\Handler\StreamHandler;
|
||||||
|
use Monolog\Handler\SyslogUdpHandler;
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Default Log Channel
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This option defines the default log channel that gets used when writing
|
||||||
|
| messages to the logs. The name specified in this option should match
|
||||||
|
| one of the channels defined in the "channels" configuration array.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'default' => env('LOG_CHANNEL', 'logfile'),
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Log Channels
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Here you may configure the log channels for your application. Out of
|
||||||
|
| the box, Laravel uses the Monolog PHP logging library. This gives
|
||||||
|
| you a variety of powerful log handlers / formatters to utilize.
|
||||||
|
|
|
||||||
|
| Available Drivers: "single", "daily", "slack", "syslog",
|
||||||
|
| "errorlog", "monolog",
|
||||||
|
| "custom", "stack"
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'channels' => [
|
||||||
|
'logfile' => [
|
||||||
|
'driver' => 'stack',
|
||||||
|
'channels' => ['daily'],
|
||||||
|
'ignore_exceptions' => false,
|
||||||
|
],
|
||||||
|
|
||||||
|
'console' => [
|
||||||
|
'driver' => 'stack',
|
||||||
|
'channels' => ['daily', 'stderr'],
|
||||||
|
'ignore_exceptions' => false,
|
||||||
|
],
|
||||||
|
|
||||||
|
'single' => [
|
||||||
|
'driver' => 'single',
|
||||||
|
'path' => env('APP_LOG', \LibreNMS\Config::get('log_file', base_path('logs/librenms.log'))),
|
||||||
|
'level' => 'debug',
|
||||||
|
],
|
||||||
|
|
||||||
|
'daily' => [
|
||||||
|
'driver' => 'daily',
|
||||||
|
'path' => env('APP_LOG', \LibreNMS\Config::get('log_file', base_path('logs/librenms.log'))),
|
||||||
|
'level' => 'debug',
|
||||||
|
'days' => 14,
|
||||||
|
],
|
||||||
|
|
||||||
|
'slack' => [
|
||||||
|
'driver' => 'slack',
|
||||||
|
'url' => env('LOG_SLACK_WEBHOOK_URL'),
|
||||||
|
'username' => 'Laravel Log',
|
||||||
|
'emoji' => ':boom:',
|
||||||
|
'level' => 'critical',
|
||||||
|
],
|
||||||
|
|
||||||
|
'papertrail' => [
|
||||||
|
'driver' => 'monolog',
|
||||||
|
'level' => 'debug',
|
||||||
|
'handler' => SyslogUdpHandler::class,
|
||||||
|
'handler_with' => [
|
||||||
|
'host' => env('PAPERTRAIL_URL'),
|
||||||
|
'port' => env('PAPERTRAIL_PORT'),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'stderr' => [
|
||||||
|
'driver' => 'monolog',
|
||||||
|
'handler' => StreamHandler::class,
|
||||||
|
'formatter' => \LibreNMS\Util\CliColorFormatter::class,
|
||||||
|
'with' => [
|
||||||
|
'stream' => 'php://stderr',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
'syslog' => [
|
||||||
|
'driver' => 'syslog',
|
||||||
|
'level' => 'debug',
|
||||||
|
],
|
||||||
|
|
||||||
|
'errorlog' => [
|
||||||
|
'driver' => 'errorlog',
|
||||||
|
'level' => 'debug',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
|
||||||
|
];
|
@ -120,4 +120,17 @@ return [
|
|||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Log Channel
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| If you are using the "log" driver, you may specify the logging channel
|
||||||
|
| if you prefer to keep mail messages separate from other log entries
|
||||||
|
| for simpler reading. Otherwise, the default channel will be used.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'log_channel' => env('MAIL_LOG_CHANNEL'),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -4,18 +4,16 @@ return [
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
| Default Queue Driver
|
| Default Queue Connection Name
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| Laravel's queue API supports an assortment of back-ends via a single
|
| Laravel's queue API supports an assortment of back-ends via a single
|
||||||
| API, giving you convenient access to each back-end using the same
|
| API, giving you convenient access to each back-end using the same
|
||||||
| syntax for each one. Here you may set the default queue driver.
|
| syntax for every one. Here you may define a default connection.
|
||||||
|
|
|
||||||
| Supported: "sync", "database", "beanstalkd", "sqs", "redis", "null"
|
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'default' => env('QUEUE_DRIVER', 'sync'),
|
'default' => env('QUEUE_CONNECTION', 'sync'),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -26,6 +24,8 @@ return [
|
|||||||
| is used by your application. A default configuration has been added
|
| is used by your application. A default configuration has been added
|
||||||
| for each back-end shipped with Laravel. You are free to add more.
|
| for each back-end shipped with Laravel. You are free to add more.
|
||||||
|
|
|
|
||||||
|
| Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null"
|
||||||
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'connections' => [
|
'connections' => [
|
||||||
@ -50,18 +50,19 @@ return [
|
|||||||
|
|
||||||
'sqs' => [
|
'sqs' => [
|
||||||
'driver' => 'sqs',
|
'driver' => 'sqs',
|
||||||
'key' => 'your-public-key',
|
'key' => env('SQS_KEY', 'your-public-key'),
|
||||||
'secret' => 'your-secret-key',
|
'secret' => env('SQS_SECRET', 'your-secret-key'),
|
||||||
'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',
|
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
|
||||||
'queue' => 'your-queue-name',
|
'queue' => env('SQS_QUEUE', 'your-queue-name'),
|
||||||
'region' => 'us-east-1',
|
'region' => env('SQS_REGION', 'us-east-1'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'redis' => [
|
'redis' => [
|
||||||
'driver' => 'redis',
|
'driver' => 'redis',
|
||||||
'connection' => 'default',
|
'connection' => 'default',
|
||||||
'queue' => 'default',
|
'queue' => env('REDIS_QUEUE', 'default'),
|
||||||
'retry_after' => 90,
|
'retry_after' => 90,
|
||||||
|
'block_for' => null,
|
||||||
],
|
],
|
||||||
|
|
||||||
],
|
],
|
||||||
|
@ -17,12 +17,13 @@ return [
|
|||||||
'mailgun' => [
|
'mailgun' => [
|
||||||
'domain' => env('MAILGUN_DOMAIN'),
|
'domain' => env('MAILGUN_DOMAIN'),
|
||||||
'secret' => env('MAILGUN_SECRET'),
|
'secret' => env('MAILGUN_SECRET'),
|
||||||
|
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'ses' => [
|
'ses' => [
|
||||||
'key' => env('SES_KEY'),
|
'key' => env('SES_KEY'),
|
||||||
'secret' => env('SES_SECRET'),
|
'secret' => env('SES_SECRET'),
|
||||||
'region' => 'us-east-1',
|
'region' => env('SES_REGION', 'us-east-1'),
|
||||||
],
|
],
|
||||||
|
|
||||||
'sparkpost' => [
|
'sparkpost' => [
|
||||||
@ -33,6 +34,10 @@ return [
|
|||||||
'model' => App\User::class,
|
'model' => App\User::class,
|
||||||
'key' => env('STRIPE_KEY'),
|
'key' => env('STRIPE_KEY'),
|
||||||
'secret' => env('STRIPE_SECRET'),
|
'secret' => env('STRIPE_SECRET'),
|
||||||
|
'webhook' => [
|
||||||
|
'secret' => env('STRIPE_WEBHOOK_SECRET'),
|
||||||
|
'tolerance' => env('STRIPE_WEBHOOK_TOLERANCE', 300),
|
||||||
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -29,7 +31,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'lifetime' => 120,
|
'lifetime' => env('SESSION_LIFETIME', 120),
|
||||||
|
|
||||||
'expire_on_close' => false,
|
'expire_on_close' => false,
|
||||||
|
|
||||||
@ -70,7 +72,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'connection' => null,
|
'connection' => env('SESSION_CONNECTION', null),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -96,7 +98,7 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'store' => null,
|
'store' => env('SESSION_STORE', null),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -122,7 +124,10 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'cookie' => 'librenms_session',
|
'cookie' => env(
|
||||||
|
'SESSION_COOKIE',
|
||||||
|
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
|
||||||
|
),
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -176,4 +181,19 @@ return [
|
|||||||
|
|
||||||
'http_only' => true,
|
'http_only' => true,
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Same-Site Cookies
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| This option determines how your cookies behave when cross-site requests
|
||||||
|
| take place, and can be used to mitigate CSRF attacks. By default, we
|
||||||
|
| do not enable this as other CSRF protection services are in place.
|
||||||
|
|
|
||||||
|
| Supported: "lax", "strict"
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'same_site' => null,
|
||||||
|
|
||||||
];
|
];
|
||||||
|
18
config/tinker.php
Normal file
18
config/tinker.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
|
||||||
|
/*
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
| Alias Blacklist
|
||||||
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Typically, Tinker automatically aliases classes as you require them in
|
||||||
|
| Tinker. However, you may wish to never alias certain classes, which
|
||||||
|
| you may accomplish by listing the classes in the following array.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'dont_alias' => [],
|
||||||
|
|
||||||
|
];
|
@ -19,33 +19,32 @@ return [
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* To trust one or more specific proxies that connect
|
* To trust one or more specific proxies that connect
|
||||||
* directly to your server, use an array of IP addresses:
|
* directly to your server, use an array or a string separated by comma of IP addresses:
|
||||||
*/
|
*/
|
||||||
# 'proxies' => ['192.168.1.1'],
|
// 'proxies' => ['192.168.1.1'],
|
||||||
|
// 'proxies' => '192.168.1.1, 192.168.1.2',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Or, to trust all proxies that connect
|
* Or, to trust all proxies that connect
|
||||||
* directly to your server, use a "*"
|
* directly to your server, use a "*"
|
||||||
*/
|
*/
|
||||||
# 'proxies' => '*',
|
// 'proxies' => '*',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Which headers to use to detect proxy related data (For, Host, Proto, Port)
|
* Which headers to use to detect proxy related data (For, Host, Proto, Port)
|
||||||
*
|
*
|
||||||
* Options include:
|
* Options include:
|
||||||
*
|
*
|
||||||
* - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust)
|
* - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust)
|
||||||
* - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust)
|
* - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust)
|
||||||
*
|
* - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer)
|
||||||
|
*
|
||||||
|
* - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust)
|
||||||
|
* - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust)
|
||||||
|
* - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer)
|
||||||
|
*
|
||||||
* @link https://symfony.com/doc/current/deployment/proxies.html
|
* @link https://symfony.com/doc/current/deployment/proxies.html
|
||||||
*/
|
*/
|
||||||
'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
|
'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_ALL,
|
||||||
// 'headers' => [
|
|
||||||
// (defined('Illuminate\Http\Request::HEADER_FORWARDED') ? Illuminate\Http\Request::HEADER_FORWARDED : 'forwarded') => 'FORWARDED',
|
|
||||||
// \Illuminate\Http\Request::HEADER_CLIENT_IP => 'X_FORWARDED_FOR',
|
|
||||||
// \Illuminate\Http\Request::HEADER_CLIENT_HOST => 'X_FORWARDED_HOST',
|
|
||||||
// \Illuminate\Http\Request::HEADER_CLIENT_PROTO => 'X_FORWARDED_PROTO',
|
|
||||||
// \Illuminate\Http\Request::HEADER_CLIENT_PORT => 'X_FORWARDED_PORT',
|
|
||||||
// ]
|
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -28,6 +28,9 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'compiled' => realpath(storage_path('framework/views')),
|
'compiled' => env(
|
||||||
|
'VIEW_COMPILED_PATH',
|
||||||
|
realpath(storage_path('framework/views'))
|
||||||
|
),
|
||||||
|
|
||||||
];
|
];
|
||||||
|
@ -5,7 +5,7 @@ use Illuminate\Database\Seeder;
|
|||||||
class DatabaseSeeder extends Seeder
|
class DatabaseSeeder extends Seeder
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Run the database seeds.
|
* Seed the application's database.
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
|
@ -17,7 +17,7 @@ of the transport config to get it ready for use.
|
|||||||
actually interacts with the 3rd party API, invokes the mail command or whatever you want your alert to do.
|
actually interacts with the 3rd party API, invokes the mail command or whatever you want your alert to do.
|
||||||
|
|
||||||
`configTemplate()` - This is used to define the form that will accept the transport config in the webui and then what
|
`configTemplate()` - This is used to define the form that will accept the transport config in the webui and then what
|
||||||
data should be validated and how. Validation is done using [Laravel validation](https://laravel.com/docs/5.4/validation)
|
data should be validated and how. Validation is done using [Laravel validation](https://laravel.com/docs/5.7/validation)
|
||||||
|
|
||||||
The following function is __not__ required for new Transports and is for legacy reasons only. `deliverAlertOld()`.
|
The following function is __not__ required for new Transports and is for legacy reasons only. `deliverAlertOld()`.
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ Templates can be assigned to a single or a group of rules and can contain any ki
|
|||||||
|
|
||||||
To attach a template to a rule just open the `Alert Templates` settings page, choose the template to assign and click the yellow button in the `Actions` column. In the appearing popupbox select the rule(s) you want the template to be assigned to and click the `Attach` button. You might hold down the CTRL key to select multiple rules at once.
|
To attach a template to a rule just open the `Alert Templates` settings page, choose the template to assign and click the yellow button in the `Actions` column. In the appearing popupbox select the rule(s) you want the template to be assigned to and click the `Attach` button. You might hold down the CTRL key to select multiple rules at once.
|
||||||
|
|
||||||
The templating engine in use is Laravel Blade. We will cover some of the basics here, however the official Laravel docs will have more information [here](https://laravel.com/docs/5.4/blade)
|
The templating engine in use is Laravel Blade. We will cover some of the basics here, however the official Laravel docs will have more information [here](https://laravel.com/docs/5.7/blade)
|
||||||
|
|
||||||
## Syntax
|
## Syntax
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ In your alert template just use
|
|||||||
@endsection
|
@endsection
|
||||||
```
|
```
|
||||||
|
|
||||||
More info: https://laravel.com/docs/5.4/blade#extending-a-layout
|
More info: https://laravel.com/docs/5.7/blade#extending-a-layout
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
//FIXME remove Deprecated template
|
//FIXME remove Deprecated template
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* convert-template.inc.php
|
* convert-template.inc.php
|
||||||
*
|
*
|
||||||
@ -58,55 +59,55 @@ function convert_template($line)
|
|||||||
'/%([\w\d]+)\.([\w\d]+)/',// Replaces %something.anything
|
'/%([\w\d]+)\.([\w\d]+)/',// Replaces %something.anything
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'@php echo \1; @endphp ',
|
"@php\necho \\1;\n@endphp ",
|
||||||
'$value[\'\2\']',
|
'$value[\'\2\']',
|
||||||
],
|
],
|
||||||
$line
|
$line
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
$old1 = $line;
|
|
||||||
$find = [
|
|
||||||
'/{if %([\w=\s]+)}/',// Replaces {if %something == else}
|
|
||||||
'/{else}/',// Replaces {else}
|
|
||||||
'/{\/if}/',// Replaces {/if}
|
|
||||||
'/{foreach %faults}/',// Replaces {foreach %faults}
|
|
||||||
'/{foreach %contacts}/',// Replaces {foreach %contacts}
|
|
||||||
'/{\/foreach}/',// Replaces {/foreach}
|
|
||||||
'/{calc[ ]*([\w\d\s\%\.\(\)\*\/\-\+\/]+)}/',// Replaces {calc (something*100)}
|
|
||||||
'/%value.string/',// Replaces %value.string
|
|
||||||
'/%([\w\d]+)\.([\w\d]+)/',// Replaces %something.anything
|
|
||||||
'/%([\w\d]+)/',// Replaces %anything
|
|
||||||
];
|
|
||||||
$replace = [
|
|
||||||
' @if ($alert->\1) ',
|
|
||||||
' @else ',
|
|
||||||
' @endif ',
|
|
||||||
' @foreach ($alert->faults as $key => $value)',
|
|
||||||
' @foreach ($alert->contacts as $key => $value)',
|
|
||||||
' @endforeach ',
|
|
||||||
' @php echo \1; @endphp ',
|
|
||||||
'{{ $value[\'string\'] }}',
|
|
||||||
'{{ $\1[\'\2\'] }}',
|
|
||||||
'{{ $alert->\1 }}',
|
|
||||||
];
|
|
||||||
$old1 = preg_replace($find, $replace, $old1);
|
|
||||||
|
|
||||||
// Revert some over-zealous changes:
|
|
||||||
$find = [
|
|
||||||
'/\$alert->key/',
|
|
||||||
'/\$alert->value/',
|
|
||||||
];
|
|
||||||
$replace = [
|
|
||||||
'$key',
|
|
||||||
'$value',
|
|
||||||
];
|
|
||||||
return preg_replace($find, $replace, $old1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$old1 = $line;
|
||||||
|
$find = [
|
||||||
|
'/{if %([\w=\s]+)}/',// Replaces {if %something == else}
|
||||||
|
'/{else}/',// Replaces {else}
|
||||||
|
'/{\/if}/',// Replaces {/if}
|
||||||
|
'/{foreach %faults}/',// Replaces {foreach %faults}
|
||||||
|
'/{foreach %contacts}/',// Replaces {foreach %contacts}
|
||||||
|
'/{\/foreach}/',// Replaces {/foreach}
|
||||||
|
'/{calc[ ]*([\w\d\s\%\.\(\)\*\/\-\+\/]+)}/',// Replaces {calc (something*100)}
|
||||||
|
'/%value.string/',// Replaces %value.string
|
||||||
|
'/%([\w\d]+)\.([\w\d]+)/',// Replaces %something.anything
|
||||||
|
'/%([\w\d]+)/',// Replaces %anything
|
||||||
|
];
|
||||||
|
$replace = [
|
||||||
|
' @if ($alert->\1) ',
|
||||||
|
' @else ',
|
||||||
|
' @endif ',
|
||||||
|
' @foreach ($alert->faults as $key => $value)',
|
||||||
|
' @foreach ($alert->contacts as $key => $value)',
|
||||||
|
' @endforeach ',
|
||||||
|
" @php\necho \\1;\n@endphp ",
|
||||||
|
'{{ $value[\'string\'] }}',
|
||||||
|
'{{ $\1[\'\2\'] }}',
|
||||||
|
'{{ $alert->\1 }}',
|
||||||
|
];
|
||||||
|
$old1 = preg_replace($find, $replace, $old1);
|
||||||
|
|
||||||
|
// Revert some over-zealous changes:
|
||||||
|
$find = [
|
||||||
|
'/\$alert->key/',
|
||||||
|
'/\$alert->value/',
|
||||||
|
];
|
||||||
|
$replace = [
|
||||||
|
'$key',
|
||||||
|
'$value',
|
||||||
|
];
|
||||||
|
return preg_replace($find, $replace, $old1);
|
||||||
}
|
}
|
||||||
|
|
||||||
die(json_encode([
|
die(json_encode([
|
||||||
'status' => 'ok',
|
'status' => 'ok',
|
||||||
'message' => 'Template converted, review and save to update',
|
'message' => 'Template converted, review and save to update',
|
||||||
'template' => $new_body,
|
'template' => $new_body,
|
||||||
'title' => $new_title,
|
'title' => $new_title,
|
||||||
]));
|
]));
|
||||||
|
@ -76,6 +76,7 @@ if (empty($config['favicon'])) {
|
|||||||
<link rel="manifest" href="images/manifest.json">
|
<link rel="manifest" href="images/manifest.json">
|
||||||
<link rel="mask-icon" href="images/safari-pinned-tab.svg" color="#5bbad5">
|
<link rel="mask-icon" href="images/safari-pinned-tab.svg" color="#5bbad5">
|
||||||
<link rel="shortcut icon" href="images/favicon.ico">
|
<link rel="shortcut icon" href="images/favicon.ico">
|
||||||
|
<meta name="csrf-token" content="<?php echo csrf_token(); ?>">
|
||||||
<meta name="msapplication-config" content="images/browserconfig.xml">
|
<meta name="msapplication-config" content="images/browserconfig.xml">
|
||||||
<meta name="theme-color" content="#ffffff">
|
<meta name="theme-color" content="#ffffff">
|
||||||
<?php
|
<?php
|
||||||
@ -148,6 +149,12 @@ foreach ((array)$config['webui']['custom_css'] as $custom_css) {
|
|||||||
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=550,height=600');");
|
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=550,height=600');");
|
||||||
}
|
}
|
||||||
// End -->
|
// End -->
|
||||||
|
|
||||||
|
$.ajaxSetup({
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="js/overlib_mini.js"></script>
|
<script type="text/javascript" src="js/overlib_mini.js"></script>
|
||||||
<script type="text/javascript" src="js/toastr.min.js"></script>
|
<script type="text/javascript" src="js/toastr.min.js"></script>
|
||||||
|
1
html/svg/403.svg
Normal file
1
html/svg/403.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 6.5 KiB |
1
html/svg/404.svg
Normal file
1
html/svg/404.svg
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1024 1024"><defs><linearGradient id="a" x1="50.31%" x2="50%" y1="74.74%" y2="0%"><stop offset="0%" stop-color="#FFE98A"/><stop offset="67.7%" stop-color="#B63E59"/><stop offset="100%" stop-color="#68126F"/></linearGradient><circle id="c" cx="603" cy="682" r="93"/><filter id="b" width="203.2%" height="203.2%" x="-51.6%" y="-51.6%" filterUnits="objectBoundingBox"><feOffset in="SourceAlpha" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="32"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><linearGradient id="d" x1="49.48%" x2="49.87%" y1="11.66%" y2="77.75%"><stop offset="0%" stop-color="#F7EAB9"/><stop offset="100%" stop-color="#E5765E"/></linearGradient><linearGradient id="e" x1="91.59%" x2="66.97%" y1="5.89%" y2="100%"><stop offset="0%" stop-color="#A22A50"/><stop offset="100%" stop-color="#EE7566"/></linearGradient><linearGradient id="f" x1="49.48%" x2="49.61%" y1="11.66%" y2="98.34%"><stop offset="0%" stop-color="#F7EAB9"/><stop offset="100%" stop-color="#E5765E"/></linearGradient><linearGradient id="g" x1="78.5%" x2="36.4%" y1="106.76%" y2="26.41%"><stop offset="0%" stop-color="#A22A50"/><stop offset="100%" stop-color="#EE7566"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><rect width="1024" height="1024" fill="url(#a)"/><use fill="black" filter="url(#b)" xlink:href="#c"/><use fill="#FFF6CB" xlink:href="#c"/><g fill="#FFFFFF" opacity=".3" transform="translate(14 23)"><circle cx="203" cy="255" r="3" fill-opacity=".4"/><circle cx="82" cy="234" r="2"/><circle cx="22" cy="264" r="2" opacity=".4"/><circle cx="113" cy="65" r="3"/><circle cx="202" cy="2" r="2"/><circle cx="2" cy="114" r="2"/><circle cx="152" cy="144" r="2"/><circle cx="362" cy="224" r="2"/><circle cx="453" cy="65" r="3" opacity=".4"/><circle cx="513" cy="255" r="3"/><circle cx="593" cy="115" r="3"/><circle cx="803" cy="5" r="3" opacity=".4"/><circle cx="502" cy="134" r="2"/><circle cx="832" cy="204" r="2"/><circle cx="752" cy="114" r="2"/><circle cx="933" cy="255" r="3" opacity=".4"/><circle cx="703" cy="225" r="3"/><circle cx="903" cy="55" r="3"/><circle cx="982" cy="144" r="2"/><circle cx="632" cy="14" r="2"/></g><g transform="translate(0 550)"><path fill="#8E2C15" d="M259 5.47c0 5.33 3.33 9.5 10 12.5s9.67 9.16 9 18.5h1c.67-6.31 1-11.8 1-16.47 8.67 0 13.33-1.33 14-4 .67 4.98 1.67 8.3 3 9.97 1.33 1.66 2 5.16 2 10.5h1c0-5.65.33-9.64 1-11.97 1-3.5 4-10.03-1-14.53S295 7 290 3c-5-4-10-3-13 2s-5 7-9 7-5-3.53-5-5.53c0-2 2-5-1.5-5s-7.5 0-7.5 2c0 1.33 1.67 2 5 2z"/><path fill="url(#d)" d="M1024 390H0V105.08C77.3 71.4 155.26 35 297.4 35c250 0 250.76 125.25 500 125 84.03-.08 160.02-18.2 226.6-40.93V390z"/><path fill="url(#d)" d="M1024 442H0V271.82c137.51-15.4 203.1-50.49 356.67-60.1C555.24 199.3 606.71 86.59 856.74 86.59c72.78 0 124.44 10.62 167.26 25.68V442z"/><path fill="url(#e)" d="M1024 112.21V412H856.91c99.31-86.5 112.63-140.75 39.97-162.78C710.24 192.64 795.12 86.58 856.9 86.58c72.7 0 124.3 10.6 167.09 25.63z"/><path fill="url(#e)" d="M1024 285.32V412H857c99.31-86.6 112.63-140.94 39.97-163L1024 285.32z"/><path fill="url(#f)" d="M0 474V223.93C67.12 190.69 129.55 155 263 155c250 0 331.46 162.6 530 175 107.42 6.71 163-26.77 231-58.92V474H0z"/><path fill="url(#e)" d="M353.02 474H0V223.93C67.12 190.69 129.55 155 263 155c71.14 0 151.5 12.76 151.5 70.5 0 54.5-45.5 79.72-112.5 109-82.26 35.95-54.57 111.68 51.02 139.5z"/><path fill="url(#g)" d="M353.02 474H0v-14.8l302-124.7c-82.26 35.95-54.57 111.68 51.02 139.5z"/></g><g fill="#FFFFFF" opacity=".2" transform="translate(288 523)"><circle cx="250" cy="110" r="110"/><circle cx="420" cy="78" r="60"/><circle cx="70" cy="220" r="70"/></g><g fill="#FFFFFF" fill-rule="nonzero" opacity=".08" transform="translate(135 316)"><path d="M10 80.22a14.2 14.2 0 0 1 20 0 14.2 14.2 0 0 0 20 0l20-19.86a42.58 42.58 0 0 1 60 0l15 14.9a21.3 21.3 0 0 0 30 0 21.3 21.3 0 0 1 30 0l.9.9A47.69 47.69 0 0 1 220 110H0v-5.76c0-9.02 3.6-17.67 10-24.02zm559.1-66.11l5.9-5.86c11.07-11 28.93-11 40 0l10 9.94a14.19 14.19 0 0 0 20 0 14.19 14.19 0 0 1 20 0 16.36 16.36 0 0 0 21.3 1.5l8.7-6.47a33.47 33.47 0 0 1 40 0l4.06 3.03A39.6 39.6 0 0 1 755 48H555a47.77 47.77 0 0 1 14.1-33.89z"/></g></g></svg>
|
After Width: | Height: | Size: 4.2 KiB |
1
html/svg/500.svg
Normal file
1
html/svg/500.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 15 KiB |
1
html/svg/503.svg
Normal file
1
html/svg/503.svg
Normal file
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 5.4 KiB |
@ -93,12 +93,12 @@ modules:
|
|||||||
oid: rf2Operation
|
oid: rf2Operation
|
||||||
state_name: rf2Operation
|
state_name: rf2Operation
|
||||||
states:
|
states:
|
||||||
- { value: 0, descr: None, graph: 1, generic: 1 }
|
- { value: 0, graph: 1, generic: 1, descr: None }
|
||||||
- { value: 1, descr: Booting, graph: 1, generic: 1 }
|
- { value: 1, graph: 1, generic: 1, descr: Booting }
|
||||||
- { value: 2, descr: Ok, graph: 1, generic: 0, descr: Ok }
|
- { value: 2, graph: 1, generic: 0, descr: Ok }
|
||||||
- { value: 3, descr: Testing, graph: 1, generic: 1 }
|
- { value: 3, graph: 1, generic: 1, descr: Testing }
|
||||||
- { value: 4, descr: Error, graph: 1, generic: 2 }
|
- { value: 4, graph: 1, generic: 2, descr: Error }
|
||||||
- { value: 5, descr: 'No data from ODU', graph: 1, generic: 2 }
|
- { value: 5, graph: 1, generic: 2, descr: 'No data from ODU' }
|
||||||
-
|
-
|
||||||
descr: 'R1 Humidity'
|
descr: 'R1 Humidity'
|
||||||
index: 'rf1OduHumidity.{{ $index }}'
|
index: 'rf1OduHumidity.{{ $index }}'
|
||||||
|
42
package.json
42
package.json
@ -1,21 +1,25 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "npm run development",
|
"dev": "npm run development",
|
||||||
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
"development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
"watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
"watch": "npm run development -- --watch",
|
||||||
"watch-poll": "npm run watch -- --watch-poll",
|
"watch-poll": "npm run watch -- --watch-poll",
|
||||||
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
"hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
||||||
"prod": "npm run production",
|
"prod": "npm run production",
|
||||||
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
"production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"axios": "^0.16.2",
|
"axios": "^0.18",
|
||||||
"bootstrap-sass": "^3.3.7",
|
"bootstrap": "^4.0.0",
|
||||||
"cross-env": "^5.0.1",
|
"cross-env": "^5.1",
|
||||||
"jquery": "^3.1.1",
|
"jquery": "^3.2",
|
||||||
"laravel-mix": "^1.0",
|
"laravel-mix": "^4.0.7",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.5",
|
||||||
"vue": "^2.1.10"
|
"popper.js": "^1.12",
|
||||||
}
|
"resolve-url-loader": "^2.3.1",
|
||||||
|
"sass": "^1.15.2",
|
||||||
|
"sass-loader": "^7.1.0",
|
||||||
|
"vue": "^2.5.17"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<phpunit
|
<phpunit backupGlobals="true"
|
||||||
|
backupStaticAttributes="false"
|
||||||
bootstrap="tests/bootstrap.php"
|
bootstrap="tests/bootstrap.php"
|
||||||
colors="true"
|
colors="true"
|
||||||
convertErrorsToExceptions="true"
|
convertErrorsToExceptions="true"
|
||||||
@ -32,8 +33,10 @@
|
|||||||
</filter>
|
</filter>
|
||||||
<php>
|
<php>
|
||||||
<env name="APP_ENV" value="testing"/>
|
<env name="APP_ENV" value="testing"/>
|
||||||
|
<env name="BCRYPT_ROUNDS" value="4"/>
|
||||||
<env name="CACHE_DRIVER" value="array"/>
|
<env name="CACHE_DRIVER" value="array"/>
|
||||||
|
<env name="MAIL_DRIVER" value="array"/>
|
||||||
|
<env name="QUEUE_CONNECTION" value="sync"/>
|
||||||
<env name="SESSION_DRIVER" value="array"/>
|
<env name="SESSION_DRIVER" value="array"/>
|
||||||
<env name="QUEUE_DRIVER" value="sync"/>
|
|
||||||
</php>
|
</php>
|
||||||
</phpunit>
|
</phpunit>
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="container">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-md-8 col-md-offset-2">
|
|
||||||
<div class="panel panel-default">
|
|
||||||
<div class="panel-heading">Example Component</div>
|
|
||||||
|
|
||||||
<div class="panel-body">
|
|
||||||
I'm an example component!
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
mounted() {
|
|
||||||
console.log('Component mounted.')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
@ -1,38 +0,0 @@
|
|||||||
|
|
||||||
// Body
|
|
||||||
$body-bg: #f5f8fa;
|
|
||||||
|
|
||||||
// Borders
|
|
||||||
$laravel-border-color: darken($body-bg, 10%);
|
|
||||||
$list-group-border: $laravel-border-color;
|
|
||||||
$navbar-default-border: $laravel-border-color;
|
|
||||||
$panel-default-border: $laravel-border-color;
|
|
||||||
$panel-inner-border: $laravel-border-color;
|
|
||||||
|
|
||||||
// Brands
|
|
||||||
$brand-primary: #3097D1;
|
|
||||||
$brand-info: #8eb4cb;
|
|
||||||
$brand-success: #2ab27b;
|
|
||||||
$brand-warning: #cbb956;
|
|
||||||
$brand-danger: #bf5329;
|
|
||||||
|
|
||||||
// Typography
|
|
||||||
$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
|
|
||||||
$font-family-sans-serif: "Raleway", sans-serif;
|
|
||||||
$font-size-base: 14px;
|
|
||||||
$line-height-base: 1.6;
|
|
||||||
$text-color: #636b6f;
|
|
||||||
|
|
||||||
// Navbar
|
|
||||||
$navbar-default-bg: #fff;
|
|
||||||
|
|
||||||
// Buttons
|
|
||||||
$btn-default-color: $text-color;
|
|
||||||
|
|
||||||
// Inputs
|
|
||||||
$input-border: lighten($text-color, 40%);
|
|
||||||
$input-border-focus: lighten($brand-primary, 25%);
|
|
||||||
$input-color-placeholder: lighten($text-color, 30%);
|
|
||||||
|
|
||||||
// Panels
|
|
||||||
$panel-default-heading-bg: #fff;
|
|
@ -1,9 +0,0 @@
|
|||||||
|
|
||||||
// Fonts
|
|
||||||
@import url("https://fonts.googleapis.com/css?family=Raleway:300,400,600");
|
|
||||||
|
|
||||||
// Variables
|
|
||||||
@import "variables";
|
|
||||||
|
|
||||||
// Bootstrap
|
|
||||||
@import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap";
|
|
@ -9,14 +9,23 @@ require('./bootstrap');
|
|||||||
|
|
||||||
window.Vue = require('vue');
|
window.Vue = require('vue');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The following block of code may be used to automatically register your
|
||||||
|
* Vue components. It will recursively scan this directory for the Vue
|
||||||
|
* components and automatically register them with their "basename".
|
||||||
|
*
|
||||||
|
* Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
|
||||||
|
*/
|
||||||
|
|
||||||
|
const files = require.context('./', true, /\.vue$/i)
|
||||||
|
files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Next, we will create a fresh Vue application instance and attach it to
|
* Next, we will create a fresh Vue application instance and attach it to
|
||||||
* the page. Then, you may begin adding components to this application
|
* the page. Then, you may begin adding components to this application
|
||||||
* or customize the JavaScript scaffolding to fit your unique needs.
|
* or customize the JavaScript scaffolding to fit your unique needs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Vue.component('example', require('./components/Example.vue'));
|
|
||||||
|
|
||||||
const app = new Vue({
|
const app = new Vue({
|
||||||
el: '#app'
|
el: '#app'
|
||||||
});
|
});
|
@ -8,9 +8,10 @@ window._ = require('lodash');
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
window.Popper = require('popper.js').default;
|
||||||
window.$ = window.jQuery = require('jquery');
|
window.$ = window.jQuery = require('jquery');
|
||||||
|
|
||||||
require('bootstrap-sass');
|
require('bootstrap');
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,5 +50,7 @@ if (token) {
|
|||||||
|
|
||||||
// window.Echo = new Echo({
|
// window.Echo = new Echo({
|
||||||
// broadcaster: 'pusher',
|
// broadcaster: 'pusher',
|
||||||
// key: 'your-pusher-key'
|
// key: process.env.MIX_PUSHER_APP_KEY,
|
||||||
|
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
|
||||||
|
// encrypted: true
|
||||||
// });
|
// });
|
23
resources/js/components/ExampleComponent.vue
Normal file
23
resources/js/components/ExampleComponent.vue
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<template>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row justify-content-center">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header">Example Component</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
I'm an example component.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
mounted() {
|
||||||
|
console.log('Component mounted.')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -13,80 +13,108 @@ return [
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'accepted' => 'The :attribute must be accepted.',
|
'accepted' => 'The :attribute must be accepted.',
|
||||||
'active_url' => 'The :attribute is not a valid URL.',
|
'active_url' => 'The :attribute is not a valid URL.',
|
||||||
'after' => 'The :attribute must be a date after :date.',
|
'after' => 'The :attribute must be a date after :date.',
|
||||||
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
|
||||||
'alpha' => 'The :attribute may only contain letters.',
|
'alpha' => 'The :attribute may only contain letters.',
|
||||||
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
|
'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
|
||||||
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
'alpha_num' => 'The :attribute may only contain letters and numbers.',
|
||||||
'array' => 'The :attribute must be an array.',
|
'array' => 'The :attribute must be an array.',
|
||||||
'before' => 'The :attribute must be a date before :date.',
|
'before' => 'The :attribute must be a date before :date.',
|
||||||
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
|
||||||
'between' => [
|
'between' => [
|
||||||
'numeric' => 'The :attribute must be between :min and :max.',
|
'numeric' => 'The :attribute must be between :min and :max.',
|
||||||
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
'file' => 'The :attribute must be between :min and :max kilobytes.',
|
||||||
'string' => 'The :attribute must be between :min and :max characters.',
|
'string' => 'The :attribute must be between :min and :max characters.',
|
||||||
'array' => 'The :attribute must have between :min and :max items.',
|
'array' => 'The :attribute must have between :min and :max items.',
|
||||||
],
|
],
|
||||||
'boolean' => 'The :attribute field must be true or false.',
|
'boolean' => 'The :attribute field must be true or false.',
|
||||||
'confirmed' => 'The :attribute confirmation does not match.',
|
'confirmed' => 'The :attribute confirmation does not match.',
|
||||||
'date' => 'The :attribute is not a valid date.',
|
'date' => 'The :attribute is not a valid date.',
|
||||||
'date_format' => 'The :attribute does not match the format :format.',
|
'date_equals' => 'The :attribute must be a date equal to :date.',
|
||||||
'different' => 'The :attribute and :other must be different.',
|
'date_format' => 'The :attribute does not match the format :format.',
|
||||||
'digits' => 'The :attribute must be :digits digits.',
|
'different' => 'The :attribute and :other must be different.',
|
||||||
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
'digits' => 'The :attribute must be :digits digits.',
|
||||||
'dimensions' => 'The :attribute has invalid image dimensions.',
|
'digits_between' => 'The :attribute must be between :min and :max digits.',
|
||||||
'distinct' => 'The :attribute field has a duplicate value.',
|
'dimensions' => 'The :attribute has invalid image dimensions.',
|
||||||
'email' => 'The :attribute must be a valid email address.',
|
'distinct' => 'The :attribute field has a duplicate value.',
|
||||||
'exists' => 'The selected :attribute is invalid.',
|
'email' => 'The :attribute must be a valid email address.',
|
||||||
'file' => 'The :attribute must be a file.',
|
'exists' => 'The selected :attribute is invalid.',
|
||||||
'filled' => 'The :attribute field must have a value.',
|
'file' => 'The :attribute must be a file.',
|
||||||
'image' => 'The :attribute must be an image.',
|
'filled' => 'The :attribute field must have a value.',
|
||||||
'in' => 'The selected :attribute is invalid.',
|
'gt' => [
|
||||||
'in_array' => 'The :attribute field does not exist in :other.',
|
'numeric' => 'The :attribute must be greater than :value.',
|
||||||
'integer' => 'The :attribute must be an integer.',
|
'file' => 'The :attribute must be greater than :value kilobytes.',
|
||||||
'ip' => 'The :attribute must be a valid IP address.',
|
'string' => 'The :attribute must be greater than :value characters.',
|
||||||
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
'array' => 'The :attribute must have more than :value items.',
|
||||||
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
],
|
||||||
'json' => 'The :attribute must be a valid JSON string.',
|
'gte' => [
|
||||||
'max' => [
|
'numeric' => 'The :attribute must be greater than or equal :value.',
|
||||||
|
'file' => 'The :attribute must be greater than or equal :value kilobytes.',
|
||||||
|
'string' => 'The :attribute must be greater than or equal :value characters.',
|
||||||
|
'array' => 'The :attribute must have :value items or more.',
|
||||||
|
],
|
||||||
|
'image' => 'The :attribute must be an image.',
|
||||||
|
'in' => 'The selected :attribute is invalid.',
|
||||||
|
'in_array' => 'The :attribute field does not exist in :other.',
|
||||||
|
'integer' => 'The :attribute must be an integer.',
|
||||||
|
'ip' => 'The :attribute must be a valid IP address.',
|
||||||
|
'ipv4' => 'The :attribute must be a valid IPv4 address.',
|
||||||
|
'ipv6' => 'The :attribute must be a valid IPv6 address.',
|
||||||
|
'json' => 'The :attribute must be a valid JSON string.',
|
||||||
|
'lt' => [
|
||||||
|
'numeric' => 'The :attribute must be less than :value.',
|
||||||
|
'file' => 'The :attribute must be less than :value kilobytes.',
|
||||||
|
'string' => 'The :attribute must be less than :value characters.',
|
||||||
|
'array' => 'The :attribute must have less than :value items.',
|
||||||
|
],
|
||||||
|
'lte' => [
|
||||||
|
'numeric' => 'The :attribute must be less than or equal :value.',
|
||||||
|
'file' => 'The :attribute must be less than or equal :value kilobytes.',
|
||||||
|
'string' => 'The :attribute must be less than or equal :value characters.',
|
||||||
|
'array' => 'The :attribute must not have more than :value items.',
|
||||||
|
],
|
||||||
|
'max' => [
|
||||||
'numeric' => 'The :attribute may not be greater than :max.',
|
'numeric' => 'The :attribute may not be greater than :max.',
|
||||||
'file' => 'The :attribute may not be greater than :max kilobytes.',
|
'file' => 'The :attribute may not be greater than :max kilobytes.',
|
||||||
'string' => 'The :attribute may not be greater than :max characters.',
|
'string' => 'The :attribute may not be greater than :max characters.',
|
||||||
'array' => 'The :attribute may not have more than :max items.',
|
'array' => 'The :attribute may not have more than :max items.',
|
||||||
],
|
],
|
||||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
||||||
'min' => [
|
'min' => [
|
||||||
'numeric' => 'The :attribute must be at least :min.',
|
'numeric' => 'The :attribute must be at least :min.',
|
||||||
'file' => 'The :attribute must be at least :min kilobytes.',
|
'file' => 'The :attribute must be at least :min kilobytes.',
|
||||||
'string' => 'The :attribute must be at least :min characters.',
|
'string' => 'The :attribute must be at least :min characters.',
|
||||||
'array' => 'The :attribute must have at least :min items.',
|
'array' => 'The :attribute must have at least :min items.',
|
||||||
],
|
],
|
||||||
'not_in' => 'The selected :attribute is invalid.',
|
'not_in' => 'The selected :attribute is invalid.',
|
||||||
'numeric' => 'The :attribute must be a number.',
|
'not_regex' => 'The :attribute format is invalid.',
|
||||||
'present' => 'The :attribute field must be present.',
|
'numeric' => 'The :attribute must be a number.',
|
||||||
'regex' => 'The :attribute format is invalid.',
|
'present' => 'The :attribute field must be present.',
|
||||||
'required' => 'The :attribute field is required.',
|
'regex' => 'The :attribute format is invalid.',
|
||||||
'required_if' => 'The :attribute field is required when :other is :value.',
|
'required' => 'The :attribute field is required.',
|
||||||
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
'required_if' => 'The :attribute field is required when :other is :value.',
|
||||||
'required_with' => 'The :attribute field is required when :values is present.',
|
'required_unless' => 'The :attribute field is required unless :other is in :values.',
|
||||||
'required_with_all' => 'The :attribute field is required when :values is present.',
|
'required_with' => 'The :attribute field is required when :values is present.',
|
||||||
'required_without' => 'The :attribute field is required when :values is not present.',
|
'required_with_all' => 'The :attribute field is required when :values are present.',
|
||||||
|
'required_without' => 'The :attribute field is required when :values is not present.',
|
||||||
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
'required_without_all' => 'The :attribute field is required when none of :values are present.',
|
||||||
'same' => 'The :attribute and :other must match.',
|
'same' => 'The :attribute and :other must match.',
|
||||||
'size' => [
|
'size' => [
|
||||||
'numeric' => 'The :attribute must be :size.',
|
'numeric' => 'The :attribute must be :size.',
|
||||||
'file' => 'The :attribute must be :size kilobytes.',
|
'file' => 'The :attribute must be :size kilobytes.',
|
||||||
'string' => 'The :attribute must be :size characters.',
|
'string' => 'The :attribute must be :size characters.',
|
||||||
'array' => 'The :attribute must contain :size items.',
|
'array' => 'The :attribute must contain :size items.',
|
||||||
],
|
],
|
||||||
'string' => 'The :attribute must be a string.',
|
'starts_with' => 'The :attribute must start with one of the following: :values',
|
||||||
'timezone' => 'The :attribute must be a valid zone.',
|
'string' => 'The :attribute must be a string.',
|
||||||
'unique' => 'The :attribute has already been taken.',
|
'timezone' => 'The :attribute must be a valid zone.',
|
||||||
'uploaded' => 'The :attribute failed to upload.',
|
'unique' => 'The :attribute has already been taken.',
|
||||||
'url' => 'The :attribute format is invalid.',
|
'uploaded' => 'The :attribute failed to upload.',
|
||||||
|
'url' => 'The :attribute format is invalid.',
|
||||||
|
'uuid' => 'The :attribute must be a valid UUID.',
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -110,9 +138,9 @@ return [
|
|||||||
| Custom Validation Attributes
|
| Custom Validation Attributes
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
|
|
|
||||||
| The following language lines are used to swap attribute place-holders
|
| The following language lines are used to swap our attribute placeholder
|
||||||
| with something more reader friendly such as E-Mail Address instead
|
| with something more reader friendly such as "E-Mail Address" instead
|
||||||
| of "email". This simply helps us make messages a little cleaner.
|
| of "email". This simply helps us make our message more expressive.
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
20
resources/sass/_variables.scss
Normal file
20
resources/sass/_variables.scss
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
|
||||||
|
// Body
|
||||||
|
$body-bg: #f8fafc;
|
||||||
|
|
||||||
|
// Typography
|
||||||
|
$font-family-sans-serif: "Nunito", sans-serif;
|
||||||
|
$font-size-base: 0.9rem;
|
||||||
|
$line-height-base: 1.6;
|
||||||
|
|
||||||
|
// Colors
|
||||||
|
$blue: #3490dc;
|
||||||
|
$indigo: #6574cd;
|
||||||
|
$purple: #9561e2;
|
||||||
|
$pink: #f66D9b;
|
||||||
|
$red: #e3342f;
|
||||||
|
$orange: #f6993f;
|
||||||
|
$yellow: #ffed4a;
|
||||||
|
$green: #38c172;
|
||||||
|
$teal: #4dc0b5;
|
||||||
|
$cyan: #6cb2eb;
|
14
resources/sass/app.scss
Normal file
14
resources/sass/app.scss
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
// Fonts
|
||||||
|
@import url('https://fonts.googleapis.com/css?family=Nunito');
|
||||||
|
|
||||||
|
// Variables
|
||||||
|
@import 'variables';
|
||||||
|
|
||||||
|
// Bootstrap
|
||||||
|
@import '~bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
|
.navbar-laravel {
|
||||||
|
background-color: #fff;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
@ -80,6 +80,12 @@
|
|||||||
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=550,height=600');");
|
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=550,height=600');");
|
||||||
}
|
}
|
||||||
// End -->
|
// End -->
|
||||||
|
|
||||||
|
$.ajaxSetup({
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
|
||||||
|
}
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
<script type="text/javascript" src="js/overlib_mini.js"></script>
|
<script type="text/javascript" src="js/overlib_mini.js"></script>
|
||||||
<script type="text/javascript" src="js/toastr.min.js"></script>
|
<script type="text/javascript" src="js/toastr.min.js"></script>
|
||||||
|
@ -1,22 +1,21 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="{{ app()->getLocale() }}">
|
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
|
||||||
<title>Laravel</title>
|
<title>Laravel</title>
|
||||||
|
|
||||||
<!-- Fonts -->
|
<!-- Fonts -->
|
||||||
<link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
|
<link href="https://fonts.googleapis.com/css?family=Nunito:200,600" rel="stylesheet">
|
||||||
|
|
||||||
<!-- Styles -->
|
<!-- Styles -->
|
||||||
<style>
|
<style>
|
||||||
html, body {
|
html, body {
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
color: #636b6f;
|
color: #636b6f;
|
||||||
font-family: 'Raleway', sans-serif;
|
font-family: 'Nunito', sans-serif;
|
||||||
font-weight: 100;
|
font-weight: 200;
|
||||||
height: 100vh;
|
height: 100vh;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
@ -52,7 +51,7 @@
|
|||||||
.links > a {
|
.links > a {
|
||||||
color: #636b6f;
|
color: #636b6f;
|
||||||
padding: 0 25px;
|
padding: 0 25px;
|
||||||
font-size: 12px;
|
font-size: 13px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
letter-spacing: .1rem;
|
letter-spacing: .1rem;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@ -68,12 +67,15 @@
|
|||||||
<div class="flex-center position-ref full-height">
|
<div class="flex-center position-ref full-height">
|
||||||
@if (Route::has('login'))
|
@if (Route::has('login'))
|
||||||
<div class="top-right links">
|
<div class="top-right links">
|
||||||
@if (Auth::check())
|
@auth
|
||||||
<a href="{{ url('/home') }}">Home</a>
|
<a href="{{ url('/home') }}">Home</a>
|
||||||
@else
|
@else
|
||||||
<a href="{{ url('/login') }}">Login</a>
|
<a href="{{ route('login') }}">Login</a>
|
||||||
<a href="{{ url('/register') }}">Register</a>
|
|
||||||
@endif
|
@if (Route::has('register'))
|
||||||
|
<a href="{{ route('register') }}">Register</a>
|
||||||
|
@endif
|
||||||
|
@endauth
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
@ -83,9 +85,11 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="links">
|
<div class="links">
|
||||||
<a href="https://laravel.com/docs">Documentation</a>
|
<a href="https://laravel.com/docs">Docs</a>
|
||||||
<a href="https://laracasts.com">Laracasts</a>
|
<a href="https://laracasts.com">Laracasts</a>
|
||||||
<a href="https://laravel-news.com">News</a>
|
<a href="https://laravel-news.com">News</a>
|
||||||
|
<a href="https://blog.laravel.com">Blog</a>
|
||||||
|
<a href="https://nova.laravel.com">Nova</a>
|
||||||
<a href="https://forge.laravel.com">Forge</a>
|
<a href="https://forge.laravel.com">Forge</a>
|
||||||
<a href="https://github.com/laravel/laravel">GitHub</a>
|
<a href="https://github.com/laravel/laravel">GitHub</a>
|
||||||
</div>
|
</div>
|
||||||
|
@ -25,9 +25,7 @@ Route::group(['middleware' => ['auth', '2fa'], 'guard' => 'auth'], function () {
|
|||||||
Route::get('locations', 'LocationController@index');
|
Route::get('locations', 'LocationController@index');
|
||||||
|
|
||||||
// old route redirects
|
// old route redirects
|
||||||
Route::get('poll-log', function () {
|
Route::permanentRedirect('poll-log', 'pollers/tab=log/');
|
||||||
return redirect('pollers/tab=log/');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Two Factor Auth
|
// Two Factor Auth
|
||||||
Route::get('2fa', 'TwoFactorController@showTwoFactorForm')->name('2fa.form');
|
Route::get('2fa', 'TwoFactorController@showTwoFactorForm')->name('2fa.form');
|
||||||
@ -105,29 +103,10 @@ Route::group(['middleware' => ['auth', '2fa'], 'guard' => 'auth'], function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// Debugbar routes need to be here because of catch-all
|
|
||||||
if (config('app.env') !== 'production' && config('app.debug') && config('debugbar.enabled') !== false) {
|
|
||||||
Route::get('/_debugbar/assets/stylesheets', [
|
|
||||||
'as' => 'debugbar-css',
|
|
||||||
'uses' => '\Barryvdh\Debugbar\Controllers\AssetController@css'
|
|
||||||
]);
|
|
||||||
|
|
||||||
Route::get('/_debugbar/assets/javascript', [
|
|
||||||
'as' => 'debugbar-js',
|
|
||||||
'uses' => '\Barryvdh\Debugbar\Controllers\AssetController@js'
|
|
||||||
]);
|
|
||||||
|
|
||||||
Route::get('/_debugbar/open', [
|
|
||||||
'as' => 'debugbar-open',
|
|
||||||
'uses' => '\Barryvdh\Debugbar\Controllers\OpenController@handler'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// demo helper
|
// demo helper
|
||||||
Route::get('demo', function () {
|
Route::permanentRedirect('demo', '/');
|
||||||
return redirect('/');
|
|
||||||
});
|
|
||||||
|
|
||||||
// Legacy routes
|
// Legacy routes
|
||||||
Route::any('/{path?}', 'LegacyController@index')->where('path', '.*');
|
Route::any('/{path?}', 'LegacyController@index')
|
||||||
|
->where('path', '^((?!_debugbar).)*');
|
||||||
});
|
});
|
||||||
|
1
storage/framework/cache/.gitignore
vendored
1
storage/framework/cache/.gitignore
vendored
@ -1,2 +1,3 @@
|
|||||||
*
|
*
|
||||||
|
!data/
|
||||||
!.gitignore
|
!.gitignore
|
||||||
|
2
storage/framework/cache/data/.gitignore
vendored
Normal file
2
storage/framework/cache/data/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
@ -35,9 +35,9 @@ class AlertTest extends TestCase
|
|||||||
public function testJsonAlertCollection()
|
public function testJsonAlertCollection()
|
||||||
{
|
{
|
||||||
$rules = get_rules_from_json();
|
$rules = get_rules_from_json();
|
||||||
$this->assertInternalType('array', $rules);
|
$this->assertIsArray($rules);
|
||||||
foreach ($rules as $rule) {
|
foreach ($rules as $rule) {
|
||||||
$this->assertInternalType('array', $rule);
|
$this->assertIsArray($rule);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,6 +58,8 @@ class AlertTest extends TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->expectNotToPerformAssertions();
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getTransportFiles()
|
private function getTransportFiles()
|
||||||
|
@ -217,13 +217,13 @@ class AuthSSOTest extends DBTestCase
|
|||||||
$this->basicEnvironmentEnv();
|
$this->basicEnvironmentEnv();
|
||||||
unset($_SERVER);
|
unset($_SERVER);
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\AuthenticationException');
|
$this->expectException('LibreNMS\Exceptions\AuthenticationException');
|
||||||
$a->authenticate(null, null);
|
$a->authenticate(null, null);
|
||||||
|
|
||||||
$this->basicEnvironmentHeader();
|
$this->basicEnvironmentHeader();
|
||||||
unset($_SERVER);
|
unset($_SERVER);
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\AuthenticationException');
|
$this->expectException('LibreNMS\Exceptions\AuthenticationException');
|
||||||
$a->authenticate(null, null);
|
$a->authenticate(null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +270,7 @@ class AuthSSOTest extends DBTestCase
|
|||||||
$a = LegacyAuth::reset();
|
$a = LegacyAuth::reset();
|
||||||
|
|
||||||
$this->basicEnvironmentEnv();
|
$this->basicEnvironmentEnv();
|
||||||
$this->assertInternalType('string', $a->getExternalUsername());
|
$this->assertIsString($a->getExternalUsername());
|
||||||
|
|
||||||
// Missing
|
// Missing
|
||||||
unset($_SERVER['REMOTE_USER']);
|
unset($_SERVER['REMOTE_USER']);
|
||||||
@ -310,15 +310,15 @@ class AuthSSOTest extends DBTestCase
|
|||||||
$this->assertNull($a->authSSOGetAttr('foobar'));
|
$this->assertNull($a->authSSOGetAttr('foobar'));
|
||||||
$this->assertNull($a->authSSOGetAttr(null));
|
$this->assertNull($a->authSSOGetAttr(null));
|
||||||
$this->assertNull($a->authSSOGetAttr(1));
|
$this->assertNull($a->authSSOGetAttr(1));
|
||||||
$this->assertInternalType('string', $a->authSSOGetAttr('alsoVALID-ATTR'));
|
$this->assertIsString($a->authSSOGetAttr('alsoVALID-ATTR'));
|
||||||
$this->assertInternalType('string', $a->authSSOGetAttr('HTTP_VALID_ATTR'));
|
$this->assertIsString($a->authSSOGetAttr('HTTP_VALID_ATTR'));
|
||||||
|
|
||||||
$config['sso']['mode'] = 'header';
|
$config['sso']['mode'] = 'header';
|
||||||
$this->assertNull($a->authSSOGetAttr('foobar'));
|
$this->assertNull($a->authSSOGetAttr('foobar'));
|
||||||
$this->assertNull($a->authSSOGetAttr(null));
|
$this->assertNull($a->authSSOGetAttr(null));
|
||||||
$this->assertNull($a->authSSOGetAttr(1));
|
$this->assertNull($a->authSSOGetAttr(1));
|
||||||
$this->assertNull($a->authSSOGetAttr('alsoVALID-ATTR'));
|
$this->assertNull($a->authSSOGetAttr('alsoVALID-ATTR'));
|
||||||
$this->assertInternalType('string', $a->authSSOGetAttr('VALID-ATTR'));
|
$this->assertIsString($a->authSSOGetAttr('VALID-ATTR'));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testTrustedProxies()
|
public function testTrustedProxies()
|
||||||
@ -395,25 +395,25 @@ class AuthSSOTest extends DBTestCase
|
|||||||
//Invalid String
|
//Invalid String
|
||||||
$config['sso']['level_attr'] = 'level';
|
$config['sso']['level_attr'] = 'level';
|
||||||
$_SERVER['level'] = 'foobar';
|
$_SERVER['level'] = 'foobar';
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\AuthenticationException');
|
$this->expectException('LibreNMS\Exceptions\AuthenticationException');
|
||||||
$a->authSSOCalculateLevel();
|
$a->authSSOCalculateLevel();
|
||||||
|
|
||||||
//null
|
//null
|
||||||
$config['sso']['level_attr'] = 'level';
|
$config['sso']['level_attr'] = 'level';
|
||||||
$_SERVER['level'] = null;
|
$_SERVER['level'] = null;
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\AuthenticationException');
|
$this->expectException('LibreNMS\Exceptions\AuthenticationException');
|
||||||
$a->authSSOCalculateLevel();
|
$a->authSSOCalculateLevel();
|
||||||
|
|
||||||
//Unset pointer
|
//Unset pointer
|
||||||
unset($config['sso']['level_attr']);
|
unset($config['sso']['level_attr']);
|
||||||
$_SERVER['level'] = "9";
|
$_SERVER['level'] = "9";
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\AuthenticationException');
|
$this->expectException('LibreNMS\Exceptions\AuthenticationException');
|
||||||
$a->authSSOCalculateLevel();
|
$a->authSSOCalculateLevel();
|
||||||
|
|
||||||
//Unset attr
|
//Unset attr
|
||||||
$config['sso']['level_attr'] = 'level';
|
$config['sso']['level_attr'] = 'level';
|
||||||
unset($_SERVER['level']);
|
unset($_SERVER['level']);
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\AuthenticationException');
|
$this->expectException('LibreNMS\Exceptions\AuthenticationException');
|
||||||
$a->authSSOCalculateLevel();
|
$a->authSSOCalculateLevel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
namespace LibreNMS\Tests;
|
namespace LibreNMS\Tests;
|
||||||
|
|
||||||
use PHPUnit_Framework_ExpectationFailedException as PHPUnitException;
|
use \PHPUnit\Framework\ExpectationFailedException as PHPUnitException;
|
||||||
|
|
||||||
class DBSetupTest extends DBTestCase
|
class DBSetupTest extends DBTestCase
|
||||||
{
|
{
|
||||||
@ -37,6 +37,8 @@ class DBSetupTest extends DBTestCase
|
|||||||
throw new PHPUnitException("Errors loading DB Schema: " . $output);
|
throw new PHPUnitException("Errors loading DB Schema: " . $output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->expectNotToPerformAssertions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSchemaFiles()
|
public function testSchemaFiles()
|
||||||
@ -65,6 +67,8 @@ class DBSetupTest extends DBTestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->expectNotToPerformAssertions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testSchema()
|
public function testSchema()
|
||||||
|
@ -72,5 +72,7 @@ class DocTest extends TestCase
|
|||||||
->each(function ($missing_doc) {
|
->each(function ($missing_doc) {
|
||||||
$this->fail("The doc $missing_doc doesn't exist in mkdocs.yml, please add it to the relevant section");
|
$this->fail("The doc $missing_doc doesn't exist in mkdocs.yml, please add it to the relevant section");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$this->expectNotToPerformAssertions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,13 +67,13 @@ class IpTest extends TestCase
|
|||||||
$this->assertEquals('2001:db8:85a3::8a2e:370:7334', new IPv6('2001:db8:85a3::8a2e:370:7334'));
|
$this->assertEquals('2001:db8:85a3::8a2e:370:7334', new IPv6('2001:db8:85a3::8a2e:370:7334'));
|
||||||
$this->assertEquals('::1', new IPv6('::1'));
|
$this->assertEquals('::1', new IPv6('::1'));
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
new IPv6('192.168.0.1');
|
new IPv6('192.168.0.1');
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
new IPv6('127.0.0.1');
|
new IPv6('127.0.0.1');
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
new IPv4('2001:db8:85a3::8a2e:370:7334');
|
new IPv4('2001:db8:85a3::8a2e:370:7334');
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
new IPv4('::1');
|
new IPv4('::1');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,10 +94,10 @@ class IpTest extends TestCase
|
|||||||
|
|
||||||
$this->assertEquals('::', IP::fromHexString('00000000000000000000000000000000'));
|
$this->assertEquals('::', IP::fromHexString('00000000000000000000000000000000'));
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
IP::fromHexString("c0 a8 01 01 fe");
|
IP::fromHexString("c0 a8 01 01 fe");
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
IP::fromHexString('20 01 0d b8 00 00 00 00 00 00 00 00 00 02 00 00 00 01');
|
IP::fromHexString('20 01 0d b8 00 00 00 00 00 00 00 00 00 02 00 00 00 01');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,13 +126,13 @@ class IpTest extends TestCase
|
|||||||
$this->assertTrue(IP::parse('2001:db8:85a3::8a2e:370:7334')->inNetwork('2001:db8:85a3::8a2e:370:7334/128'));
|
$this->assertTrue(IP::parse('2001:db8:85a3::8a2e:370:7334')->inNetwork('2001:db8:85a3::8a2e:370:7334/128'));
|
||||||
$this->assertFalse(IP::parse('2001:db8:85a3::8a2e:370:7335')->inNetwork('2001:db8:85a3::8a2e:370:7334/128'));
|
$this->assertFalse(IP::parse('2001:db8:85a3::8a2e:370:7335')->inNetwork('2001:db8:85a3::8a2e:370:7334/128'));
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
IP::parse('42')->inNetwork('192.168.1.0/4');
|
IP::parse('42')->inNetwork('192.168.1.0/4');
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
IP::parse('192.168.1.256')->inNetwork('192.168.1.0/24');
|
IP::parse('192.168.1.256')->inNetwork('192.168.1.0/24');
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\InvalidIpException');
|
$this->expectException('LibreNMS\Exceptions\InvalidIpException');
|
||||||
IP::parse('192.168.1.0')->inNetwork('192.168.1.0');
|
IP::parse('192.168.1.0')->inNetwork('192.168.1.0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,14 +39,18 @@ class LockTest extends TestCase
|
|||||||
unset($new_lock);
|
unset($new_lock);
|
||||||
|
|
||||||
FileLock::lock('tests');
|
FileLock::lock('tests');
|
||||||
|
|
||||||
|
$this->expectNotToPerformAssertions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFileLockFail()
|
public function testFileLockFail()
|
||||||
{
|
{
|
||||||
$lock = FileLock::lock('tests');
|
$lock = FileLock::lock('tests');
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\LockException');
|
$this->expectException('LibreNMS\Exceptions\LockException');
|
||||||
$failed_lock = FileLock::lock('tests');
|
$failed_lock = FileLock::lock('tests');
|
||||||
|
|
||||||
|
$this->expectNotToPerformAssertions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFileLockWait()
|
public function testFileLockWait()
|
||||||
@ -54,7 +58,7 @@ class LockTest extends TestCase
|
|||||||
$lock = FileLock::lock('tests');
|
$lock = FileLock::lock('tests');
|
||||||
|
|
||||||
$start = microtime(true);
|
$start = microtime(true);
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\LockException');
|
$this->expectException('LibreNMS\Exceptions\LockException');
|
||||||
$wait_lock = FileLock::lock('tests', 1);
|
$wait_lock = FileLock::lock('tests', 1);
|
||||||
$this->assertGreaterThan(1, microtime(true) - $start, 'Lock did not wait.');
|
$this->assertGreaterThan(1, microtime(true) - $start, 'Lock did not wait.');
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ class RrdtoolTest extends TestCase
|
|||||||
$config['rrdcached'] = '';
|
$config['rrdcached'] = '';
|
||||||
$config['rrdtool_version'] = '1.4';
|
$config['rrdtool_version'] = '1.4';
|
||||||
|
|
||||||
$this->setExpectedException('LibreNMS\Exceptions\FileExistsException');
|
$this->expectException('LibreNMS\Exceptions\FileExistsException');
|
||||||
// use this file, since it is guaranteed to exist
|
// use this file, since it is guaranteed to exist
|
||||||
rrdtool_build_command('create', __FILE__, 'o');
|
rrdtool_build_command('create', __FILE__, 'o');
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ namespace LibreNMS\Tests;
|
|||||||
|
|
||||||
use LibreNMS\Util\Snmpsim;
|
use LibreNMS\Util\Snmpsim;
|
||||||
|
|
||||||
abstract class TestCase extends \PHPUnit_Framework_TestCase
|
abstract class TestCase extends \PHPUnit\Framework\TestCase
|
||||||
{
|
{
|
||||||
use SnmpsimHelpers;
|
use SnmpsimHelpers;
|
||||||
|
|
||||||
|
@ -101,6 +101,7 @@ if (getenv('DBTEST')) {
|
|||||||
'alert_templates',
|
'alert_templates',
|
||||||
'config', // not sure about this one
|
'config', // not sure about this one
|
||||||
'dbSchema',
|
'dbSchema',
|
||||||
|
'migrations',
|
||||||
'widgets',
|
'widgets',
|
||||||
);
|
);
|
||||||
$truncate = array_diff($tables, $excluded);
|
$truncate = array_diff($tables, $excluded);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
let mix = require('laravel-mix');
|
const mix = require('laravel-mix');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
@ -11,5 +11,5 @@ let mix = require('laravel-mix');
|
|||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mix.js('resources/assets/js/app.js', 'public/js')
|
mix.js('resources/js/app.js', 'public/js')
|
||||||
.sass('resources/assets/sass/app.scss', 'public/css');
|
.sass('resources/sass/app.scss', 'public/css');
|
||||||
|
Loading…
Reference in New Issue
Block a user