Compare commits

..

90 Commits

Author SHA1 Message Date
KodeStar
1750da1345 Merge pull request #630 from divendres/catala
Catalan translation
2022-11-14 15:02:46 +00:00
KodeStar
398df75865 Merge branch '2.x' 2022-03-17 11:01:43 +00:00
KodeStar
41c2983312 Add warning about http being needed in url 2022-03-17 10:55:52 +00:00
KodeStar
bd3b882b3a Squashed commit of the following:
commit e52bc9c6b2
Author: KodeStar <kodestar@gmail.com>
Date:   Thu Mar 17 10:23:15 2022 +0000

    Update supportedapps.json

commit a16233ee10
Author: KodeStar <kodestar@gmail.com>
Date:   Thu Mar 17 10:21:24 2022 +0000

    Fix for displaying svg icons correctly
2022-03-17 10:24:31 +00:00
KodeStar
e52bc9c6b2 Update supportedapps.json 2022-03-17 10:23:15 +00:00
KodeStar
a16233ee10 Fix for displaying svg icons correctly 2022-03-17 10:21:24 +00:00
Kode
5b177f1127 Merge branch '2.3' into 2.x 2022-03-16 20:16:04 +00:00
Kode
f7633b6a5f Update mix-manifest.json 2022-03-16 20:15:22 +00:00
Kode
d58e6cb560 Fix for #774 2022-03-16 20:13:16 +00:00
Kode
87fe9c1771 Move setLocale out of vie composer so it's available everywhere
Fixes #776
2022-03-16 20:07:43 +00:00
Kode
95d9e9edb9 Update app.php 2022-03-16 19:43:03 +00:00
Kode
f7b2c51f9d Fix for old apps and icon selector 2022-03-16 19:41:01 +00:00
Kode
72c70e27f2 Remove refresh button for now as update code isn't ready yet 2022-03-16 18:39:47 +00:00
Kode
becbe5ab96 More work on apps 2022-03-16 18:35:40 +00:00
Kode
f5bce95808 Add missing lang string, fixed #773 2022-03-16 18:34:48 +00:00
KodeStar
1e2b807e05 Lots of work on apps 2022-03-16 15:49:44 +00:00
Kode
ed3dbf2f14 More work on enhanced apps 2022-03-15 20:09:22 +00:00
Kode
1e35f83fed Changes to the tooltips 2022-03-15 19:08:10 +00:00
KodeStar
8499d100ff More work on apps 2022-03-15 18:19:01 +00:00
KodeStar
bdeae6a722 Add missing files 2022-03-15 11:30:21 +00:00
Kode
4c63b66dbf Initial start of replacing apps list to use github generated list 2022-03-14 15:56:36 +00:00
Kode
371f52f92e Fixes #469 2022-03-14 12:25:20 +00:00
KodeStar
6daaf94974 Add details for search providers 2022-03-14 10:34:37 +00:00
Kode
b8e5a22648 Update app.php 2022-03-14 07:56:41 +00:00
Kode
e821edf01a Fix tags url
Fixes #763
2022-03-14 07:56:02 +00:00
Kode
188316df47 Fix search using incorrect value
fixes #764
2022-03-14 07:55:26 +00:00
Kode
dd14ce8738 Update app.php 2022-03-13 19:31:30 +00:00
Kode
d8e4053ce4 Merge branch 'master' of https://github.com/linuxserver/Heimdall 2022-03-13 19:30:27 +00:00
Kode
f73b78f292 Add search providers as an editable yaml file + allow searching tiles 2022-03-13 19:30:24 +00:00
Kode
96ec1e0b08 Fixes #435 2022-03-13 16:13:36 +00:00
KodeStar
1904d9d910 Merge pull request #731 from linuxserver/dependabot/npm_and_yarn/lodash-4.17.21
Bump lodash from 4.17.11 to 4.17.21
2022-03-13 12:21:14 +00:00
KodeStar
beb2851f4a Add noopener noreferrer to link 2022-03-13 09:20:58 +00:00
dependabot[bot]
645a0bc7fe Bump lodash from 4.17.11 to 4.17.21
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.21)

---
updated-dependencies:
- dependency-name: lodash
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-13 08:53:35 +00:00
Kode
ef73918098 Update jquery 2022-03-12 23:27:11 +00:00
Kode
06a23c70af Should fix #379 2022-03-12 13:09:50 +00:00
Kode
323a6e17c7 Update database.php 2022-03-12 13:09:03 +00:00
Kode
0ca07c9698 Update composer.json 2022-03-12 12:55:42 +00:00
Kode
fbb21d2885 update redis config 2022-03-12 12:54:15 +00:00
Kode
b6741c8ff0 Update readme.md 2022-03-12 11:55:06 +00:00
Kode
7fdca02af7 Allow numbers in apps 2022-03-12 10:45:37 +00:00
Kode
271100c25b Update app.php 2022-03-12 09:38:19 +00:00
KodeStar
cfecce6100 Create SECURITY.md 2022-03-12 09:37:36 +00:00
Kode
d71341df7a Update app.blade.php 2022-03-11 23:20:18 +00:00
Kode
ac851f5a02 Update manifest.json 2022-03-11 23:15:55 +00:00
Kode
d2a8b7af48 Update app.blade.php 2022-03-11 23:10:47 +00:00
Kode
4d7a86fbf7 Update .env.example 2022-03-11 22:53:25 +00:00
KodeStar
87a3af3dbf Merge pull request #654 from NoahNxT/master
Translation correction NL
2022-03-11 20:30:16 +00:00
KodeStar
79c76b9f50 Merge pull request #648 from angrystar170/master
Add korean language files
2022-03-11 20:29:52 +00:00
KodeStar
d7742df802 Merge pull request #644 from OllieJC/custom
Add custom CSS and JS settings
2022-03-11 20:28:28 +00:00
KodeStar
736222e173 Merge pull request #614 from risiko79/fix/#507
FIX: #507 Tag URLs do not respect APP_URL
2022-03-11 20:23:34 +00:00
KodeStar
047ffb0b55 Merge pull request #581 from rtzra/feature/RussianLanguage
added Russian translation
2022-03-11 20:22:32 +00:00
KodeStar
505d17cf57 Merge pull request #561 from mattycourtney/master
Updated link to letsencrypt image to point to SWAG
2022-03-11 20:22:10 +00:00
KodeStar
71c2da160d Merge pull request #522 from bence192/patch-3
Create pagination.php
2022-03-11 20:17:58 +00:00
KodeStar
3487b9e479 Merge pull request #521 from bence192/patch-4
Create passwords.php
2022-03-11 20:17:39 +00:00
KodeStar
7cdf315d78 Merge pull request #512 from Babasile/master
Lang fr update
2022-03-11 20:17:18 +00:00
KodeStar
a1812a962c Merge pull request #506 from Forceu/master
Added info about updating
2022-03-11 20:16:49 +00:00
KodeStar
b97cab34b0 Merge pull request #492 from crazychatting/lang_de_update
Lang de update
2022-03-11 20:16:24 +00:00
KodeStar
3426450b3c Merge pull request #475 from e7jonas/patch-1
Fixed some spelling errors.
2022-03-11 20:15:53 +00:00
KodeStar
75804f4624 Merge pull request #457 from skay-zhang/patch-1
Creat new language
2022-03-11 20:15:21 +00:00
KodeStar
23f757e06f Merge pull request #454 from shaohao/Fix-password-issue
Update FormBuilder.php
2022-03-11 20:13:51 +00:00
KodeStar
fabd704bab Merge pull request #520 from bence192/patch-1
Hungarian lang added
2022-03-11 20:13:01 +00:00
KodeStar
c16fbae963 Merge pull request #523 from bence192/patch-2
Create auth.php
2022-03-11 20:12:45 +00:00
Kode
348759b9ad update logging 2022-03-11 19:38:08 +00:00
Kode
d961aeb19b more urls with double slashes 2022-03-11 19:06:29 +00:00
Kode
987a9c03b0 fix for double slash on views 2022-03-11 19:03:03 +00:00
Kode
d17fb04983 fix fa in pseudo classes 2022-03-11 10:40:47 +00:00
Kode
b07918d751 changes to lv7 to maybe fix the symlink issues? 2022-03-11 10:07:42 +00:00
Noah Gillard
1b71e80d52 Translation correction NL 2022-02-08 22:58:07 +01:00
angrystar170
9fac11cb77 Update passwords.php 2022-01-23 23:30:53 +09:00
angrystar170
a94fb108fa Add korean language files 2022-01-23 23:24:54 +09:00
OllieJC
f51893b2d6 Use pre for textarea settings 2022-01-22 13:30:50 +00:00
OllieJC
a4b32dcafd Add textarea option 2022-01-18 22:59:40 +00:00
OllieJC
862f870303 Add settings.advanced/custom_css/custom_js 2022-01-18 22:42:53 +00:00
OllieJC
869cfd34ab Add custom CSS and JS options 2022-01-18 22:40:09 +00:00
OllieJC
9e67b7c72e Add custom_css and custom_js advance settings 2022-01-18 22:33:21 +00:00
Albert
d0e3a2faf5 Catalan translation 2021-11-23 13:38:01 +01:00
risiko79
a5b7f10809 FIX: #507 Tag URLs do not respect APP_URL
see https://github.com/linuxserver/Heimdall/issues/507
2021-08-29 19:58:50 +02:00
Evgeny Cheremnykh
698665176c added Russian translation 2021-05-01 18:56:27 +03:00
Matty Courtney
1bd65222e4 Updated link to letsencrypt image to point to SWAG 2021-02-21 10:13:48 +08:00
bence192
67bc656325 Create passwords.php 2020-11-29 20:02:49 +01:00
bence192
b5baf0d606 Create pagination.php 2020-11-29 20:01:48 +01:00
bence192
32964e9045 Create auth.php 2020-11-29 20:00:29 +01:00
bence192
27a667675a Create app.php 2020-11-29 19:57:27 +01:00
Babasile
9a221f47bf Lang fr update 2020-10-24 11:19:57 +02:00
Marc Ole Bulling
8d2fbc5599 Added info about updating 2020-09-25 13:37:31 +02:00
Robin Loose
84ebe6587d added admin-account-needed in language 2020-08-03 00:45:36 +02:00
Robin Loose
89a71a18da updated and corrected language de 2020-08-01 02:12:01 +02:00
e7jonas
05dd7a090b Fixed some spelling errors. 2020-05-14 13:40:18 +01:00
sKai
365de9512f Creat new language
Creat simplified chinese , apply to china
2020-03-09 20:57:31 +08:00
Shao Hao
e857023903 Update FormBuilder.php
Make she the value is passed to password input.
2020-03-03 14:11:51 +08:00
136 changed files with 21164 additions and 49758 deletions

View File

@@ -1,15 +1,17 @@
APP_NAME=Heimdall
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_DEBUG=false
APP_URL=http://localhost
LOG_CHANNEL=daily
DB_CONNECTION=sqlite
DB_DATABASE=app.sqlite
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120
QUEUE_DRIVER=sync
@@ -18,14 +20,24 @@ REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

14
SECURITY.md Normal file
View File

@@ -0,0 +1,14 @@
# Security Policy
## Supported Versions
| Version | Supported |
| ------- | ------------------ |
| 2.3.x | :white_check_mark: |
| < 2.3 | :x: |
## Reporting a Vulnerability
You can report any vulnerabilities on our discord server by DM-ing a team member, or asking a team member to DM you.
https://discord.com/invite/YWrKVTn

View File

@@ -39,22 +39,86 @@ class Application extends Model
public function class()
{
$name = $this->name;
$name = preg_replace('/\PL/u', '', $name);
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
$class = '\App\SupportedApps\\'.$name.'\\'.$name;
return $class;
}
public static function classFromName($name)
{
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
$class = '\App\SupportedApps\\'.$name.'\\'.$name;
return $class;
}
public static function apps()
{
$json = json_decode(file_get_contents(storage_path('app/supportedapps.json'))) ?? [];
$apps = collect($json->apps);
$sorted = $apps->sortBy('name', SORT_NATURAL|SORT_FLAG_CASE);
return $sorted;
}
public static function autocomplete()
{
$apps = self::apps();
$list = [];
foreach($apps as $app) {
$list[] = (object)[
'label' => $app->name,
'value' => $app->appid
];
}
return $list;
}
public static function getApp($appid)
{
$localapp = Application::where('appid', $appid)->first();
$app = self::single($appid);
$application = ($localapp) ? $localapp : new Application;
if(!file_exists(app_path('SupportedApps/'.className($app->name)))) {
SupportedApps::getFiles($app);
SupportedApps::saveApp($app, $application);
} else {
// check if there has been an update for this app
if($localapp) {
if($localapp->sha !== $app->sha) {
SupportedApps::getFiles($app);
$app = SupportedApps::saveApp($app, $application);
}
} else {
SupportedApps::getFiles($app);
$app = SupportedApps::saveApp($app, $application);
}
}
return $app;
}
public static function single($appid)
{
$apps = self::apps();
$app = $apps->where('appid', $appid)->first();
if ($app === null) return null;
$classname = preg_replace('/[^\p{L}\p{N}]/u', '', $app->name);
$app->class = '\App\SupportedApps\\'.$classname.'\\'.$classname;
return $app;
}
public static function applist()
{
$list = [];
$all = self::orderBy('name')->get()->sortBy('name', SORT_NATURAL|SORT_FLAG_CASE);
$list['null'] = 'None';
foreach($all as $app) {
$name = $app->name;
$name = preg_replace('/\PL/u', '', $name);
$list['\App\SupportedApps\\'.$name.'\\'.$name] = $app->name;
$apps = self::apps();
foreach($apps as $app) {
$list[$app->appid] = $app->name;
}
return $list;
}

View File

@@ -73,7 +73,7 @@ function getLinkTargetAttribute()
function className($name)
{
$name = preg_replace('/\PL/u', '', $name);
$name = preg_replace('/[^\p{L}\p{N}]/u', '', $name);
return $name;
}

View File

@@ -14,7 +14,10 @@ use App\SupportedApps;
use App\Jobs\ProcessApps;
use App\Search;
use Illuminate\Support\Facades\Route;
use Inertia\Inertia;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Log;
class ItemController extends Controller
@@ -38,12 +41,9 @@ class ItemController extends Controller
$query->where('id', 0);
})->orWhere('type', 1)->orderBy('order', 'asc')->get();
$data['current_user'] = User::currentUser();
//$data['all_apps'] = Item::doesntHave('parents')->get();
//die(print_r($data['apps']));
// return view('welcome', $data);
return Inertia::render('Index', $data);
return view('welcome', $data);
}
/**
@@ -150,15 +150,9 @@ class ItemController extends Controller
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
public function storelogic($request, $id = null)
{
//
$application = Application::single($request->input('appid'));
$validatedData = $request->validate([
'title' => 'required|max:255',
'url' => 'required',
@@ -169,6 +163,22 @@ class ItemController extends Controller
$request->merge([
'icon' => $path
]);
} elseif(strpos($request->input('icon'), 'http') === 0) {
$contents = file_get_contents($request->input('icon'));
if ($application) {
$icon = $application->icon;
} else {
$file = $request->input('icon');
$path_parts = pathinfo($file);
$icon = md5($contents);
$icon .= '.'.$path_parts['extension'];
}
$path = 'icons/'.$icon;
Storage::disk('public')->put($path, $contents);
$request->merge([
'icon' => $path
]);
}
$config = Item::checkConfig($request->input('config'));
@@ -178,21 +188,40 @@ class ItemController extends Controller
'user_id' => $current_user->id
]);
if($request->input('class') === 'null') {
if($request->input('appid') === 'null') {
$request->merge([
'class' => null,
]);
} else {
$request->merge([
'class' => Application::classFromName($application->name),
]);
}
//die(print_r($request->input('config')));
$item = Item::create($request->all());
if($id === null) {
$item = Item::create($request->all());
} else {
$item = Item::find($id);
$item->update($request->all());
}
//Search::storeSearchProvider($request->input('class'), $item);
$item->parents()->sync($request->tags);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this->storelogic($request);
$route = route('dash', []);
return redirect($route)
->with('success', __('app.alert.success.item_created'));
@@ -218,7 +247,14 @@ class ItemController extends Controller
public function edit($id)
{
// Get the item
$data['item'] = Item::find($id);
$item = Item::find($id);
if($item->appid === null && $item->class !== null) { // old apps wont have an app id so set it
$app = Application::where('class', $item->class)->first();
if($app) {
$item->appid = $app->appid;
}
}
$data['item'] = $item;
$data['tags'] = Item::ofType('tag')->orderBy('title', 'asc')->pluck('title', 'id');
$data['tags']->prepend(__('app.dashboard'), 0);
$data['current_tags'] = $data['item']->tags();
@@ -237,39 +273,7 @@ class ItemController extends Controller
*/
public function update(Request $request, $id)
{
$validatedData = $request->validate([
'title' => 'required|max:255',
'url' => 'required',
]);
//die(print_r($request->all()));
if($request->hasFile('file')) {
$path = $request->file('file')->store('icons');
$request->merge([
'icon' => $path
]);
}
$config = Item::checkConfig($request->input('config'));
$current_user = User::currentUser();
$request->merge([
'description' => $config,
'user_id' => $current_user->id
]);
if($request->input('class') === 'null') {
$request->merge([
'class' => null,
]);
}
$item = Item::find($id);
$item->update($request->all());
//Search::storeSearchProvider($request->input('class'), $item);
$item->parents()->sync($request->tags);
$this->storelogic($request, $id);
$route = route('dash', []);
return redirect($route)
->with('success',__('app.alert.success.item_updated'));
@@ -324,7 +328,10 @@ class ItemController extends Controller
public function appload(Request $request)
{
$output = [];
$appname = $request->input('app');
$appid = $request->input('app');
if($appid === "null") return null;
/*$appname = $request->input('app');
//die($appname);
$app_details = Application::where('name', $appname)->firstOrFail();
@@ -343,8 +350,27 @@ class ItemController extends Controller
$output['config'] = className($app_details->name).'.config';
} else {
$output['config'] = null;
}*/
$output['config'] = null;
$output['custom'] = null;
$app = Application::single($appid);
$output = (array)$app;
if((boolean)$app->enhanced === true) {
// if(!isset($app->config)) { // class based config
$appdetails = Application::getApp($appid);
$output['custom'] = className($appdetails->name).'.config';
// }
}
$output['colour'] = ($app->tile_background == 'light') ? '#fafbfc' : '#161b1f';
$output['iconview'] = config('app.appsource').'icons/' . $app->icon;
;
return json_encode($output);
}
@@ -360,6 +386,41 @@ class ItemController extends Controller
$app_details->test();
}
public function execute($url, $attrs = [], $overridevars=false)
{
$res = null;
$vars = ($overridevars !== false) ?
$overridevars : [
'http_errors' => false,
'timeout' => 15,
'connect_timeout' => 15,
'verify' => false
];
$client = new Client($vars);
$method = 'GET';
try {
return $client->request($method, $url, $attrs);
} catch (\GuzzleHttp\Exception\ConnectException $e) {
Log::error("Connection refused");
Log::debug($e->getMessage());
} catch (\GuzzleHttp\Exception\ServerException $e) {
Log::debug($e->getMessage());
}
return $res;
}
public function websitelookup($url)
{
$url = \base64_decode($url);
$data = $this->execute($url);
return $data->getBody();
}
public function getStats($id)
{
$item = Item::find($id);

View File

@@ -16,7 +16,7 @@ class SearchController extends Controller
$provider = Search::providerDetails($requestprovider);
if($provider->type == 'standard') {
return redirect($provider->url.'?'.$provider->var.'='.urlencode($query));
return redirect($provider->url.'?'.$provider->query.'='.urlencode($query));
} elseif($provider->type == 'external') {
$class = new $provider->class;
//print_r($provider);

View File

@@ -35,7 +35,6 @@ class Kernel extends HttpKernel
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\HandleInertiaRequests::class,
],
'api' => [

View File

@@ -1,43 +0,0 @@
<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Inertia\Middleware;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that's loaded on the first page visit.
*
* @see https://inertiajs.com/server-side-setup#root-template
* @var string
*/
protected $rootView = 'app';
/**
* Determines the current asset version.
*
* @see https://inertiajs.com/asset-versioning
* @param \Illuminate\Http\Request $request
* @return string|null
*/
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Defines the props that are shared by default.
*
* @see https://inertiajs.com/shared-data
* @param \Illuminate\Http\Request $request
* @return array
*/
public function share(Request $request): array
{
return array_merge(parent::share($request), [
//
]);
}
}

View File

@@ -3,6 +3,7 @@
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
use Symfony\Component\HttpFoundation\Cookie;
class VerifyCsrfToken extends Middleware
{
@@ -18,4 +19,40 @@ class VerifyCsrfToken extends Middleware
'test_config',
//'get_stats'
];
/**
* Add the CSRF token to the response cookies.
*
* @param \Illuminate\Http\Request $request
* @param \Symfony\Component\HttpFoundation\Response $response
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function addCookieToResponse($request, $response)
{
$config = config('session');
if ($response instanceof Responsable) {
$response = $response->toResponse($request);
}
$response->headers->setCookie(
new Cookie(
'HEIMDALL-XSRF-TOKEN', $request->session()->token(), $this->availableAt(60 * $config['lifetime']),
$config['path'], $config['domain'], $config['secure'], false, false, $config['same_site'] ?? null
)
);
return $response;
}
/**
* Determine if the cookie contents should be serialized.
*
* @return bool
*/
public static function serialized()
{
return EncryptCookies::serialized('HEIMDALL-XSRF-TOKEN');
}
}

View File

@@ -30,7 +30,7 @@ class Item extends Model
//
protected $fillable = [
'title', 'url', 'colour', 'icon', 'description', 'pinned', 'order', 'type', 'class', 'user_id'
'title', 'url', 'colour', 'icon', 'appdescription', 'description', 'pinned', 'order', 'type', 'class', 'user_id', 'appid'
];
/**
@@ -53,22 +53,10 @@ class Item extends Model
public static function checkConfig($config)
{
// die(print_r($config));
if(empty($config)) {
$config = null;
} else {
$store = false;
//die(var_dump($config));
foreach($config as $key => $check) {
if($key == 'type') continue;
if($key == 'dataonly') continue;
if(!empty($check) && $check != '0') {
$store = true;
break;
}
}
//die(var_dump($store))
$config['enabled'] = ($store) ? true : false;
$config = json_encode($config);
}
return $config;
@@ -106,7 +94,7 @@ class Item extends Model
public function getLinkAttribute()
{
if((int)$this->type === 1) {
return '/tag/'.$this->url;
return url('tag/'.$this->url);
} else {
return $this->url;
}
@@ -173,12 +161,13 @@ class Item extends Model
public function enhanced()
{
if(isset($this->class) && !empty($this->class)) {
/*if(isset($this->class) && !empty($this->class)) {
$app = new $this->class;
} else {
return false;
}
return (bool)($app instanceof \App\EnhancedApps);
return (bool)($app instanceof \App\EnhancedApps);*/
return $this->description !== null;
}
public static function isEnhanced($class)
@@ -207,13 +196,15 @@ class Item extends Model
public function getconfig()
{
$explode = explode('\\', $this->class);
// $explode = explode('\\', $this->class);
if(!isset($this->description) || empty($this->description)) {
$config = new \stdClass;
$config->name = end($explode);
// $config->name = end($explode);
$config->enabled = false;
$config->override_url = null;
$config->apikey = null;
return $config;
}
@@ -221,12 +212,14 @@ class Item extends Model
$config = json_decode($this->description);
$config->name = end($explode);
// $config->name = end($explode);
$config->url = $this->url;
if(isset($config->override_url) && !empty($config->override_url)) {
$config->url = $config->override_url;
} else {
$config->override_url = null;
}
return $config;

View File

@@ -7,6 +7,7 @@ use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Storage;
use App\Application;
use App\SupportedApps;
@@ -31,36 +32,15 @@ class ProcessApps implements ShouldQueue
*/
public function handle()
{
$localapps = Application::all();
$list = json_decode(SupportedApps::getList()->getBody());
$validapps = [];
foreach($list->apps as $app) {
$validapps[] = $app->appid;
$localapp = $localapps->where('appid', $app->appid)->first();
$localapps = Application::whereNull('class')->get();
$json = SupportedApps::getList()->getBody();
$application = ($localapp) ? $localapp : new Application;
Storage::disk('local')->put('supportedapps.json', $json);
if(!file_exists(app_path('SupportedApps/'.className($app->name)))) {
SupportedApps::getFiles($app);
SupportedApps::saveApp($app, $application);
} else {
// check if there has been an update for this app
$localapp = $localapps->where('appid', $app->appid)->first();
if($localapp) {
if($localapp->sha !== $app->sha) {
SupportedApps::getFiles($app);
SupportedApps::saveApp($app, $application);
}
} else {
SupportedApps::getFiles($app);
SupportedApps::saveApp($app, $application);
}
}
foreach($localapps as $app) {
$app->class = $app->class();
$app->save();
}
//$delete = Application::whereNotIn('appid', $validapps)->delete(); // delete any apps not in list
// removed the delete so local apps can be added
}
}

View File

@@ -52,6 +52,10 @@ class AppServiceProvider extends ServiceProvider
Artisan::call('storage:link');
\Session::put('current_user', null);
}
$lang = Setting::fetch('language');
\App::setLocale($lang);
$applications = Application::all();
if($applications->count() <= 0) {
@@ -97,8 +101,6 @@ class AppServiceProvider extends ServiceProvider
if($bg_image = Setting::fetch('background_image')) {
$alt_bg = ' style="background-image: url(storage/'.$bg_image.')"';
}
$lang = Setting::fetch('language');
\App::setLocale($lang);
$allusers = User::all();
$current_user = User::currentUser();

View File

@@ -6,6 +6,7 @@ use App\Item;
use App\Setting;
use Form;
use Cache;
use Yaml;
abstract class Search
{
@@ -19,7 +20,7 @@ abstract class Search
{
$providers = self::standardProviders();
$providers = $providers + self::appProviders();
return $providers;
return collect($providers);
}
/**
@@ -41,38 +42,16 @@ abstract class Search
*/
public static function standardProviders()
{
return [
'google' => [
'url' => 'https://www.google.com/search',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'ddg' => [
'url' => 'https://duckduckgo.com/',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'bing' => [
'url' => 'https://www.bing.com/search',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'qwant' => [
'url' => 'https://www.qwant.com/',
'var' => 'q',
'method' => 'get',
'type' => 'standard',
],
'startpage' => [
'url' => 'https://www.startpage.com/do/dsearch',
'var' => 'query',
'method' => 'get',
'type' => 'standard',
],
];
// $providers = json_decode(file_get_contents(storage_path('app/searchproviders.json')));
// print_r($providers);
$providers = Yaml::parseFile(storage_path('app/searchproviders.yaml'));
$all = [];
foreach($providers as $key => $provider) {
$all[$key] = $provider;
$all[$key]['type'] = 'standard';
}
return $all;
}
/**
@@ -90,10 +69,11 @@ abstract class Search
if(($provider = Item::isSearchProvider($app->class)) !== false) {
$name = Item::nameFromClass($app->class);
$providers[$app->id] = [
'id' => $app->id,
'type' => $provider->type,
'class' => $app->class,
'url' => $app->url,
'title' => $app->title,
'name' => $app->title,
'colour' => $app->colour,
'icon' => $app->icon,
'description' => $app->description
@@ -133,12 +113,8 @@ abstract class Search
$output .= '<div id="search-container" class="input-container">';
$output .= '<select name="provider">';
foreach(self::providers() as $key => $searchprovider) {
$selected = ($key === $user_search_provider) ? ' selected="selected"' : '';
if (is_numeric($key)) {
$output .= '<option value="'.$key.'"'.$selected.'>'.$searchprovider['title'].'</option>';
} else {
$output .= '<option value="'.$key.'"'.$selected.'>'.__('app.options.'.$key).'</option>';
}
$selected = ((string)$key === (string)$user_search_provider) ? ' selected="selected"' : '';
$output .= '<option value="'.$key.'"'.$selected.'>'.$searchprovider['name'].'</option>';
}
$output .= '</select>';
$output .= Form::text('q', null, ['class' => 'homesearch', 'autofocus' => 'autofocus', 'placeholder' => __('app.settings.search').'...']);

View File

@@ -74,6 +74,9 @@ class Setting extends Model
case 'select':
if(!empty($this->value) && $this->value !== 'none') {
$options = (array)json_decode($this->options);
if($this->key === 'search_provider') {
$options = Search::providers()->pluck('name', 'id')->toArray();
}
$value = __($options[$this->value]);
} else {
$value = __('app.options.none');
@@ -122,11 +125,17 @@ class Setting extends Model
break;
case 'select':
$options = json_decode($this->options);
if($this->key === 'search_provider') {
$options = Search::providers()->pluck('name', 'id');
}
foreach($options as $key => $opt) {
$options->$key = __($opt);
}
$value = Form::select('value', $options, null, ['class' => 'form-control']);
break;
case 'textarea':
$value = Form::textarea('value', null, ['class' => 'form-control', 'cols' => '44', 'rows' => '15']);
break;
default:
$value = Form::text('value', null, ['class' => 'form-control']);
break;

View File

@@ -107,7 +107,8 @@ abstract class SupportedApps
public static function getList()
{
$list_url = 'https://apps.heimdall.site/list';
// $list_url = 'https://apps.heimdall.site/list';
$list_url = config('app.appsource').'list.json';
$client = new Client(['http_errors' => false, 'timeout' => 15, 'connect_timeout' => 15]);
return $client->request('GET', $list_url);
}
@@ -121,7 +122,8 @@ abstract class SupportedApps
public static function getFiles($app)
{
$zipurl = $app->files;
$zipurl = config('app.appsource').'files/'.$app->sha.'.zip';
$client = new Client(['http_errors' => false, 'timeout' => 60, 'connect_timeout' => 15]);
$res = $client->request('GET', $zipurl);
@@ -138,35 +140,28 @@ abstract class SupportedApps
$zip->extractTo(app_path('SupportedApps')); // place in the directory with same name
$zip->close();
unlink($src); //Deleting the Zipped file
} else {
var_dump($x);
}
}
public static function saveApp($details, $app)
{
if(!file_exists(storage_path('app/public/icons'))) {
mkdir(storage_path('app/public/icons'), 0777, true);
}
$img_src = app_path('SupportedApps/'.className($details->name).'/'.$details->icon);
$img_dest = storage_path('app/public/icons/'.$details->icon);
//die("i: ".$img_src);
@copy($img_src, $img_dest);
{
$app->appid = $details->appid;
$app->name = $details->name;
$app->sha = $details->sha ?? null;
$app->icon = 'icons/'.$details->icon;
$app->website = $details->website;
$app->license = $details->license;
$app->description = $details->description;
$appclass = $app->class();
$application = new $appclass;
$enhanced = (bool)($application instanceof \App\EnhancedApps);
$app->class = $appclass;
$app->enhanced = $enhanced;
$app->tile_background = $details->tile_background;
$app->save();
return $app;
}
}

View File

@@ -5,15 +5,15 @@
"license": "MIT",
"type": "project",
"require": {
"php": ">=7.1.3",
"php": ">=7.2.5",
"fideloper/proxy": "^4.0",
"graham-campbell/github": "^10.5",
"guzzlehttp/guzzle": "^7.4",
"inertiajs/inertia-laravel": "^0.5.4",
"laravel/framework": "^7.0",
"laravel/tinker": "^2.0",
"laravel/ui": "^2.4",
"laravelcollective/html": "^6.0"
"laravelcollective/html": "^6.0",
"symfony/yaml": "^5.4"
},
"require-dev": {
"filp/whoops": "~2.0",

148
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "f1a775595186b33c151fe16e35298fdc",
"content-hash": "d613105a42b9bb713b2dbc3073bebdc8",
"packages": [
{
"name": "brick/math",
@@ -1038,75 +1038,6 @@
],
"time": "2021-10-06T17:43:30+00:00"
},
{
"name": "inertiajs/inertia-laravel",
"version": "v0.5.4",
"source": {
"type": "git",
"url": "https://github.com/inertiajs/inertia-laravel.git",
"reference": "6a050ce04a710ac4809161558ac09fe49f13075e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/6a050ce04a710ac4809161558ac09fe49f13075e",
"reference": "6a050ce04a710ac4809161558ac09fe49f13075e",
"shasum": ""
},
"require": {
"ext-json": "*",
"laravel/framework": "^6.0|^7.0|^8.74|^9.0",
"php": "^7.2|~8.0.0|~8.1.0"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
"orchestra/testbench": "^4.0|^5.0|^6.4|^7.0",
"phpunit/phpunit": "^8.0|^9.5.8",
"roave/security-advisories": "dev-master"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Inertia\\ServiceProvider"
]
}
},
"autoload": {
"files": [
"./helpers.php"
],
"psr-4": {
"Inertia\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jonathan Reinink",
"email": "jonathan@reinink.ca",
"homepage": "https://reinink.ca"
}
],
"description": "The Laravel adapter for Inertia.js.",
"keywords": [
"inertia",
"laravel"
],
"support": {
"issues": "https://github.com/inertiajs/inertia-laravel/issues",
"source": "https://github.com/inertiajs/inertia-laravel/tree/v0.5.4"
},
"funding": [
{
"url": "https://github.com/reinink",
"type": "github"
}
],
"time": "2022-01-18T10:59:08+00:00"
},
{
"name": "knplabs/github-api",
"version": "v3.5.1",
@@ -5994,6 +5925,81 @@
],
"time": "2022-03-02T12:42:23+00:00"
},
{
"name": "symfony/yaml",
"version": "v5.4.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "e80f87d2c9495966768310fc531b487ce64237a2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
"reference": "e80f87d2c9495966768310fc531b487ce64237a2",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"symfony/console": "<5.3"
},
"require-dev": {
"symfony/console": "^5.3|^6.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"bin": [
"Resources/bin/yaml-lint"
],
"type": "library",
"autoload": {
"psr-4": {
"Symfony\\Component\\Yaml\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.3"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2022-01-26T16:32:32+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "2.2.4",
@@ -8145,7 +8151,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=7.1.3"
"php": ">=7.2.5"
},
"platform-dev": [],
"plugin-api-version": "2.2.0"

View File

@@ -14,7 +14,7 @@ return [
*/
'name' => env('APP_NAME', 'Heimdall'),
'version' => '2.2.4',
'version' => '2.4.0',
/*
|--------------------------------------------------------------------------
@@ -54,6 +54,8 @@ return [
*/
'url' => env('APP_URL', 'http://localhost'),
'appsource' => env('APP_SOURCE', 'https://appslist.heimdall.site/'),
/*
|--------------------------------------------------------------------------
@@ -228,6 +230,7 @@ return [
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'Yaml' => Symfony\Component\Yaml\Yaml::class,
'SupportedApps' => App\SupportedApps::class,
'EnhancedApps' => App\EnhancedApps::class,

View File

@@ -1,5 +1,7 @@
<?php
use Illuminate\Support\Str;
return [
/*
@@ -107,13 +109,27 @@ return [
'redis' => [
'client' => 'predis',
'client' => env('REDIS_CLIENT', 'phpredis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),
],
'default' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_DB', '0'),
],
'cache' => [
'url' => env('REDIS_URL'),
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', '6379'),
'database' => env('REDIS_CACHE_DB', '1'),
],
],

104
config/logging.php Normal file
View File

@@ -0,0 +1,104 @@
<?php
use Monolog\Handler\NullHandler;
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', 'stack'),
/*
|--------------------------------------------------------------------------
| 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' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.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' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => 'debug',
],
'errorlog' => [
'driver' => 'errorlog',
'level' => 'debug',
],
'null' => [
'driver' => 'monolog',
'handler' => NullHandler::class,
],
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddAppidToItems extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('items', function (Blueprint $table) {
$table->string('appid')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('items', function (Blueprint $table) {
$table->dropColumn(['appid']);
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddClassToApplication extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('applications', function (Blueprint $table) {
$table->string('class')->nullable()->index();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('applications', function (Blueprint $table) {
$table->dropColumn(['class']);
});
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddAppDescriptionToItems extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('items', function (Blueprint $table) {
$table->text('appdescription')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('items', function (Blueprint $table) {
//
});
}
}

View File

@@ -44,6 +44,16 @@ class SettingsSeeder extends Seeder
$setting_group->title = 'app.settings.miscellaneous';
$setting_group->save();
}
if(!$setting_group = SettingGroup::find(4)) {
$setting_group = new SettingGroup;
$setting_group->id = 4;
$setting_group->title = 'app.settings.advanced';
$setting_group->order = 3;
$setting_group->save();
} else {
$setting_group->title = 'app.settings.advanced';
$setting_group->save();
}
if($version = Setting::find(1)) {
$version->label = 'app.settings.version';
@@ -194,6 +204,38 @@ class SettingsSeeder extends Seeder
$setting->system = true;
$setting->save();
}
if(!$setting = Setting::find(10)) {
$setting = new Setting;
$setting->id = 10;
$setting->group_id = 4;
$setting->key = 'custom_css';
$setting->type = 'textarea';
$setting->label = 'app.settings.custom_css';
$setting->value = '';
$setting->save();
} else {
$setting->type = 'textarea';
$setting->group_id = 4;
$setting->label = 'app.settings.custom_css';
$setting->save();
}
if(!$setting = Setting::find(11)) {
$setting = new Setting;
$setting->id = 11;
$setting->group_id = 4;
$setting->key = 'custom_js';
$setting->type = 'textarea';
$setting->label = 'app.settings.custom_js';
$setting->value = '';
$setting->save();
} else {
$setting->type = 'textarea';
$setting->group_id = 4;
$setting->label = 'app.settings.custom_js';
$setting->save();
}
if(!$home_tag = \App\Item::find(0)) {
$home_tag = new \App\Item;

9754
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,20 +2,22 @@
"private": true,
"scripts": {
"dev": "npm run development",
"development": "mix",
"watch": "mix watch",
"watch-poll": "mix watch -- --watch-options-poll=1000",
"hot": "mix watch --hot",
"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-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",
"prod": "npm run production",
"production": "mix --production"
"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": {
"@inertiajs/inertia": "^0.11.0",
"@inertiajs/inertia-vue3": "^0.6.0",
"laravel-mix": "^6.0.43",
"vue": "^3.2.31",
"vue-loader": "^16.1.2",
"vue-template-compiler": "^2.6.14"
"bootstrap-sass": "^3.4.1",
"cross-env": "^5.2.0",
"jquery": "^3.4.1",
"laravel-mix": "^4.0.16",
"sass": "^1.21.0",
"sass-loader": "7.*"
},
"dependencies": {}
"dependencies": {
"select2": "^4.0.7"
}
}

5
public/css/all.min.css vendored Normal file
View File

@@ -0,0 +1,5 @@
/*!
* Font Awesome Pro 5.15.4 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
*/
.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-ban:before{content:"\f05e"}.fa-check:before{content:"\f00c"}.fa-cloud-download:before{content:"\f0ed"}.fa-cogs:before{content:"\f085"}.fa-edit:before{content:"\f044"}.fa-exchange:before{content:"\f0ec"}.fa-list:before{content:"\f03a"}.fa-pencil:before{content:"\f040"}.fa-plus:before{content:"\f067"}.fa-save:before{content:"\f0c7"}.fa-tag:before{content:"\f02b"}.fa-th:before{content:"\f00a"}.fa-thumbtack:before{content:"\f08d"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-user:before{content:"\f007"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Pro";font-weight:900}

2068
public/css/app.css vendored

File diff suppressed because one or more lines are too long

43919
public/js/app.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -480,6 +480,7 @@ function define(prefix, icons) {
/* fas icons */
var icons = {
"arrow-alt-to-right": [448, 512, [], "f34c", "M448 88v336c0 13.3-10.7 24-24 24h-24c-13.3 0-24-10.7-24-24V88c0-13.3 10.7-24 24-24h24c13.3 0 24 10.7 24 24zM24 320h136v87.7c0 17.8 21.5 26.7 34.1 14.1l152.2-152.2c7.5-7.5 7.5-19.8 0-27.3L194.1 90.1c-12.6-12.6-34.1-3.7-34.1 14.1V192H24c-13.3 0-24 10.7-24 24v80c0 13.3 10.7 24 24 24z"],
"arrow-rotate-right": [512, 512, [8635, "arrow-right-rotate", "arrow-rotate-forward", "redo"], "f01e", "M496 48V192c0 17.69-14.31 32-32 32H320c-17.69 0-32-14.31-32-32s14.31-32 32-32h63.39c-29.97-39.7-77.25-63.78-127.6-63.78C167.7 96.22 96 167.9 96 256s71.69 159.8 159.8 159.8c34.88 0 68.03-11.03 95.88-31.94c14.22-10.53 34.22-7.75 44.81 6.375c10.59 14.16 7.75 34.22-6.375 44.81c-39.03 29.28-85.36 44.86-134.2 44.86C132.5 479.9 32 379.4 32 256s100.5-223.9 223.9-223.9c69.15 0 134 32.47 176.1 86.12V48c0-17.69 14.31-32 32-32S496 30.31 496 48z"],
"ban": [512, 512, [], "f05e", "M256 8C119.034 8 8 119.033 8 256s111.034 248 248 248 248-111.034 248-248S392.967 8 256 8zm130.108 117.892c65.448 65.448 70 165.481 20.677 235.637L150.47 105.216c70.204-49.356 170.226-44.735 235.638 20.676zM125.892 386.108c-65.448-65.448-70-165.481-20.677-235.637L361.53 406.784c-70.203 49.356-170.226 44.736-235.638-20.676z"],
"check": [512, 512, [], "f00c", "M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z"],
"cloud-download": [640, 512, [], "f0ed", "M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zm-139.9 93L305 412.3c-9.4 9.4-24.6 9.4-33.9 0l-92.7-92.7c-9.4-9.4-9.4-24.6 0-33.9l10.8-10.8c9.6-9.6 25.2-9.3 34.5.5l32.4 34.5V184c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24v125.9l32.4-34.5c9.3-9.9 24.9-10.1 34.5-.5l10.8 10.8c9.2 9.3 9.2 24.5-.1 33.9z"],

File diff suppressed because one or more lines are too long

2
public/js/jquery-3.6.0.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
public/manifest.json generated
View File

@@ -1,5 +1,5 @@
{
"name": "App",
"name": "Heimdall",
"icons": [
{
"src": "\/android-icon-36x36.png",

View File

@@ -1,3 +1,4 @@
{
"/js/app.js": "/js/app.js"
"/css/app.css": "/css/app.css?id=bc18c3a0e8475fe00a5a",
"/js/app.js": "/js/app.js?id=c95edea425171c6ce8f6"
}

View File

@@ -34,7 +34,7 @@ Supported applications are recognized by the title of the application as entered
[![foundationapps](https://img.shields.io/badge/dynamic/json.svg?label=Foundation%20Apps&url=https%3A%2F%2Fapps.heimdall.site%2Fstats&query=foundation_apps&colorB=3f8483&style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAjCAMAAACw/5reAAAAnFBMVEUAAADu7u7u7u7u7u7u7u7x8fHu7u7u7u7u7u7u7u7u7u7u7u7r6+vu7u7v7+/u7u7t7e3v7+/v7+/u7u7u7u7u7u7u7u7u7u7u7u7u7u7v7+/u7u7p6ent7e3v7+/v7+/v7+/u7u7u7u7u7u7u7u7t7e3////u7u7u7u7u7u7u7u7w8PDw8PDt7e3u7u7t7e3s7Ozu7u7t7e3u7u4TnCP6AAAAM3RSTlMA+9n3phHw3czC088M5Y5zG6mflWdJFumyfj4sB2NeTi7hiWlDOQPGt5lsMiG9hFQntpFqxQJtAAABnElEQVQoz2WRh3KrQAxFtYWO6ZhucItrynv6/3/LFnA24c6wurpnYBkJZvXduNix6+GXTo8qWnxUPU4m2w0O1ktTozPsftiZpejGlm7C2MWUnRcWOohIo36+PaKyDZdLUOgDXvqQfaT9kwkfvP3AN18E7Kl8hkJHMHSXSSadxaTtTNjJhMkfjFHKMqGlolg4T7mtCbcq8gBCotxkwklFLIQSlQoTHnVWQqzNxYQuzpfmqGVMc5ijHK5yAuIhxbZ5p/S92RZkjv5BKs6aosSIr0JrcXBo1FtICVINKRKK6u0GnraoN84O5KbhjRwYzxCJnQCMtotkdNxjq2F7dJ2RoGuXIBTvc3ROthdmat6hZ7cOyfcxKGV+wTxBkxQxTQTzWOFny/7qS2nzx37T7nbtZj9xu7zUr/323nVy0sQnhwMJktSZrl5v7CjgSQmWi+haUCY8sH4tyc/FGSKGouS+WqBJm8U2NIE/+nLu2tzpF/xVNGy02QzRClafC/ysVpDzQJuA8xXsKl8bv+pgpXz57H9Yy3J1lQNY62wUrW+mdzrylWS0QwAAAABJRU5ErkJggg==)](https://apps.heimdall.site/applications/foundation)
## Installing
Apart from the Laravel dependencies, namely PHP >= 7.1.3, OpenSSL PHP Extension, PDO PHP Extension, Filter PHP Extension, Mbstring PHP Extension, Tokenizer PHP Extension, XML PHP Extension, Ctype PHP Extension and JSON PHP Extension, the only other thing Heimdall needs is sqlite support and zip support (php-zip).
Apart from the Laravel dependencies, namely PHP >= 7.2.5, BCMath PHP Extension, Ctype PHP Extension, Fileinfo PHP extension, JSON PHP Extension, Mbstring PHP Extension, OpenSSL PHP Extension, PDO PHP Extension, Tokenizer PHP Extension, XML PHP Extension, the only other thing Heimdall needs is sqlite support and zip support (php-zip).
If you find you can't change the background make sure `php_fileinfo` is enabled in your php.ini. I believe it should be by default, but one user came across the issue on a windows system.
@@ -52,6 +52,18 @@ There is also a multi-arch Docker which supports x86-64, armhf and arm64, instru
- https://hub.docker.com/r/linuxserver/heimdall/
## Updating
To update your instance, simply clone this repository or download the zip/tar file with the new version and copy it over the old installation.
## Search Providers
v2.3.0 added the ability for users to customise the search options.
Options are stored in `/storage/app/searchproviders.yaml` (`/config/www/searchproviders.yaml` on docker installs), feel free to rearrange the options, add new ones, delete ones you don't use, etc.
Consider contributing to https://github.com/linuxserver/Heimdall/discussions/categories/search-providers to help others add new ones.
The item at the top of the list `Tiles` allows you to search for apps on your dashboard by name, helpful when you have lots of icons.
## New background image not being set
If you are using the docker image or a default php install you may find images over 2MB wont get set as the background image, you just need to change the `upload_max_filesize` in the php.ini.
@@ -78,6 +90,7 @@ Currently added languages are
- Swedish
- Spanish
- Turkish
- Russian
## Web Server Configuration
@@ -129,7 +142,7 @@ location /webfonts {
If there are any other locations which might interfere with any of the folders in the `/public` folder, you might have to do the same for those as well, but it's a super fringe case.
### Reverse proxy
If you'd like to reverse proxy this app, we recommend using our letsencrypt/nginx docker image: [Letsencrypt/Nginx](https://hub.docker.com/r/linuxserver/letsencrypt/)
If you'd like to reverse proxy this app, we recommend using our letsencrypt/nginx docker image: [SWAG - Secure Web Application Gateway](https://hub.docker.com/r/linuxserver/swag)
You can either reverse proxy from the root location, or from a subdomain (subfolder method is currently not supported). For HTTPS proxy, make sure you use the HTTPS port of Heimdall webserver, otherwise some links may break. You can add security through `.htpasswd`
```

View File

@@ -1,54 +0,0 @@
<template>
<div class="flex flex-center">
<div class="noapps" v-if="apps.length === 0">
{{ $t('no_apps') }}
<button style="margin-top: 20px" unelevated color="cyan-8" to="/account">
{{ $t('manage_apps') }}
</button>
</div>
<Tile v-else v-for="application in apps" :key="application.id" v-bind="application" :application="application" />
</div>
</template>
<script>
import Tile from '../components/Tile'
export default {
name: 'PageIndex',
props: ['apps', 'searchfilter'],
components: {
Tile
},
computed: {
/*applications: function () {
let tiles = null
if (this.filter === null) {
tiles = this.$store.state.tiles.active
} else {
console.log('active')
console.log(this.$store.state.tiles.active)
const notNull = this.$store.state.tiles.active.filter(a => a.tags !== null)
console.log('notnull')
console.log(notNull)
tiles = notNull.filter(a => a.tags.find(name => name === this.filter))
}
// console.log(tiles)
if (this.searchfilter === null) {
return tiles
} else {
return tiles.filter(v => v.title.toLowerCase().indexOf(this.searchfilter) > -1)
}
}*/
},
data() {
return {}
},
mounted() {
console.log(apps)
}
}
</script>

View File

@@ -1,11 +1,237 @@
import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/inertia-vue3'
$.when( $.ready ).then(function() {
createInertiaApp({
resolve: name => require(`./Pages/${name}`),
setup({ el, App, props, plugin }) {
createApp({ render: () => h(App, props) })
.use(plugin)
.mount(el)
},
})
var base = (document.querySelector('base') || {}).href;
if($('.message-container').length) {
setTimeout(
function()
{
$('.message-container').fadeOut();
}, 3500);
}
// from https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API
// Set the name of the hidden property and the change event for visibility
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") { // Opera 12.10 and Firefox 18 and later support
hidden = "hidden";
visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
hidden = "msHidden";
visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
hidden = "webkitHidden";
visibilityChange = "webkitvisibilitychange";
}
var livestatsRefreshTimeouts = [];
var livestatsFuncs = [];
var livestatsContainers = $('.livestats-container');
function stopLivestatsRefresh() {
for (var timeoutId of livestatsRefreshTimeouts) {
window.clearTimeout(timeoutId);
}
}
function startLivestatsRefresh() {
for (var fun of livestatsFuncs) {
fun();
}
}
if (livestatsContainers.length > 0) {
if (typeof document.addEventListener === "undefined" || hidden === undefined) {
console.log("This browser does not support visibilityChange");
} else {
document.addEventListener(visibilityChange, function() {
if (document[hidden]) {
stopLivestatsRefresh();
} else {
startLivestatsRefresh();
}
}, false);
}
livestatsContainers.each(function(index){
var id = $(this).data('id');
var dataonly = $(this).data('dataonly');
var increaseby = (dataonly == 1) ? 20000 : 1000;
var container = $(this);
var max_timer = 30000;
var timer = 5000;
var fun = function worker() {
$.ajax({
url: base+'get_stats/'+id,
dataType: 'json',
success: function(data) {
container.html(data.html);
if(data.status == 'active') timer = increaseby;
else {
if(timer < max_timer) timer += 2000;
}
},
complete: function() {
// Schedule the next request when the current one's complete
livestatsRefreshTimeouts[index] = window.setTimeout(worker, timer);
}
});
};
livestatsFuncs[index] = fun;
fun();
});
}
function readURL(input) {
if (input.files && input.files[0]) {
var reader = new FileReader();
reader.onload = function(e) {
$('#appimage img').attr('src', e.target.result);
};
reader.readAsDataURL(input.files[0]);
}
}
$('#upload').change(function() {
readURL(this);
});
/*$(".droppable").droppable({
tolerance: "intersect",
drop: function( event, ui ) {
var tag = $( this ).data('id');
var item = $( ui.draggable ).data('id');
$.get('tag/add/'+tag+'/'+item, function(data) {
if(data == 1) {
$( ui.draggable ).remove();
} else {
alert('not added');
}
});
}
});*/
$( '#sortable' ).sortable({
stop: function (event, ui) {
var idsInOrder = $('#sortable').sortable('toArray', {
attribute: 'data-id'
});
$.post(
base+'order',
{ order:idsInOrder }
);
}
});
$('#sortable').sortable('disable');
$('#sortable').on('mouseenter', '.item', function () {
$(this).siblings('.tooltip').addClass('active')
$('.refresh', this).addClass('active')
}).on('mouseleave', '.item', function () {
$(this).siblings('.tooltip').removeClass('active')
$('.refresh', this).removeClass('active')
})
$('#search-container').on('input', 'input[name=q]', function () {
const search = this.value
const items = $('#sortable').children('.item-container')
if($('#search-container select[name=provider]').val() === 'tiles') {
if(search.length > 0) {
items.hide()
items.filter(function () {
const name = $(this).data('name').toLowerCase();
return name.includes(search.toLowerCase())
}).show()
} else {
items.show()
}
} else {
items.show()
}
}).on('change', 'select[name=provider]', function () {
const items = $('#sortable').children('.item-container')
if($(this).val() === 'tiles') {
$('#search-container button').hide()
const search = $('#search-container input[name=q]').val()
if(search.length > 0) {
items.hide()
items.filter(function () {
const name = $(this).data('name').toLowerCase();
return name.includes(search.toLowerCase())
}).show()
} else {
items.show()
}
} else {
$('#search-container button').show()
items.show()
}
})
$('#app').on('click', '#config-button', function(e) {
e.preventDefault();
var app = $('#app');
var active = (app.hasClass('header'));
app.toggleClass('header');
if(active) {
$('.add-item').hide();
$('.item-edit').hide();
$('#app').removeClass('sidebar');
$('#sortable').sortable('disable');
} else {
$('#sortable').sortable('enable');
setTimeout(function() {
$('.add-item').fadeIn();
$('.item-edit').fadeIn();
}, 350);
}
}).on('click', '#add-item, #pin-item', function(e) {
e.preventDefault();
var app = $('#app');
var active = (app.hasClass('sidebar'));
app.toggleClass('sidebar');
}).on('click', '.close-sidenav', function(e) {
e.preventDefault();
var app = $('#app');
app.removeClass('sidebar');
}).on('click', '#test_config', function(e) {
e.preventDefault();
var apiurl = $('#create input[name=url]').val();
var override_url = $('#create input[name="config[override_url]"]').val();
if(override_url.length && override_url != '') {
apiurl = override_url;
}
var data = {};
data['url'] = apiurl;
$('.config-item').each(function(index){
var config = $(this).data('config');
data[config] = $(this).val();
});
$.post(base+'test_config', { data: data }, function(data) {
alert(data);
});
});
$('#pinlist').on('click', 'a', function(e) {
e.preventDefault();
var current = $(this);
var id = current.data('id');
var tag = current.data('tag');
$.get(base+'items/pintoggle/'+id+'/true/'+tag, function(data) {
var inner = $(data).filter('#sortable').html();
$('#sortable').html(inner);
current.toggleClass('active');
});
});
});

View File

@@ -1,201 +0,0 @@
<template>
<section class="item-container ui-sortable-handle" :class="{ preview: preview }" :data-id="this.$attrs.id">
<div class="item" :style="'background-color: ' + bgColor + '; color: ' + textColor + ''">
<img class="app-icon" :src="appIcon" />
<div class="details">
<div class="title white">{{ application.title }}</div>
<!--<div v-if="application.config.enhancedType !== 'disabled'" class="livestats-container white">
<ul class="livestats">
<li v-if="application.config.stat1.name">
<span class="title">{{ application.config.stat1.name }}</span>
<strong>{{ this.stat1value }}</strong>
</li>
<li v-if="application.config.stat2.name">
<span class="title">{{ application.config.stat2.name }}</span>
<strong>{{ this.stat2value }}</strong>
</li>
</ul>
</div>-->
</div>
<a :style="'color: ' + textColor" class="link white" :href="application.url" v-bind:target="application.link_tab === 'default' ? settings.default_link_tab : application.link_tab">
<svg class="svg-inline--fa fa-arrow-alt-to-right fa-w-14" aria-hidden="true" data-prefix="fas" data-icon="arrow-alt-to-right" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" data-fa-i2svg="">
<path fill="currentColor" d="M448 88v336c0 13.3-10.7 24-24 24h-24c-13.3 0-24-10.7-24-24V88c0-13.3 10.7-24 24-24h24c13.3 0 24 10.7 24 24zM24 320h136v87.7c0 17.8 21.5 26.7 34.1 14.1l152.2-152.2c7.5-7.5 7.5-19.8 0-27.3L194.1 90.1c-12.6-12.6-34.1-3.7-34.1 14.1V192H24c-13.3 0-24 10.7-24 24v80c0 13.3 10.7 24 24 24z"></path>
</svg>
<!-- <i class="fas fa-arrow-alt-to-right"></i> -->
</a>
<div v-if="application.description !== ''" content-class="tooltip-content" max-width="500px" anchor="top middle" self="bottom middle">{{ application.description }}</div>
<!--<div v-if="application.config.enhancedType !== 'disabled'" @click="refreshData" class="tile-actions refresh">
<q-icon class="" name="refresh"></q-icon>
{{ $t('refresh_stats') }}
</div>-->
</div>
</section>
</template>
<script>
import EnhancedApps from '../plugins/EnhancedApps'
import _ from 'lodash'
export default {
name: 'Tile',
props: ['application', 'stat1valueinit', 'stat2valueinit'],
components: {},
computed: {
textColor() {
return '#000000'
const bgColor = this.bgColor
const lightColor = '#ffffff'
const darkColor = '#000000'
const color = bgColor.charAt(0) === '#' ? bgColor.substring(1, 7) : bgColor
const alpha = bgColor.charAt(0) === '#' ? bgColor.substring(7, 9) : bgColor.substring(6, 8)
const r = parseInt(color.substring(0, 2), 16) // hexToR
const g = parseInt(color.substring(2, 4), 16) // hexToG
const b = parseInt(color.substring(4, 6), 16) // hexToB
const a = parseFloat(parseInt((parseInt(alpha, 16) / 255) * 1000) / 1000)
const brightness = r * 0.299 + g * 0.587 + b * 0.114 + (1 - a) * 255
return brightness > 186 ? darkColor : lightColor
},
bgColor() {
if (this.application.color !== 'null' && this.application.color !== null) {
return this.application.color
}
return '#222222'
},
preview() {
return this.application.preview
},
running() {
// return this.$store.state.tiles.running
},
settings() {
// return this.$store.state.app.settings
},
appIcon() {
return '';
}
},
watch: {
application: function (newdata, olddata) {
clearTimeout(this.check)
if (newdata.config.enhancedType !== 'disabled') {
// this.checkVisible()
}
},
running: function (newdata, olddata) {
if (newdata === false) {
clearTimeout(this.check)
}
if (olddata === false && newdata === true) {
this.timedChecks()
}
},
stat1valueinit: function (newdata, olddata) {
this.stat1value = newdata
},
stat2valueinit: function (newdata, olddata) {
this.stat2value = newdata
}
},
asyncComputed: {
/*async appIcon() {
if (this.application.icon === null) {
return '/heimdall-logo-white.svg'
}
// Is a file upload
if (typeof this.application.icon === 'object') {
// work out how to preview the image
console.log(this.application.icon)
}
// Is an image stored online
if (this.application.icon && this.application.icon.startsWith('http')) {
}
return this.application.icon
}*/
},
data() {
return {
icon: this.$attrs.icon || '/heimdall-logo-white.svg',
stat1value: this.stat1valueinit || null,
stat2value: this.stat2valueinit || null,
check: null,
active: 2000,
maxTimer: 45000,
timer: 5000
}
},
mounted() {
this.refreshData()
},
methods: {
async timedChecks() {
const current1 = this.stat1value
const current2 = this.stat2value
const data = await this.checkForData()
if (!data) {
return
}
if (data.stat1 !== current1 && this.application.config.stat1.updateOnChange === 'Yes') {
this.timer = this.active
} else if (data.stat2 !== current2 && this.application.config.stat2.updateOnChange === 'Yes') {
// There has been a change to the data
this.timer = this.active
} else {
if (this.timer < this.maxTimer) this.timer += 5000
}
this.stat1value = data.stat1
this.stat2value = data.stat2
clearTimeout(this.check) // Make sure timer is cleared, it should be, but shouldn't hurt to make sure
if (
// check if update on change is set on at least 1 stat
this.application.config.stat1.updateOnChange === 'Yes' ||
this.application.config.stat2.updateOnChange === 'Yes'
) {
console.log('timer: ' + this.timer)
this.check = setTimeout(this.timedChecks, this.timer)
}
},
async refreshData() {
await this.timedChecks()
this.$q.notify({
message: this.$t('updated'),
type: 'positive',
progress: true,
position: 'bottom',
timeout: 1500
})
},
forceCheck() {
clearTimeout(this.check)
this.checkForData()
},
async checkForData() {
if (this.application.config.enhancedType && this.application.config.enhancedType !== 'disabled') {
const enhanced = new EnhancedApps(this.application)
let call
try {
call = await enhanced.call()
} catch (e) {
console.error(e)
}
if (!call) {
return
}
const stat1 = this.application.config.stat1.key !== null && this.application.config.stat1.key !== '' ? _.get(call.data.result.stat1, this.application.config.stat1.key, null) : call.data.result.stat1
const stat2 = this.application.config.stat2.key !== null && this.application.config.stat2.key !== '' ? _.get(call.data.result.stat2, this.application.config.stat2.key, null) : call.data.result.stat2
return {
stat1: enhanced.filter(stat1, this.application.config.stat1),
stat2: enhanced.filter(stat2, this.application.config.stat2)
}
}
}
}
}
</script>

View File

@@ -1,112 +0,0 @@
import axios from 'axios'
// import { i18n } from 'boot/i18n.js'
export default class EnhancedApps {
constructor(application) {
this.data = application.config
this.id = application.id
}
async call() {
const request = await axios.get('enhanced/' + this.id)
return request
}
async test() {
try {
// console.log(this.data)
const test = await axios.post('enhanced/test', this.data)
/*Notify.create({
type: 'positive',
message: i18n.t('api_test_success') + ': ' + JSON.stringify(test.data),
progress: true,
position: 'bottom',
timeout: 1500
})*/
return test
} catch (e) {
console.log(e.response)
/*Notify.create({
type: 'negative',
message: i18n.t('api_test_failure') + ': ' + JSON.stringify(e.response.data.result),
progress: true,
position: 'bottom',
timeout: 1500
})*/
}
}
static types() {
return [
{
id: 'disabled',
value: 'disabled'
},
{
id: 'none',
value: 'none'
},
{
id: 'apikey',
value: 'apikey'
},
{
id: 'cookie',
value: 'cookie'
},
{
id: 'basic_auth',
value: 'basic_auth'
}
]
}
humanFileSize(size) {
const i = size === 0 ? 0 : Math.floor(Math.log(size) / Math.log(1024))
return (size / Math.pow(1024, i)).toFixed(2) * 1 + ' ' + ['B', 'kB', 'MB', 'GB', 'TB'][i]
}
filter(value, stat) {
switch (stat.filter) {
case 'count':
return value.length
case 'size':
return this.humanFileSize(value)
case 'filter':
return value.filter(val => {
return val[stat.filterBy].toString() === stat.filterByValue.toString()
}).length
}
return value
}
static filters() {
return [
{
id: 'none',
value: 'none'
},
{
id: 'size',
value: 'size'
},
{
id: 'speed',
value: 'speed'
},
{
id: 'count',
value: 'count'
},
{
id: 'filter',
value: 'filter'
}
]
}
fields() {
if (this.data.type === 1) {
return [{}]
}
}
}

View File

@@ -47,6 +47,66 @@ body {
}
}
}
#tile-preview {
align-items: center;
}
.create {
.textarea {
width: 100%;
margin: 0px 20px;
textarea{
width: 100%;
border: 1px solid #dedfe2;
padding: 15px;
border-radius: 6px;
height: 100px;
font-size: 14px;
}
label:not(.switch) {
width: 100%;
font-size: 13px;
color: lighten($app-text, 40%);
margin-bottom: 15px;
display: block;
font-weight: 300;
}
}
}
.appoptions {
display: flex;
flex-direction: column;
padding: 20px;
gap: 5px;
.optdetails {
display: flex;
.input {
margin: 0 20px;
width: 200px;
}
}
.optvalue {
display: flex;
align-items: center;
opacity: 0;
width: 0;
height: 0;
overflow: hidden;
&.active {
opacity: 1;
width: auto;
height: auto;
overflow: visible;
}
}
button.dark {
background: #1b1b1b;
border: none;
padding: 12px 15px;
border-radius: 4px;
color: white;
min-width: 240px;
}
}
#app {
display: flex;
min-height: 100vh;
@@ -200,6 +260,59 @@ body {
text-align: center;
line-height: 30px;
display: none;
z-index: 1;
}
.tooltip {
padding: 25px;
border-radius: 5px;
background: #000000c8;
color: white;
position: absolute;
bottom: 120px;
left: 0;
right: 0;
font-size: 13px;
backdrop-filter: blur(8px);
z-index: 0;
opacity: 0;
transform: translateY(-20px);
transition: all 0.3s;
&.active {
transform: translateY(0);
opacity: 1;
z-index: 4;
}
}
}
.tile-actions {
position: absolute;
top: 0px;
left: 0;
padding: 7px;
background: #000000d9;
font-size: 12px;
line-height: 1;
border-radius: 6px;
width: 80px;
height: 90px;
display: flex;
opacity: 0;
align-items: center;
justify-content: center;
transition: all 0.3s;
flex-direction: column;
text-align: center;
cursor: pointer;
&.active {
opacity: 1;
}
}
.refresh {
z-index: 3;
.icon {
font-size: 20px;
margin-bottom: 5px;
}
}
.black {
@@ -511,6 +624,15 @@ body {
}
}
}
.input {
position: relative;
.help {
position: absolute;
bottom: -22px;
left: 10px;
color: #c00;
}
}
div.create {
padding: 30px 15px;
display: flex;
@@ -534,10 +656,19 @@ div.create {
}
}
}
.app-icon-container {
width: 60px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
margin-right: 15px;
flex: 0 0 60px;
}
.app-icon {
max-width: 60px;
margin-right: 15px;
display: block;
max-height: 60px;
}
.sidenav {
@@ -576,6 +707,41 @@ div.create {
color: #91a1b3;
margin-left: 20px;
}
#websiteiconoptions {
display: flex;
flex-direction: column;
padding: 20px;
.results {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.header {
display: flex;
justify-content: space-between;
align-items: center;
gap: 10px;
padding: 10px 0;
}
.selectclose {
cursor: pointer;
}
}
.iconbutton {
width: 160px;
height: 160px;
display: flex;
align-items: center;
justify-content: center;
border: 1px solid #ccc;
border-radius: 4px;
cursor: pointer;
}
.selecticon {
max-width: 120px;
height: auto;
}
.switch {
position: relative;
@@ -694,6 +860,8 @@ div.create {
position: relative;
width: 100%;
max-width: 620px;
position: relative;
z-index: 4;
form {
width: 100%;
}
@@ -784,7 +952,7 @@ div.create {
#appimage {
img {
max-width: 95px;
width: 95px;
}
}

120
resources/lang/cat/app.php Normal file
View File

@@ -0,0 +1,120 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Sistema',
'settings.appearance' => 'Aparença',
'settings.miscellaneous' => 'Miscel·lania',
'settings.support' => 'Suport',
'settings.donate' => 'Fer una donació',
'settings.version' => 'Versió',
'settings.background_image' => 'Imatge de fons',
'settings.window_target' => 'L\'enllaç s\'obre a',
'settings.window_target.current' => 'Obre en aquesta pestanya',
'settings.window_target.one' => 'Obre en la mateixa pestanya',
'settings.window_target.new' => 'Obre en una nova pestanya',
'settings.homepage_search' => 'Cerca a la pàgina principal',
'settings.search_provider' => 'Proveïdor de cerca per defecte',
'settings.language' => 'Idioma',
'settings.reset' => 'Reinicia als parametres per defecte',
'settings.remove' => 'Elimina',
'settings.search' => 'cerca',
'settings.no_items' => 'No s\'han trobat resultats',
'settings.label' => 'Etiqueta',
'settings.value' => 'Valor',
'settings.edit' => 'Edita',
'settings.view' => 'Veure',
'options.none' => '- no definit -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'StartPage',
'options.yes' => 'Sí',
'options.no' => 'No',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Desa',
'buttons.cancel' => 'Cancel·la',
'buttons.add' => 'Afegeix',
'buttons.upload' => 'Puja una icona',
'buttons.downloadapps' => 'Actualitza la llista d\'Apps',
'dash.pin_item' => 'Ancora l\'element al panell',
'dash.no_apps' => 'No hi ha cap aplicació ancorada, :link1 o :link2',
'dash.link1' => 'Afegiu una aplicació aquí',
'dash.link2' => 'Ancoreu un item al panell',
'dash.pinned_items' => 'Elements ancorats',
'apps.app_list' => 'Llista d\'aplicacions',
'apps.view_trash' => 'Veure la paperera',
'apps.add_application' => 'Afegeix l\'aplicació',
'apps.application_name' => 'Nom de l\'aplicació',
'apps.colour' => 'Color',
'apps.icon' => 'Icona',
'apps.pinned' => 'Ancorada',
'apps.title' => 'Títol',
'apps.hex' => 'Color en hexa',
'apps.username' => 'Usuari',
'apps.password' => 'Contrasenya',
'apps.config' => 'Configuració',
'apps.apikey' => 'Clau API',
'apps.enable' => 'Activa',
'apps.tag_list' => 'Llista d\'etiquetes',
'apps.add_tag' => 'Afegeix una etiqueta',
'apps.tag_name' => 'Nom de l\'etiqueta',
'apps.tags' => 'Etiquetes',
'apps.override' => 'Si és diferent que la URL principal',
'apps.preview' => 'Previsualitza',
'apps.apptype' => 'Tipus d\'aplicació',
'dashboard' => 'Panell principal',
'user.user_list' => 'Usuaris',
'user.add_user' => 'Afegeix usuari',
'user.username' => 'Usuari',
'user.avatar' => 'Avatar',
'user.email' => 'Correu electrònic',
'user.password_confirm' => 'Confirmeu la contrasenya',
'user.secure_front' => 'Permetre accés públic - Només si s\'ha establert una contrasenya.',
'user.autologin' => 'Permetre iniciar sessió des d\'una URL específica. Qualsevol que tingui l\'enllaç podrà accedir.',
'url' => 'URL',
'title' => 'Títol',
'delete' => 'Elimina',
'optional' => 'Opcional',
'restore' => 'Restaura',
'alert.success.item_created' => 'L\'element s\'ha creat correctament',
'alert.success.item_updated' => 'L\'element s\'ha actualitzat correctament',
'alert.success.item_deleted' => 'L\'element s\'ha eliminat correctament',
'alert.success.item_restored' => 'L\'element s\'ha restaurat correctament',
'alert.success.updating' => 'Actualitzant la llista d\'apps',
'alert.success.tag_created' => 'L\'etiqueta s\'ha creat correctament',
'alert.success.tag_updated' => 'L\'etiqueta s\'ha actualitzat correctament',
'alert.success.tag_deleted' => 'L\'etiqueta s\'ha eliminat correctament',
'alert.success.tag_restored' => 'L\'etiqueta s\'ha restaurat correctament',
'alert.success.setting_updated' => 'S\'ha editat aquest paràmetre correctament',
'alert.error.not_exist' => 'Aquest paràmetre no existeix.',
'alert.success.user_created' => 'L\'usuari s\'ha creat correctament',
'alert.success.user_updated' => 'L\'usuari s\'ha actualitzat correctament',
'alert.success.user_deleted' => 'L\'usuari s\'ha eliminar correctament',
'alert.success.user_restored' => 'L\'usuari s\'ha restaurat correctament',
];

120
resources/lang/cn/app.php Normal file
View File

@@ -0,0 +1,120 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => '系统',
'settings.appearance' => '外观',
'settings.miscellaneous' => '其他',
'settings.support' => '支持',
'settings.donate' => '捐赠',
'settings.version' => '版本',
'settings.background_image' => '背景图片',
'settings.window_target' => '链接打开方式',
'settings.window_target.current' => '在当前选项卡中打开',
'settings.window_target.one' => '在同一个选项卡中打开',
'settings.window_target.new' => '在新的选项卡中打开',
'settings.homepage_search' => '主页搜索',
'settings.search_provider' => '默认搜索引擎',
'settings.language' => '语言',
'settings.reset' => '重置为默认值',
'settings.remove' => '删除',
'settings.search' => '搜索',
'settings.no_items' => '没有可用项目',
'settings.label' => '设置项',
'settings.value' => '内容',
'settings.edit' => '编辑',
'settings.view' => '查看',
'options.none' => '- 未设置 -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'StartPage',
'options.yes' => '是',
'options.no' => '否',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => '保存',
'buttons.cancel' => '取消',
'buttons.add' => '添加',
'buttons.upload' => '上传图标',
'buttons.downloadapps' => '更新应用列表',
'dash.pin_item' => '将应用固定到仪表盘',
'dash.no_apps' => '当前没有固定的应用, 请 :link1 或 :link2',
'dash.link1' => '添加应用',
'dash.link2' => '将应用固定到仪表盘',
'dash.pinned_items' => '固定应用',
'apps.app_list' => '应用列表',
'apps.view_trash' => '查看垃圾箱',
'apps.add_application' => '添加应用',
'apps.application_name' => '应用名称',
'apps.colour' => '颜色',
'apps.icon' => '图标',
'apps.pinned' => '固定',
'apps.title' => '标题',
'apps.hex' => 'Hex颜色',
'apps.username' => '用户名称',
'apps.password' => '密码',
'apps.config' => '配置',
'apps.apikey' => 'API 密钥',
'apps.enable' => 'Enable',
'apps.tag_list' => '标签列表',
'apps.add_tag' => '添加标签',
'apps.tag_name' => '标签名称',
'apps.tags' => '标签',
'apps.override' => '如果与主链接不同',
'apps.preview' => '预览',
'apps.apptype' => '应用类型',
'dashboard' => '主页-控制台',
'user.user_list' => '用户',
'user.add_user' => '添加用户',
'user.username' => '用户名称',
'user.avatar' => '头像',
'user.email' => '邮箱地址',
'user.password_confirm' => '重复密码',
'user.secure_front' => '仅设置密码后才允许公开访问.',
'user.autologin' => '仅可从特定的链接访问(任何通过链接都可访问).',
'url' => '链接',
'title' => '标题',
'delete' => '删除',
'optional' => '可选',
'restore' => '复位',
'alert.success.item_created' => '应用添加成功',
'alert.success.item_updated' => '应用更新成功',
'alert.success.item_deleted' => '应用删除成功',
'alert.success.item_restored' => '应用复位成功',
'alert.success.updating' => '更新应用列表完成',
'alert.success.tag_created' => '标签添加成功',
'alert.success.tag_updated' => '标签更新成功',
'alert.success.tag_deleted' => '标签删除成功',
'alert.success.tag_restored' => '标签复位成功',
'alert.success.setting_updated' => '你已成功编辑此设置',
'alert.error.not_exist' => '此设置项不存在.',
'alert.success.user_created' => '用户添加成功',
'alert.success.user_updated' => '用户更新成功',
'alert.success.user_deleted' => '用户删除成功',
'alert.success.user_restored' => '用户复位成功',
];

View File

@@ -4,16 +4,16 @@ return array (
'settings.system' => 'System',
'settings.appearance' => 'Aussehen',
'settings.miscellaneous' => 'Sonstiges',
'settings.version' => 'Ausführung',
'settings.version' => 'Version',
'settings.background_image' => 'Hintergrundbild',
'settings.homepage_search' => 'Homepage Suchen',
'settings.homepage_search' => 'Startseite Sucheingabe',
'settings.search_provider' => 'Suchanbieter',
'settings.language' => 'Sprache',
'settings.reset' => 'Zurücksetzen auf Standard zurück',
'settings.reset' => 'Zurücksetzen auf Standard',
'settings.remove' => 'Entfernen',
'settings.search' => 'suche',
'settings.no_items' => 'Keine Elemente gefunden',
'settings.label' => 'Etikett',
'settings.label' => 'Bezeichnung',
'settings.value' => 'Wert',
'settings.edit' => 'Bearbeiten',
'settings.view' => 'Ansicht',
@@ -29,9 +29,9 @@ return array (
'buttons.add' => 'Hinzufügen',
'buttons.upload' => 'Hochladen einer Datei',
'dash.pin_item' => 'Element auf dem Dashboard anheften',
'dash.no_apps' => 'Derzeit gibt es keine angeheftete Anwendungen :link1 oder :link2',
'dash.link1' => 'Hinzufügen einer Anwendung hier',
'dash.link2' => 'Heften Sie ein Element auf dem Armaturenbrett',
'dash.no_apps' => 'Derzeit gibt es keine angeheftete Anwendungen. :link1 oder :link2',
'dash.link1' => 'Anwendung neu hinzufügen',
'dash.link2' => 'anheften',
'dash.pinned_items' => 'Angeheftete Elemente',
'apps.app_list' => 'Anwendungsliste',
'apps.view_trash' => 'Ansicht Papierkorb',
@@ -39,21 +39,22 @@ return array (
'apps.application_name' => 'Anwendungsname',
'apps.colour' => 'Farbe',
'apps.icon' => 'Symbol',
'apps.pinned' => 'Festgesteckt',
'apps.pinned' => 'Angeheftet',
'apps.title' => 'Titel',
'apps.hex' => 'Hex-Farbe',
'apps.username' => 'Benutzername',
'apps.password' => 'Passwort',
'apps.config' => 'Konfig',
'url' => 'Url',
'apps.config' => 'Konfiguration',
'apps.only_admin_account' => 'Nur mit Admin-Konto!',
'url' => 'URL',
'title' => 'Titel',
'delete' => 'Löschen',
'optional' => 'Wahlweise',
'optional' => 'Optional',
'restore' => 'Wiederherstellen',
'alert.success.item_created' => 'Element erfolgreich erstellt',
'alert.success.item_updated' => 'Artikel erfolgreich aktualisiert',
'alert.success.item_updated' => 'Element erfolgreich aktualisiert',
'alert.success.item_deleted' => 'Element erfolgreich gelöscht',
'alert.success.item_restored' => 'Element erfolgreich wiederhergestellt',
'alert.success.setting_updated' => 'Sie haben diese Einstellung erfolgreich bearbeitet',
'alert.success.setting_updated' => 'Die Einstellungen wurden übernommen',
'alert.error.not_exist' => 'Diese Einstellung existiert nicht.',
);

View File

@@ -12,6 +12,8 @@ return [
'settings.system' => 'System',
'settings.appearance' => 'Appearance',
'settings.miscellaneous' => 'Miscellaneous',
'settings.advanced' => 'Advanced',
'settings.support' => 'Support',
'settings.donate' => 'Donate',
@@ -29,11 +31,13 @@ return [
'settings.search' => 'search',
'settings.no_items' => 'No items found',
'settings.label' => 'Label',
'settings.value' => 'Value',
'settings.edit' => 'Edit',
'settings.view' => 'View',
'settings.custom_css' => 'Custom CSS',
'settings.custom_js' => 'Custom JavaScript',
'options.none' => '- not set -',
'options.google' => 'Google',
@@ -79,6 +83,11 @@ return [
'apps.override' => 'If different to main url',
'apps.preview' => 'Preview',
'apps.apptype' => 'Application Type',
'apps.website' => 'Website',
'apps.description' => 'Description',
'apps.only_admin_account' => 'Only if you have admin-account!',
'apps.autologin_url' => 'Auto login url',
'apps.show_deleted' => 'Showing Deleted Applications',
'dashboard' => 'Home dashboard',

View File

@@ -34,11 +34,14 @@ return array (
'options.startpage' => 'Page d\'accueil',
'options.yes' => 'Oui',
'options.no' => 'Non',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Enregistrer',
'buttons.cancel' => 'Annuler',
'buttons.add' => 'Ajouter',
'buttons.upload' => 'Choisir un fichier',
'buttons.downloadapps' => 'Mettre à jour la liste',
'dash.pin_item' => 'Épingler l\'application au tableau de bord',
'dash.no_apps' => 'Il n\'existe actuellement aucune application épinglée :link1 ou :link2',
@@ -58,13 +61,28 @@ return array (
'apps.username' => 'Nom d\'utilisateur',
'apps.password' => 'Mot de passe',
'apps.config' => 'Config',
'apps.apikey' => 'Clé de l\'API',
'apps.enable' => 'Actif',
'apps.tag_list' => 'Liste des labels',
'apps.add_tag' => 'Ajouter un label',
'apps.tag_name' => 'Nom du label',
'apps.tags' => 'Labels',
'apps.override' => 'Si différent de l\'url actuelle',
'apps.preview' => 'Aperçu',
'apps.apptype' => 'Type d\'application ',
'apps.only_admin_account' => 'Seulement si vous avez un compte administrateur!',
'dashboard' => 'Tableau de bord',
'user.user_list' => 'Utilisateurs',
'user.add_user' => 'Ajouter un utilisateur',
'user.username' => 'Nom d\'utilisateur',
'user.avatar' => 'Avatar',
'user.email' => 'Email',
'user.password_confirm' => 'Confirmer le mot de passe',
'user.secure_front' => 'Autoriser l\'accès public au front - Uniquement appliqué si un mot de passe est défini.',
'user.autologin' => 'Autorisez la connexion à partir d\'une URL spécifique. Toute personne disposant du lien peut se connecter.',
'url' => 'Url',
'title' => 'Titre',
'delete' => 'Effacer',
@@ -75,6 +93,7 @@ return array (
'alert.success.item_updated' => 'Application mise à jour avec succès',
'alert.success.item_deleted' => 'Application supprimée avec succès',
'alert.success.item_restored' => 'Application restaurée avec succès',
'alert.success.updating' => 'Liste des applications mise à jour avec succès',
'alert.success.tag_created' => 'Label crée avec succès',
'alert.success.tag_updated' => 'Label mis à jour avec succès',

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Ces informations d\'identification ne correspondent pas à nos enregistrements.',
'throttle' => 'Trop de tentatives de connexion. Veuillez réessayer dans :seconds secondes.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; précédents',
'next' => '&raquo; suivants',
];

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Les mots de passe doivent comporter au moins six caractères et correspondre à la confirmation.',
'reset' => 'Votre mot de passe a été réinitialisé!',
'sent' => 'Nous avons envoyé votre lien de réinitialisation de mot de passe par e-mail!',
'token' => 'Ce jeton de réinitialisation de mot de passe n\'est pas valide.',
'user' => "Nous ne pouvons pas trouver un utilisateur avec cette adresse e-mail.",
];

121
resources/lang/hu/app.php Normal file
View File

@@ -0,0 +1,121 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Rendszer',
'settings.appearance' => 'Megjelenés',
'settings.miscellaneous' => 'Miscellaneous',
'settings.support' => 'Támogatás',
'settings.donate' => 'Adomány',
'settings.version' => 'Verzió',
'settings.background_image' => 'Háttérkép',
'settings.window_target' => 'Link megnyitása',
'settings.window_target.current' => 'Ezen a lapon',
'settings.window_target.one' => 'Azonos lapon',
'settings.window_target.new' => 'Új lapon',
'settings.homepage_search' => 'Kezdő oldal kereső',
'settings.search_provider' => 'Alapértelmezett kereső motor ',
'settings.language' => 'Nyelv',
'settings.reset' => 'Alapértelmezetek visszaállítása',
'settings.remove' => 'Eltávolítás',
'settings.search' => 'keresés',
'settings.no_items' => 'Nincs találat',
'settings.label' => 'Címke',
'settings.value' => 'Érték',
'settings.edit' => 'Módosítás',
'settings.view' => 'Megtekintés',
'options.none' => '- nincs beállítva -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'Kezdő oldal',
'options.yes' => 'Igen',
'options.no' => 'Nem',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Mentás',
'buttons.cancel' => 'Mégsem',
'buttons.add' => 'Hozzáadás',
'buttons.upload' => 'Ikon feltöltése',
'buttons.downloadapps' => 'Alkalmazás lista frissítése',
'dash.pin_item' => 'Kitőzés kezdő képernyőre',
'dash.no_apps' => 'Jelenleg nincsenek kitűzött alkalmazások, :link1 or :link2',
'dash.link1' => 'Alkalmazás hozzáadása',
'dash.link2' => 'Elem kitűzése kezdőképernyőre',
'dash.pinned_items' => 'Kitűzött elemek',
'apps.app_list' => 'Alkalmazás lista',
'apps.view_trash' => 'Törölt elemek megtekintése',
'apps.add_application' => 'Alkalmazás hozzáadása',
'apps.application_name' => 'Alkalmazás neve',
'apps.colour' => 'Szín',
'apps.icon' => 'Ikon',
'apps.pinned' => 'Kitűzve',
'apps.title' => 'Cím',
'apps.hex' => 'Hexa színkód',
'apps.username' => 'Felhasználói név',
'apps.password' => 'Jelszó',
'apps.config' => 'Konfiguráció',
'apps.apikey' => 'API Kulcs',
'apps.enable' => 'Engedélyezés',
'apps.tag_list' => 'Címke lista',
'apps.add_tag' => 'Címke hozzáadása',
'apps.tag_name' => 'Címke név',
'apps.tags' => 'Címke',
'apps.override' => 'Eltérő URL alkaplazása.',
'apps.preview' => 'Előnézet',
'apps.apptype' => 'Alkalmazás Típus',
'dashboard' => 'Kezdőképernyő',
'user.user_list' => 'Felhasználük',
'user.add_user' => 'Felhasználó hozzáadása',
'user.username' => 'Felhasználói név',
'user.avatar' => 'Avatar',
'user.email' => 'Email',
'user.password_confirm' => 'Jelszó megerősítés',
'user.secure_front' => 'Nyilvános hozzáférés engedélyezése - Csak jelszó alkalmazása esetén.',
'user.autologin' => 'Bejelentkezés URL-el, Link birtokában bárki bejelentkezhet.',
'url' => 'URL',
'title' => 'Cím',
'delete' => 'Törlés',
'optional' => 'Opcionális',
'restore' => 'Visszaállítás',
'alert.success.item_created' => 'Elem sikeresen létrehozva',
'alert.success.item_updated' => 'Elem sikeresen frissítve',
'alert.success.item_deleted' => 'Elem sikeresen törölve',
'alert.success.item_restored' => 'Elem sikeresen visszaállítva',
'alert.success.updating' => 'Alkalmazás lista frissítése',
'alert.success.tag_created' => 'Címkre sikeresen létrehozva',
'alert.success.tag_updated' => 'Címke sikeresen frissítve',
'alert.success.tag_deleted' => 'Címke sikeresen törölve',
'alert.success.tag_restored' => 'Címke sikeresen visszaállítva',
'alert.success.setting_updated' => 'Sikeres beállítás módosítás.',
'alert.error.not_exist' => 'Nem létező beállítás',
'alert.success.user_created' => 'Felhasználó sikeresen létrehozva',
'alert.success.user_updated' => 'Felhasználó sikeresen frissítve',
'alert.success.user_deleted' => 'Felhasználó sikeresen törölve',
'alert.success.user_restored' => 'Felhasználó sikeresen visszaállítva',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Hitelesítő adat nem egyezik.',
'throttle' => 'Túl sok hibás bejelentkezési kísérlet, Próbálja újra :seconds seconds.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Előző',
'next' => 'Következő &raquo;',
];

View File

@@ -0,0 +1,23 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
/*'password' => 'Passwords must be at least six characters and match the confirmation.',*/
'password' => 'A jelszónak legalább hat karakter hosszúnak kell lennie.',
'reset' => 'A jelszó vissza lett állítva',
'sent' => 'A jelszó visszaállító e-mail elküldve!',
'token' => 'A jelszó visszaállító token nem érvényes',
'user' => "Ezzel az e-mail címmel felhasználó nem található",
];

120
resources/lang/ko/app.php Normal file
View File

@@ -0,0 +1,120 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => '시스템',
'settings.appearance' => '외관',
'settings.miscellaneous' => '잡동사니',
'settings.support' => '지원',
'settings.donate' => '기부',
'settings.version' => '버전',
'settings.background_image' => '배경 이미지',
'settings.window_target' => '다음에서 링크 열기',
'settings.window_target.current' => '현재 탭에서 열기',
'settings.window_target.one' => '같은 탭에서 열기',
'settings.window_target.new' => '새 탭에서 열기',
'settings.homepage_search' => '홈페이지 검색',
'settings.search_provider' => '기본 검색 제공자',
'settings.language' => '언어',
'settings.reset' => '기본값으로 되돌리기',
'settings.remove' => '제거',
'settings.search' => '검색',
'settings.no_items' => '항목을 찾을 수 없음',
'settings.label' => '레이블',
'settings.value' => '값',
'settings.edit' => '편집',
'settings.view' => '보기',
'options.none' => '- 구성되지 않음 -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => '시작 페이지',
'options.yes' => '예',
'options.no' => '아니요',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => '저장',
'buttons.cancel' => '취소',
'buttons.add' => '추가',
'buttons.upload' => '아이콘 업로드',
'buttons.downloadapps' => '앱 목록 업데이트',
'dash.pin_item' => '대시보드에 항목 고정',
'dash.no_apps' => '현재 고정된 응용 프로그램 없음, :link1 혹은 :link2',
'dash.link1' => '여기에 앱 추가',
'dash.link2' => '대시에 항목 고정',
'dash.pinned_items' => '고정된 항목',
'apps.app_list' => '앱 목록',
'apps.view_trash' => '휴지통 보기',
'apps.add_application' => '앱 추가',
'apps.application_name' => '앱 이름',
'apps.colour' => '색상',
'apps.icon' => '아이콘',
'apps.pinned' => '고정됨',
'apps.title' => '제목',
'apps.hex' => '16진수 색상',
'apps.username' => '사용자 이름',
'apps.password' => '암호',
'apps.config' => '설정',
'apps.apikey' => 'API 키',
'apps.enable' => '활성화',
'apps.tag_list' => '태그 목록',
'apps.add_tag' => '태그 추가',
'apps.tag_name' => '태그 이름',
'apps.tags' => '태그',
'apps.override' => '기본 URL과 다른 경우',
'apps.preview' => '미리보기',
'apps.apptype' => '앱 형식',
'dashboard' => '홈 대시보드',
'user.user_list' => '사용자',
'user.add_user' => '사용자 추가',
'user.username' => '사용자 이름',
'user.avatar' => '아바타',
'user.email' => '전자 메일',
'user.password_confirm' => '암호 확인',
'user.secure_front' => 'Allow public access to front - Only enforced if a password is set.',
'user.autologin' => 'Allow logging in from a specific URL. Anyone with the link can login.',
'url' => 'URL',
'title' => '제목',
'delete' => '제거',
'optional' => '선택적',
'restore' => '복원',
'alert.success.item_created' => '항목을 성공적으로 만들었습니다',
'alert.success.item_updated' => '항목을 성공적으로 업데이트했습니다',
'alert.success.item_deleted' => '항목을 성공적으로 제거했습니다',
'alert.success.item_restored' => '항목을 성공적으로 복원했습니다',
'alert.success.updating' => '앱 목록 업데이트 중',
'alert.success.tag_created' => '태그를 성공적으로 만들었습니다',
'alert.success.tag_updated' => '태그를 성공적으로 업데이트했습니다',
'alert.success.tag_deleted' => '태그를 성공적으로 제거했습니다',
'alert.success.tag_restored' => '태그를 성공적으로 복원했습니다',
'alert.success.setting_updated' => '설정을 성공적으로 수정했습니다',
'alert.error.not_exist' => '이 설정은 존재하지 않습니다.',
'alert.success.user_created' => '사용자를 성공적으로 만들었습니다',
'alert.success.user_updated' => '사용자를 성공적으로 업데이트했습니다',
'alert.success.user_deleted' => '사용자를 성공적으로 제거했습니다',
'alert.success.user_restored' => '사용자를 성공적으로 복원했습니다',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'These credentials do not match our records.',
'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; 이전',
'next' => '다음 &raquo;',
];

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => '암호는 6자 이상이어야 하며 확인란과 서로 일치해야 합니다.',
'reset' => '암호가 재설정되었습니다!',
'sent' => '암호 재설정 링크를 전자 메일로 전송했습니다!',
'token' => '이 암호 재설정 토큰은 잘못되었습니다.',
'user' => "해당 이메일 주소를 가진 사용자를 찾을 수 없습니다.",
];

View File

@@ -0,0 +1,121 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => 'The :attribute must be accepted.',
'active_url' => 'The :attribute is not a valid URL.',
'after' => 'The :attribute must be a date after :date.',
'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
'alpha' => 'The :attribute may only contain letters.',
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.',
'alpha_num' => 'The :attribute may only contain letters and numbers.',
'array' => 'The :attribute must be an array.',
'before' => 'The :attribute must be a date before :date.',
'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
'between' => [
'numeric' => 'The :attribute must be between :min and :max.',
'file' => 'The :attribute must be between :min and :max kilobytes.',
'string' => 'The :attribute must be between :min and :max characters.',
'array' => 'The :attribute must have between :min and :max items.',
],
'boolean' => 'The :attribute field must be true or false.',
'confirmed' => 'The :attribute confirmation does not match.',
'date' => 'The :attribute is not a valid date.',
'date_format' => 'The :attribute does not match the format :format.',
'different' => 'The :attribute and :other must be different.',
'digits' => 'The :attribute must be :digits digits.',
'digits_between' => 'The :attribute must be between :min and :max digits.',
'dimensions' => 'The :attribute has invalid image dimensions.',
'distinct' => 'The :attribute field has a duplicate value.',
'email' => 'The :attribute must be a valid email address.',
'exists' => 'The selected :attribute is invalid.',
'file' => 'The :attribute must be a file.',
'filled' => 'The :attribute field must have a value.',
'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.',
'max' => [
'numeric' => 'The :attribute may not be greater than :max.',
'file' => 'The :attribute may not be greater than :max kilobytes.',
'string' => 'The :attribute may not be greater than :max characters.',
'array' => 'The :attribute may not have more than :max items.',
],
'mimes' => 'The :attribute must be a file of type: :values.',
'mimetypes' => 'The :attribute must be a file of type: :values.',
'min' => [
'numeric' => 'The :attribute must be at least :min.',
'file' => 'The :attribute must be at least :min kilobytes.',
'string' => 'The :attribute must be at least :min characters.',
'array' => 'The :attribute must have at least :min items.',
],
'not_in' => 'The selected :attribute is invalid.',
'numeric' => 'The :attribute must be a number.',
'present' => 'The :attribute field must be present.',
'regex' => 'The :attribute format is invalid.',
'required' => 'The :attribute field is required.',
'required_if' => 'The :attribute field is required when :other is :value.',
'required_unless' => 'The :attribute field is required unless :other is in :values.',
'required_with' => 'The :attribute field is required when :values is present.',
'required_with_all' => 'The :attribute field is required when :values is 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.',
'same' => 'The :attribute and :other must match.',
'size' => [
'numeric' => 'The :attribute must be :size.',
'file' => 'The :attribute must be :size kilobytes.',
'string' => 'The :attribute must be :size characters.',
'array' => 'The :attribute must contain :size items.',
],
'string' => 'The :attribute must be a string.',
'timezone' => 'The :attribute must be a valid zone.',
'unique' => 'The :attribute has already been taken.',
'uploaded' => 'The :attribute failed to upload.',
'url' => 'The :attribute format is invalid.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'custom-message',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -22,11 +22,11 @@ return [
'settings.window_target.one' => 'In dezelfde tab openen',
'settings.window_target.new' => 'In een nieuwe tab openen',
'settings.homepage_search' => 'Zoeken op thuispagina',
'settings.search_provider' => 'Zoekaanbieder',
'settings.search_provider' => 'Zoekmachine',
'settings.language' => 'Taal',
'settings.reset' => 'Standaardinstellingen herstellen',
'settings.remove' => 'Verwijderen',
'settings.search' => 'zoeken',
'settings.search' => 'Zoeken',
'settings.no_items' => 'Geen items gevonden',

View File

@@ -13,7 +13,7 @@ return [
|
*/
'failed' => 'De door u opgegeven referenties komen niet overeen met onze gegevens.',
'failed' => 'De door u opgegeven inloggegevens komen niet overeen met onze gegevens.',
'throttle' => 'Te veel aanmeldpogingen. Probeer het over :seconds seconden opnieuw.',
];

View File

@@ -82,8 +82,8 @@ return [
'string' => ':attribute moet :size karakters bevatten.',
'array' => ':attribute moet :size items bevatten.',
],
'string' => ':attribute moet een tekenreekswaarde zijn.',
'timezone' => ':attribute moet een geldige zone bevatten.',
'string' => ':attribute moet een tekstformaat zijn.',
'timezone' => ':attribute moet een geldige tijdzone bevatten.',
'unique' => ':attribute is reeds in gebruik.',
'uploaded' => 'Het uploaden van :attribute is niet gelukt.',
'url' => 'Het formaat van :attribute is ongeldig.',

120
resources/lang/ru/app.php Normal file
View File

@@ -0,0 +1,120 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| App Language Lines
|--------------------------------------------------------------------------
|
*/
'settings.system' => 'Система',
'settings.appearance' => 'Внешний вид',
'settings.miscellaneous' => 'Разное',
'settings.support' => 'Поддержка',
'settings.donate' => 'Пожертвования',
'settings.version' => 'Версия',
'settings.background_image' => 'Фоновое изображение',
'settings.window_target' => 'Открывать ссылки в',
'settings.window_target.current' => 'Открывать в этой же закладке',
'settings.window_target.one' => 'Открывать в той же закладке',
'settings.window_target.new' => 'Открывать в новой закладке',
'settings.homepage_search' => 'Страница поиска',
'settings.search_provider' => 'Поисковая система',
'settings.language' => 'Язык',
'settings.reset' => 'Вернуть к начальным значениям',
'settings.remove' => 'Удалить',
'settings.search' => 'найти',
'settings.no_items' => 'Ничего не найдено',
'settings.label' => 'Метка',
'settings.value' => 'Значение',
'settings.edit' => 'Редактировать',
'settings.view' => 'Просмотр',
'options.none' => '- не установлено -',
'options.google' => 'Google',
'options.ddg' => 'DuckDuckGo',
'options.bing' => 'Bing',
'options.qwant' => 'Qwant',
'options.startpage' => 'Начальная страница',
'options.yes' => 'Да',
'options.no' => 'Нет',
'options.nzbhydra' => 'NZBHydra',
'options.jackett' => 'Jackett',
'buttons.save' => 'Сохранить',
'buttons.cancel' => 'Отменить',
'buttons.add' => 'Добавить',
'buttons.upload' => 'Загрузить картинку',
'buttons.downloadapps' => 'Обновить список приложений',
'dash.pin_item' => 'Прикрепить к панели',
'dash.no_apps' => 'Нет прикрепленных приложений, :link1 или :link2',
'dash.link1' => 'Добавьте приложение',
'dash.link2' => 'Прикрепите на доску',
'dash.pinned_items' => 'Прикрепленные элементы',
'apps.app_list' => 'Список приложений',
'apps.view_trash' => 'Показать корзину',
'apps.add_application' => 'Добавить приложение',
'apps.application_name' => 'Имя приложения',
'apps.colour' => 'Цвет',
'apps.icon' => 'Изображение',
'apps.pinned' => 'Прикреплено',
'apps.title' => 'Заголовок',
'apps.hex' => 'Цвет в Hex',
'apps.username' => 'Имя пользователя',
'apps.password' => 'Пароль',
'apps.config' => 'Настройки',
'apps.apikey' => 'Ключ API',
'apps.enable' => 'Включено',
'apps.tag_list' => 'Список тегов',
'apps.add_tag' => 'Добавить тэг',
'apps.tag_name' => 'Название тэга',
'apps.tags' => 'Тэги',
'apps.override' => 'Если отличается от основного url',
'apps.preview' => 'Предпросмотр',
'apps.apptype' => 'Тип приложения',
'dashboard' => 'Основная панель',
'user.user_list' => 'Пользователи',
'user.add_user' => 'Добавить пользователя',
'user.username' => 'Имя пользователя',
'user.avatar' => 'Аватар',
'user.email' => 'Email',
'user.password_confirm' => 'Подтверждение пароля',
'user.secure_front' => 'Разрешить публичный доступ - Возможно только если установлен пароль.',
'user.autologin' => 'Автоматический вход с определенного URL. Кто угодно может войти с данной ссылкой.',
'url' => 'URL',
'title' => 'Заголовок',
'delete' => 'Удалить',
'optional' => 'Опционально',
'restore' => 'Восстановить',
'alert.success.item_created' => 'Элемент создан успешно',
'alert.success.item_updated' => 'Элемент обновлен успешно',
'alert.success.item_deleted' => 'Элемент удален успешно',
'alert.success.item_restored' => 'Элемент восстановлен успешно',
'alert.success.updating' => 'Обновлен список приложений',
'alert.success.tag_created' => 'Тэг создан успешно',
'alert.success.tag_updated' => 'Тэг обновлен успешно',
'alert.success.tag_deleted' => 'Тэг удален успешно',
'alert.success.tag_restored' => 'Тэг восстановлен успешно',
'alert.success.setting_updated' => 'Вы успешно отредактировали настройки',
'alert.error.not_exist' => 'Ваших настроек не существует.',
'alert.success.user_created' => 'Пользователь создан успешно',
'alert.success.user_updated' => 'Пользователь обновлен успешно',
'alert.success.user_deleted' => 'Пользователь удален успешно',
'alert.success.user_restored' => 'Пользователь восстановлен успешно',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used during authentication for various
| messages that we need to display to the user. You are free to modify
| these language lines according to your application's requirements.
|
*/
'failed' => 'Введенные реквизиты не совпадают c существующими.',
'throttle' => 'Слишком много попыток авторизации. Попробуйте снова через :seconds секунд.',
];

View File

@@ -0,0 +1,19 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the simple pagination links. You are free to change them to anything
| you want to customize your views to better match your application.
|
*/
'previous' => '&laquo; Предыдущий',
'next' => 'Следующий &raquo;',
];

View File

@@ -0,0 +1,22 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Password Reset Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are the default lines which match reasons
| that are given by the password broker for a password update attempt
| has failed, such as for an invalid token or invalid new password.
|
*/
'password' => 'Длина пароля минимум 6 символов и он должен совпадать с подтверждением.',
'reset' => 'Ваш пароль сброшен!',
'sent' => 'Мы отправили вам ссылку для сброса пароля!',
'token' => 'Неверный токен для сброса пароля.',
'user' => "Не могу найти пользователя с таким адресом e-mail.",
];

View File

@@ -0,0 +1,121 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used by
| the validator class. Some of these rules have multiple versions such
| as the size rules. Feel free to tweak each of these messages here.
|
*/
'accepted' => ':attribute должен быть подтвержден.',
'active_url' => ':attribute содержит неверный URL.',
'after' => ':attribute должна быть дата больше :date.',
'after_or_equal' => ':attribute должна быть дата больше или равная :date.',
'alpha' => ':attribute может содержать только буквы.',
'alpha_dash' => ':attribute может содержать только буквы, цифры и тире.',
'alpha_num' => ':attribute может содержать только буквы и цифры.',
'array' => ':attribute должен быть массивом.',
'before' => ':attribute должна быть дата меньше :date.',
'before_or_equal' => ':attribute должна быть дата меньше или равная :date.',
'between' => [
'numeric' => ':attribute должен быть в интервале :min и :max.',
'file' => ':attribute должен быть в интервале :min и :max килобайт.',
'string' => ':attribute должен быть в интервале :min и :max символов.',
'array' => ':attribute должен иметь :min и :max элементов.',
],
'boolean' => ':attribute поле должно быть Истина или Ложь.',
'confirmed' => ':attribute подтверждение не соответствует.',
'date' => ':attribute неверная дата.',
'date_format' => ':attribute не совпадает с форматом :format.',
'different' => ':attribute и :other должны отличаться.',
'digits' => ':attribute должен иметь :digits разрядов.',
'digits_between' => ':attribute должен иметь :min и :max разрядов.',
'dimensions' => ':attribute имеет неверное разрешение.',
'distinct' => ':attribute поле имеет дублирующееся значение.',
'email' => ':attribute должен быть правильным адресом email.',
'exists' => 'Выбранный :attribute неверный.',
'file' => ':attribute должен быть файлом.',
'filled' => ':attribute поле должно быть заполнено.',
'image' => ':attribute должно быть изображением.',
'in' => 'Выбранное :attribute неверно.',
'in_array' => ':attribute поле не должно существовать в :other.',
'integer' => ':attribute должно быть целым.',
'ip' => ':attribute должно содержать правильный адрес IP.',
'ipv4' => ':attribute должно содержать правильный адрес IPv4.',
'ipv6' => ':attribute должно содержать правильный адрес IPv6.',
'json' => ':attribute должно содержать правильную строку JSON.',
'max' => [
'numeric' => ':attribute не может быть больше :max.',
'file' => ':attribute не может быть больше :max килобайт.',
'string' => ':attribute не может быть больше :max символов.',
'array' => ':attribute не может быть больше :max элементов.',
],
'mimes' => ':attribute должен быть файлом вида: :values.',
'mimetypes' => ':attribute должен быть файлом вида: :values.',
'min' => [
'numeric' => 'The :attribute должен быть как минимум :min.',
'file' => 'The :attribute должен быть :min килобайт.',
'string' => 'The :attribute должен быть :min символов.',
'array' => 'The :attribute должен иметь минимум :min элементов.',
],
'not_in' => 'Выбранный :attribute неверен.',
'numeric' => ':attribute должен быть числом.',
'present' => ':attribute поле должно существовать.',
'regex' => ':attribute формат неверен.',
'required' => ':attribute поле обязательно.',
'required_if' => ':attribute поле требуется в случае когда :other является :value.',
'required_unless' => ':attribute поле требуется в случае кроме :other является :values.',
'required_with' => ':attribute поле требуется в случае :values существует.',
'required_with_all' => ':attribute поле требуется в случае :values существует.',
'required_without' => ':attribute поле требуется в случае :values не существует.',
'required_without_all' => ':attribute поле требуется в случае когда ни одно из :values не существует.',
'same' => ':attribute и :other должны совпадать.',
'size' => [
'numeric' => ':attribute должен быть :size.',
'file' => ':attribute должен быть килобайт.',
'string' => ':attribute должен быть символов.',
'array' => ':attribute олжен содержать :size элементов.',
],
'string' => ':attribute должен быть строе=кой.',
'timezone' => ':attribute должна быть правильной зоной.',
'unique' => ':attribute уже существует.',
'uploaded' => ':attribute ошибка загрузки.',
'url' => ':attribute неверный формат.',
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/
'custom' => [
'attribute-name' => [
'rule-name' => 'Произвольное сообщение',
],
],
/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/
'attributes' => [],
];

View File

@@ -73,13 +73,13 @@ return array (
'apps.preview' => 'Förhandsvisa',
'user.user_list' => 'Avnändare',
'user.user_list' => 'Användare',
'user.add_user' => 'Lägg till användare',
'user.username' => 'Användarnamn',
'user.avatar' => 'Avatar',
'user.email' => 'Epost',
'user.password_confirm' => 'Upprepa lösenord',
'user.secure_front' => 'Tillåt allmän åtkonst till framsidan - Upprätthålls endast om ett lösenord är satt.',
'user.secure_front' => 'Tillåt allmän åtkomst till framsidan - Upprätthålls endast om ett lösenord är satt.',
'user.autologin' => 'Tillåt inloggning från en specifik URL. Vem som helst med länken kan logga in.',
@@ -90,9 +90,9 @@ return array (
'restore' => 'Återställ',
'alert.success.item_created' => 'Artickeln skapad',
'alert.success.item_updated' => 'Artickeln uppdaterad',
'alert.success.item_deleted' => 'Artickeln borttagen',
'alert.success.item_created' => 'Artikeln skapad',
'alert.success.item_updated' => 'Artikeln uppdaterad',
'alert.success.item_deleted' => 'Artikeln borttagen',
'alert.success.item_restored' => 'Artikeln återställd',
'alert.success.updating' => 'Uppdaterar app lista',

View File

@@ -1,42 +0,0 @@
<!doctype html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ config('app.name') }}</title>
<link rel="apple-touch-icon" sizes="57x57" href="{{ asset('apple-icon-57x57.png') }}">
<link rel="apple-touch-icon" sizes="60x60" href="{{ asset('apple-icon-60x60.png') }}">
<link rel="apple-touch-icon" sizes="72x72" href="{{ asset('apple-icon-72x72.png') }}">
<link rel="apple-touch-icon" sizes="76x76" href="{{ asset('apple-icon-76x76.png') }}">
<link rel="apple-touch-icon" sizes="114x114" href="{{ asset('apple-icon-114x114.png') }}">
<link rel="apple-touch-icon" sizes="120x120" href="{{ asset('apple-icon-120x120.png') }}">
<link rel="apple-touch-icon" sizes="144x144" href="{{ asset('apple-icon-144x144.png') }}">
<link rel="apple-touch-icon" sizes="152x152" href="{{ asset('apple-icon-152x152.png') }}">
<link rel="apple-touch-icon" sizes="180x180" href="{{ asset('apple-icon-180x180.png') }}">
<link rel="icon" type="image/png" sizes="192x192" href="{{ asset('android-icon-192x192.png') }}">
<link rel="icon" type="image/png" sizes="32x32" href="{{ asset('favicon-32x32.png') }}">
<link rel="icon" type="image/png" sizes="96x96" href="{{ asset('favicon-96x96.png') }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('favicon-16x16.png') }}">
<link rel="mask-icon" href="{{ asset('img/heimdall-logo-small.svg') }}" color="black">
<link rel="manifest" href="{{ asset('manifest.json') }}">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="{{ asset('ms-icon-144x144.png') }}">
<meta name="theme-color" content="#ffffff">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<script src="{{ asset('js/fontawesome.js') }}"></script>
<link href="{{ asset('/css/app.css') }}" rel="stylesheet" />
<script src="{{ asset('/js/app.js') }}" defer></script>
@if(config('app.url') !== 'http://localhost')
<base href="{{ config('app.url') }}">
@else
<base href="{{ url('') }}">
@endif
@inertiaHead
</head>
<body>
@inertia
</body>
</html>

View File

@@ -1,18 +1,30 @@
<section class="item-container{{ $app->droppable }}" data-id="{{ $app->id }}">
<section class="item-container{{ $app->droppable }}" data-name="{{ $app->title }}" data-id="{{ $app->id }}">
<div class="item" style="background-color: {{ $app->colour }}">
@if($app->icon)
<img class="app-icon" src="{{ asset('/storage/'.str_replace('supportedapps', 'icons', $app->icon)) }}" />
@else
<img class="app-icon" src="{{ asset('/img/heimdall-icon-small.png') }}" />
@endif
<div class="app-icon-container">
@if($app->icon)
<img class="app-icon" src="{{ asset('/storage/'.str_replace('supportedapps', 'icons', $app->icon)) }}" />
@else
<img class="app-icon" src="{{ asset('/img/heimdall-icon-small.png') }}" />
@endif
</div>
<div class="details">
<div class="title{{ title_color($app->colour) }}">{{ $app->title }}</div>
@if($app->enabled())
<div data-id="{{ $app->id }}" data-dataonly="{{ $app->getconfig()->dataonly ?? '0' }}" class="livestats-container{{ title_color($app->colour) }}"></div>
@endif
</div>
<a title="{{ App\Item::getApplicationDescription($app->class) }}" class="link{{ title_color($app->colour) }}"{!! $app->link_target !!} href="{{ $app->link }}"><i class="fas {{ $app->link_icon }}"></i></a>
<a rel="noopener noreferrer" class="link{{ title_color($app->colour) }}"{!! $app->link_target !!} href="{{ $app->link }}"><i class="fas {{ $app->link_icon }}"></i></a>
<?php /*
@if($app->enhanced() === true && (bool)$app->getConfig()->enabled === true)
<div class="tile-actions refresh">
<div class="icon">
<i class="fas fa-arrow-rotate-right"></i>
</div>
Refresh Stats
</div>
@endif
*/ ?>
</div>
<a class="item-edit" href="{{ route($app->link_type.'.edit', [ $app->id ]) }}"><i class="fas fa-pencil"></i></a>
@if((string)$app->appdescription !== '')<div class="tooltip">{{ $app->appdescription }}</div>@endif
</section>

View File

@@ -1,6 +1,6 @@
<section class="module-container">
<header>
<div class="section-title">{{ __('app.apps.add_application') }}</div>
<div class="section-title">{{ __('app.apps.preview') }}</div>
<div class="module-actions">
<div class="toggleinput">
<label class="name">{{ __('app.apps.pinned') }}</label>
@@ -19,25 +19,56 @@
<a href="{{ route('items.index', []) }}" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>
</div>
</header>
<div id="create" class="create">
<div id="tile-preview" class="create">
<div class="">
@include('items.preview')
</div>
<div class="appoptions">
<div class="optdetails">
<div><button class="dark">{{ __('app.apps.apptype') }}</button></div>
<div class="optvalue">
<div class="input">
{!! Form::select('appid', App\Application::applist(), null, array('class' => 'form-control config-item', 'id' => 'apptype', 'data-config' => 'type')) !!}
</div>
</div>
</div>
<div id="searchwebsite" class="optdetails">
<div><button class="dark">{{ __('app.apps.website') }}</button></div>
<div class="optvalue">
<div class="input">
{!! Form::text('website', $item->url ?? null, array('placeholder' => __('app.apps.website'), 'id' => 'website', 'class' => 'form-control')) !!}
<small class="help">Don't forget http(s)://</small>
</div>
<div><button class="btn">Go</button></div>
</div>
</div>
</div>
<div id="websiteiconoptions"></div>
</div>
<header style="border-top: 1px solid #dbdce3;">
<div class="section-title">{{ __('app.apps.add_application') }}</div>
</header>
<div id="create" class="create">
{!! csrf_field() !!}
<div class="input">
<label>{{ __('app.apps.application_name') }} *</label>
{!! Form::text('title', null, array('placeholder' => __('app.apps.title'), 'id' => 'appname', 'class' => 'form-control')) !!}
</div>
<div class="input">
<label>{{ __('app.apps.apptype') }} *</label>
{!! Form::select('class', App\Application::applist(), null, array('class' => 'form-control config-item', 'id' => 'apptype', 'data-config' => 'type')) !!}
</div>
<div class="input">
<label>{{ __('app.apps.colour') }} *</label>
{!! Form::text('colour', null, array('placeholder' => __('app.apps.hex'), 'id' => 'appcolour', 'class' => 'form-control color-picker set-bg-elem')) !!}
{!! Form::text('colour', $item->colour ?? '#161b1f', array('placeholder' => __('app.apps.hex'), 'id' => 'appcolour', 'class' => 'form-control color-picker set-bg-elem')) !!}
</div>
<div class="input">
<label>{{ strtoupper(__('app.url')) }}</label>
{!! Form::text('url', null, array('placeholder' => __('app.url'), 'id' => 'appurl', 'class' => 'form-control')) !!}
{!! Form::text('url', $item->url ?? null, array('placeholder' => __('app.url'), 'id' => 'appurl', 'class' => 'form-control')) !!}
<small class="help">Don't forget http(s)://</small>
</div>
<div class="input">
@@ -65,16 +96,14 @@
</div>
</div>
</div>
</div>
<div class="newblock" style="display: block;">
<h2>Preview</h2>
</div>
<div id="tile-preview" class="input">
@include('items.preview')
<header style="border-top: 1px solid #dbdce3; width: 100%;">
<div class="section-title">{{ __('app.apps.description') }}</div>
</header>
<div class="create">
<div class="textarea">
<textarea name="appdescription" id="appdescription">{{ $item->appdescription ?? '' }}</textarea>
</div>
@@ -84,7 +113,7 @@
<div id="sapconfig" style="display: block;">
@if(isset($item))
@include('SupportedApps::'.$item->getconfig()->name.'.config')
@include('SupportedApps::'.App\Item::nameFromClass($item->class).'.config')
@endif
</div>

View File

@@ -19,13 +19,15 @@
});
})
var availableTags = @json(App\Application::all()->pluck('name'));
var availableTags = @json(App\Application::autocomplete());
console.log(availableTags)
$( "#appname" ).autocomplete({
source: availableTags,
select: function( event, ui ) {
var appvalue = ui.item.value;
appload(appvalue);
event.preventDefault();
// appload(ui.item.value);
$( "#appname" ).val(ui.item.label)
$('#apptype').val(ui.item.value).change()
}
});
// initial load
@@ -38,30 +40,147 @@
$('#tile-preview .title').html($(this).val());
})
$('#apptype').on('change', function(e) {
appload($(this).find('option:selected').text());
appload($(this).find('option:selected').val());
});
$('#appcolour').on('change', function(e) {
$('#tile-preview .item').css('backgroundColor', $(this).val());
})
$('#websiteiconoptions').on('click', '.iconbutton', function (e) {
const src = $('.selecticon', this).attr('src')
$('#appimage').html("<img src='"+src+"' /><input type='hidden' name='icon' value='"+src+"' />");
$('#tile-preview .app-icon').attr('src', src);
}).on('click', '.selectclose', function () {
$('#websiteiconoptions').html('')
})
$('.tags').select2();
if($('#appurl').val() !== '') {
if ($('#appurl').val().indexOf("://") !== -1) {
$('#appurl').parent().find('.help').hide()
}
}
if($('#website').val() !== '') {
if ($('#website').val().indexOf("://") !== -1) {
$('#website').parent().find('.help').hide()
}
}
$('#appurl, #website').on('input', function () {
if ($(this).val().indexOf("://") !== -1) {
$(this).parent().find('.help').hide()
}
})
$('#searchwebsite').on('click', 'button.btn', function (e) {
e.preventDefault()
let websiteurl = $('#searchwebsite input').val()
website = btoa(websiteurl)
$.get(base + 'items/websitelookup/' + website, function (data) {
const url = new URL(websiteurl)
const websitedata = {}
const parser = new DOMParser()
const document = parser.parseFromString(data, 'text/html')
const links = document.getElementsByTagName('link')
websitedata.title = document.getElementsByTagName('title')[0].innerText
const metas = document.getElementsByTagName('meta')
const icons = []
for (let i = 0; i < metas.length; i++) {
if (metas[i].getAttribute('name') === 'description') {
websitedata.description = metas[i].getAttribute('content')
}
}
for (let i = 0; i < links.length; i++) {
const link = links[i]
const rel = link.getAttribute('rel')
if (rel) {
if (rel.toLowerCase().indexOf('icon') > -1) {
const href = link.getAttribute('href')
// Make sure href is not null / undefined
if (href) {
if (href.toLowerCase().indexOf('https:') === -1 && href.toLowerCase().indexOf('http:') === -1 && href.indexOf('//') !== 0) {
let finalBase = ''
if (websiteurl.endsWith('/')) {
const baseurl = websiteurl.split('/')
baseurl.pop()
finalBase = baseurl.join('/')
} else {
finalBase = websiteurl
}
let absoluteHref = finalBase
if (href.indexOf('/') === 0) {
absoluteHref += href
} else {
const path = url.pathname.split('/')
path.pop()
const finalPath = path.join('/')
absoluteHref += finalPath + '/' + href
}
icons.push(encodeURI(absoluteHref))
} else if (href.indexOf('//') === 0) {
// Absolute url with no protocol
const absoluteUrl = url.protocol + href
icons.push(encodeURI(absoluteUrl))
} else {
// Absolute
icons.push(encodeURI(href))
}
}
}
}
}
websitedata.icons = icons
if ($('#appname').val() === '') $('#appname').val(websitedata.title)
if ($('#appurl').val() === '') $('#appurl').val(websiteurl)
$('input[name=pinned]').prop('checked', true);
// $('#appimage').html("<img src='"+websitedata.icons[0]+"' /><input type='hidden' name='icon' value='"+websitedata.icons[0]+"' />");
$('#tile-preview .app-icon').attr('src', $('#appimage img').attr('src'));
$('#tile-preview .title').text($('#appname').val());
$('#websiteiconoptions').html('<div class="header"><span>Select Icon</span><span class="selectclose">Close</span></div><div class="results"></div>')
icons.forEach(icon => {
$('#websiteiconoptions .results').append('<div class="iconbutton"><img class="selecticon" src="' + icon + '" /></div>')
})
console.log(websitedata)
})
console.log(website)
})
$('.optdetails button.dark').on('click', function (e) {
e.preventDefault()
$(this).parent().next().toggleClass('active')
})
function appload(appvalue) {
if(appvalue == 'None') {
if(appvalue == 'null') {
$('#sapconfig').html('').hide();
$('#tile-preview .app-icon').attr('src', '/img/heimdall-icon-small.png');
$('#appimage').html("<img src='/img/heimdall-icon-small.png' />");
$('#sapconfig').html('').hide();
} else {
$.post('{{ route('appload') }}', { app: appvalue }, function(data) {
// Main details
$('#appimage').html("<img src='"+data.iconview+"' /><input type='hidden' name='icon' value='"+data.icon+"' />");
$('#appimage').html("<img src='"+data.iconview+"' /><input type='hidden' name='icon' value='"+data.iconview+"' />");
$('input[name=colour]').val(data.colour);
$('select[name=class]').val(data.class);
$('select[name=appid]').val(data.appid);
hueb.setColor( data.colour );
$('input[name=pinned]').prop('checked', true);
// Preview details
$('#tile-preview .app-icon').attr('src', data.iconview);
$('#tile-preview .title').html(data.name);
if(data.config != null) {
$.get(base+'/view/'+data.config, function(getdata) {
$('#appdescription').val(data.description);
if($('#appname').val() === '') {
$('#appname').val(data.name)
}
$('#tile-preview .title').html($('#appname').val());
if(data.custom != null) {
$.get(base+'view/'+data.custom, function(getdata) {
$('#sapconfig').html(getdata).show();
});
} else {

View File

@@ -4,7 +4,7 @@
<section class="module-container">
<header>
<div class="section-title">
Showing Deleted Applications
{{ __('app.apps.show_deleted') }}
</div>
<div class="module-actions">
<a href="{{ route('items.index', []) }}" title="" class="button"><i class="fa fa-ban"></i><span>{{ __('app.buttons.cancel') }}</span></a>

View File

@@ -20,19 +20,23 @@
<link rel="icon" type="image/png" sizes="96x96" href="{{ asset('favicon-96x96.png') }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ asset('favicon-16x16.png') }}">
<link rel="mask-icon" href="{{ asset('img/heimdall-logo-small.svg') }}" color="black">
<link rel="manifest" href="{{ asset('manifest.json') }}">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="{{ asset('ms-icon-144x144.png') }}">
<meta name="theme-color" content="#ffffff">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<link rel="stylesheet" href="{{ asset('css/app.css?v=2') }}" type="text/css" />
<link rel="stylesheet" href="{{ asset('css/all.min.css?v=2') }}" type="text/css" />
<script src="{{ asset('js/fontawesome.js') }}"></script>
@if(config('app.url') !== 'http://localhost')
<base href="{{ config('app.url') }}">
@else
<base href="{{ url('') }}">
@endif
<style id="custom_css">
/* editable using the 'Settings > Advanced > Custom CSS' option */
{!! \App\Setting::fetch('custom_css') !!}
</style>
</head>
<body>
<div id="app"{!! $alt_bg !!}>
@@ -44,6 +48,7 @@
@foreach($all_apps as $app)
<?php
$active = ((bool)$app->pinned === true) ? 'active' : '';
if($app->title == 'app.dashboard') continue;
?>
<li>{{ $app->title }}<a class="{{ $active }}" data-tag="{{ $tag ?? 0 }}" data-id="{{ $app->id }}" href="{{ route('items.pintoggle', [$app->id]) }}"><i class="fas fa-thumbtack"></i></a></li>
@@ -108,10 +113,14 @@
</div>
</div>
<script src="{{ asset('js/jquery-3.3.1.min.js') }}"></script>
<script src="{{ asset('js/jquery-3.6.0.min.js') }}"></script>
<script src="{{ asset('js/jquery-ui.min.js') }}"></script>
<script src="{{ asset('js/app.js?v=4') }}"></script>
<script src="{{ asset('js/app.js?v=5') }}"></script>
@yield('scripts')
<script id="custom_js">
/* editable using the 'Settings > Advanced > Custom JavaScript' option */
{!! \App\Setting::fetch('custom_js') !!}
</script>
</body>
</html>

View File

@@ -25,7 +25,11 @@
<tr>
<td>{{ __($setting->label) }}</td>
<td>
@if($setting->type === "textarea")
<pre>{{ $setting->list_value }}</pre>
@else
{!! $setting->list_value !!}
@endif
</td>
<td class="text-center">
@if((bool)$setting->system !== true)
@@ -49,4 +53,4 @@
</section>
@endforeach
@endsection
@endsection

View File

@@ -30,7 +30,7 @@
@foreach($apps as $app)
<tr>
<td>{{ $app->title }}</td>
<td><a{{ $app->target }} href="/tag/{{ $app->url }}">{{ $app->link }}</a></td>
<td><a{{ $app->target }} href="{{ url('tag/'.$app->link) }}">{{ $app->link }}</a></td>
<td class="text-center"><a href="{!! route('tags.edit', [$app->id]) !!}" title="{{ __('app.settings.edit') }} {!! $app->title !!}"><i class="fas fa-edit"></i></a></td>
<td class="text-center">
{!! Form::open(['method' => 'DELETE','route' => ['tags.destroy', $app->id],'style'=>'display:inline']) !!}
@@ -53,4 +53,4 @@
</section>
@endsection
@endsection

View File

@@ -23,6 +23,9 @@ Route::get('/autologin/{uuid}', 'Auth\LoginController@autologin')->name('user.au
Route::get('/', 'ItemController@dash')->name('dash');
Route::get('check_app_list', 'ItemController@checkAppList')->name('applist');
Route::get('single/{appid}', function($appid) {
return json_encode(\App\Application::single($appid));
})->name('single');
Route::resources([
'items' => 'ItemController',
@@ -35,7 +38,7 @@ Route::get('tag/{slug}', 'TagController@show')->name('tags.show');
Route::get('tag/add/{tag}/{item}', 'TagController@add')->name('tags.add');
Route::get('tag/restore/{id}', 'TagController@restore')->name('tags.restore');
Route::get('items/websitelookup/{url}', 'ItemController@websitelookup')->name('items.lookup');
Route::get('items/pin/{id}', 'ItemController@pin')->name('items.pin');
Route::get('items/restore/{id}', 'ItemController@restore')->name('items.restore');
Route::get('items/unpin/{id}', 'ItemController@unpin')->name('items.unpin');
@@ -44,7 +47,7 @@ Route::post('order', 'ItemController@setOrder')->name('items.order');
Route::post('appload', 'ItemController@appload')->name('appload');
Route::post('test_config', 'ItemController@testConfig')->name('test_config');
Route::get('/get_stats/{id}', 'ItemController@getStats')->name('get_stats');
Route::get('get_stats/{id}', 'ItemController@getStats')->name('get_stats');
Route::get('/search', 'SearchController@index')->name('search');

View File

@@ -0,0 +1,37 @@
tiles:
id: tiles
name: Tiles
target: _blank
google:
id: google
url: https://www.google.com/search
name: Google
method: get
target: _blank
query: q
bing:
id: bing
url: https://www.bing.com/search
name: Bing
method: get
target: _blank
query: q
ddg:
id: ddg
url: https://duckduckgo.com/
name: DuckDuckGo
method: get
target: _blank
query: q
startpage:
id: startpage
url: https://www.startpage.com/do/dsearch
name: Startpage
method: get
target: _blank
query: query

File diff suppressed because one or more lines are too long

117
vendor/bin/php-parse vendored
View File

@@ -1,117 +0,0 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../nikic/php-parser/bin/php-parse)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = $this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
include("phpvfscomposer://" . __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse');
exit(0);
}
}
include __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse';

117
vendor/bin/php-parse vendored Executable file
View File

@@ -0,0 +1,117 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../nikic/php-parser/bin/php-parse)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = $this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
include("phpvfscomposer://" . __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse');
exit(0);
}
}
include __DIR__ . '/..'.'/nikic/php-parser/bin/php-parse';

1
vendor/bin/phpunit vendored
View File

@@ -1 +0,0 @@
../phpunit/phpunit/phpunit

120
vendor/bin/phpunit vendored Executable file
View File

@@ -0,0 +1,120 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../phpunit/phpunit/phpunit)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
$GLOBALS['__PHPUNIT_ISOLATION_EXCLUDE_LIST'] = $GLOBALS['__PHPUNIT_ISOLATION_BLACKLIST'] = array(realpath(__DIR__ . '/..'.'/phpunit/phpunit/phpunit'));
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = 'phpvfscomposer://'.$this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$data = str_replace('__DIR__', var_export(dirname($this->realpath), true), $data);
$data = str_replace('__FILE__', var_export($this->realpath, true), $data);
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
include("phpvfscomposer://" . __DIR__ . '/..'.'/phpunit/phpunit/phpunit');
exit(0);
}
}
include __DIR__ . '/..'.'/phpunit/phpunit/phpunit';

117
vendor/bin/psysh vendored
View File

@@ -1,117 +0,0 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../psy/psysh/bin/psysh)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = $this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
include("phpvfscomposer://" . __DIR__ . '/..'.'/psy/psysh/bin/psysh');
exit(0);
}
}
include __DIR__ . '/..'.'/psy/psysh/bin/psysh';

117
vendor/bin/psysh vendored Executable file
View File

@@ -0,0 +1,117 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../psy/psysh/bin/psysh)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = $this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
include("phpvfscomposer://" . __DIR__ . '/..'.'/psy/psysh/bin/psysh');
exit(0);
}
}
include __DIR__ . '/..'.'/psy/psysh/bin/psysh';

View File

@@ -1,117 +0,0 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = $this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server');
exit(0);
}
}
include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server';

117
vendor/bin/var-dump-server vendored Executable file
View File

@@ -0,0 +1,117 @@
#!/usr/bin/env php
<?php
/**
* Proxy PHP file generated by Composer
*
* This file includes the referenced bin path (../symfony/var-dumper/Resources/bin/var-dump-server)
* using a stream wrapper to prevent the shebang from being output on PHP<8
*
* @generated
*/
namespace Composer;
$GLOBALS['_composer_bin_dir'] = __DIR__;
$GLOBALS['_composer_autoload_path'] = __DIR__ . '/..'.'/autoload.php';
if (PHP_VERSION_ID < 80000) {
if (!class_exists('Composer\BinProxyWrapper')) {
/**
* @internal
*/
final class BinProxyWrapper
{
private $handle;
private $position;
private $realpath;
public function stream_open($path, $mode, $options, &$opened_path)
{
// get rid of phpvfscomposer:// prefix for __FILE__ & __DIR__ resolution
$opened_path = substr($path, 17);
$this->realpath = realpath($opened_path) ?: $opened_path;
$opened_path = $this->realpath;
$this->handle = fopen($this->realpath, $mode);
$this->position = 0;
return (bool) $this->handle;
}
public function stream_read($count)
{
$data = fread($this->handle, $count);
if ($this->position === 0) {
$data = preg_replace('{^#!.*\r?\n}', '', $data);
}
$this->position += strlen($data);
return $data;
}
public function stream_cast($castAs)
{
return $this->handle;
}
public function stream_close()
{
fclose($this->handle);
}
public function stream_lock($operation)
{
return $operation ? flock($this->handle, $operation) : true;
}
public function stream_seek($offset, $whence)
{
if (0 === fseek($this->handle, $offset, $whence)) {
$this->position = ftell($this->handle);
return true;
}
return false;
}
public function stream_tell()
{
return $this->position;
}
public function stream_eof()
{
return feof($this->handle);
}
public function stream_stat()
{
return array();
}
public function stream_set_option($option, $arg1, $arg2)
{
return true;
}
public function url_stat($path, $flags)
{
$path = substr($path, 17);
if (file_exists($path)) {
return stat($path);
}
return false;
}
}
}
if (function_exists('stream_wrapper_register') && stream_wrapper_register('phpvfscomposer', 'Composer\BinProxyWrapper')) {
include("phpvfscomposer://" . __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server');
exit(0);
}
}
include __DIR__ . '/..'.'/symfony/var-dumper/Resources/bin/var-dump-server';

1
vendor/bin/yaml-lint vendored Symbolic link
View File

@@ -0,0 +1 @@
../symfony/yaml/Resources/bin/yaml-lint

View File

@@ -149,7 +149,7 @@ class ClassLoader
/**
* @return string[] Array of classname => path
* @psalm-return array<string, string>
* @psalm-var array<string, string>
*/
public function getClassMap()
{

View File

@@ -65,6 +65,7 @@ return array(
'App\\SupportedApps\\Booksonic\\Booksonic' => $baseDir . '/app/SupportedApps/Booksonic/Booksonic.php',
'App\\SupportedApps\\Bookstack\\Bookstack' => $baseDir . '/app/SupportedApps/Bookstack/Bookstack.php',
'App\\SupportedApps\\Box\\Box' => $baseDir . '/app/SupportedApps/Box/Box.php',
'App\\SupportedApps\\CUPS\\CUPS' => $baseDir . '/app/SupportedApps/CUPS/CUPS.php',
'App\\SupportedApps\\Cabot\\Cabot' => $baseDir . '/app/SupportedApps/Cabot/Cabot.php',
'App\\SupportedApps\\CalibreWeb\\CalibreWeb' => $baseDir . '/app/SupportedApps/CalibreWeb/CalibreWeb.php',
'App\\SupportedApps\\Cardigann\\Cardigann' => $baseDir . '/app/SupportedApps/Cardigann/Cardigann.php',
@@ -184,9 +185,12 @@ return array(
'App\\SupportedApps\\Monica\\Monica' => $baseDir . '/app/SupportedApps/Monica/Monica.php',
'App\\SupportedApps\\Monit\\Monit' => $baseDir . '/app/SupportedApps/Monit/Monit.php',
'App\\SupportedApps\\MotionEye\\MotionEye' => $baseDir . '/app/SupportedApps/MotionEye/MotionEye.php',
'App\\SupportedApps\\Munin\\Munin' => $baseDir . '/app/SupportedApps/Munin/Munin.php',
'App\\SupportedApps\\MusicBrainz\\MusicBrainz' => $baseDir . '/app/SupportedApps/MusicBrainz/MusicBrainz.php',
'App\\SupportedApps\\Mylar\\Mylar' => $baseDir . '/app/SupportedApps/Mylar/Mylar.php',
'App\\SupportedApps\\NAS\\NAS' => $baseDir . '/app/SupportedApps/NAS/NAS.php',
'App\\SupportedApps\\NZBHydra\\NZBHydra' => $baseDir . '/app/SupportedApps/NZBHydra/NZBHydra.php',
'App\\SupportedApps\\Nagios\\Nagios' => $baseDir . '/app/SupportedApps/Nagios/Nagios.php',
'App\\SupportedApps\\Navidrome\\Navidrome' => $baseDir . '/app/SupportedApps/Navidrome/Navidrome.php',
'App\\SupportedApps\\Nessus\\Nessus' => $baseDir . '/app/SupportedApps/Nessus/Nessus.php',
'App\\SupportedApps\\NetBox\\NetBox' => $baseDir . '/app/SupportedApps/NetBox/NetBox.php',
@@ -202,6 +206,7 @@ return array(
'App\\SupportedApps\\Nzbget\\Nzbget' => $baseDir . '/app/SupportedApps/Nzbget/Nzbget.php',
'App\\SupportedApps\\OPNsense\\OPNsense' => $baseDir . '/app/SupportedApps/OPNsense/OPNsense.php',
'App\\SupportedApps\\Octoprint\\Octoprint' => $baseDir . '/app/SupportedApps/Octoprint/Octoprint.php',
'App\\SupportedApps\\OmadaSDNController\\OmadaSDNController' => $baseDir . '/app/SupportedApps/OmadaSDNController/OmadaSDNController.php',
'App\\SupportedApps\\Ombi\\Ombi' => $baseDir . '/app/SupportedApps/Ombi/Ombi.php',
'App\\SupportedApps\\OmniDB\\OmniDB' => $baseDir . '/app/SupportedApps/OmniDB/OmniDB.php',
'App\\SupportedApps\\OnlyOffice\\OnlyOffice' => $baseDir . '/app/SupportedApps/OnlyOffice/OnlyOffice.php',
@@ -259,6 +264,7 @@ return array(
'App\\SupportedApps\\RuneAudio\\RuneAudio' => $baseDir . '/app/SupportedApps/RuneAudio/RuneAudio.php',
'App\\SupportedApps\\SABnzbd\\SABnzbd' => $baseDir . '/app/SupportedApps/SABnzbd/SABnzbd.php',
'App\\SupportedApps\\SOGo\\SOGo' => $baseDir . '/app/SupportedApps/SOGo/SOGo.php',
'App\\SupportedApps\\Scrutiny\\Scrutiny' => $baseDir . '/app/SupportedApps/Scrutiny/Scrutiny.php',
'App\\SupportedApps\\Seafile\\Seafile' => $baseDir . '/app/SupportedApps/Seafile/Seafile.php',
'App\\SupportedApps\\SearxMetasearchEngine\\SearxMetasearchEngine' => $baseDir . '/app/SupportedApps/SearxMetasearchEngine/SearxMetasearchEngine.php',
'App\\SupportedApps\\Serviio\\Serviio' => $baseDir . '/app/SupportedApps/Serviio/Serviio.php',
@@ -279,6 +285,7 @@ return array(
'App\\SupportedApps\\Statping\\Statping' => $baseDir . '/app/SupportedApps/Statping/Statping.php',
'App\\SupportedApps\\Strapi\\Strapi' => $baseDir . '/app/SupportedApps/Strapi/Strapi.php',
'App\\SupportedApps\\Streama\\Streama' => $baseDir . '/app/SupportedApps/Streama/Streama.php',
'App\\SupportedApps\\SupermicroIPMI\\SupermicroIPMI' => $baseDir . '/app/SupportedApps/SupermicroIPMI/SupermicroIPMI.php',
'App\\SupportedApps\\Sympa\\Sympa' => $baseDir . '/app/SupportedApps/Sympa/Sympa.php',
'App\\SupportedApps\\Synclounge\\Synclounge' => $baseDir . '/app/SupportedApps/Synclounge/Synclounge.php',
'App\\SupportedApps\\Syncthing\\Syncthing' => $baseDir . '/app/SupportedApps/Syncthing/Syncthing.php',
@@ -292,6 +299,7 @@ return array(
'App\\SupportedApps\\Tasmota\\Tasmota' => $baseDir . '/app/SupportedApps/Tasmota/Tasmota.php',
'App\\SupportedApps\\Tautulli\\Tautulli' => $baseDir . '/app/SupportedApps/Tautulli/Tautulli.php',
'App\\SupportedApps\\Tdarr\\Tdarr' => $baseDir . '/app/SupportedApps/Tdarr/Tdarr.php',
'App\\SupportedApps\\TechnitiumDNS\\TechnitiumDNS' => $baseDir . '/app/SupportedApps/TechnitiumDNS/TechnitiumDNS.php',
'App\\SupportedApps\\Teedy\\Teedy' => $baseDir . '/app/SupportedApps/Teedy/Teedy.php',
'App\\SupportedApps\\TheLounge\\TheLounge' => $baseDir . '/app/SupportedApps/TheLounge/TheLounge.php',
'App\\SupportedApps\\TinyTinyRSS\\TinyTinyRSS' => $baseDir . '/app/SupportedApps/TinyTinyRSS/TinyTinyRSS.php',
@@ -304,6 +312,7 @@ return array(
'App\\SupportedApps\\Ubooquity\\Ubooquity' => $baseDir . '/app/SupportedApps/Ubooquity/Ubooquity.php',
'App\\SupportedApps\\UniFi\\UniFi' => $baseDir . '/app/SupportedApps/UniFi/UniFi.php',
'App\\SupportedApps\\Unraid\\Unraid' => $baseDir . '/app/SupportedApps/Unraid/Unraid.php',
'App\\SupportedApps\\UptimeKuma\\UptimeKuma' => $baseDir . '/app/SupportedApps/UptimeKuma/UptimeKuma.php',
'App\\SupportedApps\\UrBackup\\UrBackup' => $baseDir . '/app/SupportedApps/UrBackup/UrBackup.php',
'App\\SupportedApps\\VMwareESXi\\VMwareESXi' => $baseDir . '/app/SupportedApps/VMwareESXi/VMwareESXi.php',
'App\\SupportedApps\\VMwarevCenter\\VMwarevCenter' => $baseDir . '/app/SupportedApps/VMwarevCenter/VMwarevCenter.php',
@@ -312,6 +321,7 @@ return array(
'App\\SupportedApps\\Virtualmin\\Virtualmin' => $baseDir . '/app/SupportedApps/Virtualmin/Virtualmin.php',
'App\\SupportedApps\\Volumio\\Volumio' => $baseDir . '/app/SupportedApps/Volumio/Volumio.php',
'App\\SupportedApps\\VuPlus\\VuPlus' => $baseDir . '/app/SupportedApps/VuPlus/VuPlus.php',
'App\\SupportedApps\\WLED\\WLED' => $baseDir . '/app/SupportedApps/WLED/WLED.php',
'App\\SupportedApps\\Wallabag\\Wallabag' => $baseDir . '/app/SupportedApps/Wallabag/Wallabag.php',
'App\\SupportedApps\\WaniKani\\WaniKani' => $baseDir . '/app/SupportedApps/WaniKani/WaniKani.php',
'App\\SupportedApps\\Watcher\\Watcher' => $baseDir . '/app/SupportedApps/Watcher/Watcher.php',
@@ -320,6 +330,7 @@ return array(
'App\\SupportedApps\\Wekan\\Wekan' => $baseDir . '/app/SupportedApps/Wekan/Wekan.php',
'App\\SupportedApps\\Wetty\\Wetty' => $baseDir . '/app/SupportedApps/Wetty/Wetty.php',
'App\\SupportedApps\\WgGenWeb\\WgGenWeb' => $baseDir . '/app/SupportedApps/WgGenWeb/WgGenWeb.php',
'App\\SupportedApps\\Whoogle\\Whoogle' => $baseDir . '/app/SupportedApps/Whoogle/Whoogle.php',
'App\\SupportedApps\\Wikijs\\Wikijs' => $baseDir . '/app/SupportedApps/Wikijs/Wikijs.php',
'App\\SupportedApps\\WireGuard\\WireGuard' => $baseDir . '/app/SupportedApps/WireGuard/WireGuard.php',
'App\\SupportedApps\\Wordpress\\Wordpress' => $baseDir . '/app/SupportedApps/Wordpress/Wordpress.php',
@@ -327,6 +338,7 @@ return array(
'App\\SupportedApps\\XenOrchestra\\XenOrchestra' => $baseDir . '/app/SupportedApps/XenOrchestra/XenOrchestra.php',
'App\\SupportedApps\\Xigmanas\\Xigmanas' => $baseDir . '/app/SupportedApps/Xigmanas/Xigmanas.php',
'App\\SupportedApps\\YNAB\\YNAB' => $baseDir . '/app/SupportedApps/YNAB/YNAB.php',
'App\\SupportedApps\\Yacht\\Yacht' => $baseDir . '/app/SupportedApps/Yacht/Yacht.php',
'App\\SupportedApps\\ZNC\\ZNC' => $baseDir . '/app/SupportedApps/ZNC/ZNC.php',
'App\\SupportedApps\\Zabbix\\Zabbix' => $baseDir . '/app/SupportedApps/Zabbix/Zabbix.php',
'App\\SupportedApps\\Zammad\\Zammad' => $baseDir . '/app/SupportedApps/Zammad/Zammad.php',
@@ -337,6 +349,7 @@ return array(
'App\\SupportedApps\\iLO\\iLO' => $baseDir . '/app/SupportedApps/iLO/iLO.php',
'App\\SupportedApps\\ioBroker\\ioBroker' => $baseDir . '/app/SupportedApps/ioBroker/ioBroker.php',
'App\\SupportedApps\\neightn\\neightn' => $baseDir . '/app/SupportedApps/neightn/neightn.php',
'App\\SupportedApps\\ntopng\\ntopng' => $baseDir . '/app/SupportedApps/ntopng/ntopng.php',
'App\\SupportedApps\\openHAB\\openHAB' => $baseDir . '/app/SupportedApps/openHAB/openHAB.php',
'App\\SupportedApps\\openmediavault\\openmediavault' => $baseDir . '/app/SupportedApps/openmediavault/openmediavault.php',
'App\\SupportedApps\\osTicket\\osTicket' => $baseDir . '/app/SupportedApps/osTicket/osTicket.php',
@@ -2405,26 +2418,6 @@ return array(
'Illuminate\\View\\ViewFinderInterface' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewFinderInterface.php',
'Illuminate\\View\\ViewName' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewName.php',
'Illuminate\\View\\ViewServiceProvider' => $vendorDir . '/laravel/framework/src/Illuminate/View/ViewServiceProvider.php',
'Inertia\\Console\\CreateMiddleware' => $vendorDir . '/inertiajs/inertia-laravel/src/Console/CreateMiddleware.php',
'Inertia\\Controller' => $vendorDir . '/inertiajs/inertia-laravel/src/Controller.php',
'Inertia\\Directive' => $vendorDir . '/inertiajs/inertia-laravel/src/Directive.php',
'Inertia\\Inertia' => $vendorDir . '/inertiajs/inertia-laravel/src/Inertia.php',
'Inertia\\LazyProp' => $vendorDir . '/inertiajs/inertia-laravel/src/LazyProp.php',
'Inertia\\Middleware' => $vendorDir . '/inertiajs/inertia-laravel/src/Middleware.php',
'Inertia\\Response' => $vendorDir . '/inertiajs/inertia-laravel/src/Response.php',
'Inertia\\ResponseFactory' => $vendorDir . '/inertiajs/inertia-laravel/src/ResponseFactory.php',
'Inertia\\ServiceProvider' => $vendorDir . '/inertiajs/inertia-laravel/src/ServiceProvider.php',
'Inertia\\Ssr\\Gateway' => $vendorDir . '/inertiajs/inertia-laravel/src/Ssr/Gateway.php',
'Inertia\\Ssr\\HttpGateway' => $vendorDir . '/inertiajs/inertia-laravel/src/Ssr/HttpGateway.php',
'Inertia\\Ssr\\Response' => $vendorDir . '/inertiajs/inertia-laravel/src/Ssr/Response.php',
'Inertia\\Testing\\Assert' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Assert.php',
'Inertia\\Testing\\AssertableInertia' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/AssertableInertia.php',
'Inertia\\Testing\\Concerns\\Debugging' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Debugging.php',
'Inertia\\Testing\\Concerns\\Has' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Has.php',
'Inertia\\Testing\\Concerns\\Interaction' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Interaction.php',
'Inertia\\Testing\\Concerns\\Matching' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/Matching.php',
'Inertia\\Testing\\Concerns\\PageObject' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/Concerns/PageObject.php',
'Inertia\\Testing\\TestResponseMacros' => $vendorDir . '/inertiajs/inertia-laravel/src/Testing/TestResponseMacros.php',
'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
'Laravel\\Tinker\\ClassAliasAutoloader' => $vendorDir . '/laravel/tinker/src/ClassAliasAutoloader.php',
'Laravel\\Tinker\\Console\\TinkerCommand' => $vendorDir . '/laravel/tinker/src/Console/TinkerCommand.php',
@@ -2832,7 +2825,6 @@ return array(
'Monolog\\Handler\\DoctrineCouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php',
'Monolog\\Handler\\DynamoDbHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php',
'Monolog\\Handler\\ElasticaHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php',
'Monolog\\Handler\\ElasticsearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php',
'Monolog\\Handler\\ErrorLogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php',
'Monolog\\Handler\\FallbackGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php',
'Monolog\\Handler\\FilterHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php',
@@ -4948,6 +4940,18 @@ return array(
'Symfony\\Component\\VarExporter\\Internal\\Registry' => $vendorDir . '/symfony/var-exporter/Internal/Registry.php',
'Symfony\\Component\\VarExporter\\Internal\\Values' => $vendorDir . '/symfony/var-exporter/Internal/Values.php',
'Symfony\\Component\\VarExporter\\VarExporter' => $vendorDir . '/symfony/var-exporter/VarExporter.php',
'Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php',
'Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php',
'Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php',
'Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php',
'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php',
'Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php',
'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php',
'Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php',
'Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php',
'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php',
'Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php',
'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php',
'Symfony\\Contracts\\Cache\\CacheInterface' => $vendorDir . '/symfony/cache-contracts/CacheInterface.php',
'Symfony\\Contracts\\Cache\\CacheTrait' => $vendorDir . '/symfony/cache-contracts/CacheTrait.php',
'Symfony\\Contracts\\Cache\\CallbackInterface' => $vendorDir . '/symfony/cache-contracts/CallbackInterface.php',

View File

@@ -6,8 +6,8 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
@@ -19,20 +19,19 @@ return array(
'9c67151ae59aff4788964ce8eb2a0f43' => $vendorDir . '/clue/stream-filter/src/functions_include.php',
'8cff32064859f4559445b89279f3199c' => $vendorDir . '/php-http/message/src/filters.php',
'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php',
'801c31d8ed748cfa537fa45402288c95' => $vendorDir . '/psy/psysh/src/functions.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
'2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php',
'23c18046f52bef3eea034657bafda50f' => $vendorDir . '/symfony/polyfill-php81/bootstrap.php',
'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php',
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'538ca81a9a966a6716601ecf48f4eaef' => $vendorDir . '/opis/closure/functions.php',
'e39a8b23c42d4e1452234d762b03835a' => $vendorDir . '/ramsey/uuid/src/functions.php',
'8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
'f0906e6318348a765ffb6eb24e0d0938' => $vendorDir . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php',
'f18cc91337d49233e5754e93f3ed9ec3' => $vendorDir . '/laravelcollective/html/src/helpers.php',
'98caa11a197f6516a8e48aa4abb5ccc6' => $vendorDir . '/inertiajs/inertia-laravel/helpers.php',
'e617b14322a074392076a2f38eaf6115' => $baseDir . '/app/Helper.php',
);

View File

@@ -27,6 +27,7 @@ return array(
'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'),
'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'),
'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'),
'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'),
'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'),
@@ -63,7 +64,6 @@ return array(
'League\\CommonMark\\' => array($vendorDir . '/league/commonmark/src'),
'Laravel\\Ui\\' => array($vendorDir . '/laravel/ui/src'),
'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'),
'Inertia\\' => array($vendorDir . '/inertiajs/inertia-laravel/src'),
'Illuminate\\Foundation\\Auth\\' => array($vendorDir . '/laravel/ui/auth-backend'),
'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'),
'Http\\Promise\\' => array($vendorDir . '/php-http/promise/src'),

View File

@@ -65,16 +65,11 @@ class ComposerAutoloaderInit4b6fb9210a1ea37c2db27b8ff53a1ecf
}
}
/**
* @param string $fileIdentifier
* @param string $file
* @return void
*/
function composerRequire4b6fb9210a1ea37c2db27b8ff53a1ecf($fileIdentifier, $file)
{
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
require $file;
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
}
}

View File

@@ -7,8 +7,8 @@ namespace Composer\Autoload;
class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
@@ -20,21 +20,20 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'9c67151ae59aff4788964ce8eb2a0f43' => __DIR__ . '/..' . '/clue/stream-filter/src/functions_include.php',
'8cff32064859f4559445b89279f3199c' => __DIR__ . '/..' . '/php-http/message/src/filters.php',
'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
'37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php',
'801c31d8ed748cfa537fa45402288c95' => __DIR__ . '/..' . '/psy/psysh/src/functions.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
'2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php',
'23c18046f52bef3eea034657bafda50f' => __DIR__ . '/..' . '/symfony/polyfill-php81/bootstrap.php',
'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php',
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'538ca81a9a966a6716601ecf48f4eaef' => __DIR__ . '/..' . '/opis/closure/functions.php',
'e39a8b23c42d4e1452234d762b03835a' => __DIR__ . '/..' . '/ramsey/uuid/src/functions.php',
'8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
'f0906e6318348a765ffb6eb24e0d0938' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Foundation/helpers.php',
'58571171fd5812e6e447dce228f52f4d' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/Support/helpers.php',
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php',
'f18cc91337d49233e5754e93f3ed9ec3' => __DIR__ . '/..' . '/laravelcollective/html/src/helpers.php',
'98caa11a197f6516a8e48aa4abb5ccc6' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/helpers.php',
'e617b14322a074392076a2f38eaf6115' => __DIR__ . '/../..' . '/app/Helper.php',
);
@@ -74,6 +73,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Symfony\\Contracts\\Service\\' => 26,
'Symfony\\Contracts\\EventDispatcher\\' => 34,
'Symfony\\Contracts\\Cache\\' => 24,
'Symfony\\Component\\Yaml\\' => 23,
'Symfony\\Component\\VarExporter\\' => 30,
'Symfony\\Component\\VarDumper\\' => 28,
'Symfony\\Component\\Translation\\' => 30,
@@ -128,7 +128,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
),
'I' =>
array (
'Inertia\\' => 8,
'Illuminate\\Foundation\\Auth\\' => 27,
'Illuminate\\' => 11,
),
@@ -273,6 +272,10 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/symfony/cache-contracts',
),
'Symfony\\Component\\Yaml\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/yaml',
),
'Symfony\\Component\\VarExporter\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/var-exporter',
@@ -418,10 +421,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
array (
0 => __DIR__ . '/..' . '/laravel/tinker/src',
),
'Inertia\\' =>
array (
0 => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src',
),
'Illuminate\\Foundation\\Auth\\' =>
array (
0 => __DIR__ . '/..' . '/laravel/ui/auth-backend',
@@ -615,6 +614,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Booksonic\\Booksonic' => __DIR__ . '/../..' . '/app/SupportedApps/Booksonic/Booksonic.php',
'App\\SupportedApps\\Bookstack\\Bookstack' => __DIR__ . '/../..' . '/app/SupportedApps/Bookstack/Bookstack.php',
'App\\SupportedApps\\Box\\Box' => __DIR__ . '/../..' . '/app/SupportedApps/Box/Box.php',
'App\\SupportedApps\\CUPS\\CUPS' => __DIR__ . '/../..' . '/app/SupportedApps/CUPS/CUPS.php',
'App\\SupportedApps\\Cabot\\Cabot' => __DIR__ . '/../..' . '/app/SupportedApps/Cabot/Cabot.php',
'App\\SupportedApps\\CalibreWeb\\CalibreWeb' => __DIR__ . '/../..' . '/app/SupportedApps/CalibreWeb/CalibreWeb.php',
'App\\SupportedApps\\Cardigann\\Cardigann' => __DIR__ . '/../..' . '/app/SupportedApps/Cardigann/Cardigann.php',
@@ -734,9 +734,12 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Monica\\Monica' => __DIR__ . '/../..' . '/app/SupportedApps/Monica/Monica.php',
'App\\SupportedApps\\Monit\\Monit' => __DIR__ . '/../..' . '/app/SupportedApps/Monit/Monit.php',
'App\\SupportedApps\\MotionEye\\MotionEye' => __DIR__ . '/../..' . '/app/SupportedApps/MotionEye/MotionEye.php',
'App\\SupportedApps\\Munin\\Munin' => __DIR__ . '/../..' . '/app/SupportedApps/Munin/Munin.php',
'App\\SupportedApps\\MusicBrainz\\MusicBrainz' => __DIR__ . '/../..' . '/app/SupportedApps/MusicBrainz/MusicBrainz.php',
'App\\SupportedApps\\Mylar\\Mylar' => __DIR__ . '/../..' . '/app/SupportedApps/Mylar/Mylar.php',
'App\\SupportedApps\\NAS\\NAS' => __DIR__ . '/../..' . '/app/SupportedApps/NAS/NAS.php',
'App\\SupportedApps\\NZBHydra\\NZBHydra' => __DIR__ . '/../..' . '/app/SupportedApps/NZBHydra/NZBHydra.php',
'App\\SupportedApps\\Nagios\\Nagios' => __DIR__ . '/../..' . '/app/SupportedApps/Nagios/Nagios.php',
'App\\SupportedApps\\Navidrome\\Navidrome' => __DIR__ . '/../..' . '/app/SupportedApps/Navidrome/Navidrome.php',
'App\\SupportedApps\\Nessus\\Nessus' => __DIR__ . '/../..' . '/app/SupportedApps/Nessus/Nessus.php',
'App\\SupportedApps\\NetBox\\NetBox' => __DIR__ . '/../..' . '/app/SupportedApps/NetBox/NetBox.php',
@@ -752,6 +755,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Nzbget\\Nzbget' => __DIR__ . '/../..' . '/app/SupportedApps/Nzbget/Nzbget.php',
'App\\SupportedApps\\OPNsense\\OPNsense' => __DIR__ . '/../..' . '/app/SupportedApps/OPNsense/OPNsense.php',
'App\\SupportedApps\\Octoprint\\Octoprint' => __DIR__ . '/../..' . '/app/SupportedApps/Octoprint/Octoprint.php',
'App\\SupportedApps\\OmadaSDNController\\OmadaSDNController' => __DIR__ . '/../..' . '/app/SupportedApps/OmadaSDNController/OmadaSDNController.php',
'App\\SupportedApps\\Ombi\\Ombi' => __DIR__ . '/../..' . '/app/SupportedApps/Ombi/Ombi.php',
'App\\SupportedApps\\OmniDB\\OmniDB' => __DIR__ . '/../..' . '/app/SupportedApps/OmniDB/OmniDB.php',
'App\\SupportedApps\\OnlyOffice\\OnlyOffice' => __DIR__ . '/../..' . '/app/SupportedApps/OnlyOffice/OnlyOffice.php',
@@ -809,6 +813,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\RuneAudio\\RuneAudio' => __DIR__ . '/../..' . '/app/SupportedApps/RuneAudio/RuneAudio.php',
'App\\SupportedApps\\SABnzbd\\SABnzbd' => __DIR__ . '/../..' . '/app/SupportedApps/SABnzbd/SABnzbd.php',
'App\\SupportedApps\\SOGo\\SOGo' => __DIR__ . '/../..' . '/app/SupportedApps/SOGo/SOGo.php',
'App\\SupportedApps\\Scrutiny\\Scrutiny' => __DIR__ . '/../..' . '/app/SupportedApps/Scrutiny/Scrutiny.php',
'App\\SupportedApps\\Seafile\\Seafile' => __DIR__ . '/../..' . '/app/SupportedApps/Seafile/Seafile.php',
'App\\SupportedApps\\SearxMetasearchEngine\\SearxMetasearchEngine' => __DIR__ . '/../..' . '/app/SupportedApps/SearxMetasearchEngine/SearxMetasearchEngine.php',
'App\\SupportedApps\\Serviio\\Serviio' => __DIR__ . '/../..' . '/app/SupportedApps/Serviio/Serviio.php',
@@ -829,6 +834,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Statping\\Statping' => __DIR__ . '/../..' . '/app/SupportedApps/Statping/Statping.php',
'App\\SupportedApps\\Strapi\\Strapi' => __DIR__ . '/../..' . '/app/SupportedApps/Strapi/Strapi.php',
'App\\SupportedApps\\Streama\\Streama' => __DIR__ . '/../..' . '/app/SupportedApps/Streama/Streama.php',
'App\\SupportedApps\\SupermicroIPMI\\SupermicroIPMI' => __DIR__ . '/../..' . '/app/SupportedApps/SupermicroIPMI/SupermicroIPMI.php',
'App\\SupportedApps\\Sympa\\Sympa' => __DIR__ . '/../..' . '/app/SupportedApps/Sympa/Sympa.php',
'App\\SupportedApps\\Synclounge\\Synclounge' => __DIR__ . '/../..' . '/app/SupportedApps/Synclounge/Synclounge.php',
'App\\SupportedApps\\Syncthing\\Syncthing' => __DIR__ . '/../..' . '/app/SupportedApps/Syncthing/Syncthing.php',
@@ -842,6 +848,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Tasmota\\Tasmota' => __DIR__ . '/../..' . '/app/SupportedApps/Tasmota/Tasmota.php',
'App\\SupportedApps\\Tautulli\\Tautulli' => __DIR__ . '/../..' . '/app/SupportedApps/Tautulli/Tautulli.php',
'App\\SupportedApps\\Tdarr\\Tdarr' => __DIR__ . '/../..' . '/app/SupportedApps/Tdarr/Tdarr.php',
'App\\SupportedApps\\TechnitiumDNS\\TechnitiumDNS' => __DIR__ . '/../..' . '/app/SupportedApps/TechnitiumDNS/TechnitiumDNS.php',
'App\\SupportedApps\\Teedy\\Teedy' => __DIR__ . '/../..' . '/app/SupportedApps/Teedy/Teedy.php',
'App\\SupportedApps\\TheLounge\\TheLounge' => __DIR__ . '/../..' . '/app/SupportedApps/TheLounge/TheLounge.php',
'App\\SupportedApps\\TinyTinyRSS\\TinyTinyRSS' => __DIR__ . '/../..' . '/app/SupportedApps/TinyTinyRSS/TinyTinyRSS.php',
@@ -854,6 +861,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Ubooquity\\Ubooquity' => __DIR__ . '/../..' . '/app/SupportedApps/Ubooquity/Ubooquity.php',
'App\\SupportedApps\\UniFi\\UniFi' => __DIR__ . '/../..' . '/app/SupportedApps/UniFi/UniFi.php',
'App\\SupportedApps\\Unraid\\Unraid' => __DIR__ . '/../..' . '/app/SupportedApps/Unraid/Unraid.php',
'App\\SupportedApps\\UptimeKuma\\UptimeKuma' => __DIR__ . '/../..' . '/app/SupportedApps/UptimeKuma/UptimeKuma.php',
'App\\SupportedApps\\UrBackup\\UrBackup' => __DIR__ . '/../..' . '/app/SupportedApps/UrBackup/UrBackup.php',
'App\\SupportedApps\\VMwareESXi\\VMwareESXi' => __DIR__ . '/../..' . '/app/SupportedApps/VMwareESXi/VMwareESXi.php',
'App\\SupportedApps\\VMwarevCenter\\VMwarevCenter' => __DIR__ . '/../..' . '/app/SupportedApps/VMwarevCenter/VMwarevCenter.php',
@@ -862,6 +870,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Virtualmin\\Virtualmin' => __DIR__ . '/../..' . '/app/SupportedApps/Virtualmin/Virtualmin.php',
'App\\SupportedApps\\Volumio\\Volumio' => __DIR__ . '/../..' . '/app/SupportedApps/Volumio/Volumio.php',
'App\\SupportedApps\\VuPlus\\VuPlus' => __DIR__ . '/../..' . '/app/SupportedApps/VuPlus/VuPlus.php',
'App\\SupportedApps\\WLED\\WLED' => __DIR__ . '/../..' . '/app/SupportedApps/WLED/WLED.php',
'App\\SupportedApps\\Wallabag\\Wallabag' => __DIR__ . '/../..' . '/app/SupportedApps/Wallabag/Wallabag.php',
'App\\SupportedApps\\WaniKani\\WaniKani' => __DIR__ . '/../..' . '/app/SupportedApps/WaniKani/WaniKani.php',
'App\\SupportedApps\\Watcher\\Watcher' => __DIR__ . '/../..' . '/app/SupportedApps/Watcher/Watcher.php',
@@ -870,6 +879,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\Wekan\\Wekan' => __DIR__ . '/../..' . '/app/SupportedApps/Wekan/Wekan.php',
'App\\SupportedApps\\Wetty\\Wetty' => __DIR__ . '/../..' . '/app/SupportedApps/Wetty/Wetty.php',
'App\\SupportedApps\\WgGenWeb\\WgGenWeb' => __DIR__ . '/../..' . '/app/SupportedApps/WgGenWeb/WgGenWeb.php',
'App\\SupportedApps\\Whoogle\\Whoogle' => __DIR__ . '/../..' . '/app/SupportedApps/Whoogle/Whoogle.php',
'App\\SupportedApps\\Wikijs\\Wikijs' => __DIR__ . '/../..' . '/app/SupportedApps/Wikijs/Wikijs.php',
'App\\SupportedApps\\WireGuard\\WireGuard' => __DIR__ . '/../..' . '/app/SupportedApps/WireGuard/WireGuard.php',
'App\\SupportedApps\\Wordpress\\Wordpress' => __DIR__ . '/../..' . '/app/SupportedApps/Wordpress/Wordpress.php',
@@ -877,6 +887,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\XenOrchestra\\XenOrchestra' => __DIR__ . '/../..' . '/app/SupportedApps/XenOrchestra/XenOrchestra.php',
'App\\SupportedApps\\Xigmanas\\Xigmanas' => __DIR__ . '/../..' . '/app/SupportedApps/Xigmanas/Xigmanas.php',
'App\\SupportedApps\\YNAB\\YNAB' => __DIR__ . '/../..' . '/app/SupportedApps/YNAB/YNAB.php',
'App\\SupportedApps\\Yacht\\Yacht' => __DIR__ . '/../..' . '/app/SupportedApps/Yacht/Yacht.php',
'App\\SupportedApps\\ZNC\\ZNC' => __DIR__ . '/../..' . '/app/SupportedApps/ZNC/ZNC.php',
'App\\SupportedApps\\Zabbix\\Zabbix' => __DIR__ . '/../..' . '/app/SupportedApps/Zabbix/Zabbix.php',
'App\\SupportedApps\\Zammad\\Zammad' => __DIR__ . '/../..' . '/app/SupportedApps/Zammad/Zammad.php',
@@ -887,6 +898,7 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'App\\SupportedApps\\iLO\\iLO' => __DIR__ . '/../..' . '/app/SupportedApps/iLO/iLO.php',
'App\\SupportedApps\\ioBroker\\ioBroker' => __DIR__ . '/../..' . '/app/SupportedApps/ioBroker/ioBroker.php',
'App\\SupportedApps\\neightn\\neightn' => __DIR__ . '/../..' . '/app/SupportedApps/neightn/neightn.php',
'App\\SupportedApps\\ntopng\\ntopng' => __DIR__ . '/../..' . '/app/SupportedApps/ntopng/ntopng.php',
'App\\SupportedApps\\openHAB\\openHAB' => __DIR__ . '/../..' . '/app/SupportedApps/openHAB/openHAB.php',
'App\\SupportedApps\\openmediavault\\openmediavault' => __DIR__ . '/../..' . '/app/SupportedApps/openmediavault/openmediavault.php',
'App\\SupportedApps\\osTicket\\osTicket' => __DIR__ . '/../..' . '/app/SupportedApps/osTicket/osTicket.php',
@@ -2955,26 +2967,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Illuminate\\View\\ViewFinderInterface' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewFinderInterface.php',
'Illuminate\\View\\ViewName' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewName.php',
'Illuminate\\View\\ViewServiceProvider' => __DIR__ . '/..' . '/laravel/framework/src/Illuminate/View/ViewServiceProvider.php',
'Inertia\\Console\\CreateMiddleware' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Console/CreateMiddleware.php',
'Inertia\\Controller' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Controller.php',
'Inertia\\Directive' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Directive.php',
'Inertia\\Inertia' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Inertia.php',
'Inertia\\LazyProp' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/LazyProp.php',
'Inertia\\Middleware' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Middleware.php',
'Inertia\\Response' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Response.php',
'Inertia\\ResponseFactory' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/ResponseFactory.php',
'Inertia\\ServiceProvider' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/ServiceProvider.php',
'Inertia\\Ssr\\Gateway' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Ssr/Gateway.php',
'Inertia\\Ssr\\HttpGateway' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Ssr/HttpGateway.php',
'Inertia\\Ssr\\Response' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Ssr/Response.php',
'Inertia\\Testing\\Assert' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Assert.php',
'Inertia\\Testing\\AssertableInertia' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/AssertableInertia.php',
'Inertia\\Testing\\Concerns\\Debugging' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Debugging.php',
'Inertia\\Testing\\Concerns\\Has' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Has.php',
'Inertia\\Testing\\Concerns\\Interaction' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Interaction.php',
'Inertia\\Testing\\Concerns\\Matching' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/Matching.php',
'Inertia\\Testing\\Concerns\\PageObject' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/Concerns/PageObject.php',
'Inertia\\Testing\\TestResponseMacros' => __DIR__ . '/..' . '/inertiajs/inertia-laravel/src/Testing/TestResponseMacros.php',
'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
'Laravel\\Tinker\\ClassAliasAutoloader' => __DIR__ . '/..' . '/laravel/tinker/src/ClassAliasAutoloader.php',
'Laravel\\Tinker\\Console\\TinkerCommand' => __DIR__ . '/..' . '/laravel/tinker/src/Console/TinkerCommand.php',
@@ -3382,7 +3374,6 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Monolog\\Handler\\DoctrineCouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php',
'Monolog\\Handler\\DynamoDbHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php',
'Monolog\\Handler\\ElasticaHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php',
'Monolog\\Handler\\ElasticsearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php',
'Monolog\\Handler\\ErrorLogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php',
'Monolog\\Handler\\FallbackGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php',
'Monolog\\Handler\\FilterHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php',
@@ -5498,6 +5489,18 @@ class ComposerStaticInit4b6fb9210a1ea37c2db27b8ff53a1ecf
'Symfony\\Component\\VarExporter\\Internal\\Registry' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Registry.php',
'Symfony\\Component\\VarExporter\\Internal\\Values' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Values.php',
'Symfony\\Component\\VarExporter\\VarExporter' => __DIR__ . '/..' . '/symfony/var-exporter/VarExporter.php',
'Symfony\\Component\\Yaml\\Command\\LintCommand' => __DIR__ . '/..' . '/symfony/yaml/Command/LintCommand.php',
'Symfony\\Component\\Yaml\\Dumper' => __DIR__ . '/..' . '/symfony/yaml/Dumper.php',
'Symfony\\Component\\Yaml\\Escaper' => __DIR__ . '/..' . '/symfony/yaml/Escaper.php',
'Symfony\\Component\\Yaml\\Exception\\DumpException' => __DIR__ . '/..' . '/symfony/yaml/Exception/DumpException.php',
'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/yaml/Exception/ExceptionInterface.php',
'Symfony\\Component\\Yaml\\Exception\\ParseException' => __DIR__ . '/..' . '/symfony/yaml/Exception/ParseException.php',
'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => __DIR__ . '/..' . '/symfony/yaml/Exception/RuntimeException.php',
'Symfony\\Component\\Yaml\\Inline' => __DIR__ . '/..' . '/symfony/yaml/Inline.php',
'Symfony\\Component\\Yaml\\Parser' => __DIR__ . '/..' . '/symfony/yaml/Parser.php',
'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => __DIR__ . '/..' . '/symfony/yaml/Tag/TaggedValue.php',
'Symfony\\Component\\Yaml\\Unescaper' => __DIR__ . '/..' . '/symfony/yaml/Unescaper.php',
'Symfony\\Component\\Yaml\\Yaml' => __DIR__ . '/..' . '/symfony/yaml/Yaml.php',
'Symfony\\Contracts\\Cache\\CacheInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/CacheInterface.php',
'Symfony\\Contracts\\Cache\\CacheTrait' => __DIR__ . '/..' . '/symfony/cache-contracts/CacheTrait.php',
'Symfony\\Contracts\\Cache\\CallbackInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/CallbackInterface.php',

View File

@@ -1330,78 +1330,6 @@
},
"install-path": "../hamcrest/hamcrest-php"
},
{
"name": "inertiajs/inertia-laravel",
"version": "v0.5.4",
"version_normalized": "0.5.4.0",
"source": {
"type": "git",
"url": "https://github.com/inertiajs/inertia-laravel.git",
"reference": "6a050ce04a710ac4809161558ac09fe49f13075e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/6a050ce04a710ac4809161558ac09fe49f13075e",
"reference": "6a050ce04a710ac4809161558ac09fe49f13075e",
"shasum": ""
},
"require": {
"ext-json": "*",
"laravel/framework": "^6.0|^7.0|^8.74|^9.0",
"php": "^7.2|~8.0.0|~8.1.0"
},
"require-dev": {
"mockery/mockery": "^1.3.3",
"orchestra/testbench": "^4.0|^5.0|^6.4|^7.0",
"phpunit/phpunit": "^8.0|^9.5.8",
"roave/security-advisories": "dev-master"
},
"time": "2022-01-18T10:59:08+00:00",
"type": "library",
"extra": {
"laravel": {
"providers": [
"Inertia\\ServiceProvider"
]
}
},
"installation-source": "dist",
"autoload": {
"files": [
"./helpers.php"
],
"psr-4": {
"Inertia\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jonathan Reinink",
"email": "jonathan@reinink.ca",
"homepage": "https://reinink.ca"
}
],
"description": "The Laravel adapter for Inertia.js.",
"keywords": [
"inertia",
"laravel"
],
"support": {
"issues": "https://github.com/inertiajs/inertia-laravel/issues",
"source": "https://github.com/inertiajs/inertia-laravel/tree/v0.5.4"
},
"funding": [
{
"url": "https://github.com/reinink",
"type": "github"
}
],
"install-path": "../inertiajs/inertia-laravel"
},
{
"name": "knplabs/github-api",
"version": "v3.5.1",
@@ -8072,6 +8000,84 @@
],
"install-path": "../symfony/var-exporter"
},
{
"name": "symfony/yaml",
"version": "v5.4.3",
"version_normalized": "5.4.3.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "e80f87d2c9495966768310fc531b487ce64237a2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
"reference": "e80f87d2c9495966768310fc531b487ce64237a2",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"symfony/deprecation-contracts": "^2.1|^3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
"symfony/console": "<5.3"
},
"require-dev": {
"symfony/console": "^5.3|^6.0"
},
"suggest": {
"symfony/console": "For validating YAML files using the lint command"
},
"time": "2022-01-26T16:32:32+00:00",
"bin": [
"Resources/bin/yaml-lint"
],
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
"Symfony\\Component\\Yaml\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v5.4.3"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"install-path": "../symfony/yaml"
},
{
"name": "theseer/tokenizer",
"version": "1.2.1",

View File

@@ -1,11 +1,11 @@
<?php return array(
'root' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'pretty_version' => '2.3.x-dev',
'version' => '2.3.9999999.9999999-dev',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => 'f9a19fce91446a34aa433bb1426491fbb2005611',
'reference' => 'ed3dbf2f1420e720c7bdcf0c8b36830bf6368c6d',
'name' => 'laravel/laravel',
'dev' => true,
),
@@ -349,15 +349,6 @@
0 => 'v7.30.6',
),
),
'inertiajs/inertia-laravel' => array(
'pretty_version' => 'v0.5.4',
'version' => '0.5.4.0',
'type' => 'library',
'install_path' => __DIR__ . '/../inertiajs/inertia-laravel',
'aliases' => array(),
'reference' => '6a050ce04a710ac4809161558ac09fe49f13075e',
'dev_requirement' => false,
),
'knplabs/github-api' => array(
'pretty_version' => 'v3.5.1',
'version' => '3.5.1.0',
@@ -383,12 +374,12 @@
'dev_requirement' => false,
),
'laravel/laravel' => array(
'pretty_version' => 'dev-master',
'version' => 'dev-master',
'pretty_version' => '2.3.x-dev',
'version' => '2.3.9999999.9999999-dev',
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => 'f9a19fce91446a34aa433bb1426491fbb2005611',
'reference' => 'ed3dbf2f1420e720c7bdcf0c8b36830bf6368c6d',
'dev_requirement' => false,
),
'laravel/tinker' => array(
@@ -1280,6 +1271,15 @@
'reference' => '49e2355fe6f59ea30c18ebb68edf13b7e20582e5',
'dev_requirement' => false,
),
'symfony/yaml' => array(
'pretty_version' => 'v5.4.3',
'version' => '5.4.3.0',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/yaml',
'aliases' => array(),
'reference' => 'e80f87d2c9495966768310fc531b487ce64237a2',
'dev_requirement' => false,
),
'theseer/tokenizer' => array(
'pretty_version' => '1.2.1',
'version' => '1.2.1.0',

View File

@@ -1,31 +0,0 @@
<?php
/** @noinspection PhpUndefinedClassInspection */
/** @noinspection PhpFullyQualifiedNameUsageInspection */
/** @noinspection PhpUnusedAliasInspection */
namespace Illuminate\Testing {
/**
* @see \Inertia\Testing\TestResponseMacros
*
* @method self assertInertia(\Closure $assert = null)
*/
class TestResponse
{
//
}
}
namespace Illuminate\Foundation\Testing {
/**
* @see \Inertia\Testing\TestResponseMacros
*
* @method self assertInertia(\Closure $assert = null)
*/
class TestResponse
{
//
}
}

View File

@@ -1,47 +0,0 @@
{
"name": "inertiajs/inertia-laravel",
"type": "library",
"description": "The Laravel adapter for Inertia.js.",
"keywords": ["laravel", "inertia"],
"license": "MIT",
"authors": [
{
"name": "Jonathan Reinink",
"email": "jonathan@reinink.ca",
"homepage": "https://reinink.ca"
}
],
"autoload": {
"psr-4": {
"Inertia\\": "src"
},
"files": [
"./helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Inertia\\Tests\\": "tests/"
}
},
"require": {
"php": "^7.2|~8.0.0|~8.1.0",
"ext-json": "*",
"laravel/framework": "^6.0|^7.0|^8.74|^9.0"
},
"require-dev": {
"roave/security-advisories": "dev-master",
"orchestra/testbench": "^4.0|^5.0|^6.4|^7.0",
"mockery/mockery": "^1.3.3",
"phpunit/phpunit": "^8.0|^9.5.8"
},
"extra": {
"laravel": {
"providers": [
"Inertia\\ServiceProvider"
]
}
},
"minimum-stability": "dev",
"prefer-stable": true
}

View File

@@ -1,62 +0,0 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Server Side Rendering
|--------------------------------------------------------------------------
|
| These options configures if and how Inertia uses Server Side Rendering
| to pre-render the initial visits made to your application's pages.
|
| Do note that enabling these options will NOT automatically make SSR work,
| as a separate rendering service needs to be available. To learn more,
| please visit https://inertiajs.com/server-side-rendering
|
*/
'ssr' => [
'enabled' => false,
'url' => 'http://127.0.0.1:13714/render',
],
/*
|--------------------------------------------------------------------------
| Testing
|--------------------------------------------------------------------------
|
| The values described here are used to locate Inertia components on the
| filesystem. For instance, when using `assertInertia`, the assertion
| attempts to locate the component as a file relative to any of the
| paths AND with any of the extensions specified here.
|
*/
'testing' => [
'ensure_pages_exist' => true,
'page_paths' => [
resource_path('js/Pages'),
],
'page_extensions' => [
'js',
'jsx',
'svelte',
'ts',
'tsx',
'vue',
],
],
];

View File

@@ -1,21 +0,0 @@
<?php
if (! function_exists('inertia')) {
/**
* Inertia helper.
*
* @param null|string $component
* @param array|\Illuminate\Contracts\Support\Arrayable $props
* @return \Inertia\ResponseFactory|\Inertia\Response
*/
function inertia($component = null, $props = [])
{
$instance = \Inertia\Inertia::getFacadeRoot();
if ($component) {
return $instance->render($component, $props);
}
return $instance;
}
}

View File

@@ -1,18 +0,0 @@
# Inertia.js Laravel Adapter
<p align="left">
<a href="https://github.com/inertiajs/inertia-laravel/releases">
<img src="https://img.shields.io/github/release/inertiajs/inertia-laravel.svg?style=flat-square" alt="Latest Version">
</a>
<a href="https://github.com/inertiajs/inertia-laravel/actions?query=workflow%3Atests+branch%3Amaster">
<img src="https://img.shields.io/github/workflow/status/inertiajs/inertia-laravel/tests/master.svg?style=flat-square" alt="Build Status">
</a>
<a href="https://styleci.io/repos/174395905"><img src="https://styleci.io/repos/174395905/shield" alt="StyleCI"></a>
<a href="https://packagist.org/packages/inertiajs/inertia-laravel">
<img src="https://img.shields.io/packagist/dt/inertiajs/inertia-laravel.svg?style=flat-square" alt="Total Downloads">
</a>
</p>
---
Visit [inertiajs.com](https://inertiajs.com/) to learn more.

View File

@@ -1,75 +0,0 @@
<?php
namespace Inertia\Console;
use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Input\InputOption;
class CreateMiddleware extends GeneratorCommand
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'inertia:middleware';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new Inertia middleware';
/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Middleware';
/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub(): string
{
return __DIR__.'/../../stubs/middleware.stub';
}
/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace): string
{
return $rootNamespace.'\Http\Middleware';
}
/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments(): array
{
return [
['name', InputOption::VALUE_REQUIRED, 'Name of the Middleware that should be created', 'HandleInertiaRequests'],
];
}
/**
* Get the console command options.
*
* @return array
*/
protected function getOptions(): array
{
return [
['force', null, InputOption::VALUE_NONE, 'Create the class even if the Middleware already exists'],
];
}
}

Some files were not shown because too many files have changed in this diff Show More