backend update

This commit is contained in:
carodej
2020-04-27 12:38:08 +02:00
parent 65147870fd
commit eb6bd646c8
17 changed files with 20590 additions and 491 deletions

1317
.phpstorm.meta.php Normal file

File diff suppressed because it is too large Load Diff

18211
_ide_helper.php Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -3,17 +3,61 @@
namespace App;
use ByteUnits\Metric;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;
use Laravel\Scout\Searchable;
use TeamTNT\TNTSearch\Indexer\TNTIndexer;
use \Illuminate\Database\Eloquent\SoftDeletes;
/**
* App\FileManagerFile
*
* @property int $id
* @property int|null $user_id
* @property int $unique_id
* @property int $folder_id
* @property string $thumbnail
* @property string|null $name
* @property string|null $basename
* @property string|null $mimetype
* @property string $filesize
* @property string|null $type
* @property string $user_scope
* @property string $deleted_at
* @property string $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\FileManagerFolder|null $folder
* @property-read string $file_url
* @property-read \App\FileManagerFolder $parent
* @property-read \App\Share|null $shared
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile newQuery()
* @method static \Illuminate\Database\Query\Builder|\App\FileManagerFile onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereBasename($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereDeletedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereFilesize($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereFolderId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereMimetype($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereThumbnail($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereUniqueId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereUserId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFile whereUserScope($value)
* @method static \Illuminate\Database\Query\Builder|\App\FileManagerFile withTrashed()
* @method static \Illuminate\Database\Query\Builder|\App\FileManagerFile withoutTrashed()
* @mixin \Eloquent
*/
class FileManagerFile extends Model
{
use Searchable, SoftDeletes;
public $public_access = null;
protected $guarded = [
'id'
@@ -23,6 +67,15 @@ class FileManagerFile extends Model
'file_url'
];
/**
* Set routes with public access
*
* @param $token
*/
public function setPublicUrl($token) {
$this->public_access = $token;
}
/**
* Format created at date
*
@@ -46,9 +99,8 @@ class FileManagerFile extends Model
}
/**
* Format filesize
* Format fileSize
*
* @param $value
* @return string
*/
public function getFilesizeAttribute()
@@ -59,23 +111,39 @@ class FileManagerFile extends Model
/**
* Format thumbnail url
*
* @param $value
* @return string
*/
public function getThumbnailAttribute()
{
return $this->attributes['thumbnail'] ? route('thumbnail', ['name' => $this->attributes['thumbnail']]) : null;
if ($this->attributes['thumbnail']) {
// Thumbnail route
$route = route('thumbnail', ['name' => $this->attributes['thumbnail']]);
if ($this->public_access) {
return $route . '/public/' . $this->public_access;
}
return $route;
}
return null;
}
/**
* Format file url
*
* @param $value
* @return string
*/
public function getFileUrlAttribute()
{
return route('file', ['name' => $this->attributes['basename']]);
$route = route('file', ['name' => $this->attributes['basename']]);
if ($this->public_access) {
return $route . '/public/' . $this->public_access;
}
return $route;
}
/**

View File

@@ -12,6 +12,53 @@ use RecursiveIteratorIterator;
use TeamTNT\TNTSearch\Indexer\TNTIndexer;
use \Illuminate\Database\Eloquent\SoftDeletes;
/**
* App\FileManagerFolder
*
* @property int $id
* @property int|null $user_id
* @property int $unique_id
* @property int $parent_id
* @property string|null $name
* @property string|null $type
* @property string $user_scope
* @property string $deleted_at
* @property string $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFolder[] $children
* @property-read int|null $children_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFile[] $files
* @property-read int|null $files_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFolder[] $folders
* @property-read int|null $folders_count
* @property-read int $items
* @property-read int $trashed_items
* @property-read \App\FileManagerFolder $parent
* @property-read \App\Share|null $shared
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFolder[] $trashed_children
* @property-read int|null $trashed_children_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFile[] $trashed_files
* @property-read int|null $trashed_files_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFolder[] $trashed_folders
* @property-read int|null $trashed_folders_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder newQuery()
* @method static \Illuminate\Database\Query\Builder|\App\FileManagerFolder onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereDeletedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereParentId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereUniqueId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereUserId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\FileManagerFolder whereUserScope($value)
* @method static \Illuminate\Database\Query\Builder|\App\FileManagerFolder withTrashed()
* @method static \Illuminate\Database\Query\Builder|\App\FileManagerFolder withoutTrashed()
* @mixin \Eloquent
*/
class FileManagerFolder extends Model
{
use Searchable, SoftDeletes;

View File

@@ -20,6 +20,7 @@ class FileAccessController extends Controller
*
* @param $basename
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function get_avatar($basename)
{
@@ -45,6 +46,7 @@ class FileAccessController extends Controller
* @param Request $request
* @param $filename
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function get_file(Request $request, $filename)
{
@@ -59,9 +61,139 @@ class FileAccessController extends Controller
// Check user permission
if ( ! $request->user()->tokenCan('master') ) {
$this->check_access($request, $file);
// Get shared token
$shared = Share::where(DB::raw('BINARY `token`'), $request->cookie('shared_token'))
->firstOrFail();
// Check access to file
$this->check_file_access($shared, $file);
}
return $this->download_file($file);
}
/**
* Get file public
*
* @param $filename
* @param $token
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function get_file_public($filename, $token)
{
// Get sharing record
$shared = Share::where(DB::raw('BINARY `token`'), $token)->firstOrFail();
// Abort if shared is protected
if ($shared->protected) {
abort(403, "Sorry, you don't have permission");
}
// Get file record
$file = FileManagerFile::where('user_id', $shared->user_id)
->where('basename', $filename)
->firstOrFail();
// Check file access
$this->check_file_access($shared, $file);
return $this->download_file($file);
}
/**
* Get image thumbnail
*
* @param Request $request
* @param $filename
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function get_thumbnail(Request $request, $filename)
{
// Get file record
$file = FileManagerFile::withTrashed()
->where('user_id', $request->user()->id)
->where('thumbnail', $filename)
->firstOrFail();
// Check user permission
if ( ! $request->user()->tokenCan('master') ) {
$this->check_file_access($request, $file);
}
return $this->thumbnail_file($file);
}
/**
* Get public image thumbnail
*
* @param $filename
* @param $token
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function get_thumbnail_public($filename, $token)
{
// Get sharing record
$shared = Share::where(DB::raw('BINARY `token`'), $token)->firstOrFail();
// Abort if thumbnail is protected
if ($shared->protected) {
abort(403, "Sorry, you don't have permission");
}
// Get file record
$file = FileManagerFile::where('user_id', $shared->user_id)
->where('thumbnail', $filename)
->firstOrFail();
// Check file access
$this->check_file_access($shared, $file);
return $this->thumbnail_file($file);
}
/**
* Check user file access
*
* @param $shared
* @param $file
*/
protected function check_file_access($shared, $file): void
{
// Check by parent folder permission
if ($shared->type === 'folder') {
// Get all children folders
$foldersIds = FileManagerFolder::with('folders:id,parent_id,unique_id,name')
->where('user_id', $shared->user_id)
->where('parent_id', $shared->item_id)
->get();
// Get all authorized parent folders by shared folder as root of tree
$accessible_folder_ids = Arr::flatten([filter_folders_ids($foldersIds), $shared->item_id]);
// Check user access
if (!in_array($file->folder_id, $accessible_folder_ids)) abort(403);
}
// Check by single file permission
if ($shared->type === 'file') {
if ($shared->item_id !== $file->unique_id) abort(403);
}
}
/**
* Call and download file
*
* @param $file
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
private function download_file($file)
{
// Format pretty filename
$file_pretty_name = $file->name . '.' . $file->mimetype;
@@ -87,25 +219,12 @@ class FileAccessController extends Controller
}
/**
* Get image thumbnail
*
* @param Request $request
* @param $filename
* @param $file
* @return mixed
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function get_thumbnail(Request $request, $filename)
private function thumbnail_file($file)
{
// Get file record
$file = FileManagerFile::withTrashed()
->where('user_id', $request->user()->id)
->where('thumbnail', $filename)
->firstOrFail();
// Check user permission
if ( ! $request->user()->tokenCan('master') ) {
$this->check_access($request, $file);
}
// Get file path
$path = storage_path() . '/app/file-manager/' . $file->getOriginal('thumbnail');
@@ -121,40 +240,4 @@ class FileAccessController extends Controller
return $response;
}
/**
* Check user file access
*
* @param $request
*/
protected function check_access($request, $file): void
{
// check if shared_token cookie exist
if (! $request->hasCookie('shared_token')) abort('401');
// Get shared token
$shared = Share::where(DB::raw('BINARY `token`'), $request->cookie('shared_token'))
->first();
// Check by parent folder permission
if ($shared->type === 'folder') {
// Get all children folders
$foldersIds = FileManagerFolder::with('folders:id,parent_id,unique_id,name')
->where('user_id', $shared->user_id)
->where('parent_id', $shared->item_id)
->get();
// Get all authorized parent folders by shared folder as root of tree
$accessible_folder_ids = Arr::flatten([filter_folders_ids($foldersIds), $shared->item_id]);
// Check user access
if (!in_array($file->folder_id, $accessible_folder_ids)) abort(403);
}
// Check by single file permission
if ($shared->type === 'file') {
if ($shared->item_id !== $file->unique_id) abort(403);
}
}
}

View File

@@ -70,12 +70,12 @@ class FileSharingController extends Controller
$scope = !is_null($shared->permission) ? $shared->permission : 'visitor';
// Generate token for visitor/editor
$token = $user->createToken('access_token', [$scope])->accessToken;
$access_token = $user->createToken('access_token', [$scope])->accessToken;
// Return authorize token with shared options
return response(new ShareResource($shared), 200)
->cookie('shared_token', $shared->token, 43200)
->cookie('access_token', $token, 43200);
->cookie('access_token', $access_token, 43200);
}
/**
@@ -87,10 +87,6 @@ class FileSharingController extends Controller
*/
public function get_private_folders(Request $request, $unique_id)
{
// Check if token exist
if (! $request->hasCookie('shared_token') )
abort(404, "Sorry, you don't request any content");
// Get sharing record
$shared = Share::where('token', $request->cookie('shared_token'))->firstOrFail();
@@ -126,6 +122,11 @@ class FileSharingController extends Controller
// Get files and folders
list($folders, $files) = $this->get_items($unique_id, $shared);
// Set thumbnail links for public files
$files->map(function ($item) use ($token) {
$item->setPublicUrl($token);
});
// Collect folders and files to single array
return collect([$folders, $files])->collapse();
}
@@ -146,10 +147,16 @@ class FileSharingController extends Controller
abort(403, "Sorry, you don't have permission");
}
// Return record
return FileManagerFile::where('user_id', $shared->user_id)
// Get file
$file = FileManagerFile::where('user_id', $shared->user_id)
->where('unique_id', $shared->item_id)
->firstOrFail(['name', 'basename', 'thumbnail', 'type', 'filesize', 'mimetype']);
// Set urls
$file->setPublicUrl($token);
// Return record
return $file;
}
/**
@@ -190,16 +197,6 @@ class FileSharingController extends Controller
if (!in_array($unique_id, $accessible_folder_ids)) abort(401);
}
/**
* @param Request $request
*/
protected function check_authenticated_access(Request $request): void
{
// Check directory permission
if ($request->cookie('shared_token') !== $request->token)
abort(401, "Sorry, you don't have permission");
}
/**
* Get folders and files
*

View File

@@ -26,7 +26,7 @@ class UpdateShareRequest extends FormRequest
{
return [
'protected' => 'required|boolean',
'permission' => 'required|string',
'permission' => 'nullable|string',
'password' => 'string',
];
}

View File

@@ -4,6 +4,35 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Share
*
* @property int $id
* @property int $user_id
* @property string $token
* @property int $item_id
* @property string $type
* @property string|null $permission
* @property int $protected
* @property string|null $password
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read string $link
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereItemId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share wherePassword($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share wherePermission($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereProtected($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereToken($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Share whereUserId($value)
* @mixin \Eloquent
*/
class Share extends Model
{
protected $guarded = ['id'];

View File

@@ -12,6 +12,47 @@ use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Notification;
use Laravel\Passport\HasApiTokens;
/**
* App\User
*
* @property int $id
* @property string $name
* @property string $email
* @property \Illuminate\Support\Carbon|null $email_verified_at
* @property string $password
* @property \Illuminate\Contracts\Routing\UrlGenerator|string $avatar
* @property string|null $remember_token
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\Laravel\Passport\Client[] $clients
* @property-read int|null $clients_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFolder[] $favourites
* @property-read int|null $favourites_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFile[] $files
* @property-read int|null $files_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFile[] $files_with_trashed
* @property-read int|null $files_with_trashed_count
* @property-read mixed $used_capacity
* @property-read \Illuminate\Database\Eloquent\Collection|\App\FileManagerFile[] $latest_uploads
* @property-read int|null $latest_uploads_count
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $notifications
* @property-read int|null $notifications_count
* @property-read \Illuminate\Database\Eloquent\Collection|\Laravel\Passport\Token[] $tokens
* @property-read int|null $tokens_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\User newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\User newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\User query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereAvatar($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereEmail($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereEmailVerifiedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User wherePassword($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereRememberToken($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereUpdatedAt($value)
* @mixin \Eloquent
*/
class User extends Authenticatable
{
use HasApiTokens, Notifiable;

View File

@@ -21,6 +21,7 @@
"teamtnt/laravel-scout-tntsearch-driver": "^7.2"
},
"require-dev": {
"barryvdh/laravel-ide-helper": "^2.7",
"facade/ignition": "^1.4",
"fzaninotto/faker": "^1.4",
"mockery/mockery": "^1.0",

720
composer.lock generated
View File

@@ -4,51 +4,8 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "a54d7b33221a7b1af8ef4a01dd47f3d3",
"content-hash": "3e3a0dfbec5dd01d1b88b57db1c18bbf",
"packages": [
{
"name": "askedio/laravel-soft-cascade",
"version": "6.0.1",
"source": {
"type": "git",
"url": "https://github.com/Askedio/laravel-soft-cascade.git",
"reference": "c84fc66a0ab2f060780429df79dfff447538cd94"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Askedio/laravel-soft-cascade/zipball/c84fc66a0ab2f060780429df79dfff447538cd94",
"reference": "c84fc66a0ab2f060780429df79dfff447538cd94",
"shasum": ""
},
"require": {
"illuminate/container": "^6.0",
"illuminate/database": "^6.0",
"illuminate/events": "^6.0",
"illuminate/support": "^6.0",
"php": "^7.2"
},
"require-dev": {
"codacy/coverage": "dev-master",
"orchestra/testbench": "~4.0",
"phpunit/phpunit": "~8.0"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Askedio\\SoftCascade\\Providers\\GenericServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Askedio\\SoftCascade\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"description": "Laravel Cascade Soft Delete & Restore",
"time": "2019-09-12T20:33:32+00:00"
},
{
"name": "asm89/stack-cors",
"version": "1.3.0",
@@ -1211,6 +1168,7 @@
"email": "jakub.onderka@gmail.com"
}
],
"abandoned": "php-parallel-lint/php-console-color",
"time": "2018-09-29T17:23:10+00:00"
},
{
@@ -1257,6 +1215,7 @@
}
],
"description": "Highlight PHP code in terminal",
"abandoned": "php-parallel-lint/php-console-highlighter",
"time": "2018-09-29T18:48:56+00:00"
},
{
@@ -4829,6 +4788,470 @@
}
],
"packages-dev": [
{
"name": "askedio/laravel-soft-cascade",
"version": "6.0.1",
"source": {
"type": "git",
"url": "https://github.com/Askedio/laravel-soft-cascade.git",
"reference": "c84fc66a0ab2f060780429df79dfff447538cd94"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Askedio/laravel-soft-cascade/zipball/c84fc66a0ab2f060780429df79dfff447538cd94",
"reference": "c84fc66a0ab2f060780429df79dfff447538cd94",
"shasum": ""
},
"require": {
"illuminate/container": "^6.0",
"illuminate/database": "^6.0",
"illuminate/events": "^6.0",
"illuminate/support": "^6.0",
"php": "^7.2"
},
"require-dev": {
"codacy/coverage": "dev-master",
"orchestra/testbench": "~4.0",
"phpunit/phpunit": "~8.0"
},
"type": "library",
"extra": {
"laravel": {
"providers": [
"Askedio\\SoftCascade\\Providers\\GenericServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Askedio\\SoftCascade\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"description": "Laravel Cascade Soft Delete & Restore",
"time": "2019-09-12T20:33:32+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",
"version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-ide-helper.git",
"reference": "5f677edc14bdcfdcac36633e6eea71b2728a4dbc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/5f677edc14bdcfdcac36633e6eea71b2728a4dbc",
"reference": "5f677edc14bdcfdcac36633e6eea71b2728a4dbc",
"shasum": ""
},
"require": {
"barryvdh/reflection-docblock": "^2.0.6",
"composer/composer": "^1.6",
"doctrine/dbal": "~2.3",
"illuminate/console": "^5.5|^6|^7",
"illuminate/filesystem": "^5.5|^6|^7",
"illuminate/support": "^5.5|^6|^7",
"php": ">=7.2"
},
"require-dev": {
"illuminate/config": "^5.5|^6|^7",
"illuminate/view": "^5.5|^6|^7",
"mockery/mockery": "^1.3",
"orchestra/testbench": "^3|^4|^5",
"phpro/grumphp": "^0.17.1",
"squizlabs/php_codesniffer": "^3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.6-dev"
},
"laravel": {
"providers": [
"Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Barryvdh\\LaravelIdeHelper\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.",
"keywords": [
"autocomplete",
"codeintel",
"helper",
"ide",
"laravel",
"netbeans",
"phpdoc",
"phpstorm",
"sublime"
],
"time": "2020-04-22T09:57:26+00:00"
},
{
"name": "barryvdh/reflection-docblock",
"version": "v2.0.6",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/ReflectionDocBlock.git",
"reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/6b69015d83d3daf9004a71a89f26e27d27ef6a16",
"reference": "6b69015d83d3daf9004a71a89f26e27d27ef6a16",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0,<4.5"
},
"suggest": {
"dflydev/markdown": "~1.0",
"erusev/parsedown": "~1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-0": {
"Barryvdh": [
"src/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "mike.vanriel@naenius.com"
}
],
"time": "2018-12-13T10:34:14+00:00"
},
{
"name": "composer/ca-bundle",
"version": "1.2.7",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/95c63ab2117a72f48f5a55da9740a3273d45b7fd",
"reference": "95c63ab2117a72f48f5a55da9740a3273d45b7fd",
"shasum": ""
},
"require": {
"ext-openssl": "*",
"ext-pcre": "*",
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8",
"psr/log": "^1.0",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\CaBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
"keywords": [
"cabundle",
"cacert",
"certificate",
"ssl",
"tls"
],
"time": "2020-04-08T08:27:21+00:00"
},
{
"name": "composer/composer",
"version": "1.10.5",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
"reference": "7a4d5b6aa30d2118af27c04f5e897b57156ccfa9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/composer/zipball/7a4d5b6aa30d2118af27c04f5e897b57156ccfa9",
"reference": "7a4d5b6aa30d2118af27c04f5e897b57156ccfa9",
"shasum": ""
},
"require": {
"composer/ca-bundle": "^1.0",
"composer/semver": "^1.0",
"composer/spdx-licenses": "^1.2",
"composer/xdebug-handler": "^1.1",
"justinrainbow/json-schema": "^3.0 || ^4.0 || ^5.0",
"php": "^5.3.2 || ^7.0",
"psr/log": "^1.0",
"seld/jsonlint": "^1.4",
"seld/phar-utils": "^1.0",
"symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
"symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
"symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0",
"symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
},
"conflict": {
"symfony/console": "2.8.38"
},
"require-dev": {
"phpspec/prophecy": "^1.10",
"symfony/phpunit-bridge": "^3.4"
},
"suggest": {
"ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
"ext-zip": "Enabling the zip extension allows you to unzip archives",
"ext-zlib": "Allow gzip compression of HTTP requests"
},
"bin": [
"bin/composer"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\": "src/Composer"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "http://www.naderman.de"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
"homepage": "https://getcomposer.org/",
"keywords": [
"autoload",
"dependency",
"package"
],
"time": "2020-04-10T09:44:22+00:00"
},
{
"name": "composer/semver",
"version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
"reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
"reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.5 || ^5.0.5"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Semver\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "http://www.naderman.de"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
},
{
"name": "Rob Bast",
"email": "rob.bast@gmail.com",
"homepage": "http://robbast.nl"
}
],
"description": "Semver library that offers utilities, version constraint parsing and validation.",
"keywords": [
"semantic",
"semver",
"validation",
"versioning"
],
"time": "2020-01-13T12:06:48+00:00"
},
{
"name": "composer/spdx-licenses",
"version": "1.5.3",
"source": {
"type": "git",
"url": "https://github.com/composer/spdx-licenses.git",
"reference": "0c3e51e1880ca149682332770e25977c70cf9dae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/spdx-licenses/zipball/0c3e51e1880ca149682332770e25977c70cf9dae",
"reference": "0c3e51e1880ca149682332770e25977c70cf9dae",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 7"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Composer\\Spdx\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "http://www.naderman.de"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
},
{
"name": "Rob Bast",
"email": "rob.bast@gmail.com",
"homepage": "http://robbast.nl"
}
],
"description": "SPDX licenses list and validation library.",
"keywords": [
"license",
"spdx",
"validator"
],
"time": "2020-02-14T07:44:31+00:00"
},
{
"name": "composer/xdebug-handler",
"version": "1.4.1",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
"reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7",
"reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0",
"psr/log": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
},
"type": "library",
"autoload": {
"psr-4": {
"Composer\\XdebugHandler\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "John Stevenson",
"email": "john-stevenson@blueyonder.co.uk"
}
],
"description": "Restarts a process without Xdebug.",
"keywords": [
"Xdebug",
"performance"
],
"time": "2020-03-01T12:26:26+00:00"
},
{
"name": "doctrine/instantiator",
"version": "1.3.0",
@@ -5213,6 +5636,72 @@
],
"time": "2016-01-20T08:20:44+00:00"
},
{
"name": "justinrainbow/json-schema",
"version": "5.2.9",
"source": {
"type": "git",
"url": "https://github.com/justinrainbow/json-schema.git",
"reference": "44c6787311242a979fa15c704327c20e7221a0e4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4",
"reference": "44c6787311242a979fa15c704327c20e7221a0e4",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
"json-schema/json-schema-test-suite": "1.2.0",
"phpunit/phpunit": "^4.8.35"
},
"bin": [
"bin/validate-json"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.0.x-dev"
}
},
"autoload": {
"psr-4": {
"JsonSchema\\": "src/JsonSchema/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Bruno Prieto Reis",
"email": "bruno.p.reis@gmail.com"
},
{
"name": "Justin Rainbow",
"email": "justin.rainbow@gmail.com"
},
{
"name": "Igor Wiedler",
"email": "igor@wiedler.ch"
},
{
"name": "Robert Schönthal",
"email": "seroscho@googlemail.com"
}
],
"description": "A library to validate a json schema.",
"homepage": "https://github.com/justinrainbow/json-schema",
"keywords": [
"json",
"schema"
],
"time": "2019-09-25T14:49:45+00:00"
},
{
"name": "mockery/mockery",
"version": "1.3.1",
@@ -6725,6 +7214,149 @@
"homepage": "https://github.com/sebastianbergmann/version",
"time": "2016-10-03T07:35:21+00:00"
},
{
"name": "seld/jsonlint",
"version": "1.7.2",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/jsonlint.git",
"reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19",
"reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19",
"shasum": ""
},
"require": {
"php": "^5.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"bin": [
"bin/jsonlint"
],
"type": "library",
"autoload": {
"psr-4": {
"Seld\\JsonLint\\": "src/Seld/JsonLint/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
"description": "JSON Linter",
"keywords": [
"json",
"linter",
"parser",
"validator"
],
"time": "2019-10-24T14:27:39+00:00"
},
{
"name": "seld/phar-utils",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/phar-utils.git",
"reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/8800503d56b9867d43d9c303b9cbcc26016e82f0",
"reference": "8800503d56b9867d43d9c303b9cbcc26016e82f0",
"shasum": ""
},
"require": {
"php": ">=5.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Seld\\PharUtils\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be"
}
],
"description": "PHAR file format utilities, for when PHP phars you up",
"keywords": [
"phar"
],
"time": "2020-02-14T15:25:33+00:00"
},
{
"name": "symfony/filesystem",
"version": "v5.0.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
"reference": "ca3b87dd09fff9b771731637f5379965fbfab420"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420",
"reference": "ca3b87dd09fff9b771731637f5379965fbfab420",
"shasum": ""
},
"require": {
"php": "^7.2.5",
"symfony/polyfill-ctype": "~1.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "5.0-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Filesystem\\": ""
},
"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": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
"time": "2020-03-27T16:56:45+00:00"
},
{
"name": "theseer/tokenizer",
"version": "1.1.3",

42
package-lock.json generated
View File

@@ -5328,9 +5328,9 @@
"dev": true
},
"in-publish": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz",
"integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E="
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz",
"integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ=="
},
"indent-string": {
"version": "4.0.0",
@@ -6645,9 +6645,9 @@
"dev": true
},
"node-sass": {
"version": "4.13.1",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.1.tgz",
"integrity": "sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw==",
"version": "4.14.0",
"resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.0.tgz",
"integrity": "sha512-AxqU+DFpk0lEz95sI6jO0hU0Rwyw7BXVEv6o9OItoXLyeygPeaSpiV4rwQb10JiTghHaa0gZeD21sz+OsQluaw==",
"requires": {
"async-foreach": "^0.1.3",
"chalk": "^1.1.1",
@@ -8051,9 +8051,9 @@
"integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
},
"psl": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.7.0.tgz",
"integrity": "sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ=="
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
"integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
},
"public-encrypt": {
"version": "4.0.3",
@@ -9316,9 +9316,9 @@
}
},
"spdx-exceptions": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
"integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A=="
},
"spdx-expression-parse": {
"version": "3.0.0",
@@ -10328,9 +10328,9 @@
"dev": true
},
"vee-validate": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-3.2.5.tgz",
"integrity": "sha512-qUgx4fcD077aNYuaRmK5qZ6G/qRHI0igC5tvGP1IRtvkScOyhCHuZwCcto4VPy5Cip0yAOqrbFudD9JOevwZhw=="
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-3.3.0.tgz",
"integrity": "sha512-+QQZgA0I9ZTDsYNOSFlUqOvGIqW4yxjloxQCC6TD0rPn407G9hifn6RnId8kzl6+zHfl3/dE+bko49mYzgNNGg=="
},
"vendors": {
"version": "1.0.4",
@@ -10366,9 +10366,9 @@
"dev": true
},
"vue-i18n": {
"version": "8.16.0",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.16.0.tgz",
"integrity": "sha512-cp9JOsx4ETzlCsnD22FE8ZhAmD8kcyNLRKV0DPsS7bBNTCdIlOKuyTGonWKYcGCUtNMtwemDWRBevRm8eevBVg=="
"version": "8.17.4",
"resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.17.4.tgz",
"integrity": "sha512-wpk/drIkPf6gHCtvHc8zAZ1nsWBZ+/OOJYtJxqhYD6CKT0FJAG5oypwgF9kABt30FBWhl8NEb/QY+vaaBARlFg=="
},
"vue-loader": {
"version": "15.9.1",
@@ -10415,9 +10415,9 @@
"dev": true
},
"vuex": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.1.3.tgz",
"integrity": "sha512-k8vZqNMSNMgKelVZAPYw5MNb2xWSmVgCKtYKAptvm9YtZiOXnRXFWu//Y9zQNORTrm3dNj1n/WaZZI26tIX6Mw=="
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/vuex/-/vuex-3.3.0.tgz",
"integrity": "sha512-1MfcBt+YFd20DPwKe0ThhYm1UEXZya4gVKUvCy7AtS11YAOUR+9a6u4fsv1Rr6ePZCDNxW/M1zuIaswp6nNv8Q=="
},
"watchpack": {
"version": "1.6.1",

View File

@@ -23,11 +23,11 @@
"@fortawesome/vue-fontawesome": "^0.1.9",
"css-element-queries": "^1.2.3",
"lodash": "^4.17.15",
"node-sass": "^4.13.1",
"vee-validate": "^3.2.5",
"node-sass": "^4.14.0",
"vee-validate": "^3.3.0",
"vue": "^2.6.10",
"vue-i18n": "^8.16.0",
"vue-i18n": "^8.17.4",
"vue-router": "^3.1.6",
"vuex": "^3.0.1"
"vuex": "^3.3.0"
}
}

View File

@@ -1,330 +1,5 @@
{
"/js/main.js": "/js/main.js",
"/css/app.css": "/css/app.css",
"/js/main.45d46e1933bf6dec5ef6.hot-update.js": "/js/main.45d46e1933bf6dec5ef6.hot-update.js",
"/js/main.e842979da4bf159e5ad2.hot-update.js": "/js/main.e842979da4bf159e5ad2.hot-update.js",
"/js/main.0e5fdb03fbf3b0a89168.hot-update.js": "/js/main.0e5fdb03fbf3b0a89168.hot-update.js",
"/js/main.c36a7b12e330fb1dc0c1.hot-update.js": "/js/main.c36a7b12e330fb1dc0c1.hot-update.js",
"/js/main.59c5c17472ec18755906.hot-update.js": "/js/main.59c5c17472ec18755906.hot-update.js",
"/js/main.675ab9309b6bff002024.hot-update.js": "/js/main.675ab9309b6bff002024.hot-update.js",
"/js/main.11438e0b6172ac156942.hot-update.js": "/js/main.11438e0b6172ac156942.hot-update.js",
"/js/main.a1114f307285712e8af2.hot-update.js": "/js/main.a1114f307285712e8af2.hot-update.js",
"/js/main.ab269a7a54493f3c8d81.hot-update.js": "/js/main.ab269a7a54493f3c8d81.hot-update.js",
"/js/main.d993f351202c0e02c241.hot-update.js": "/js/main.d993f351202c0e02c241.hot-update.js",
"/js/main.ed79cccc5224df201cd1.hot-update.js": "/js/main.ed79cccc5224df201cd1.hot-update.js",
"/js/main.91d10f3eaa8e47ae0d5f.hot-update.js": "/js/main.91d10f3eaa8e47ae0d5f.hot-update.js",
"/js/main.472e5ddce4a79bbc3090.hot-update.js": "/js/main.472e5ddce4a79bbc3090.hot-update.js",
"/js/main.1941f48e75b8c10dc7ec.hot-update.js": "/js/main.1941f48e75b8c10dc7ec.hot-update.js",
"/js/main.ff9704078c22b00cd66a.hot-update.js": "/js/main.ff9704078c22b00cd66a.hot-update.js",
"/js/main.59307cce9ecf88ce9b42.hot-update.js": "/js/main.59307cce9ecf88ce9b42.hot-update.js",
"/js/main.a79c63d0e5afda037179.hot-update.js": "/js/main.a79c63d0e5afda037179.hot-update.js",
"/js/main.bcb4911901a4471bb474.hot-update.js": "/js/main.bcb4911901a4471bb474.hot-update.js",
"/js/main.b0a97918d2211a77afe5.hot-update.js": "/js/main.b0a97918d2211a77afe5.hot-update.js",
"/js/main.3c893e1ab5aeaf9abaa3.hot-update.js": "/js/main.3c893e1ab5aeaf9abaa3.hot-update.js",
"/js/main.e1313d34b87de7f5bba1.hot-update.js": "/js/main.e1313d34b87de7f5bba1.hot-update.js",
"/js/main.5e697db90b162e63c7d5.hot-update.js": "/js/main.5e697db90b162e63c7d5.hot-update.js",
"/js/main.bf8ab4a1792c30ac5025.hot-update.js": "/js/main.bf8ab4a1792c30ac5025.hot-update.js",
"/js/main.3c7645b1e9c1075b521a.hot-update.js": "/js/main.3c7645b1e9c1075b521a.hot-update.js",
"/js/main.c747bad73a39c418162d.hot-update.js": "/js/main.c747bad73a39c418162d.hot-update.js",
"/js/main.b7b2c7af1da4c77f317b.hot-update.js": "/js/main.b7b2c7af1da4c77f317b.hot-update.js",
"/js/main.17eeedab7f672cdd3a6a.hot-update.js": "/js/main.17eeedab7f672cdd3a6a.hot-update.js",
"/js/main.89438e99f4850b9b2de8.hot-update.js": "/js/main.89438e99f4850b9b2de8.hot-update.js",
"/js/main.10f3e535029ec20e54da.hot-update.js": "/js/main.10f3e535029ec20e54da.hot-update.js",
"/js/main.072647b9d5467ef5ca7a.hot-update.js": "/js/main.072647b9d5467ef5ca7a.hot-update.js",
"/js/main.8bf2cd5eef3d7019e7da.hot-update.js": "/js/main.8bf2cd5eef3d7019e7da.hot-update.js",
"/js/main.95752955f0e17cd17f76.hot-update.js": "/js/main.95752955f0e17cd17f76.hot-update.js",
"/js/main.c6e4e5ff66ecfdecaea6.hot-update.js": "/js/main.c6e4e5ff66ecfdecaea6.hot-update.js",
"/js/main.34a49e954ecf67649032.hot-update.js": "/js/main.34a49e954ecf67649032.hot-update.js",
"/js/main.862ff3f40b2875106861.hot-update.js": "/js/main.862ff3f40b2875106861.hot-update.js",
"/js/main.931f8a36f8a71f9cdec8.hot-update.js": "/js/main.931f8a36f8a71f9cdec8.hot-update.js",
"/js/main.711924356b1a6d486ed7.hot-update.js": "/js/main.711924356b1a6d486ed7.hot-update.js",
"/js/main.8b6b6e691061b928cf69.hot-update.js": "/js/main.8b6b6e691061b928cf69.hot-update.js",
"/js/main.3d894099836551049ffc.hot-update.js": "/js/main.3d894099836551049ffc.hot-update.js",
"/js/main.ba496f798cb18def602c.hot-update.js": "/js/main.ba496f798cb18def602c.hot-update.js",
"/js/main.d2ec88e0eae1126cdf51.hot-update.js": "/js/main.d2ec88e0eae1126cdf51.hot-update.js",
"/js/main.6aed355d780dd1a86963.hot-update.js": "/js/main.6aed355d780dd1a86963.hot-update.js",
"/js/main.7e75319276974a331581.hot-update.js": "/js/main.7e75319276974a331581.hot-update.js",
"/js/main.9e88fe1df870daaa7481.hot-update.js": "/js/main.9e88fe1df870daaa7481.hot-update.js",
"/js/main.31b039255f8ef5527038.hot-update.js": "/js/main.31b039255f8ef5527038.hot-update.js",
"/js/main.4ed6ff73227b2913e6f7.hot-update.js": "/js/main.4ed6ff73227b2913e6f7.hot-update.js",
"/js/main.1bc6127eb1a40c20fb6d.hot-update.js": "/js/main.1bc6127eb1a40c20fb6d.hot-update.js",
"/js/main.27a6304f341c207df2e2.hot-update.js": "/js/main.27a6304f341c207df2e2.hot-update.js",
"/js/main.3d276a8f5ab90573ec50.hot-update.js": "/js/main.3d276a8f5ab90573ec50.hot-update.js",
"/js/main.3fe8960049a61eb6cc8a.hot-update.js": "/js/main.3fe8960049a61eb6cc8a.hot-update.js",
"/js/main.213e19eba62d8ebb1015.hot-update.js": "/js/main.213e19eba62d8ebb1015.hot-update.js",
"/js/main.4343cb3b56c8ec78e09e.hot-update.js": "/js/main.4343cb3b56c8ec78e09e.hot-update.js",
"/js/main.002f43371ba3f184e49a.hot-update.js": "/js/main.002f43371ba3f184e49a.hot-update.js",
"/js/main.c2cc0809ddf5e69a8994.hot-update.js": "/js/main.c2cc0809ddf5e69a8994.hot-update.js",
"/js/main.a83f42619db1298b3e69.hot-update.js": "/js/main.a83f42619db1298b3e69.hot-update.js",
"/js/main.1c709721edba358dfd1e.hot-update.js": "/js/main.1c709721edba358dfd1e.hot-update.js",
"/js/main.858da95bee6edb257415.hot-update.js": "/js/main.858da95bee6edb257415.hot-update.js",
"/js/main.13993f34d46f529728dc.hot-update.js": "/js/main.13993f34d46f529728dc.hot-update.js",
"/js/main.a3ab176a478047d662d3.hot-update.js": "/js/main.a3ab176a478047d662d3.hot-update.js",
"/js/main.cabeee86f654c3861499.hot-update.js": "/js/main.cabeee86f654c3861499.hot-update.js",
"/js/main.564dd46378b597c73c5e.hot-update.js": "/js/main.564dd46378b597c73c5e.hot-update.js",
"/js/main.1c75a700a099d485590e.hot-update.js": "/js/main.1c75a700a099d485590e.hot-update.js",
"/js/main.4f13b79ce32ab3777860.hot-update.js": "/js/main.4f13b79ce32ab3777860.hot-update.js",
"/js/main.42d7f4a867e436534858.hot-update.js": "/js/main.42d7f4a867e436534858.hot-update.js",
"/js/main.86ee25e1fe9db767199e.hot-update.js": "/js/main.86ee25e1fe9db767199e.hot-update.js",
"/js/main.7b439d432a35a2da1b48.hot-update.js": "/js/main.7b439d432a35a2da1b48.hot-update.js",
"/js/main.4ad2c9def324e6b15861.hot-update.js": "/js/main.4ad2c9def324e6b15861.hot-update.js",
"/js/main.56e704cb0f20e4553758.hot-update.js": "/js/main.56e704cb0f20e4553758.hot-update.js",
"/js/main.26313fd284c76a567f7c.hot-update.js": "/js/main.26313fd284c76a567f7c.hot-update.js",
"/js/main.8c4962b73c1a932049a5.hot-update.js": "/js/main.8c4962b73c1a932049a5.hot-update.js",
"/js/main.592716617990cae822eb.hot-update.js": "/js/main.592716617990cae822eb.hot-update.js",
"/js/main.e7f7f34179ead881e97f.hot-update.js": "/js/main.e7f7f34179ead881e97f.hot-update.js",
"/js/main.703e1592587b3ceb481a.hot-update.js": "/js/main.703e1592587b3ceb481a.hot-update.js",
"/js/main.63aede9942e996b36e82.hot-update.js": "/js/main.63aede9942e996b36e82.hot-update.js",
"/js/main.e292d358239ca41a9d97.hot-update.js": "/js/main.e292d358239ca41a9d97.hot-update.js",
"/js/main.53adb5f1d356c467bac0.hot-update.js": "/js/main.53adb5f1d356c467bac0.hot-update.js",
"/js/main.2d8c026be3662d72ee9e.hot-update.js": "/js/main.2d8c026be3662d72ee9e.hot-update.js",
"/js/main.acaac070a297898b221f.hot-update.js": "/js/main.acaac070a297898b221f.hot-update.js",
"/js/main.9efaeff7c4d9050159e4.hot-update.js": "/js/main.9efaeff7c4d9050159e4.hot-update.js",
"/js/main.52626570ec535bcdbb28.hot-update.js": "/js/main.52626570ec535bcdbb28.hot-update.js",
"/js/main.4d7397481511eba8c454.hot-update.js": "/js/main.4d7397481511eba8c454.hot-update.js",
"/js/main.3c77b8175b2b9a6e3212.hot-update.js": "/js/main.3c77b8175b2b9a6e3212.hot-update.js",
"/js/main.24c4f93ebebb137492b1.hot-update.js": "/js/main.24c4f93ebebb137492b1.hot-update.js",
"/js/main.7cd7ddded3974c828799.hot-update.js": "/js/main.7cd7ddded3974c828799.hot-update.js",
"/js/main.695d3326e0294da3f532.hot-update.js": "/js/main.695d3326e0294da3f532.hot-update.js",
"/js/main.828bc145abbb6764ac01.hot-update.js": "/js/main.828bc145abbb6764ac01.hot-update.js",
"/js/main.0f0f76487d80ed6498d0.hot-update.js": "/js/main.0f0f76487d80ed6498d0.hot-update.js",
"/js/main.89d9b57d5aed031dd88c.hot-update.js": "/js/main.89d9b57d5aed031dd88c.hot-update.js",
"/js/main.27200ce35055fc58a734.hot-update.js": "/js/main.27200ce35055fc58a734.hot-update.js",
"/js/main.7919f0cae849b26ebc3e.hot-update.js": "/js/main.7919f0cae849b26ebc3e.hot-update.js",
"/js/main.55ae03f9fc60c32a00c3.hot-update.js": "/js/main.55ae03f9fc60c32a00c3.hot-update.js",
"/js/main.1232b65bec68e541261b.hot-update.js": "/js/main.1232b65bec68e541261b.hot-update.js",
"/js/main.8f2ee96210ab02cedea1.hot-update.js": "/js/main.8f2ee96210ab02cedea1.hot-update.js",
"/js/main.73cd77f44d0ff3e3176a.hot-update.js": "/js/main.73cd77f44d0ff3e3176a.hot-update.js",
"/js/main.3d55061b4f6152ddd121.hot-update.js": "/js/main.3d55061b4f6152ddd121.hot-update.js",
"/js/main.ab8de9ea0fe8ec65b9b5.hot-update.js": "/js/main.ab8de9ea0fe8ec65b9b5.hot-update.js",
"/js/main.145ce7ce472bbb94b0e4.hot-update.js": "/js/main.145ce7ce472bbb94b0e4.hot-update.js",
"/js/main.6fff5041d2139d02b16c.hot-update.js": "/js/main.6fff5041d2139d02b16c.hot-update.js",
"/js/main.3732624691f3c89038a8.hot-update.js": "/js/main.3732624691f3c89038a8.hot-update.js",
"/js/main.323fa7a67c34a5dbed41.hot-update.js": "/js/main.323fa7a67c34a5dbed41.hot-update.js",
"/js/main.558890a7e45943667f42.hot-update.js": "/js/main.558890a7e45943667f42.hot-update.js",
"/js/main.e8639fe53d0bc2f9c075.hot-update.js": "/js/main.e8639fe53d0bc2f9c075.hot-update.js",
"/js/main.c26183ff455c7a0ba2bc.hot-update.js": "/js/main.c26183ff455c7a0ba2bc.hot-update.js",
"/js/main.c5363f89becf3962a8a9.hot-update.js": "/js/main.c5363f89becf3962a8a9.hot-update.js",
"/js/main.1bbe5b2d0e8abc9593eb.hot-update.js": "/js/main.1bbe5b2d0e8abc9593eb.hot-update.js",
"/js/main.1016ae260ab41d4d60d4.hot-update.js": "/js/main.1016ae260ab41d4d60d4.hot-update.js",
"/js/main.8db658d779f88345fee4.hot-update.js": "/js/main.8db658d779f88345fee4.hot-update.js",
"/js/main.b678b3d77f37839d1f7a.hot-update.js": "/js/main.b678b3d77f37839d1f7a.hot-update.js",
"/js/main.744f613d1e714c12ed5b.hot-update.js": "/js/main.744f613d1e714c12ed5b.hot-update.js",
"/js/main.658ca470f6baaea9af4d.hot-update.js": "/js/main.658ca470f6baaea9af4d.hot-update.js",
"/js/main.e130c511a816f5706573.hot-update.js": "/js/main.e130c511a816f5706573.hot-update.js",
"/js/main.76b1d7ddd721a25b97f9.hot-update.js": "/js/main.76b1d7ddd721a25b97f9.hot-update.js",
"/js/main.05b32b92f0b803c49e60.hot-update.js": "/js/main.05b32b92f0b803c49e60.hot-update.js",
"/js/main.53e7251368b6f6d372ab.hot-update.js": "/js/main.53e7251368b6f6d372ab.hot-update.js",
"/js/main.5b416860fb7e890be1b9.hot-update.js": "/js/main.5b416860fb7e890be1b9.hot-update.js",
"/js/main.efbb626766a958269c45.hot-update.js": "/js/main.efbb626766a958269c45.hot-update.js",
"/js/main.eb5b4e6bfbfb52e07e69.hot-update.js": "/js/main.eb5b4e6bfbfb52e07e69.hot-update.js",
"/js/main.9e19bf8d2a3bd75d2fb1.hot-update.js": "/js/main.9e19bf8d2a3bd75d2fb1.hot-update.js",
"/js/main.707d8fd922651d415b0b.hot-update.js": "/js/main.707d8fd922651d415b0b.hot-update.js",
"/js/main.203edfce73488ee73a57.hot-update.js": "/js/main.203edfce73488ee73a57.hot-update.js",
"/js/main.2d25c25f516cc043784f.hot-update.js": "/js/main.2d25c25f516cc043784f.hot-update.js",
"/js/main.0933464207540fa40ebd.hot-update.js": "/js/main.0933464207540fa40ebd.hot-update.js",
"/js/main.4e005b6c88bcad50ad41.hot-update.js": "/js/main.4e005b6c88bcad50ad41.hot-update.js",
"/js/main.d5ed4d7d8aae0e741f81.hot-update.js": "/js/main.d5ed4d7d8aae0e741f81.hot-update.js",
"/js/main.ccbd9fa5bef657830fcd.hot-update.js": "/js/main.ccbd9fa5bef657830fcd.hot-update.js",
"/js/main.b3b669a720795d848fa0.hot-update.js": "/js/main.b3b669a720795d848fa0.hot-update.js",
"/js/main.9620631ede7cb7b2d0ac.hot-update.js": "/js/main.9620631ede7cb7b2d0ac.hot-update.js",
"/js/main.85db3fa89d441d5a1c02.hot-update.js": "/js/main.85db3fa89d441d5a1c02.hot-update.js",
"/js/main.42ae11ec799144cae3f3.hot-update.js": "/js/main.42ae11ec799144cae3f3.hot-update.js",
"/js/main.2f603032ba0d6204a269.hot-update.js": "/js/main.2f603032ba0d6204a269.hot-update.js",
"/js/main.8ac83f5b5eacbb882c16.hot-update.js": "/js/main.8ac83f5b5eacbb882c16.hot-update.js",
"/js/main.47b8be544de762157c5a.hot-update.js": "/js/main.47b8be544de762157c5a.hot-update.js",
"/js/main.106128b5d2fc9881a916.hot-update.js": "/js/main.106128b5d2fc9881a916.hot-update.js",
"/js/main.83bf778bb4df7f7bbb20.hot-update.js": "/js/main.83bf778bb4df7f7bbb20.hot-update.js",
"/js/main.f84c193ff16aec6bf8bf.hot-update.js": "/js/main.f84c193ff16aec6bf8bf.hot-update.js",
"/js/main.2f9e799e5817e5b99f13.hot-update.js": "/js/main.2f9e799e5817e5b99f13.hot-update.js",
"/js/main.9d764f2764fee87cb071.hot-update.js": "/js/main.9d764f2764fee87cb071.hot-update.js",
"/js/main.8f497de70fcfe9cae748.hot-update.js": "/js/main.8f497de70fcfe9cae748.hot-update.js",
"/js/main.2e84a1e5edd047c357e4.hot-update.js": "/js/main.2e84a1e5edd047c357e4.hot-update.js",
"/js/main.31f62b5157a78b69bdc3.hot-update.js": "/js/main.31f62b5157a78b69bdc3.hot-update.js",
"/js/main.883aae9bd1f10b0a39d0.hot-update.js": "/js/main.883aae9bd1f10b0a39d0.hot-update.js",
"/js/main.dfaad5213fb0446dc59f.hot-update.js": "/js/main.dfaad5213fb0446dc59f.hot-update.js",
"/js/main.358890311033fcbcda1b.hot-update.js": "/js/main.358890311033fcbcda1b.hot-update.js",
"/js/main.776c3466afcacdaef082.hot-update.js": "/js/main.776c3466afcacdaef082.hot-update.js",
"/js/main.660cfe8313c1662c8abe.hot-update.js": "/js/main.660cfe8313c1662c8abe.hot-update.js",
"/js/main.5289757e5c910408a662.hot-update.js": "/js/main.5289757e5c910408a662.hot-update.js",
"/js/main.634b6c4a6184da7f59fb.hot-update.js": "/js/main.634b6c4a6184da7f59fb.hot-update.js",
"/js/main.d3a4f2cf9d438b4fa893.hot-update.js": "/js/main.d3a4f2cf9d438b4fa893.hot-update.js",
"/js/main.8261f750ce4d91e7e5ac.hot-update.js": "/js/main.8261f750ce4d91e7e5ac.hot-update.js",
"/js/main.15a58ecd277cfef2657a.hot-update.js": "/js/main.15a58ecd277cfef2657a.hot-update.js",
"/js/main.2f58765abd4f4dc56274.hot-update.js": "/js/main.2f58765abd4f4dc56274.hot-update.js",
"/js/main.81a13254d54da2b40824.hot-update.js": "/js/main.81a13254d54da2b40824.hot-update.js",
"/js/main.f2b15334cba9c1ad8a8c.hot-update.js": "/js/main.f2b15334cba9c1ad8a8c.hot-update.js",
"/js/main.97aae53478c639b6dddc.hot-update.js": "/js/main.97aae53478c639b6dddc.hot-update.js",
"/js/main.3556dd93d5467ba7578f.hot-update.js": "/js/main.3556dd93d5467ba7578f.hot-update.js",
"/js/main.d4752d11ab4947241ce2.hot-update.js": "/js/main.d4752d11ab4947241ce2.hot-update.js",
"/js/main.e4e417569a21748ac27c.hot-update.js": "/js/main.e4e417569a21748ac27c.hot-update.js",
"/js/main.31ab6e3fe5983c66b4de.hot-update.js": "/js/main.31ab6e3fe5983c66b4de.hot-update.js",
"/js/main.4506bb17444908aa41e4.hot-update.js": "/js/main.4506bb17444908aa41e4.hot-update.js",
"/js/main.465fec596123d2a33496.hot-update.js": "/js/main.465fec596123d2a33496.hot-update.js",
"/js/main.df3aea3e25f48b02f55c.hot-update.js": "/js/main.df3aea3e25f48b02f55c.hot-update.js",
"/js/main.a64a4facc8cdb6a27254.hot-update.js": "/js/main.a64a4facc8cdb6a27254.hot-update.js",
"/js/main.2cfa2fde63ab332f6217.hot-update.js": "/js/main.2cfa2fde63ab332f6217.hot-update.js",
"/js/main.d1b1a4dab844221ff2d4.hot-update.js": "/js/main.d1b1a4dab844221ff2d4.hot-update.js",
"/js/main.401276474ed29c8ef833.hot-update.js": "/js/main.401276474ed29c8ef833.hot-update.js",
"/js/main.de65f4d9e0bf1e34dd35.hot-update.js": "/js/main.de65f4d9e0bf1e34dd35.hot-update.js",
"/js/main.4cff35830fcab78517a2.hot-update.js": "/js/main.4cff35830fcab78517a2.hot-update.js",
"/js/main.a092dc0af19cf2b87b22.hot-update.js": "/js/main.a092dc0af19cf2b87b22.hot-update.js",
"/js/main.45c685c3ee231c4b52e1.hot-update.js": "/js/main.45c685c3ee231c4b52e1.hot-update.js",
"/js/main.0f25388706a75d546630.hot-update.js": "/js/main.0f25388706a75d546630.hot-update.js",
"/js/main.b20b819e30d8535d32ca.hot-update.js": "/js/main.b20b819e30d8535d32ca.hot-update.js",
"/js/main.6cc87644e20a2ec17250.hot-update.js": "/js/main.6cc87644e20a2ec17250.hot-update.js",
"/js/main.144619637eba40e6f022.hot-update.js": "/js/main.144619637eba40e6f022.hot-update.js",
"/js/main.d327a1158c2756681935.hot-update.js": "/js/main.d327a1158c2756681935.hot-update.js",
"/js/main.c4483a903ccc551c48f5.hot-update.js": "/js/main.c4483a903ccc551c48f5.hot-update.js",
"/js/main.2e1ba7646fe92963192c.hot-update.js": "/js/main.2e1ba7646fe92963192c.hot-update.js",
"/js/main.2b62171bbbe844b488f3.hot-update.js": "/js/main.2b62171bbbe844b488f3.hot-update.js",
"/js/main.c83c87f33fefb0d5095c.hot-update.js": "/js/main.c83c87f33fefb0d5095c.hot-update.js",
"/js/main.34c17c3fe4b99b277081.hot-update.js": "/js/main.34c17c3fe4b99b277081.hot-update.js",
"/js/main.dfd8477f6cc1005038b5.hot-update.js": "/js/main.dfd8477f6cc1005038b5.hot-update.js",
"/js/main.958c8568de3cdf55a48f.hot-update.js": "/js/main.958c8568de3cdf55a48f.hot-update.js",
"/js/main.d60efae4269157afdea4.hot-update.js": "/js/main.d60efae4269157afdea4.hot-update.js",
"/js/main.c82f65f2d15889961770.hot-update.js": "/js/main.c82f65f2d15889961770.hot-update.js",
"/js/main.994ce6d70c8e507d70ad.hot-update.js": "/js/main.994ce6d70c8e507d70ad.hot-update.js",
"/js/main.d3a7731565736f2efc4f.hot-update.js": "/js/main.d3a7731565736f2efc4f.hot-update.js",
"/js/main.c3055934074cef2f8658.hot-update.js": "/js/main.c3055934074cef2f8658.hot-update.js",
"/js/main.1a9211874c7670611fa9.hot-update.js": "/js/main.1a9211874c7670611fa9.hot-update.js",
"/js/main.c384d3c61f6683842ff6.hot-update.js": "/js/main.c384d3c61f6683842ff6.hot-update.js",
"/js/main.0a1d1d6fab186adde3f3.hot-update.js": "/js/main.0a1d1d6fab186adde3f3.hot-update.js",
"/js/main.e8e51b9f621ac71e6824.hot-update.js": "/js/main.e8e51b9f621ac71e6824.hot-update.js",
"/js/main.775033763e36c26f30b1.hot-update.js": "/js/main.775033763e36c26f30b1.hot-update.js",
"/js/main.8ed87c301eec11775e7c.hot-update.js": "/js/main.8ed87c301eec11775e7c.hot-update.js",
"/js/main.54178160887d0b92212b.hot-update.js": "/js/main.54178160887d0b92212b.hot-update.js",
"/js/main.89c18406b0ee0cd034a0.hot-update.js": "/js/main.89c18406b0ee0cd034a0.hot-update.js",
"/js/main.511f968245b7479a82a9.hot-update.js": "/js/main.511f968245b7479a82a9.hot-update.js",
"/js/main.7482ef499551ac74d714.hot-update.js": "/js/main.7482ef499551ac74d714.hot-update.js",
"/js/main.1ef12a69cc1c7148c9e9.hot-update.js": "/js/main.1ef12a69cc1c7148c9e9.hot-update.js",
"/js/main.ca2cae0e79ae99c6a39b.hot-update.js": "/js/main.ca2cae0e79ae99c6a39b.hot-update.js",
"/js/main.ecd645c40985db5b2b63.hot-update.js": "/js/main.ecd645c40985db5b2b63.hot-update.js",
"/js/main.76cb454a020aa4748f6d.hot-update.js": "/js/main.76cb454a020aa4748f6d.hot-update.js",
"/js/main.1c2b5d0ffa57bd499fac.hot-update.js": "/js/main.1c2b5d0ffa57bd499fac.hot-update.js",
"/js/main.25e0c7c86202c8fc97cb.hot-update.js": "/js/main.25e0c7c86202c8fc97cb.hot-update.js",
"/js/main.ebd9eec92676a7b78555.hot-update.js": "/js/main.ebd9eec92676a7b78555.hot-update.js",
"/js/main.531f9b2830c4f83dfc8e.hot-update.js": "/js/main.531f9b2830c4f83dfc8e.hot-update.js",
"/js/main.f8fa5f29023dfdaa9cbd.hot-update.js": "/js/main.f8fa5f29023dfdaa9cbd.hot-update.js",
"/js/main.7e68c966f53cbf5f550a.hot-update.js": "/js/main.7e68c966f53cbf5f550a.hot-update.js",
"/js/main.424881ff861d3b67909c.hot-update.js": "/js/main.424881ff861d3b67909c.hot-update.js",
"/js/main.2ef8fb4ea78052fe413a.hot-update.js": "/js/main.2ef8fb4ea78052fe413a.hot-update.js",
"/js/main.3bd05708ee122ca84f22.hot-update.js": "/js/main.3bd05708ee122ca84f22.hot-update.js",
"/js/main.1a57bcaa919c733d2363.hot-update.js": "/js/main.1a57bcaa919c733d2363.hot-update.js",
"/js/main.7b1e18cb2577dcdb780e.hot-update.js": "/js/main.7b1e18cb2577dcdb780e.hot-update.js",
"/js/main.54ca8adfafdcafc86b0f.hot-update.js": "/js/main.54ca8adfafdcafc86b0f.hot-update.js",
"/js/main.2e70035a3831fd25a670.hot-update.js": "/js/main.2e70035a3831fd25a670.hot-update.js",
"/js/main.f7dbfad8184fb6bd1f3b.hot-update.js": "/js/main.f7dbfad8184fb6bd1f3b.hot-update.js",
"/js/main.28d7761029580ddb8b6d.hot-update.js": "/js/main.28d7761029580ddb8b6d.hot-update.js",
"/js/main.6473f21ab99f0e5fb932.hot-update.js": "/js/main.6473f21ab99f0e5fb932.hot-update.js",
"/js/main.6ad50c1b7903b92ba427.hot-update.js": "/js/main.6ad50c1b7903b92ba427.hot-update.js",
"/js/main.2065aabe6bc944092c8a.hot-update.js": "/js/main.2065aabe6bc944092c8a.hot-update.js",
"/js/main.f9d46d237d830099bf7e.hot-update.js": "/js/main.f9d46d237d830099bf7e.hot-update.js",
"/js/main.0a21921c6dcb9ba365ad.hot-update.js": "/js/main.0a21921c6dcb9ba365ad.hot-update.js",
"/js/main.bf306d93cfdf64aa4785.hot-update.js": "/js/main.bf306d93cfdf64aa4785.hot-update.js",
"/js/main.ad81c2c87cddc3b7931d.hot-update.js": "/js/main.ad81c2c87cddc3b7931d.hot-update.js",
"/js/main.c0c1083a368f085c4097.hot-update.js": "/js/main.c0c1083a368f085c4097.hot-update.js",
"/js/main.762b561a9d603136ae2e.hot-update.js": "/js/main.762b561a9d603136ae2e.hot-update.js",
"/js/main.e048f9e3a89c34484df7.hot-update.js": "/js/main.e048f9e3a89c34484df7.hot-update.js",
"/js/main.9b774a764bb2a0375fe8.hot-update.js": "/js/main.9b774a764bb2a0375fe8.hot-update.js",
"/js/main.6827b30460cd982e2595.hot-update.js": "/js/main.6827b30460cd982e2595.hot-update.js",
"/js/main.07f5295cb85c4dcb7d8b.hot-update.js": "/js/main.07f5295cb85c4dcb7d8b.hot-update.js",
"/js/main.8b3330154c1811025d6d.hot-update.js": "/js/main.8b3330154c1811025d6d.hot-update.js",
"/js/main.ac01db55c5f7db9172c2.hot-update.js": "/js/main.ac01db55c5f7db9172c2.hot-update.js",
"/js/main.adb096503965dbb1b2e5.hot-update.js": "/js/main.adb096503965dbb1b2e5.hot-update.js",
"/js/main.b7c241e00bf850fe5d00.hot-update.js": "/js/main.b7c241e00bf850fe5d00.hot-update.js",
"/js/main.5f1598ffa46642a78fa8.hot-update.js": "/js/main.5f1598ffa46642a78fa8.hot-update.js",
"/js/main.23f788a0532912bb398e.hot-update.js": "/js/main.23f788a0532912bb398e.hot-update.js",
"/js/main.e28c1ebe470e1621e454.hot-update.js": "/js/main.e28c1ebe470e1621e454.hot-update.js",
"/js/main.a046555856f75f205a4f.hot-update.js": "/js/main.a046555856f75f205a4f.hot-update.js",
"/js/main.9a8f6af2013ff077336f.hot-update.js": "/js/main.9a8f6af2013ff077336f.hot-update.js",
"/js/main.00fd6674fa13cb87d6f4.hot-update.js": "/js/main.00fd6674fa13cb87d6f4.hot-update.js",
"/js/main.9dc88fa476ec8939f323.hot-update.js": "/js/main.9dc88fa476ec8939f323.hot-update.js",
"/js/main.a29a5ff36d20d75ba72a.hot-update.js": "/js/main.a29a5ff36d20d75ba72a.hot-update.js",
"/js/main.63effaa97b289c9d6838.hot-update.js": "/js/main.63effaa97b289c9d6838.hot-update.js",
"/js/main.f9246e02328bdc45a608.hot-update.js": "/js/main.f9246e02328bdc45a608.hot-update.js",
"/js/main.500718e0195bfe14cfbe.hot-update.js": "/js/main.500718e0195bfe14cfbe.hot-update.js",
"/js/main.73a15e81347d9912a4a8.hot-update.js": "/js/main.73a15e81347d9912a4a8.hot-update.js",
"/js/main.9b4a6c9b260dc7dbcb7f.hot-update.js": "/js/main.9b4a6c9b260dc7dbcb7f.hot-update.js",
"/js/main.ee349c1929f3d838ba92.hot-update.js": "/js/main.ee349c1929f3d838ba92.hot-update.js",
"/js/main.10e2dc3ab31e05bd3d72.hot-update.js": "/js/main.10e2dc3ab31e05bd3d72.hot-update.js",
"/js/main.49d30181a44d314a8837.hot-update.js": "/js/main.49d30181a44d314a8837.hot-update.js",
"/js/main.73d1b20aa4640e18c516.hot-update.js": "/js/main.73d1b20aa4640e18c516.hot-update.js",
"/js/main.6c3018119ce8495132b9.hot-update.js": "/js/main.6c3018119ce8495132b9.hot-update.js",
"/js/main.4ca90bdb0b28a0bac77f.hot-update.js": "/js/main.4ca90bdb0b28a0bac77f.hot-update.js",
"/js/main.84c1025500258c824186.hot-update.js": "/js/main.84c1025500258c824186.hot-update.js",
"/js/main.801e23504da473fa4b55.hot-update.js": "/js/main.801e23504da473fa4b55.hot-update.js",
"/js/main.32006f8d1211bd1ac2d7.hot-update.js": "/js/main.32006f8d1211bd1ac2d7.hot-update.js",
"/js/main.6a8d550c3990db7478c9.hot-update.js": "/js/main.6a8d550c3990db7478c9.hot-update.js",
"/js/main.5004134af690ec32aab1.hot-update.js": "/js/main.5004134af690ec32aab1.hot-update.js",
"/js/main.41634a1144614d807088.hot-update.js": "/js/main.41634a1144614d807088.hot-update.js",
"/js/main.d5f5f898597444704b60.hot-update.js": "/js/main.d5f5f898597444704b60.hot-update.js",
"/js/main.1e664feef8de56e212bf.hot-update.js": "/js/main.1e664feef8de56e212bf.hot-update.js",
"/js/main.7d581e0210378fd8757b.hot-update.js": "/js/main.7d581e0210378fd8757b.hot-update.js",
"/js/main.43b5aacba74bd554e95c.hot-update.js": "/js/main.43b5aacba74bd554e95c.hot-update.js",
"/js/main.ad3ea3b4851e9f50bb7f.hot-update.js": "/js/main.ad3ea3b4851e9f50bb7f.hot-update.js",
"/js/main.bdf1d8ae0bd5f0c94dff.hot-update.js": "/js/main.bdf1d8ae0bd5f0c94dff.hot-update.js",
"/js/main.69ba7f1ac532e280a94a.hot-update.js": "/js/main.69ba7f1ac532e280a94a.hot-update.js",
"/js/main.d987f755c87ecbfa5a54.hot-update.js": "/js/main.d987f755c87ecbfa5a54.hot-update.js",
"/js/main.0c8af3123ef7c883d969.hot-update.js": "/js/main.0c8af3123ef7c883d969.hot-update.js",
"/js/main.187b03b68915fef4bcb1.hot-update.js": "/js/main.187b03b68915fef4bcb1.hot-update.js",
"/js/main.dffcb583fa1d4ecffc97.hot-update.js": "/js/main.dffcb583fa1d4ecffc97.hot-update.js",
"/js/main.ddca0fc165dac2a29682.hot-update.js": "/js/main.ddca0fc165dac2a29682.hot-update.js",
"/js/main.c17ff75670faa18dd933.hot-update.js": "/js/main.c17ff75670faa18dd933.hot-update.js",
"/js/main.c3eb6b86b455442d8462.hot-update.js": "/js/main.c3eb6b86b455442d8462.hot-update.js",
"/js/main.77c52a7cc53e20947fd7.hot-update.js": "/js/main.77c52a7cc53e20947fd7.hot-update.js",
"/js/main.a616e4cc7a01e8eed242.hot-update.js": "/js/main.a616e4cc7a01e8eed242.hot-update.js",
"/js/main.112dc6ed841f7b808cd8.hot-update.js": "/js/main.112dc6ed841f7b808cd8.hot-update.js",
"/js/main.803859a312ac4e748eff.hot-update.js": "/js/main.803859a312ac4e748eff.hot-update.js",
"/js/main.20cbb4dd19418a5ff851.hot-update.js": "/js/main.20cbb4dd19418a5ff851.hot-update.js",
"/js/main.e25f013b63dc4f541703.hot-update.js": "/js/main.e25f013b63dc4f541703.hot-update.js",
"/js/main.77b2e8162a148bf7a03e.hot-update.js": "/js/main.77b2e8162a148bf7a03e.hot-update.js",
"/js/main.a0f4da8f4727cc6aa706.hot-update.js": "/js/main.a0f4da8f4727cc6aa706.hot-update.js",
"/js/main.810f0d4e727c93679a80.hot-update.js": "/js/main.810f0d4e727c93679a80.hot-update.js",
"/js/main.5953d70bc531273f9b20.hot-update.js": "/js/main.5953d70bc531273f9b20.hot-update.js",
"/js/main.af6b95d41bf9c597c9d1.hot-update.js": "/js/main.af6b95d41bf9c597c9d1.hot-update.js",
"/js/main.b47cb69eb422e75a2ab1.hot-update.js": "/js/main.b47cb69eb422e75a2ab1.hot-update.js",
"/js/main.4147f07ef2cb895c2cfa.hot-update.js": "/js/main.4147f07ef2cb895c2cfa.hot-update.js",
"/js/main.2804ef0f8afb2870c619.hot-update.js": "/js/main.2804ef0f8afb2870c619.hot-update.js",
"/js/main.375bcf3d9411d45c5e8c.hot-update.js": "/js/main.375bcf3d9411d45c5e8c.hot-update.js",
"/js/main.92e2e5e9645d0695e9d8.hot-update.js": "/js/main.92e2e5e9645d0695e9d8.hot-update.js",
"/js/main.ba0c049a37bf7b2a6b79.hot-update.js": "/js/main.ba0c049a37bf7b2a6b79.hot-update.js",
"/js/main.1ef909b95fa306a007d7.hot-update.js": "/js/main.1ef909b95fa306a007d7.hot-update.js",
"/js/main.890b46569bf4f0d2d100.hot-update.js": "/js/main.890b46569bf4f0d2d100.hot-update.js",
"/js/main.c93eb7f3891224263841.hot-update.js": "/js/main.c93eb7f3891224263841.hot-update.js",
"/js/main.e8ed183cd2e394932a9d.hot-update.js": "/js/main.e8ed183cd2e394932a9d.hot-update.js",
"/js/main.a77ed20147d5635562a9.hot-update.js": "/js/main.a77ed20147d5635562a9.hot-update.js",
"/js/main.4ed3ccf3488d1d2a2734.hot-update.js": "/js/main.4ed3ccf3488d1d2a2734.hot-update.js",
"/js/main.0d144f90bc5ed08d20d7.hot-update.js": "/js/main.0d144f90bc5ed08d20d7.hot-update.js",
"/js/main.d0f95d4ae27cb5a01879.hot-update.js": "/js/main.d0f95d4ae27cb5a01879.hot-update.js",
"/js/main.591c675411457ff698d7.hot-update.js": "/js/main.591c675411457ff698d7.hot-update.js",
"/js/main.cccd40ca7d095723a593.hot-update.js": "/js/main.cccd40ca7d095723a593.hot-update.js",
"/js/main.a109b65ef389a64af5d7.hot-update.js": "/js/main.a109b65ef389a64af5d7.hot-update.js",
"/js/main.22245e61bfcf217f706c.hot-update.js": "/js/main.22245e61bfcf217f706c.hot-update.js",
"/js/main.8c11dfdfaf17845cf09a.hot-update.js": "/js/main.8c11dfdfaf17845cf09a.hot-update.js",
"/js/main.9aff70c5a90a45f159ad.hot-update.js": "/js/main.9aff70c5a90a45f159ad.hot-update.js",
"/js/main.a6168da255f2e7292bcb.hot-update.js": "/js/main.a6168da255f2e7292bcb.hot-update.js",
"/js/main.4242915892933878df4c.hot-update.js": "/js/main.4242915892933878df4c.hot-update.js",
"/js/main.1c80def7a370934633e7.hot-update.js": "/js/main.1c80def7a370934633e7.hot-update.js",
"/js/main.cd80b1fb07f07420d608.hot-update.js": "/js/main.cd80b1fb07f07420d608.hot-update.js",
"/js/main.1ccf6e520ad498fb2dce.hot-update.js": "/js/main.1ccf6e520ad498fb2dce.hot-update.js",
"/js/main.296239d53f66ab2fe920.hot-update.js": "/js/main.296239d53f66ab2fe920.hot-update.js",
"/js/main.dbc6bc0bff80198fcc64.hot-update.js": "/js/main.dbc6bc0bff80198fcc64.hot-update.js",
"/js/main.895bd9fbff26fa41b091.hot-update.js": "/js/main.895bd9fbff26fa41b091.hot-update.js",
"/js/main.3f23297a5d372abb53b1.hot-update.js": "/js/main.3f23297a5d372abb53b1.hot-update.js",
"/js/main.982c4e64795569baaf11.hot-update.js": "/js/main.982c4e64795569baaf11.hot-update.js",
"/js/main.0c91d51f2932b21309cf.hot-update.js": "/js/main.0c91d51f2932b21309cf.hot-update.js",
"/js/main.489c51acf78aba232d2a.hot-update.js": "/js/main.489c51acf78aba232d2a.hot-update.js",
"/js/main.d5ebd32402e90e219490.hot-update.js": "/js/main.d5ebd32402e90e219490.hot-update.js",
"/js/main.cf74f45631e4e7b5ac5c.hot-update.js": "/js/main.cf74f45631e4e7b5ac5c.hot-update.js",
"/js/main.c38976e7274736bb0902.hot-update.js": "/js/main.c38976e7274736bb0902.hot-update.js",
"/js/main.a8a7587e5999f33b671b.hot-update.js": "/js/main.a8a7587e5999f33b671b.hot-update.js",
"/js/main.083f5f31b0cee3b68c36.hot-update.js": "/js/main.083f5f31b0cee3b68c36.hot-update.js",
"/js/main.31b6183ff88b806a8468.hot-update.js": "/js/main.31b6183ff88b806a8468.hot-update.js",
"/js/main.3541bb5c59c00646fcec.hot-update.js": "/js/main.3541bb5c59c00646fcec.hot-update.js",
"/js/main.f3b8c97d25f214197e22.hot-update.js": "/js/main.f3b8c97d25f214197e22.hot-update.js",
"/js/main.03abfdfa85dbfadbb25a.hot-update.js": "/js/main.03abfdfa85dbfadbb25a.hot-update.js",
"/js/main.91ddc8d424d3311b18bc.hot-update.js": "/js/main.91ddc8d424d3311b18bc.hot-update.js",
"/js/main.5f442f8e52b045ff877e.hot-update.js": "/js/main.5f442f8e52b045ff877e.hot-update.js",
"/js/main.027e65e5617c5e8ebc36.hot-update.js": "/js/main.027e65e5617c5e8ebc36.hot-update.js"
"/js/main.9a27394a2df24ee693e3.hot-update.js": "/js/main.9a27394a2df24ee693e3.hot-update.js"
}

View File

@@ -74,7 +74,7 @@ const actions = {
},
getSingleFile: ({commit, state}) => {
let route = state.sharedDetail.protected ? '/api/file-private/' : '/api/file-public/' + router.currentRoute.params.token
let route = state.sharedDetail.protected ? '/api/files/private' : '/api/files/' + router.currentRoute.params.token + '/public'
axios.get(route)
.then(response => {

View File

@@ -31,7 +31,7 @@ Route::group(['middleware' => ['api']], function () {
// Sharing
Route::get('/folders/{unique_id}/public/{token}', 'Sharing\FileSharingController@get_public_folders');
Route::post('/shared/authenticate/{token}', 'Sharing\FileSharingController@authenticate');
Route::get('/file-public/{token}', 'Sharing\FileSharingController@file_public');
Route::get('/files/{token}/public', 'Sharing\FileSharingController@file_public');
Route::get('/shared/{token}', 'FileFunctions\ShareController@show');
});
@@ -71,20 +71,12 @@ Route::group(['middleware' => ['auth:api', 'auth.cookie', 'scope:master']], func
Route::get('/logout', 'Auth\AuthController@logout');
});
// Protected sharing routes for public user
// Protected sharing routes for authenticated user
Route::group(['middleware' => ['auth:api', 'auth.cookie', 'scope:visitor,editor']], function () {
// Browse folders & files
Route::get('/folders/{unique_id}/private', 'Sharing\FileSharingController@get_private_folders');
Route::get('/file-private', 'Sharing\FileSharingController@file_private');
});
// User master,editor routes
Route::group(['middleware' => ['auth:api', 'auth.cookie', 'scope:master,editor,visitor']], function () {
// File routes
Route::get('/thumbnail/{name}', 'FileAccessController@get_thumbnail')->name('thumbnail');
Route::get('/file/{name}', 'FileAccessController@get_file')->name('file');
Route::get('/files/private', 'Sharing\FileSharingController@file_private');
});
// User master,editor routes

View File

@@ -11,11 +11,17 @@
|
*/
// Get user avatar
// Get public thumbnails and files
Route::get('/thumbnail/{name}/public/{token}', 'FileAccessController@get_thumbnail_public');
Route::get('/avatars/{avatar}', 'FileAccessController@get_avatar')->name('avatar');
Route::get('/file/{name}/public/{token}', 'FileAccessController@get_file_public');
// Get shared page
// User master,editor,visitor access to image thumbnails and file downloads
Route::group(['middleware' => ['auth:api', 'auth.cookie', 'scope:master,editor,visitor']], function () {
Route::get('/thumbnail/{name}', 'FileAccessController@get_thumbnail')->name('thumbnail');
Route::get('/file/{name}', 'FileAccessController@get_file')->name('file');
});
// Pages
Route::get('/shared/{token}', 'Sharing\FileSharingController@index');
// Index Page
Route::get('/{any?}', 'AppFunctionsController@index')->where('any', '.*');
Route::get('/{any?}', 'AppFunctionsController@index')->where('any', '.*');