mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-05-13 08:45:01 +00:00
Merge remote-tracking branch 'origin/email-verification'
# Conflicts: # composer.lock # public/mix-manifest.json # tests/TestCase.php
This commit is contained in:
+13
-7
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
$finder = PhpCsFixer\Finder::create()
|
$finder = Symfony\Component\Finder\Finder::create()
|
||||||
->in([
|
->in([
|
||||||
__DIR__ . '/app',
|
__DIR__ . '/app',
|
||||||
__DIR__ . '/routes',
|
__DIR__ . '/routes',
|
||||||
@@ -11,24 +11,29 @@ $finder = PhpCsFixer\Finder::create()
|
|||||||
->ignoreDotFiles(true)
|
->ignoreDotFiles(true)
|
||||||
->ignoreVCS(true);
|
->ignoreVCS(true);
|
||||||
|
|
||||||
$config = new PhpCsFixer\Config();
|
return PhpCsFixer\Config::create()
|
||||||
return $config->setRules([
|
->setRules([
|
||||||
'@PSR2' => true,
|
'@PSR2' => true,
|
||||||
'array_syntax' => [
|
'array_syntax' => [
|
||||||
'syntax' => 'short'
|
'syntax' => 'short'
|
||||||
],
|
],
|
||||||
'ordered_imports' => [
|
'ordered_imports' => [
|
||||||
'sort_algorithm' => 'length'
|
'sortAlgorithm' => 'length'
|
||||||
],
|
],
|
||||||
'blank_line_before_statement' => [
|
'blank_line_before_statement' => [
|
||||||
'statements' => ['break', 'case', 'continue', 'declare', 'default', 'do', 'exit', 'for', 'foreach', 'goto', 'if', 'include', 'include_once', 'require', 'require_once', 'return', 'switch', 'throw', 'try', 'while', 'yield', 'yield_from'],
|
'statements' => ['break', 'case', 'continue', 'declare', 'default', 'die', 'do', 'exit', 'for', 'foreach', 'goto', 'if', 'include', 'include_once', 'require', 'require_once', 'return', 'switch', 'throw', 'try', 'while', 'yield', 'yield_from'],
|
||||||
|
],
|
||||||
|
'class_attributes_separation' => [
|
||||||
|
'elements' => [
|
||||||
|
'method',
|
||||||
|
],
|
||||||
],
|
],
|
||||||
'method_argument_space' => [
|
'method_argument_space' => [
|
||||||
'on_multiline' => 'ensure_fully_multiline',
|
'on_multiline' => 'ensure_fully_multiline',
|
||||||
'keep_multiple_spaces_after_comma' => true,
|
'keep_multiple_spaces_after_comma' => true,
|
||||||
],
|
],
|
||||||
'no_extra_blank_lines' => [
|
'no_extra_blank_lines' => [
|
||||||
'tokens' => ['break', 'case', 'continue', 'curly_brace_block', 'default', 'extra', 'parenthesis_brace_block', 'return', 'square_brace_block', 'switch', 'throw', 'use', 'use_trait'],
|
'break', 'case', 'continue', 'curly_brace_block', 'default', 'extra', 'parenthesis_brace_block', 'return', 'square_brace_block', 'switch', 'throw', 'use', 'useTrait', 'use_trait'
|
||||||
],
|
],
|
||||||
'cast_spaces' => [
|
'cast_spaces' => [
|
||||||
'space' => 'single'
|
'space' => 'single'
|
||||||
@@ -39,11 +44,12 @@ return $config->setRules([
|
|||||||
'single_line_after_imports' => true,
|
'single_line_after_imports' => true,
|
||||||
'no_unused_imports' => true,
|
'no_unused_imports' => true,
|
||||||
'not_operator_with_successor_space' => true,
|
'not_operator_with_successor_space' => true,
|
||||||
'trailing_comma_in_multiline' => ['elements' => ['arrays']],
|
'trailing_comma_in_multiline_array' => true,
|
||||||
'phpdoc_scalar' => true,
|
'phpdoc_scalar' => true,
|
||||||
'unary_operator_spaces' => true,
|
'unary_operator_spaces' => true,
|
||||||
'binary_operator_spaces' => true,
|
'binary_operator_spaces' => true,
|
||||||
'single_trait_insert_per_statement' => false,
|
'single_trait_insert_per_statement' => false,
|
||||||
|
'no_spaces_around_offset' => true,
|
||||||
'method_chaining_indentation' => true,
|
'method_chaining_indentation' => true,
|
||||||
'array_indentation' => true,
|
'array_indentation' => true,
|
||||||
'single_quote' => true,
|
'single_quote' => true,
|
||||||
|
|||||||
+11
-11
@@ -51,7 +51,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -250,7 +250,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -449,7 +449,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -648,7 +648,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -847,7 +847,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -1046,7 +1046,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -1245,7 +1245,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -1444,7 +1444,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -1643,7 +1643,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -1842,7 +1842,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
@@ -2041,7 +2041,7 @@ namespace PHPSTORM_META {
|
|||||||
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
'Illuminate\Session\Middleware\StartSession' => \Illuminate\Session\Middleware\StartSession::class,
|
||||||
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
'Illuminate\Testing\ParallelTesting' => \Illuminate\Testing\ParallelTesting::class,
|
||||||
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
'LaravelCrawlerDetect' => \Jaybizzle\CrawlerDetect\CrawlerDetect::class,
|
||||||
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUser::class,
|
'Laravel\Fortify\Contracts\CreatesNewUsers' => \App\Actions\Fortify\CreateNewUserAction::class,
|
||||||
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
'Laravel\Fortify\Contracts\FailedPasswordConfirmationResponse' => \Laravel\Fortify\Http\Responses\FailedPasswordConfirmationResponse::class,
|
||||||
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
'Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse' => \Laravel\Fortify\Http\Responses\FailedTwoFactorLoginResponse::class,
|
||||||
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
'Laravel\Fortify\Contracts\LockoutResponse' => \Laravel\Fortify\Http\Responses\LockoutResponse::class,
|
||||||
|
|||||||
@@ -1,61 +0,0 @@
|
|||||||
<?php
|
|
||||||
namespace App\Actions\Fortify;
|
|
||||||
|
|
||||||
use App\Models\User;
|
|
||||||
use App\Models\Setting;
|
|
||||||
use App\Models\UserSettings;
|
|
||||||
use Illuminate\Validation\Rule;
|
|
||||||
use Illuminate\Support\Facades\Validator;
|
|
||||||
use Laravel\Fortify\Contracts\CreatesNewUsers;
|
|
||||||
|
|
||||||
class CreateNewUser implements CreatesNewUsers
|
|
||||||
{
|
|
||||||
use PasswordValidationRules;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validate and create a newly registered user.
|
|
||||||
*
|
|
||||||
* @param array $input
|
|
||||||
* @return \App\Models\User
|
|
||||||
*/
|
|
||||||
public function create(array $input)
|
|
||||||
{
|
|
||||||
$settings = Setting::whereIn('name', ['storage_default', 'registration'])
|
|
||||||
->pluck('value', 'name');
|
|
||||||
|
|
||||||
// Check if account registration is enabled
|
|
||||||
if (! intval($settings['registration'])) {
|
|
||||||
abort(401);
|
|
||||||
}
|
|
||||||
|
|
||||||
Validator::make($input, [
|
|
||||||
'name' => ['required', 'string', 'max:255'],
|
|
||||||
'email' => [
|
|
||||||
'required',
|
|
||||||
'string',
|
|
||||||
'email',
|
|
||||||
'max:255',
|
|
||||||
Rule::unique(User::class),
|
|
||||||
],
|
|
||||||
'password' => $this->passwordRules(),
|
|
||||||
])->validate();
|
|
||||||
|
|
||||||
$user = User::create([
|
|
||||||
'email' => $input['email'],
|
|
||||||
'password' => bcrypt($input['password']),
|
|
||||||
]);
|
|
||||||
|
|
||||||
UserSettings::unguard();
|
|
||||||
|
|
||||||
$user
|
|
||||||
->settings()
|
|
||||||
->create([
|
|
||||||
'name' => $input['name'],
|
|
||||||
'storage_capacity' => $settings['storage_default'],
|
|
||||||
]);
|
|
||||||
|
|
||||||
UserSettings::reguard();
|
|
||||||
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Actions\Fortify;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\User;
|
||||||
|
use App\Models\Setting;
|
||||||
|
use App\Models\UserSettings;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
|
use Illuminate\Validation\Rule;
|
||||||
|
use Illuminate\Auth\Events\Registered;
|
||||||
|
use Illuminate\Support\Facades\Validator;
|
||||||
|
use Illuminate\Contracts\Auth\StatefulGuard;
|
||||||
|
|
||||||
|
class CreateNewUserAction extends Controller
|
||||||
|
{
|
||||||
|
use PasswordValidationRules;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
protected StatefulGuard $guard
|
||||||
|
) {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate and create a newly registered user.
|
||||||
|
*/
|
||||||
|
public function __invoke(Request $request): Response
|
||||||
|
{
|
||||||
|
$settings = Setting::whereIn('name', [
|
||||||
|
'storage_default', 'registration'
|
||||||
|
])
|
||||||
|
->pluck('value', 'name');
|
||||||
|
|
||||||
|
// Check if account registration is enabled
|
||||||
|
if (!intval($settings['registration'])) {
|
||||||
|
abort(401);
|
||||||
|
}
|
||||||
|
|
||||||
|
Validator::make($request->all(), [
|
||||||
|
'name' => ['required', 'string', 'max:255'],
|
||||||
|
'email' => [
|
||||||
|
'required',
|
||||||
|
'string',
|
||||||
|
'email',
|
||||||
|
'max:255',
|
||||||
|
Rule::unique(User::class),
|
||||||
|
],
|
||||||
|
'password' => $this->passwordRules(),
|
||||||
|
])->validate();
|
||||||
|
|
||||||
|
$user = User::create([
|
||||||
|
'email' => $request->email,
|
||||||
|
'password' => bcrypt($request->password),
|
||||||
|
]);
|
||||||
|
|
||||||
|
UserSettings::unguard();
|
||||||
|
|
||||||
|
$user
|
||||||
|
->settings()
|
||||||
|
->create([
|
||||||
|
'name' => $request->name,
|
||||||
|
'storage_capacity' => $settings['storage_default'],
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (!get_setting('user_verification')) {
|
||||||
|
$user->markEmailAsVerified();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserSettings::reguard();
|
||||||
|
|
||||||
|
event(new Registered($user));
|
||||||
|
|
||||||
|
if (!get_setting('user_verification')) {
|
||||||
|
$this->guard->login($user);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response('User registered successfully', 201);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -90,6 +90,7 @@ class SetupDevEnvironment extends Command
|
|||||||
'role' => 'admin',
|
'role' => 'admin',
|
||||||
'email' => 'howdy@hi5ve.digital',
|
'email' => 'howdy@hi5ve.digital',
|
||||||
'password' => bcrypt('vuefilemanager'),
|
'password' => bcrypt('vuefilemanager'),
|
||||||
|
'email_verified_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user
|
$user
|
||||||
@@ -130,6 +131,7 @@ class SetupDevEnvironment extends Command
|
|||||||
'role' => 'user',
|
'role' => 'user',
|
||||||
'email' => $this->faker->email,
|
'email' => $this->faker->email,
|
||||||
'password' => bcrypt('vuefilemanager'),
|
'password' => bcrypt('vuefilemanager'),
|
||||||
|
'email_verified_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$newbie
|
$newbie
|
||||||
@@ -791,6 +793,10 @@ class SetupDevEnvironment extends Command
|
|||||||
'name' => 'registration',
|
'name' => 'registration',
|
||||||
'value' => 1,
|
'value' => 1,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'name' => 'user_verification',
|
||||||
|
'value' => 1,
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'name' => 'payments_active',
|
'name' => 'payments_active',
|
||||||
'value' => 1,
|
'value' => 1,
|
||||||
|
|||||||
@@ -112,6 +112,10 @@ class SetupProdEnvironment extends Command
|
|||||||
'name' => 'registration',
|
'name' => 'registration',
|
||||||
'value' => 0,
|
'value' => 0,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'name' => 'user_verification',
|
||||||
|
'value' => 1,
|
||||||
|
],
|
||||||
[
|
[
|
||||||
'name' => 'storage_limitation',
|
'name' => 'storage_limitation',
|
||||||
'value' => 1,
|
'value' => 1,
|
||||||
@@ -181,6 +185,8 @@ class SetupProdEnvironment extends Command
|
|||||||
'role' => 'admin',
|
'role' => 'admin',
|
||||||
'email' => 'howdy@hi5ve.digital',
|
'email' => 'howdy@hi5ve.digital',
|
||||||
'password' => bcrypt('vuefilemanager'),
|
'password' => bcrypt('vuefilemanager'),
|
||||||
|
'email_verified_at' => now(),
|
||||||
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user
|
$user
|
||||||
|
|||||||
@@ -41,6 +41,10 @@ class Kernel extends ConsoleKernel
|
|||||||
}
|
}
|
||||||
})->everySixHours();
|
})->everySixHours();
|
||||||
|
|
||||||
|
$schedule->call(function () use ($scheduler) {
|
||||||
|
$scheduler->delete_unverified_users();
|
||||||
|
})->daily();
|
||||||
|
|
||||||
// Run queue jobs every minute
|
// Run queue jobs every minute
|
||||||
$schedule->command('queue:work --stop-when-empty')
|
$schedule->command('queue:work --stop-when-empty')
|
||||||
->everyMinute()
|
->everyMinute()
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ class UserController extends Controller
|
|||||||
'role' => $request->role,
|
'role' => $request->role,
|
||||||
'email' => $request->email,
|
'email' => $request->email,
|
||||||
'password' => bcrypt($request->password),
|
'password' => bcrypt($request->password),
|
||||||
|
'email_verified_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
UserSettings::unguard();
|
UserSettings::unguard();
|
||||||
|
|||||||
@@ -412,6 +412,7 @@ class SetupWizardController extends Controller
|
|||||||
'role' => 'admin',
|
'role' => 'admin',
|
||||||
'email' => $request->email,
|
'email' => $request->email,
|
||||||
'password' => bcrypt($request->password),
|
'password' => bcrypt($request->password),
|
||||||
|
'email_verified_at' => now(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user
|
$user
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ class AuthController extends Controller
|
|||||||
return [
|
return [
|
||||||
'name' => $user->settings->name,
|
'name' => $user->settings->name,
|
||||||
'avatar' => $user->settings->avatar,
|
'avatar' => $user->settings->avatar,
|
||||||
|
'verified' => $user->email_verified_at ? true : false
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace App\Http\Controllers\Auth;
|
namespace App\Http\Controllers\Auth;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Support\Facades\Lang;
|
use Illuminate\Support\Facades\Lang;
|
||||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
|
||||||
|
|
||||||
class ForgotPasswordController extends Controller
|
class ForgotPasswordController extends Controller
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,16 +1,23 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Controllers\User;
|
namespace App\Http\Controllers\User;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Services\DemoService;
|
use App\Services\DemoService;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Http\Resources\UserResource;
|
use App\Http\Resources\UserResource;
|
||||||
|
use Illuminate\Http\Response;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use App\Http\Resources\InvoiceCollection;
|
use App\Http\Resources\InvoiceCollection;
|
||||||
use Illuminate\Support\Facades\Validator;
|
use Illuminate\Support\Facades\Validator;
|
||||||
use App\Http\Resources\UserStorageResource;
|
use App\Http\Resources\UserStorageResource;
|
||||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||||
use App\Http\Requests\User\UpdateUserPasswordRequest;
|
use App\Http\Requests\User\UpdateUserPasswordRequest;
|
||||||
|
use App\Http\Requests\User\UserCreateAccessTokenRequest;
|
||||||
|
use Illuminate\Support\Str;
|
||||||
|
use Laravel\Sanctum\PersonalAccessToken;
|
||||||
|
|
||||||
class AccountController extends Controller
|
class AccountController extends Controller
|
||||||
{
|
{
|
||||||
@@ -125,4 +132,75 @@ class AccountController extends Controller
|
|||||||
|
|
||||||
return response('Changed!', 204);
|
return response('Changed!', 204);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all user tokens
|
||||||
|
*/
|
||||||
|
public function tokens(): Response
|
||||||
|
{
|
||||||
|
return response(
|
||||||
|
Auth::user()->tokens()->get(),
|
||||||
|
200
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function create_token(UserCreateAccessTokenRequest $request): Response
|
||||||
|
{
|
||||||
|
// Check if is demo
|
||||||
|
abort_if(is_demo_account('howdy@hi5ve.digital'), 201, [
|
||||||
|
"name" => "token",
|
||||||
|
"token" => Str::random(40),
|
||||||
|
"abilities" => '["*"]',
|
||||||
|
"tokenable_id" => Str::uuid(),
|
||||||
|
"updated_at" => now(),
|
||||||
|
"created_at" => now(),
|
||||||
|
"id" => Str::random(40),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$token = Auth::user()->createToken($request->input('name'));
|
||||||
|
|
||||||
|
return response($token, 201);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function revoke_token(PersonalAccessToken $token): Response
|
||||||
|
{
|
||||||
|
// Check if is demo
|
||||||
|
abort_if(is_demo_account('howdy@hi5ve.digital'), 204, 'Deleted!');
|
||||||
|
|
||||||
|
if (Auth::id() !== $token->tokenable_id) {
|
||||||
|
return response('Unauthorized', 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$token->delete();
|
||||||
|
|
||||||
|
return response('Deleted!', 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function email_verification(string $id, Request $request): RedirectResponse|Response
|
||||||
|
{
|
||||||
|
if (!$request->hasValidSignature()) {
|
||||||
|
return response("Invalid or expired url provided.", 401);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user = User::find($id);
|
||||||
|
|
||||||
|
if (!$user->hasVerifiedEmail()) {
|
||||||
|
$user->markEmailAsVerified();
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->to('/successfully-verified');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resend_verification_email(Request $request): Response
|
||||||
|
{
|
||||||
|
$user = User::whereEmail($request->input('email'))->first();
|
||||||
|
|
||||||
|
if ($user->hasVerifiedEmail()) {
|
||||||
|
return response("Email was already verified.", 204);
|
||||||
|
}
|
||||||
|
|
||||||
|
$user->sendEmailVerificationNotification();
|
||||||
|
|
||||||
|
return response("Email verification link sent to your email", 204);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Requests\User;
|
||||||
|
|
||||||
|
use Illuminate\Foundation\Http\FormRequest;
|
||||||
|
|
||||||
|
class UserCreateAccessTokenRequest extends FormRequest
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Determine if the user is authorized to make this request.
|
||||||
|
*
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function authorize()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the validation rules that apply to the request.
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function rules()
|
||||||
|
{
|
||||||
|
return [
|
||||||
|
'name' => 'required|string|min:3',
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-1
@@ -13,8 +13,9 @@ use Illuminate\Support\Facades\Storage;
|
|||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Foundation\Auth\User as Authenticatable;
|
use Illuminate\Foundation\Auth\User as Authenticatable;
|
||||||
|
use Illuminate\Contracts\Auth\MustVerifyEmail;
|
||||||
|
|
||||||
class User extends Authenticatable
|
class User extends Authenticatable implements MustVerifyEmail
|
||||||
{
|
{
|
||||||
use Notifiable, Billable, Sortable, HasFactory, HasApiTokens;
|
use Notifiable, Billable, Sortable, HasFactory, HasApiTokens;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ namespace App\Providers;
|
|||||||
|
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Laravel\Fortify\Fortify;
|
use Laravel\Fortify\Fortify;
|
||||||
use App\Actions\Fortify\CreateNewUser;
|
use App\Actions\Fortify\CreateNewUserAction;
|
||||||
use Illuminate\Support\ServiceProvider;
|
use Illuminate\Support\ServiceProvider;
|
||||||
use Illuminate\Cache\RateLimiting\Limit;
|
use Illuminate\Cache\RateLimiting\Limit;
|
||||||
use App\Actions\Fortify\ResetUserPassword;
|
use App\Actions\Fortify\ResetUserPassword;
|
||||||
@@ -29,7 +29,6 @@ class FortifyServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
public function boot()
|
public function boot()
|
||||||
{
|
{
|
||||||
Fortify::createUsersUsing(CreateNewUser::class);
|
|
||||||
Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
|
Fortify::updateUserProfileInformationUsing(UpdateUserProfileInformation::class);
|
||||||
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
|
Fortify::updateUserPasswordsUsing(UpdateUserPassword::class);
|
||||||
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ class RouteServiceProvider extends ServiceProvider
|
|||||||
*
|
*
|
||||||
* @var string
|
* @var string
|
||||||
*/
|
*/
|
||||||
protected $namespace = 'App\Http\Controllers';
|
protected $namespace = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The path to the "home" route for your application.
|
* The path to the "home" route for your application.
|
||||||
@@ -22,16 +22,6 @@ class RouteServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
public const HOME = '/home';
|
public const HOME = '/home';
|
||||||
|
|
||||||
/**
|
|
||||||
* Define your route model bindings, pattern filters, etc.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function boot()
|
|
||||||
{
|
|
||||||
parent::boot();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define the routes for the application.
|
* Define the routes for the application.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ namespace App\Services;
|
|||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use App\Models\Zip;
|
use App\Models\Zip;
|
||||||
|
use App\Models\User;
|
||||||
use App\Models\Share;
|
use App\Models\Share;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
@@ -74,4 +75,15 @@ class SchedulerService
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete unverified users older than 30 days
|
||||||
|
*/
|
||||||
|
public function delete_unverified_users(): void
|
||||||
|
{
|
||||||
|
User::where('created_at', '<=', now()->subDays(30)->toDateString())
|
||||||
|
->where('email_verified_at', null)
|
||||||
|
->get()
|
||||||
|
->each(fn ($user) => $user->delete());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-19
@@ -10,39 +10,39 @@
|
|||||||
"require": {
|
"require": {
|
||||||
"php": "^8.0",
|
"php": "^8.0",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"brianium/paratest": "^6.2",
|
"brianium/paratest": "^6.3",
|
||||||
"cartalyst/stripe-laravel": "^13.1",
|
"cartalyst/stripe-laravel": "^13.1",
|
||||||
"doctrine/dbal": "^2.12.1",
|
"doctrine/dbal": "^2.13.2",
|
||||||
"fideloper/proxy": "^4.4.1",
|
"fideloper/proxy": "^4.4.1",
|
||||||
"fruitcake/laravel-cors": "^2.0.3",
|
"fruitcake/laravel-cors": "^2.0.4",
|
||||||
"gabrielelana/byte-units": "^0.5.0",
|
"gabrielelana/byte-units": "^0.5.0",
|
||||||
"guzzlehttp/guzzle": "^7.2.0",
|
"guzzlehttp/guzzle": "^7.3.0",
|
||||||
"intervention/image": "^2.5.1",
|
"intervention/image": "^2.6.0",
|
||||||
"jaybizzle/laravel-crawler-detect": "^1.2",
|
"jaybizzle/laravel-crawler-detect": "^1.2",
|
||||||
"kyslik/column-sortable": "^6.4",
|
"kyslik/column-sortable": "^6.4.1",
|
||||||
"laravel/cashier": "^12.9.1",
|
"laravel/cashier": "^12.15.0",
|
||||||
"laravel/fortify": "^1.7.7",
|
"laravel/fortify": "^1.7.14",
|
||||||
"laravel/framework": "^8.30.1",
|
"laravel/framework": "^8.50.0",
|
||||||
"laravel/sanctum": "^2.9",
|
"laravel/sanctum": "^2.11.2",
|
||||||
"laravel/tinker": "^2.6.1",
|
"laravel/tinker": "^2.6.1",
|
||||||
"laravel/ui": "^3.2.0",
|
"laravel/ui": "^3.2.0",
|
||||||
"league/flysystem-aws-s3-v3": "^1.0.29",
|
"league/flysystem-aws-s3-v3": "^1.0.29",
|
||||||
"league/flysystem-cached-adapter": "^1.1.0",
|
"league/flysystem-cached-adapter": "^1.1.0",
|
||||||
"madnest/madzipper": "^1.1.0",
|
"madnest/madzipper": "^1.1.0",
|
||||||
"spatie/laravel-backup": "^6.15",
|
"spatie/laravel-backup": "^6.16.1",
|
||||||
"spatie/laravel-tail": "^4.3",
|
"spatie/laravel-tail": "^4.3.3",
|
||||||
"teamtnt/laravel-scout-tntsearch-driver": "^11.1.0",
|
"teamtnt/laravel-scout-tntsearch-driver": "^11.5.0.0",
|
||||||
"vimeo/psalm": "^4.7"
|
"vimeo/psalm": "^4.8.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"friendsofphp/php-cs-fixer": "^3.0",
|
"friendsofphp/php-cs-fixer": "^3.0",
|
||||||
"barryvdh/laravel-ide-helper": "^2.9",
|
"barryvdh/laravel-ide-helper": "^2.10",
|
||||||
"facade/ignition": "^2.5.14",
|
"facade/ignition": "^2.11.0",
|
||||||
"fakerphp/faker": "^1.14.1",
|
"fakerphp/faker": "^1.15.0",
|
||||||
"mockery/mockery": "^1.4.3",
|
"mockery/mockery": "^1.4.3",
|
||||||
"nunomaduro/collision": "^5.3.0",
|
"nunomaduro/collision": "^5.5.0",
|
||||||
"phpunit/phpunit": "^9.5.2"
|
"phpunit/phpunit": "^9.5.6"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"optimize-autoloader": true,
|
"optimize-autoloader": true,
|
||||||
|
|||||||
Generated
-11939
File diff suppressed because it is too large
Load Diff
+1
-1
@@ -131,7 +131,7 @@ return [
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
'features' => [
|
'features' => [
|
||||||
Features::registration(),
|
// Features::registration(),
|
||||||
//Features::resetPasswords(),
|
//Features::resetPasswords(),
|
||||||
// Features::emailVerification(),
|
// Features::emailVerification(),
|
||||||
Features::updateProfileInformation(),
|
Features::updateProfileInformation(),
|
||||||
|
|||||||
@@ -291,6 +291,8 @@ return [
|
|||||||
'admin_settings.email.username_plac' => 'Type your mail username',
|
'admin_settings.email.username_plac' => 'Type your mail username',
|
||||||
'admin_settings.others.allow_registration' => 'Allow User Registration',
|
'admin_settings.others.allow_registration' => 'Allow User Registration',
|
||||||
'admin_settings.others.allow_registration_help' => 'You can disable public registration for new users. You will still able to <br/>create new users in administration panel.',
|
'admin_settings.others.allow_registration_help' => 'You can disable public registration for new users. You will still able to <br/>create new users in administration panel.',
|
||||||
|
'admin_settings.others.allow_user_verification' => 'Allow User Email Verification',
|
||||||
|
'admin_settings.others.allow_user_verification_help' => 'Turn on, if you want to allow user email verification.',
|
||||||
'admin_settings.others.cache_clear' => 'Clear Cache',
|
'admin_settings.others.cache_clear' => 'Clear Cache',
|
||||||
'admin_settings.others.cache_disclaimer' => 'Did you change anything in your .env file or change your Stripe credentials? Then clear your cache.',
|
'admin_settings.others.cache_disclaimer' => 'Did you change anything in your .env file or change your Stripe credentials? Then clear your cache.',
|
||||||
'admin_settings.others.contact_email' => 'Contact Email',
|
'admin_settings.others.contact_email' => 'Contact Email',
|
||||||
@@ -396,6 +398,7 @@ return [
|
|||||||
'menu.latest' => 'Recent Uploads',
|
'menu.latest' => 'Recent Uploads',
|
||||||
'menu.logout' => 'Log Out',
|
'menu.logout' => 'Log Out',
|
||||||
'menu.password' => 'Password',
|
'menu.password' => 'Password',
|
||||||
|
'menu.token' => 'Access Token',
|
||||||
'menu.profile' => 'Profile Settings',
|
'menu.profile' => 'Profile Settings',
|
||||||
'menu.settings' => 'Settings',
|
'menu.settings' => 'Settings',
|
||||||
'menu.shared' => 'Shared Files',
|
'menu.shared' => 'Shared Files',
|
||||||
@@ -472,6 +475,13 @@ return [
|
|||||||
'page_sign_in.placeholder_password' => 'Type your password',
|
'page_sign_in.placeholder_password' => 'Type your password',
|
||||||
'page_sign_in.subtitle' => 'Confirm you by your password',
|
'page_sign_in.subtitle' => 'Confirm you by your password',
|
||||||
'page_sign_in.title' => 'Are You {name}?',
|
'page_sign_in.title' => 'Are You {name}?',
|
||||||
|
'page_not_verified.subtitle' => 'Your account is not verified. Before login, verify your account please.',
|
||||||
|
'page_not_verified.resend_text' => 'Do you want resend verification email?',
|
||||||
|
'page_not_verified.resend_button' => 'Resend verification email.',
|
||||||
|
'page_email_successfully_verified.title' => 'Your account was successfully verified!',
|
||||||
|
'page_email_successfully_verified.subtitle' => 'Now you can log in.',
|
||||||
|
'page_email_successfully_send.title' => 'Verification email was successfully send!',
|
||||||
|
'page_email_successfully_send.subtitle' => 'Check your email address where the email was send.',
|
||||||
'popup_create_folder.folder_default_name' => 'New Folder',
|
'popup_create_folder.folder_default_name' => 'New Folder',
|
||||||
'popup_create_folder.label' => 'Type Name',
|
'popup_create_folder.label' => 'Type Name',
|
||||||
'popup_create_folder.placeholder' => 'Type your name',
|
'popup_create_folder.placeholder' => 'Type your name',
|
||||||
@@ -539,6 +549,7 @@ return [
|
|||||||
'routes_title.profile' => 'My Profile',
|
'routes_title.profile' => 'My Profile',
|
||||||
'routes_title.settings' => 'Settings',
|
'routes_title.settings' => 'Settings',
|
||||||
'routes_title.settings_password' => 'Change Password',
|
'routes_title.settings_password' => 'Change Password',
|
||||||
|
'routes_title.token' => 'Access Token',
|
||||||
'routes_title.settings_storage' => 'Storage',
|
'routes_title.settings_storage' => 'Storage',
|
||||||
'routes_title.user_create' => 'Create User',
|
'routes_title.user_create' => 'Create User',
|
||||||
'routes_title.users_delete' => 'Delete User',
|
'routes_title.users_delete' => 'Delete User',
|
||||||
@@ -614,6 +625,7 @@ return [
|
|||||||
'user_box_role.title' => 'Change User Role',
|
'user_box_role.title' => 'Change User Role',
|
||||||
'user_box_storage.description' => "Change user storage capacity by input bellow. You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.",
|
'user_box_storage.description' => "Change user storage capacity by input bellow. You have to type only number e.g. value '5' means, user will have 5GB of storage capacity.",
|
||||||
'user_box_storage.title' => 'Change User Storage Capacity',
|
'user_box_storage.title' => 'Change User Storage Capacity',
|
||||||
|
'user_token.title' => 'Access Tokens',
|
||||||
'user_password.title' => 'Change Your Password',
|
'user_password.title' => 'Change Your Password',
|
||||||
'user_settings.address' => 'Address',
|
'user_settings.address' => 'Address',
|
||||||
'user_settings.address_plac' => 'Type your billing address',
|
'user_settings.address_plac' => 'Type your billing address',
|
||||||
@@ -674,5 +686,6 @@ return [
|
|||||||
'app_touch_icon' => 'App Touch Icon',
|
'app_touch_icon' => 'App Touch Icon',
|
||||||
'app_touch_icon_description' => 'If user store bookmark on his phone screen, this icon appear in app thumbnail. Preferred size is 156x156',
|
'app_touch_icon_description' => 'If user store bookmark on his phone screen, this icon appear in app thumbnail. Preferred size is 156x156',
|
||||||
'select_search_placeholder' => 'Search in list...',
|
'select_search_placeholder' => 'Search in list...',
|
||||||
|
'go_home' => 'Go to the homepage',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
class CreatePersonalAccessTokensTable extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function up()
|
||||||
|
{
|
||||||
|
Schema::create('personal_access_tokens', function (Blueprint $table) {
|
||||||
|
$table->bigIncrements('id');
|
||||||
|
$table->uuidMorphs('tokenable');
|
||||||
|
$table->string('name');
|
||||||
|
$table->string('token', 64)->unique();
|
||||||
|
$table->text('abilities')->nullable();
|
||||||
|
$table->timestamp('last_used_at')->nullable();
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function down()
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('personal_access_tokens');
|
||||||
|
}
|
||||||
|
}
|
||||||
+100
-74
@@ -1,76 +1,102 @@
|
|||||||
{
|
{
|
||||||
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js?id=59d8a92b461069b2d8ef",
|
"/js/main.js": "/js/main.js",
|
||||||
"/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~5f8db287.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~5f8db287.js?id=da9787176357b5821f88",
|
"/css/app.css": "/css/app.css",
|
||||||
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=dfc34718027ffe49c095",
|
"/chunks/admin.js": "/chunks/admin.js?id=baf8a45b3c1d04f09229",
|
||||||
"/chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.js?id=78490a539df6de210807",
|
"/chunks/admin-account.js": "/chunks/admin-account.js?id=61bd29aac87199e45174",
|
||||||
"/chunks/admin~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/shared.js?id=6db60bf5154ed8946420",
|
"/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~c7a13fb0.js": "/chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chu~c7a13fb0.js?id=d21b5946c88a87e9099d",
|
||||||
"/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js?id=78d379b1b282c3ad5c0c",
|
"/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~a7b1c983.js": "/chunks/admin-account~chunks/app-setup~chunks/billings-detail~chunks/create-new-password~chunks/datab~a7b1c983.js?id=b80fc9fc5b08a9c60e2e",
|
||||||
"/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=c6362b7ef3e9b06d3af7",
|
"/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~eeab5771.js": "/chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/~eeab5771.js?id=b26eff2899df7f85229d",
|
||||||
"/chunks/not-found.js": "/chunks/not-found.js?id=3278798d98bd131aa379",
|
"/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.js": "/chunks/admin~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.js?id=146db62ff2aa25c39386",
|
||||||
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=dbfcbb7580f69474cc13",
|
"/chunks/admin~chunks/files~chunks/settings~chunks/shared/file-browser.js": "/chunks/admin~chunks/files~chunks/settings~chunks/shared/file-browser.js?id=e23621e57bab3e9e349a",
|
||||||
"/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=16e4937273d68f83c37f",
|
"/chunks/admin~chunks/platform.js": "/chunks/admin~chunks/platform.js?id=4da2e03f6f01c274a7cc",
|
||||||
"/js/main.js": "/js/main.js?id=1ced39466ba657ce3e16",
|
"/chunks/admin~chunks/platform~chunks/shared.js": "/chunks/admin~chunks/platform~chunks/shared.js?id=7611512975ed49edb61f",
|
||||||
"/css/app.css": "/css/app.css?id=a8f94d0c5a6f4a1185b1",
|
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=b709bf1d7c3cd24f9529",
|
||||||
"/chunks/admin.js": "/chunks/admin.js?id=c23b5f524dd386d797e5",
|
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~605f4c49.js?id=075ff381293e1a20d167",
|
||||||
"/chunks/admin-account.js": "/chunks/admin-account.js?id=a73cbe625776f823eb4e",
|
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~8cc7d96f.js?id=5f27527c258dada4aeb9",
|
||||||
"/chunks/app-appearance.js": "/chunks/app-appearance.js?id=1542b65e6edae59f17aa",
|
"/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~b9e5655a.js": "/chunks/app-appearance~chunks/app-billings~chunks/app-email~chunks/app-index~chunks/app-others~chunks~b9e5655a.js?id=b6c9565875974d8c350c",
|
||||||
"/chunks/app-billings.js": "/chunks/app-billings.js?id=15318dba11818d6ec888",
|
"/chunks/app-billings.js": "/chunks/app-billings.js?id=b23ac97d9e65beff5fc6",
|
||||||
"/chunks/app-email.js": "/chunks/app-email.js?id=b023f73218dda4abd604",
|
"/chunks/app-email.js": "/chunks/app-email.js?id=35afede5ea121718e2cc",
|
||||||
"/chunks/app-index.js": "/chunks/app-index.js?id=08b7878a3fcd087c23b3",
|
"/chunks/app-index.js": "/chunks/app-index.js?id=0d8a74f6041001c36ab3",
|
||||||
"/chunks/app-language.js": "/chunks/app-language.js?id=ad245f54b99ec8979f9e",
|
"/chunks/app-language.js": "/chunks/app-language.js?id=8f77e8eebf32943fdf4b",
|
||||||
"/chunks/app-others.js": "/chunks/app-others.js?id=256f8a571e9535774643",
|
"/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pag~824d674f.js": "/chunks/app-language~chunks/app-settings~chunks/dashboard~chunks/invoices~chunks/page-edit~chunks/pag~824d674f.js?id=2551061f37c2a8056921",
|
||||||
"/chunks/app-payments.js": "/chunks/app-payments.js?id=b57048c4667935499d3e",
|
"/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~934b6779.js": "/chunks/app-language~chunks/dashboard~chunks/files~chunks/invoices~chunks/pages~chunks/plans~chunks/s~934b6779.js?id=cecfc7ab2626eb4e988f",
|
||||||
"/chunks/app-settings.js": "/chunks/app-settings.js?id=c6f95c5841c36de9d030",
|
"/chunks/app-others.js": "/chunks/app-others.js?id=a16de82f2298df235166",
|
||||||
"/chunks/app-setup.js": "/chunks/app-setup.js?id=c0898f22c12ee8a56916",
|
"/chunks/app-payments.js": "/chunks/app-payments.js?id=245920077be074208693",
|
||||||
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=622b5dca6425427f7ea0",
|
"/chunks/app-settings.js": "/chunks/app-settings.js?id=d57e806c59d1aef2eb3a",
|
||||||
"/chunks/contact-us.js": "/chunks/contact-us.js?id=9415844c1627d307d951",
|
"/chunks/app-setup.js": "/chunks/app-setup.js?id=526bb7b757956f6c70c3",
|
||||||
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=ad4ac6e1e79602cbb929",
|
"/chunks/billings-detail.js": "/chunks/billings-detail.js?id=3805f23ba0a474ce7b4e",
|
||||||
"/chunks/dashboard.js": "/chunks/dashboard.js?id=db35f7a287b6407fc4af",
|
"/chunks/contact-us.js": "/chunks/contact-us.js?id=67b977184f0744593de9",
|
||||||
"/chunks/database.js": "/chunks/database.js?id=669e7798dcc456197402",
|
"/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js": "/chunks/contact-us~chunks/dynamic-page~chunks/homepage.js?id=2a8def187ec322eb760e",
|
||||||
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=c53bdc4a88bf3f2e5434",
|
"/chunks/create-new-password.js": "/chunks/create-new-password.js?id=72d02c781aa8e6295069",
|
||||||
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=52cde925b9687de4c29a",
|
"/chunks/dashboard.js": "/chunks/dashboard.js?id=a7aef88def02bf2fec08",
|
||||||
"/chunks/files.js": "/chunks/files.js?id=0fa05841bb3895d2d5e5",
|
"/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js": "/chunks/dashboard~chunks/invoices~chunks/pages~chunks/plan-subscribers~chunks/plans~chunks/settings-i~0e2a0654.js?id=1027aa9c1e090b196d29",
|
||||||
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=0708aa3e04e6ed11c91d",
|
"/chunks/database.js": "/chunks/database.js?id=27ab279a8b380da7a0e8",
|
||||||
"/chunks/homepage.js": "/chunks/homepage.js?id=44552c231f6791295903",
|
"/chunks/dynamic-page.js": "/chunks/dynamic-page.js?id=1141f8e183483da82e8a",
|
||||||
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=922ecf4d086b03abfc04",
|
"/chunks/email-verified.js": "/chunks/email-verified.js?id=60a7eabffc13b2fe48e0",
|
||||||
"/chunks/invoices.js": "/chunks/invoices.js?id=85b17b9371f4df37c00a",
|
"/chunks/environment-setup.js": "/chunks/environment-setup.js?id=3e657a9476a8596396b3",
|
||||||
"/chunks/page-edit.js": "/chunks/page-edit.js?id=7e04b66e4bccb47e7f3f",
|
"/chunks/files.js": "/chunks/files.js?id=54c6dddb471986e202f3",
|
||||||
"/chunks/pages.js": "/chunks/pages.js?id=76341f611821d93f1696",
|
"/chunks/files~chunks/platform~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared/file-browser.js?id=b5e21d1b7386c6551aa2",
|
||||||
"/chunks/plan.js": "/chunks/plan.js?id=d44c79f456ece7ed20ba",
|
"/chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser.js?id=3b96cba1e5482e4c33d4",
|
||||||
"/chunks/plan-create.js": "/chunks/plan-create.js?id=f14b6474cc894199f962",
|
"/chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser~chunks/shared/single-file.js?id=48f4f2c0aa3064162ad9",
|
||||||
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=82741fb5261f08150514",
|
"/chunks/files~chunks/settings-subscription~chunks/shared/file-browser~chunks/user-subscription.js": "/chunks/files~chunks/settings-subscription~chunks/shared/file-browser~chunks/user-subscription.js?id=1b96ff16168a192ea787",
|
||||||
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=8e901b7cce8fabec9042",
|
"/chunks/files~chunks/shared/file-browser.js": "/chunks/files~chunks/shared/file-browser.js?id=221f9578098058fc4c4a",
|
||||||
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=700253b16769e8270c73",
|
"/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js": "/chunks/files~chunks/shared/file-browser~chunks/shared/single-file.js?id=a6be7116bbdadfb8b1cc",
|
||||||
"/chunks/plans.js": "/chunks/plans.js?id=dd7e195bb66f245cebbd",
|
"/chunks/forgotten-password.js": "/chunks/forgotten-password.js?id=96019e230f0c5b59478a",
|
||||||
"/chunks/platform.js": "/chunks/platform.js?id=f7073145d3e27be2c880",
|
"/chunks/homepage.js": "/chunks/homepage.js?id=5a299216398f59a4947b",
|
||||||
"/chunks/profile.js": "/chunks/profile.js?id=bd661b08717158c5af9e",
|
"/chunks/installation-disclaimer.js": "/chunks/installation-disclaimer.js?id=12cbea54eb6f5b94606c",
|
||||||
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=333af0b6deb880990f39",
|
"/chunks/invoices.js": "/chunks/invoices.js?id=35179ba2b74cdaf74492",
|
||||||
"/chunks/settings.js": "/chunks/settings.js?id=7726657c717fa7650d10",
|
"/chunks/not-found.js": "/chunks/not-found.js?id=3f0c127b00d113541acc",
|
||||||
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=08cc16a560d5cc9b25b7",
|
"/chunks/page-edit.js": "/chunks/page-edit.js?id=761c916a5efdee5ffddd",
|
||||||
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=5ef85da047b11e2f1a21",
|
"/chunks/pages.js": "/chunks/pages.js?id=7b3c7ee8c586e73fe65a",
|
||||||
"/chunks/settings-password.js": "/chunks/settings-password.js?id=19b5f0850ba9d6aa049a",
|
"/chunks/plan.js": "/chunks/plan.js?id=c4cc3da1bedaa9139087",
|
||||||
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=7cfbeae7706827cd858e",
|
"/chunks/plan-create.js": "/chunks/plan-create.js?id=2a672b390de82eb8cef6",
|
||||||
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=c4210c768fddec3ccf9f",
|
"/chunks/plan-delete.js": "/chunks/plan-delete.js?id=f00946b7df419813f099",
|
||||||
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=a7c2580bf4280ca3c76b",
|
"/chunks/plan-settings.js": "/chunks/plan-settings.js?id=dbc08f8cdc23900ef40a",
|
||||||
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=d60972a2216523642850",
|
"/chunks/plan-subscribers.js": "/chunks/plan-subscribers.js?id=8c4b655b9286e06894c5",
|
||||||
"/chunks/shared.js": "/chunks/shared.js?id=e72e37ffad23a1ea2a8e",
|
"/chunks/plans.js": "/chunks/plans.js?id=2b26173a02ed9f86e875",
|
||||||
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=86820a408438c3513b20",
|
"/chunks/platform.js": "/chunks/platform.js?id=5d4ed2751b809310e23b",
|
||||||
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=74d47dd07002086ba1de",
|
"/chunks/platform~chunks/shared.js": "/chunks/platform~chunks/shared.js?id=be3d7cf51585313cf53b",
|
||||||
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=03fb36b0d38a3218221f",
|
"/chunks/profile.js": "/chunks/profile.js?id=41b536880e846017d2d0",
|
||||||
"/chunks/sign-in.js": "/chunks/sign-in.js?id=6a401ac37ac49a729e04",
|
"/chunks/profile~chunks/settings-password.js": "/chunks/profile~chunks/settings-password.js?id=93ffe6eca4dcafbe8234",
|
||||||
"/chunks/sign-up.js": "/chunks/sign-up.js?id=f26bca8e48b5cfb69f30",
|
"/chunks/purchase-code.js": "/chunks/purchase-code.js?id=b35e751cdc1946a4fb60",
|
||||||
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=cd44b6cf8631f690a75d",
|
"/chunks/settings.js": "/chunks/settings.js?id=84f0716dc70fb1ab5de5",
|
||||||
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=4cdc01a909e277284b1d",
|
"/chunks/settings-create-payment-methods.js": "/chunks/settings-create-payment-methods.js?id=7404a1125aee6014b72a",
|
||||||
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=418145ac6ba4a4ba2e4a",
|
"/chunks/settings-invoices.js": "/chunks/settings-invoices.js?id=094eb70eb2fa6b7c8dd2",
|
||||||
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=98181a3cdcc9cc6e55c2",
|
"/chunks/settings-password.js": "/chunks/settings-password.js?id=31e3562551bfc4907b5b",
|
||||||
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=2eee581bb1d2586b9249",
|
"/chunks/settings-payment-methods.js": "/chunks/settings-payment-methods.js?id=47ad97b554fcc1564685",
|
||||||
"/chunks/user.js": "/chunks/user.js?id=290b4b63ed5a10a5ca3c",
|
"/chunks/settings-storage.js": "/chunks/settings-storage.js?id=b06d4a1d504b2a6cbeed",
|
||||||
"/chunks/user-create.js": "/chunks/user-create.js?id=2bfca881534622e3aa5f",
|
"/chunks/settings-subscription.js": "/chunks/settings-subscription.js?id=1bffa4ae7d545af08355",
|
||||||
"/chunks/user-delete.js": "/chunks/user-delete.js?id=dc708437ba1e5ebc0a0d",
|
"/chunks/setup-wizard.js": "/chunks/setup-wizard.js?id=41d3478184ec24644a1c",
|
||||||
"/chunks/user-detail.js": "/chunks/user-detail.js?id=70bac25962505a1eb468",
|
"/chunks/shared.js": "/chunks/shared.js?id=7524b7a783d4aed23794",
|
||||||
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=5f5cee4fbc2d5f122114",
|
"/chunks/shared/authenticate.js": "/chunks/shared/authenticate.js?id=bfdf9bb904d354bdcbd1",
|
||||||
"/chunks/user-password.js": "/chunks/user-password.js?id=3214eb9dadcbeb1e685f",
|
"/chunks/shared/file-browser.js": "/chunks/shared/file-browser.js?id=0f6c34512740fca7e007",
|
||||||
"/chunks/user-storage.js": "/chunks/user-storage.js?id=bfecceeadc0a2a0faf64",
|
"/chunks/shared/single-file.js": "/chunks/shared/single-file.js?id=7886247bb35deada28a2",
|
||||||
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=724f2551c1945e1071e2",
|
"/chunks/sign-in.js": "/chunks/sign-in.js?id=fb2de6069de0669b0e02",
|
||||||
"/chunks/users.js": "/chunks/users.js?id=bb902543025cdf7a79f2"
|
"/chunks/sign-up.js": "/chunks/sign-up.js?id=b30b10ca09b115efc6ca",
|
||||||
|
"/chunks/stripe-credentials.js": "/chunks/stripe-credentials.js?id=b2bc73016f0811f6838d",
|
||||||
|
"/chunks/subscription-plans.js": "/chunks/subscription-plans.js?id=e12081daec0f6ea047ab",
|
||||||
|
"/chunks/subscription-service.js": "/chunks/subscription-service.js?id=a09dc140a3914fb64a1a",
|
||||||
|
"/chunks/upgrade-billing.js": "/chunks/upgrade-billing.js?id=3fe276a31a66ba244d10",
|
||||||
|
"/chunks/upgrade-billing~chunks/upgrade-plan.js": "/chunks/upgrade-billing~chunks/upgrade-plan.js?id=43888143d0a6afe67d7a",
|
||||||
|
"/chunks/upgrade-plan.js": "/chunks/upgrade-plan.js?id=5979a154f760a992e617",
|
||||||
|
"/chunks/user.js": "/chunks/user.js?id=41076be9126702330159",
|
||||||
|
"/chunks/user-create.js": "/chunks/user-create.js?id=c65b1718b207ae7b678e",
|
||||||
|
"/chunks/user-delete.js": "/chunks/user-delete.js?id=ecebc7e50b64744420c3",
|
||||||
|
"/chunks/user-detail.js": "/chunks/user-detail.js?id=7ae038f6b4a4683c5bdb",
|
||||||
|
"/chunks/user-invoices.js": "/chunks/user-invoices.js?id=1395c30e08946026fbc4",
|
||||||
|
"/chunks/user-password.js": "/chunks/user-password.js?id=f5fa3532fb7f4f5f2707",
|
||||||
|
"/chunks/user-storage.js": "/chunks/user-storage.js?id=e19c7dee4ef5eb38a075",
|
||||||
|
"/chunks/user-subscription.js": "/chunks/user-subscription.js?id=c6ec1b7215530cfdbceb",
|
||||||
|
"/chunks/users.js": "/chunks/users.js?id=71de2e012c4c566a8ec3",
|
||||||
|
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~2fac28cc.js?id=5007f400f6b506ab23f4",
|
||||||
|
"/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js": "/vendors~chunks/admin~chunks/admin-account~chunks/app-appearance~chunks/app-billings~chunks/app-email~d5e36d91.js?id=2b11dd8f37c3c2421f2f",
|
||||||
|
"/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser~chunks/shared/single-file.js": "/vendors~chunks/files~chunks/platform~chunks/shared~chunks/shared/file-browser~chunks/shared/single-file.js?id=9d10953d3b088324dfe3",
|
||||||
|
"/vendors~chunks/platform~chunks/shared.js": "/vendors~chunks/platform~chunks/shared.js?id=7d09e0b0658e140a7ffa",
|
||||||
|
"/chunks/sign-up.975b48abd4874d2d4701.hot-update.js": "/chunks/sign-up.975b48abd4874d2d4701.hot-update.js",
|
||||||
|
"/chunks/email-verified.51f60246090cc58fa13c.hot-update.js": "/chunks/email-verified.51f60246090cc58fa13c.hot-update.js",
|
||||||
|
"/chunks/email-verified.793fadba4eec7baa97de.hot-update.js": "/chunks/email-verified.793fadba4eec7baa97de.hot-update.js",
|
||||||
|
"/chunks/email-verified.e34f4263892542caa617.hot-update.js": "/chunks/email-verified.e34f4263892542caa617.hot-update.js",
|
||||||
|
"/chunks/email-verified.b1f4240b7eb52aea68c7.hot-update.js": "/chunks/email-verified.b1f4240b7eb52aea68c7.hot-update.js",
|
||||||
|
"/chunks/app-others.a134296fc107b0a807e3.hot-update.js": "/chunks/app-others.a134296fc107b0a807e3.hot-update.js",
|
||||||
|
"/chunks/sign-up.e3dc2f848ca66fd4b8ea.hot-update.js": "/chunks/sign-up.e3dc2f848ca66fd4b8ea.hot-update.js"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<template>
|
||||||
|
<div class="select-box" :class="[isClicked ? 'bg-theme' : 'is-deactive'] ">
|
||||||
|
<CheckIcon v-if="isClicked" class="icon" size="17" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { CheckIcon } from 'vue-feather-icons'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'CheckBox',
|
||||||
|
props: [ 'isClicked' ],
|
||||||
|
components: { CheckIcon }
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import '@assets/vuefilemanager/_variables';
|
||||||
|
|
||||||
|
.select-box {
|
||||||
|
min-width: 20px;
|
||||||
|
min-height: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 5px;
|
||||||
|
|
||||||
|
.icon {
|
||||||
|
stroke: white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-deactive {
|
||||||
|
background-color: darken($light_background, 5%);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
|
.is-deactive {
|
||||||
|
background-color: lighten($dark_mode_foreground, 10%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -7,11 +7,7 @@
|
|||||||
<div class="icon-item">
|
<div class="icon-item">
|
||||||
|
|
||||||
<!-- MultiSelecting for the mobile version -->
|
<!-- MultiSelecting for the mobile version -->
|
||||||
<div :class="{'check-select-folder' : this.item.type === 'folder', 'check-select' : this.item.type !== 'folder'}" v-if="mobileMultiSelect">
|
<CheckBox v-if="mobileMultiSelect" :is-clicked="isClicked" class="check-box"/>
|
||||||
<div class="select-box" :class="{'select-box-active' : isClicked } ">
|
|
||||||
<CheckIcon v-if="isClicked" class="icon" size="17" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--If is file or image, then link item-->
|
<!--If is file or image, then link item-->
|
||||||
<span v-if="isFile || (isImage && !item.thumbnail)" class="file-icon-text text-theme">
|
<span v-if="isFile || (isImage && !item.thumbnail)" class="file-icon-text text-theme">
|
||||||
@@ -65,8 +61,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {LinkIcon, UserPlusIcon, CheckIcon, MoreHorizontalIcon} from 'vue-feather-icons'
|
import {LinkIcon, UserPlusIcon, MoreHorizontalIcon} from 'vue-feather-icons'
|
||||||
import FolderIcon from '@/components/FilesView/FolderIcon'
|
import FolderIcon from '@/components/FilesView/FolderIcon'
|
||||||
|
import CheckBox from '@/components/FilesView/CheckBox'
|
||||||
import {debounce} from 'lodash'
|
import {debounce} from 'lodash'
|
||||||
import {mapGetters} from 'vuex'
|
import {mapGetters} from 'vuex'
|
||||||
import {events} from '@/bus'
|
import {events} from '@/bus'
|
||||||
@@ -77,9 +74,9 @@ export default {
|
|||||||
components: {
|
components: {
|
||||||
MoreHorizontalIcon,
|
MoreHorizontalIcon,
|
||||||
UserPlusIcon,
|
UserPlusIcon,
|
||||||
CheckIcon,
|
|
||||||
LinkIcon,
|
|
||||||
FolderIcon,
|
FolderIcon,
|
||||||
|
CheckBox,
|
||||||
|
LinkIcon,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters([
|
...mapGetters([
|
||||||
@@ -308,7 +305,7 @@ export default {
|
|||||||
@import '@assets/vuefilemanager/_variables';
|
@import '@assets/vuefilemanager/_variables';
|
||||||
@import '@assets/vuefilemanager/_mixins';
|
@import '@assets/vuefilemanager/_mixins';
|
||||||
|
|
||||||
.check-select {
|
.check-box {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
margin-left: 3px;
|
margin-left: 3px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@@ -317,35 +314,6 @@ export default {
|
|||||||
left: 0px;
|
left: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.check-select-folder {
|
|
||||||
margin-right: 10px;
|
|
||||||
margin-left: 3px;
|
|
||||||
position: absolute;
|
|
||||||
top: 8px;
|
|
||||||
z-index: 5;
|
|
||||||
left: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.select-box {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background-color: $light_background;
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
border-radius: 5px;
|
|
||||||
box-shadow: 0 3px 15px 2px hsla(220, 36%, 16%, 0.05);
|
|
||||||
}
|
|
||||||
|
|
||||||
.select-box-active {
|
|
||||||
background-color: $theme;
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
stroke: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.show-actions {
|
.show-actions {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 4px 26px;
|
padding: 4px 26px;
|
||||||
@@ -582,18 +550,6 @@ export default {
|
|||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
.select-box {
|
|
||||||
background-color: lighten($dark_mode_foreground, 10%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.select-box-active {
|
|
||||||
background-color: lighten($theme, 5%);
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
stroke: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.file-wrapper {
|
.file-wrapper {
|
||||||
|
|
||||||
.icon-item {
|
.icon-item {
|
||||||
|
|||||||
@@ -10,11 +10,7 @@
|
|||||||
>
|
>
|
||||||
<!-- MultiSelecting for the mobile version -->
|
<!-- MultiSelecting for the mobile version -->
|
||||||
<transition name="slide-from-left">
|
<transition name="slide-from-left">
|
||||||
<div class="check-select" v-if="mobileMultiSelect">
|
<CheckBox v-if="mobileMultiSelect" :is-clicked="isClicked" class="check-box"/>
|
||||||
<div class="select-box" :class="{'select-box-active' : isClicked } ">
|
|
||||||
<CheckIcon v-if="isClicked" class="icon" size="17" />
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</transition>
|
</transition>
|
||||||
|
|
||||||
<!--Thumbnail for item-->
|
<!--Thumbnail for item-->
|
||||||
@@ -72,8 +68,9 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import {LinkIcon, UserPlusIcon, CheckIcon, MoreVerticalIcon} from 'vue-feather-icons'
|
import {LinkIcon, UserPlusIcon, MoreVerticalIcon} from 'vue-feather-icons'
|
||||||
import FolderIcon from '@/components/FilesView/FolderIcon'
|
import FolderIcon from '@/components/FilesView/FolderIcon'
|
||||||
|
import CheckBox from '@/components/FilesView/CheckBox'
|
||||||
import {debounce} from 'lodash'
|
import {debounce} from 'lodash'
|
||||||
import {mapGetters} from 'vuex'
|
import {mapGetters} from 'vuex'
|
||||||
import {events} from '@/bus'
|
import {events} from '@/bus'
|
||||||
@@ -87,7 +84,7 @@ export default {
|
|||||||
MoreVerticalIcon,
|
MoreVerticalIcon,
|
||||||
UserPlusIcon,
|
UserPlusIcon,
|
||||||
FolderIcon,
|
FolderIcon,
|
||||||
CheckIcon,
|
CheckBox,
|
||||||
LinkIcon,
|
LinkIcon,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
@@ -335,28 +332,9 @@ export default {
|
|||||||
transform: translateX(100%);
|
transform: translateX(100%);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.check-box {
|
||||||
.check-select {
|
|
||||||
margin-right: 15px;
|
margin-right: 15px;
|
||||||
margin-left: 6px;
|
margin-left: 6px;
|
||||||
|
|
||||||
.select-box {
|
|
||||||
width: 20px;
|
|
||||||
height: 20px;
|
|
||||||
background-color: darken($light_background, 5%);
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.select-box-active {
|
|
||||||
background-color: $theme;
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
stroke: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.file-wrapper {
|
.file-wrapper {
|
||||||
@@ -543,20 +521,6 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
.check-select {
|
|
||||||
|
|
||||||
.select-box {
|
|
||||||
background-color: lighten($dark_mode_foreground, 10%);
|
|
||||||
}
|
|
||||||
|
|
||||||
.select-box-active {
|
|
||||||
background-color: $theme;
|
|
||||||
|
|
||||||
.icon {
|
|
||||||
stroke: white;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.file-wrapper {
|
.file-wrapper {
|
||||||
.icon-item {
|
.icon-item {
|
||||||
|
|||||||
Vendored
+28
@@ -334,6 +334,24 @@ const routesShared = [
|
|||||||
},
|
},
|
||||||
]
|
]
|
||||||
const routesAuth = [
|
const routesAuth = [
|
||||||
|
{
|
||||||
|
name: 'SuccessfullyVerified',
|
||||||
|
path: '/successfully-verified',
|
||||||
|
component: () =>
|
||||||
|
import(/* webpackChunkName: "chunks/email-verified" */ './views/Auth/SuccessfullyEmailVerified'),
|
||||||
|
meta: {
|
||||||
|
requiresAuth: false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'SuccessfullySend',
|
||||||
|
path: '/successfully-send',
|
||||||
|
component: () =>
|
||||||
|
import(/* webpackChunkName: "chunks/email-verified" */ './views/Auth/SuccessfullySendEmail'),
|
||||||
|
meta: {
|
||||||
|
requiresAuth: false
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'SignIn',
|
name: 'SignIn',
|
||||||
path: '/sign-in',
|
path: '/sign-in',
|
||||||
@@ -416,6 +434,16 @@ const routesUser = [
|
|||||||
title: 'routes_title.settings_password'
|
title: 'routes_title.settings_password'
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'Token',
|
||||||
|
path: '/platform/token',
|
||||||
|
component: () =>
|
||||||
|
import(/* webpackChunkName: "chunks/settings-password" */ './views/User/AccessToken'),
|
||||||
|
meta: {
|
||||||
|
requiresAuth: true,
|
||||||
|
title: 'routes_title.token'
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'Storage',
|
name: 'Storage',
|
||||||
path: '/platform/settings/storage',
|
path: '/platform/settings/storage',
|
||||||
|
|||||||
@@ -58,6 +58,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="block-wrapper">
|
||||||
|
<div class="input-wrapper">
|
||||||
|
<div class="inline-wrapper">
|
||||||
|
<div class="switch-label">
|
||||||
|
<label class="input-label">
|
||||||
|
{{ $t('admin_settings.others.allow_user_verification') }}:
|
||||||
|
</label>
|
||||||
|
<small class="input-help" v-html="$t('admin_settings.others.allow_user_verification_help')"></small>
|
||||||
|
</div>
|
||||||
|
<SwitchInput @input="$updateText('/admin/settings', 'user_verification', app.userVerification)"
|
||||||
|
v-model="app.userVerification"
|
||||||
|
class="switch"
|
||||||
|
:state="app.userVerification"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<FormLabel class="mt-70">
|
<FormLabel class="mt-70">
|
||||||
{{ $t('admin_settings.others.section_others') }}
|
{{ $t('admin_settings.others.section_others') }}
|
||||||
</FormLabel>
|
</FormLabel>
|
||||||
@@ -173,7 +191,7 @@
|
|||||||
mounted() {
|
mounted() {
|
||||||
axios.get('/api/admin/settings', {
|
axios.get('/api/admin/settings', {
|
||||||
params: {
|
params: {
|
||||||
column: 'contact_email|google_analytics|storage_default|registration|storage_limitation|mimetypes_blacklist|upload_limit'
|
column: 'contact_email|google_analytics|storage_default|registration|storage_limitation|mimetypes_blacklist|upload_limit|user_verification'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
@@ -186,7 +204,8 @@
|
|||||||
userRegistration: parseInt(response.data.registration),
|
userRegistration: parseInt(response.data.registration),
|
||||||
storageLimitation: parseInt(response.data.storage_limitation),
|
storageLimitation: parseInt(response.data.storage_limitation),
|
||||||
mimetypesBlacklist : response.data.mimetypes_blacklist,
|
mimetypesBlacklist : response.data.mimetypes_blacklist,
|
||||||
uploadLimit: response.data.upload_limit
|
uploadLimit: response.data.upload_limit,
|
||||||
|
userVerification: parseInt(response.data.user_verification)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,6 +61,19 @@
|
|||||||
</router-link>
|
</router-link>
|
||||||
</span>
|
</span>
|
||||||
</AuthContent>
|
</AuthContent>
|
||||||
|
|
||||||
|
<AuthContent name="not-verified" :visible="false">
|
||||||
|
|
||||||
|
<div class="user" v-if="checkedAccount">
|
||||||
|
<img class="user-avatar" :src="checkedAccount.avatar" :alt="checkedAccount.name">
|
||||||
|
<h1>{{ checkedAccount.name }}</h1>
|
||||||
|
<h2>{{ $t('page_not_verified.subtitle') }}</h2>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="additional-link"> {{ $t('page_not_verified.resend_text') }}
|
||||||
|
<a @click="resendEmail" class="text-theme">{{ $t('page_not_verified.resend_button') }} </a>
|
||||||
|
</span>
|
||||||
|
</AuthContent>
|
||||||
</AuthContentWrapper>
|
</AuthContentWrapper>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -110,6 +123,18 @@
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
resendEmail() {
|
||||||
|
axios.
|
||||||
|
post('/api/user/email/resend/verify', {
|
||||||
|
email: this.loginEmail
|
||||||
|
})
|
||||||
|
.then(
|
||||||
|
this.$router.push({name: 'SuccessfullySend'})
|
||||||
|
)
|
||||||
|
.catch(() => {
|
||||||
|
this.$isSomethingWrong()
|
||||||
|
})
|
||||||
|
},
|
||||||
async logIn() {
|
async logIn() {
|
||||||
|
|
||||||
// Validate fields
|
// Validate fields
|
||||||
@@ -164,6 +189,13 @@
|
|||||||
|
|
||||||
if (!isValid) return;
|
if (!isValid) return;
|
||||||
|
|
||||||
|
if(!this.checkedAccount.verified) {
|
||||||
|
|
||||||
|
this.goToAuthPage('not-verified')
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Start loading
|
// Start loading
|
||||||
this.isLoading = true
|
this.isLoading = true
|
||||||
|
|
||||||
|
|||||||
@@ -132,17 +132,23 @@
|
|||||||
|
|
||||||
// Send request to get user token
|
// Send request to get user token
|
||||||
axios
|
axios
|
||||||
.post('/register', this.register)
|
.post('/api/register', this.register)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
|
|
||||||
// End loading
|
// End loading
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
|
|
||||||
|
if(! this.config.userVerification) {
|
||||||
// Set login state
|
// Set login state
|
||||||
this.$store.commit('SET_AUTHORIZED', true)
|
this.$store.commit('SET_AUTHORIZED', true)
|
||||||
|
|
||||||
// Go to files page
|
// Go to files page
|
||||||
this.$router.push({name: 'Files'})
|
this.$router.push({name: 'Files'})
|
||||||
|
} else {
|
||||||
|
// Go to SuccessfullySend page
|
||||||
|
this.$router.push({name: 'SuccessfullySend'})
|
||||||
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<template>
|
||||||
|
<AuthContentWrapper>
|
||||||
|
<AuthContent :visible="true">
|
||||||
|
<img v-if="config.app_logo" class="logo" :src="$getImage(config.app_logo)" :alt="config.app_name">
|
||||||
|
<b v-if="! config.app_logo" class="auth-logo-text">{{ config.app_name }}</b>
|
||||||
|
|
||||||
|
<h1>{{ $t('page_email_successfully_verified.title') }}</h1>
|
||||||
|
<h2>{{ $t('page_email_successfully_verified.subtitle') }}</h2>
|
||||||
|
|
||||||
|
<a href="/sign-in">
|
||||||
|
<AuthButton icon="chevron-right" :text="$t('page_sign_in.button_log_in')"/>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</AuthContent>
|
||||||
|
</AuthContentWrapper>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import AuthContentWrapper from '@/components/Auth/AuthContentWrapper'
|
||||||
|
import AuthContent from '@/components/Auth/AuthContent'
|
||||||
|
import AuthButton from '@/components/Auth/AuthButton'
|
||||||
|
import {mapGetters} from 'vuex'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SuccessfullyEmailVerified',
|
||||||
|
components: {
|
||||||
|
AuthContentWrapper,
|
||||||
|
AuthContent,
|
||||||
|
AuthButton,
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['config']),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import '@assets/vuefilemanager/_auth-form';
|
||||||
|
@import '@assets/vuefilemanager/_auth';
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<AuthContentWrapper>
|
||||||
|
<AuthContent :visible="true">
|
||||||
|
<img v-if="config.app_logo" class="logo" :src="$getImage(config.app_logo)" :alt="config.app_name">
|
||||||
|
<b v-if="! config.app_logo" class="auth-logo-text">{{ config.app_name }}</b>
|
||||||
|
|
||||||
|
<h1>{{ $t('page_email_successfully_send.title') }}</h1>
|
||||||
|
<h2>{{ $t('page_email_successfully_send.subtitle') }}</h2>
|
||||||
|
|
||||||
|
<span class="additional-link">
|
||||||
|
<router-link :to="{name: 'Homepage'}" class="text-theme">
|
||||||
|
{{ $t('go_home') }}
|
||||||
|
</router-link>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
</AuthContent>
|
||||||
|
</AuthContentWrapper>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import AuthContentWrapper from '@/components/Auth/AuthContentWrapper'
|
||||||
|
import AuthContent from '@/components/Auth/AuthContent'
|
||||||
|
import AuthButton from '@/components/Auth/AuthButton'
|
||||||
|
import {mapGetters} from 'vuex'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'SuccessfullySendEmail',
|
||||||
|
components: {
|
||||||
|
AuthContentWrapper,
|
||||||
|
AuthContent,
|
||||||
|
AuthButton,
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['config']),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
@import '@assets/vuefilemanager/_auth-form';
|
||||||
|
@import '@assets/vuefilemanager/_auth';
|
||||||
|
</style>
|
||||||
@@ -32,6 +32,15 @@
|
|||||||
{{ $t('menu.password') }}
|
{{ $t('menu.password') }}
|
||||||
</div>
|
</div>
|
||||||
</router-link>
|
</router-link>
|
||||||
|
|
||||||
|
<router-link replace :to="{name: 'Token'}" class="menu-list-item link">
|
||||||
|
<div class="icon text-theme">
|
||||||
|
<key-icon size="17"></key-icon>
|
||||||
|
</div>
|
||||||
|
<div class="label text-theme">
|
||||||
|
{{ $t('menu.token') }}
|
||||||
|
</div>
|
||||||
|
</router-link>
|
||||||
</div>
|
</div>
|
||||||
</ContentGroup>
|
</ContentGroup>
|
||||||
<ContentGroup title="Subscription" class="navigator" v-if="canShowSubscriptionSettings">
|
<ContentGroup title="Subscription" class="navigator" v-if="canShowSubscriptionSettings">
|
||||||
@@ -142,6 +151,7 @@
|
|||||||
CloudIcon,
|
CloudIcon,
|
||||||
UserIcon,
|
UserIcon,
|
||||||
LockIcon,
|
LockIcon,
|
||||||
|
KeyIcon,
|
||||||
} from 'vue-feather-icons'
|
} from 'vue-feather-icons'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@@ -162,6 +172,7 @@
|
|||||||
LockIcon,
|
LockIcon,
|
||||||
Spinner,
|
Spinner,
|
||||||
InfoBox,
|
InfoBox,
|
||||||
|
KeyIcon,
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['user', 'config']),
|
...mapGetters(['user', 'config']),
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
<template>
|
||||||
|
<PageTab>
|
||||||
|
<PageTabGroup>
|
||||||
|
<FormLabel>{{ $t('user_token.title') }}</FormLabel>
|
||||||
|
</PageTabGroup>
|
||||||
|
</PageTab>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import PageTabGroup from '@/components/Others/Layout/PageTabGroup'
|
||||||
|
import FormLabel from '@/components/Others/Forms/FormLabel'
|
||||||
|
import PageTab from '@/components/Others/Layout/PageTab'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'AccessToken',
|
||||||
|
components: {
|
||||||
|
PageTabGroup,
|
||||||
|
FormLabel,
|
||||||
|
PageTab
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
tokens: undefined
|
||||||
|
}
|
||||||
|
},
|
||||||
|
created () {
|
||||||
|
axios.
|
||||||
|
get('/api/user/tokens')
|
||||||
|
.then(response => {
|
||||||
|
this.tokens = response.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import '@assets/vuefilemanager/_variables';
|
||||||
|
@import '@assets/vuefilemanager/_mixins';
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -54,6 +54,7 @@
|
|||||||
|
|
||||||
allowHomepage: {{ $settings->allow_homepage ?? 1 }},
|
allowHomepage: {{ $settings->allow_homepage ?? 1 }},
|
||||||
userRegistration: {{ $settings->registration ?? 1 }},
|
userRegistration: {{ $settings->registration ?? 1 }},
|
||||||
|
userVerification: {{ $settings->user_verification ?? 0 }},
|
||||||
storageLimit: {{ $settings->storage_limitation ?? 1 }},
|
storageLimit: {{ $settings->storage_limitation ?? 1 }},
|
||||||
storageDefaultSpace: {{ $settings->storage_default ?? 5 }},
|
storageDefaultSpace: {{ $settings->storage_default ?? 5 }},
|
||||||
storageDefaultSpaceFormatted: '{{ isset($settings->storage_default) ? format_gigabytes($settings->storage_default) : format_gigabytes(5) }}',
|
storageDefaultSpaceFormatted: '{{ isset($settings->storage_default) ? format_gigabytes($settings->storage_default) : format_gigabytes(5) }}',
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
use App\Actions\Fortify\CreateNewUserAction;
|
||||||
use App\Http\Controllers\App\AppFunctionsController;
|
use App\Http\Controllers\App\AppFunctionsController;
|
||||||
use App\Http\Controllers\FileManager\ShareController;
|
use App\Http\Controllers\FileManager\ShareController;
|
||||||
use App\Http\Controllers\FileManager\TrashController;
|
use App\Http\Controllers\FileManager\TrashController;
|
||||||
@@ -21,6 +22,9 @@ Route::group(['prefix' => 'password'], function () {
|
|||||||
Route::post('/reset', [ResetPasswordController::class, 'reset']);
|
Route::post('/reset', [ResetPasswordController::class, 'reset']);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Register user
|
||||||
|
Route::post('/register', CreateNewUserAction::class);
|
||||||
|
|
||||||
// User master Routes
|
// User master Routes
|
||||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||||
// Browse
|
// Browse
|
||||||
|
|||||||
@@ -7,11 +7,18 @@ use App\Http\Controllers\User\PaymentMethodsController;
|
|||||||
|
|
||||||
Route::post('/check', [AuthController::class, 'check_account']);
|
Route::post('/check', [AuthController::class, 'check_account']);
|
||||||
|
|
||||||
|
// Email verification
|
||||||
|
Route::get('/email/verify/{id}', [AccountController::class, 'email_verification'])->name('verification.verify');
|
||||||
|
Route::post('/email/resend/verify', [AccountController::class, 'resend_verification_email'])->name('verification.send');
|
||||||
|
|
||||||
Route::group(['middleware' => ['auth:sanctum']], function () {
|
Route::group(['middleware' => ['auth:sanctum']], function () {
|
||||||
// Account
|
// Account
|
||||||
Route::patch('/relationships/settings', [AccountController::class, 'update_user_settings']);
|
Route::patch('/relationships/settings', [AccountController::class, 'update_user_settings']);
|
||||||
|
Route::delete('/token/revoke/{token}', [AccountController::class, 'revoke_token']);
|
||||||
|
Route::post('/token/create', [AccountController::class, 'create_token']);
|
||||||
Route::post('/password', [AccountController::class, 'change_password']);
|
Route::post('/password', [AccountController::class, 'change_password']);
|
||||||
Route::get('/subscription', [SubscriptionController::class, 'show']);
|
Route::get('/subscription', [SubscriptionController::class, 'show']);
|
||||||
|
Route::get('/tokens', [AccountController::class, 'tokens']);
|
||||||
Route::get('/invoices', [AccountController::class, 'invoices']);
|
Route::get('/invoices', [AccountController::class, 'invoices']);
|
||||||
Route::get('/storage', [AccountController::class, 'storage']);
|
Route::get('/storage', [AccountController::class, 'storage']);
|
||||||
Route::get('/', [AccountController::class, 'user']);
|
Route::get('/', [AccountController::class, 'user']);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ namespace Tests\Feature\Accounts;
|
|||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Notifications\ResetPassword;
|
use App\Notifications\ResetPassword;
|
||||||
|
use Illuminate\Auth\Notifications\VerifyEmail;
|
||||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||||
use Illuminate\Support\Facades\Password;
|
use Illuminate\Support\Facades\Password;
|
||||||
use Laravel\Sanctum\Sanctum;
|
use Laravel\Sanctum\Sanctum;
|
||||||
@@ -42,6 +43,8 @@ class AuthTest extends TestCase
|
|||||||
*/
|
*/
|
||||||
public function it_register_user()
|
public function it_register_user()
|
||||||
{
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
collect([
|
collect([
|
||||||
[
|
[
|
||||||
'name' => 'storage_default',
|
'name' => 'storage_default',
|
||||||
@@ -51,6 +54,10 @@ class AuthTest extends TestCase
|
|||||||
'name' => 'registration',
|
'name' => 'registration',
|
||||||
'value' => 1,
|
'value' => 1,
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
'name' => 'user_verification',
|
||||||
|
'value' => 1,
|
||||||
|
]
|
||||||
])->each(function ($setting) {
|
])->each(function ($setting) {
|
||||||
Setting::create([
|
Setting::create([
|
||||||
'name' => $setting['name'],
|
'name' => $setting['name'],
|
||||||
@@ -58,7 +65,7 @@ class AuthTest extends TestCase
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
$this->postJson('/register', [
|
$this->postJson('api/register', [
|
||||||
'email' => 'john@doe.com',
|
'email' => 'john@doe.com',
|
||||||
'password' => 'SecretPassword',
|
'password' => 'SecretPassword',
|
||||||
'password_confirmation' => 'SecretPassword',
|
'password_confirmation' => 'SecretPassword',
|
||||||
@@ -67,6 +74,7 @@ class AuthTest extends TestCase
|
|||||||
|
|
||||||
$this->assertDatabaseHas('users', [
|
$this->assertDatabaseHas('users', [
|
||||||
'email' => 'john@doe.com',
|
'email' => 'john@doe.com',
|
||||||
|
'email_verified_at' => null,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$this->assertDatabaseHas('user_settings', [
|
$this->assertDatabaseHas('user_settings', [
|
||||||
@@ -76,6 +84,8 @@ class AuthTest extends TestCase
|
|||||||
|
|
||||||
Storage::disk('local')
|
Storage::disk('local')
|
||||||
->assertExists('files/' . User::first()->id);
|
->assertExists('files/' . User::first()->id);
|
||||||
|
|
||||||
|
Notification::assertTimesSent(1, VerifyEmail::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -6,11 +6,15 @@ use App\Models\User;
|
|||||||
use App\Services\SetupService;
|
use App\Services\SetupService;
|
||||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||||
|
use Illuminate\Auth\Notifications\VerifyEmail;
|
||||||
use Illuminate\Foundation\Testing\WithFaker;
|
use Illuminate\Foundation\Testing\WithFaker;
|
||||||
use Illuminate\Http\UploadedFile;
|
use Illuminate\Http\UploadedFile;
|
||||||
use Laravel\Sanctum\Sanctum;
|
use Laravel\Sanctum\Sanctum;
|
||||||
use Storage;
|
use Storage;
|
||||||
|
use Notification;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
use App\Models\Folder;
|
||||||
|
use Illuminate\Support\Facades\URL;
|
||||||
|
|
||||||
class UserAccountTest extends TestCase
|
class UserAccountTest extends TestCase
|
||||||
{
|
{
|
||||||
@@ -151,4 +155,154 @@ class UserAccountTest extends TestCase
|
|||||||
],
|
],
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_create_user_token()
|
||||||
|
{
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$this->postJson('/api/user/token/create', [
|
||||||
|
'name' => 'token'
|
||||||
|
])->assertStatus(201);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('personal_access_tokens', [
|
||||||
|
'tokenable_id' => $user->id,
|
||||||
|
'name' => 'token'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_revoke_user_token()
|
||||||
|
{
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$user->createToken('token');
|
||||||
|
|
||||||
|
$token_id = $user->tokens()->first()->id;
|
||||||
|
|
||||||
|
$this->deleteJson("/api/user/token/revoke/$token_id")
|
||||||
|
->assertStatus(204);
|
||||||
|
|
||||||
|
$this->assertDatabaseMissing('personal_access_tokens', [
|
||||||
|
'id' => $token_id
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_get_user_tokens()
|
||||||
|
{
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
Sanctum::actingAs($user);
|
||||||
|
|
||||||
|
$user->createToken('token');
|
||||||
|
|
||||||
|
$token = $user->tokens()->first();
|
||||||
|
|
||||||
|
$this->getJson('/api/user/tokens')
|
||||||
|
->assertStatus(200)
|
||||||
|
->assertJsonFragment([
|
||||||
|
"id" => $token->id,
|
||||||
|
"tokenable_type" => $token->tokenable_type,
|
||||||
|
"tokenable_id" => $user->id,
|
||||||
|
"name" => $token->name,
|
||||||
|
"abilities" => $token->abilities
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_use_user_token_to_request()
|
||||||
|
{
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create();
|
||||||
|
|
||||||
|
$folder = Folder::factory(Folder::class)
|
||||||
|
->create([
|
||||||
|
'user_id' => $user->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$token = $user->createToken('token')->plainTextToken;
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('personal_access_tokens', [
|
||||||
|
'tokenable_id' => $user->id
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('folders', [
|
||||||
|
'id' => $folder->id,
|
||||||
|
'user_id' => $user->id
|
||||||
|
]);
|
||||||
|
|
||||||
|
$response = $this->call('GET', "api/browse/folders/$folder->id",
|
||||||
|
[], [], [], [
|
||||||
|
'Content-type' => 'application/json',
|
||||||
|
'Accept' => 'application/json',
|
||||||
|
'Authorization' => 'Bearer ' .$token,
|
||||||
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
// $response->assertJsonFragment([
|
||||||
|
// 'id' => $folder->id,
|
||||||
|
// 'user_id' => $user->id,
|
||||||
|
// ]);
|
||||||
|
|
||||||
|
// dd($response);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_verify_user_email()
|
||||||
|
{
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create([
|
||||||
|
'email_verified_at' => null
|
||||||
|
]);
|
||||||
|
|
||||||
|
$verificationUrl = URL::temporarySignedRoute(
|
||||||
|
'verification.verify',
|
||||||
|
now()->addMinutes(60),
|
||||||
|
['id' => $user->id, 'hash' => sha1($user->email)]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this
|
||||||
|
->getJson($verificationUrl)
|
||||||
|
->assertRedirect('successfully-verified');
|
||||||
|
|
||||||
|
$this->assertNotNull(User::find($user->id)->get('email_verified_at'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_resend_user_verify_email()
|
||||||
|
{
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
|
$user = User::factory(User::class)
|
||||||
|
->create([
|
||||||
|
'email_verified_at' => null
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->postJson('/api/user/email/resend/verify', [
|
||||||
|
'email' => $user->email,
|
||||||
|
])
|
||||||
|
->assertStatus(200);
|
||||||
|
|
||||||
|
Notification::assertTimesSent(1, VerifyEmail::class);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -308,6 +308,9 @@ class AdminTest extends TestCase
|
|||||||
'email' => 'john@doe.com'
|
'email' => 'john@doe.com'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
$this->assertNotNull(User::whereEmail('john@doe.com')
|
||||||
|
->get('email_verified_at'));
|
||||||
|
|
||||||
$this->assertDatabaseHas('user_settings', [
|
$this->assertDatabaseHas('user_settings', [
|
||||||
'name' => 'John Doe'
|
'name' => 'John Doe'
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -2,12 +2,11 @@
|
|||||||
|
|
||||||
namespace Tests\Feature\App;
|
namespace Tests\Feature\App;
|
||||||
|
|
||||||
use App\Models\File;
|
|
||||||
use App\Models\Share;
|
use App\Models\Share;
|
||||||
|
use App\Models\User;
|
||||||
use App\Models\Zip;
|
use App\Models\Zip;
|
||||||
use App\Services\SchedulerService;
|
use App\Services\SchedulerService;
|
||||||
use App\Services\SetupService;
|
use App\Services\SetupService;
|
||||||
use Carbon\Carbon;
|
|
||||||
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
use Illuminate\Foundation\Testing\DatabaseMigrations;
|
||||||
use Illuminate\Http\UploadedFile;
|
use Illuminate\Http\UploadedFile;
|
||||||
use Storage;
|
use Storage;
|
||||||
@@ -20,8 +19,8 @@ class SchedulerTest extends TestCase
|
|||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
$this->setup = app()->make(SetupService::class);
|
$this->setup = resolve(SetupService::class);
|
||||||
$this->scheduler = app()->make(SchedulerService::class);
|
$this->scheduler = resolve(SchedulerService::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -99,4 +98,42 @@ class SchedulerTest extends TestCase
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function it_delete_non_verified_users_after_30_days()
|
||||||
|
{
|
||||||
|
$expiredUser = User::factory(User::class)
|
||||||
|
->create([
|
||||||
|
'email_verified_at' => null,
|
||||||
|
'created_at' => now()->subDays(31)
|
||||||
|
]);
|
||||||
|
|
||||||
|
$nonExpiredUser = User::factory(User::class)
|
||||||
|
->create([
|
||||||
|
'email_verified_at' => null,
|
||||||
|
'created_at' => now()->subDays(14)
|
||||||
|
]);
|
||||||
|
|
||||||
|
$verifiedUser = User::factory(User::class)
|
||||||
|
->create([
|
||||||
|
'email_verified_at' => now()->subDays(15),
|
||||||
|
'created_at' => now()->subDays(31)
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->scheduler->delete_unverified_users();
|
||||||
|
|
||||||
|
$this->assertDatabaseMissing('users', [
|
||||||
|
'id' => $expiredUser->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('users', [
|
||||||
|
'id' => $nonExpiredUser->id,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->assertDatabaseHas('users', [
|
||||||
|
'id' => $verifiedUser->id,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
namespace Tests;
|
namespace Tests;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
|
||||||
|
use Illuminate\Support\Facades\Notification;
|
||||||
|
|
||||||
abstract class TestCase extends BaseTestCase
|
abstract class TestCase extends BaseTestCase
|
||||||
{
|
{
|
||||||
@@ -11,5 +13,11 @@ abstract class TestCase extends BaseTestCase
|
|||||||
public function setUp(): void
|
public function setUp(): void
|
||||||
{
|
{
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
|
Carbon::setTestNow('1. January 2021');
|
||||||
|
|
||||||
|
Notification::fake();
|
||||||
|
|
||||||
|
$this->withoutExceptionHandling();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Vendored
+6
-6
@@ -34,12 +34,12 @@ mix.js('resources/js/main.js', 'public/js')
|
|||||||
clientLogLevel: 'none'
|
clientLogLevel: 'none'
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.options({
|
// .options({
|
||||||
hmrOptions: {
|
// hmrOptions: {
|
||||||
host: '192.168.1.198',
|
// host: 'vuefilemanager.test',
|
||||||
port: '8080'
|
// port: '80'
|
||||||
},
|
// },
|
||||||
})
|
// })
|
||||||
.disableNotifications();
|
.disableNotifications();
|
||||||
|
|
||||||
if (mix.inProduction()) {
|
if (mix.inProduction()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user