mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-05 18:23:48 +00:00
controller refactoring part 8
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -18,8 +18,8 @@ use Domain\Sharing\Controllers\ShareViaEmailController;
|
||||
use Domain\Trash\Controllers\RestoreTrashContentController;
|
||||
use Domain\Browsing\Controllers\BrowseLatestFilesController;
|
||||
use Domain\Browsing\Controllers\BrowseSharedItemsController;
|
||||
use Domain\Homepage\Controllers\SendContactMessageController;
|
||||
use Domain\Browsing\Controllers\BrowseTrashContentController;
|
||||
use Domain\Homepage\Controllers\SendContactMessageController;
|
||||
use Domain\Browsing\Controllers\BrowseFolderContentController;
|
||||
use Domain\Folders\Controllers\NavigationFolderTreeController;
|
||||
use Domain\Browsing\Controllers\SearchFilesAndFoldersController;
|
||||
|
||||
@@ -1,11 +1,18 @@
|
||||
<?php
|
||||
|
||||
use Domain\SetupWizard\Controllers\SetupWizardController;
|
||||
use Domain\SetupWizard\Controllers\StorePlansController;
|
||||
use Domain\SetupWizard\Controllers\StoreBillingsController;
|
||||
use Domain\SetupWizard\Controllers\StoreAppSettingsController;
|
||||
use Domain\SetupWizard\Controllers\VerifyPurchaseCodeController;
|
||||
use Domain\SetupWizard\Controllers\StoreDatabaseCredentialsController;
|
||||
use Domain\SetupWizard\Controllers\StoreEnvironmentSettingsController;
|
||||
use Domain\SetupWizard\Controllers\StoreSubscriptionServiceCredentialsController;
|
||||
|
||||
Route::post('/purchase-code', [SetupWizardController::class, 'verify_purchase_code']);
|
||||
Route::post('/database', [SetupWizardController::class, 'setup_database']);
|
||||
Route::post('/stripe-credentials', [SetupWizardController::class, 'store_stripe_credentials']);
|
||||
Route::post('/stripe-billings', [SetupWizardController::class, 'store_stripe_billings']);
|
||||
Route::post('/stripe-plans', [SetupWizardController::class, 'store_stripe_plans']);
|
||||
Route::post('/environment-setup', [SetupWizardController::class, 'store_environment_setup']);
|
||||
Route::post('/app-setup', [SetupWizardController::class, 'store_app_settings']);
|
||||
// TODO: create middleware for setup wizard protection after successfull installation
|
||||
Route::post('/stripe-credentials', StoreSubscriptionServiceCredentialsController::class);
|
||||
Route::post('/environment-setup', StoreEnvironmentSettingsController::class);
|
||||
Route::post('/database', StoreDatabaseCredentialsController::class);
|
||||
Route::post('/purchase-code', VerifyPurchaseCodeController::class);
|
||||
Route::post('/stripe-billings', StoreBillingsController::class);
|
||||
Route::post('/app-setup', StoreAppSettingsController::class);
|
||||
Route::post('/stripe-plans', StorePlansController::class);
|
||||
|
||||
@@ -3,13 +3,13 @@
|
||||
use Domain\Admin\Controllers\InvoiceController;
|
||||
use Domain\Homepage\Controllers\IndexController;
|
||||
use Domain\Sharing\Controllers\OGSiteController;
|
||||
use Domain\Sharing\Controllers\BrowseShareController;
|
||||
use Domain\SetupWizard\Controllers\SetupWizardController;
|
||||
use Domain\Sharing\Controllers\SharePublicIndexController;
|
||||
use Domain\Subscriptions\Controllers\StripeWebhookController;
|
||||
use Domain\SetupWizard\Controllers\CreateAdminAccountController;
|
||||
use Domain\Localization\Controllers\CurrentLocalizationController;
|
||||
|
||||
Route::post('/stripe/webhook', [StripeWebhookController::class, 'handleWebhook']);
|
||||
Route::post('/admin-setup', [SetupWizardController::class, 'create_admin_account']);
|
||||
Route::post('/admin-setup', CreateAdminAccountController::class);
|
||||
|
||||
Route::get('/translations/{lang}', CurrentLocalizationController::class);
|
||||
|
||||
@@ -18,9 +18,9 @@ Route::get('/invoice/{customer}/{token}', [InvoiceController::class, 'show'])->m
|
||||
|
||||
// Get og site for web crawlers
|
||||
if (Crawler::isCrawler()) {
|
||||
Route::get('/share/{shared}', [OGSiteController::class, 'og_site']);
|
||||
Route::get('/share/{shared}', OGSiteController::class);
|
||||
} else {
|
||||
Route::get('/share/{shared}', [BrowseShareController::class, 'index']);
|
||||
Route::get('/share/{shared}', SharePublicIndexController::class);
|
||||
}
|
||||
|
||||
// Show index.blade
|
||||
|
||||
@@ -8,24 +8,16 @@ use Illuminate\Queue\SerializesModels;
|
||||
class SendContactMessage extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
private $request;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($request)
|
||||
{
|
||||
$this->request = $request;
|
||||
public function __construct(
|
||||
private array $request
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the message.
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function build()
|
||||
public function build(): static
|
||||
{
|
||||
return $this->from(config('mail.from')['address'])
|
||||
->replyTo($this->request['email'])
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use App\Users\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\SetupWizard\Services\SetupService;
|
||||
|
||||
/**
|
||||
* Create and login admin account
|
||||
*/
|
||||
class CreateAdminAccountController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public SetupService $setup,
|
||||
) {
|
||||
}
|
||||
|
||||
public function __invoke(
|
||||
Request $request
|
||||
): Response {
|
||||
// Validate request
|
||||
// TODO: validator do requestu
|
||||
$request->validate([
|
||||
'email' => 'required|string|email|unique:users',
|
||||
'password' => 'required|string|min:6|confirmed',
|
||||
'name' => 'required|string',
|
||||
'purchase_code' => 'required|string',
|
||||
'license' => 'required|string',
|
||||
'avatar' => 'sometimes|file',
|
||||
]);
|
||||
|
||||
// Create user
|
||||
$user = User::forceCreate([
|
||||
'role' => 'admin',
|
||||
'email' => $request->input('email'),
|
||||
'password' => bcrypt($request->input('password')),
|
||||
'email_verified_at' => now(),
|
||||
]);
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'storage_capacity' => get_setting('storage_default') ?? 5,
|
||||
'avatar' => store_avatar($request, 'avatar'),
|
||||
'name' => $request->input('name'),
|
||||
]);
|
||||
|
||||
collect([
|
||||
[
|
||||
'name' => 'setup_wizard_success',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'license',
|
||||
'value' => $request->input('license'),
|
||||
],
|
||||
[
|
||||
'name' => 'purchase_code',
|
||||
'value' => $request->input('purchase_code'),
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
// Set up application
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings($request->input('license'));
|
||||
$this->setup->seed_default_language();
|
||||
|
||||
// Login account
|
||||
if (Auth::attempt($request->only(['email', 'password']))) {
|
||||
$request->session()->regenerate();
|
||||
|
||||
return response('Registration was successful', 204);
|
||||
}
|
||||
|
||||
return response('Something went wrong', 500);
|
||||
}
|
||||
}
|
||||
@@ -1,478 +0,0 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Schema;
|
||||
use Stripe;
|
||||
use Artisan;
|
||||
use App\Users\Models\User;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Doctrine\DBAL\Driver\PDOException;
|
||||
use Domain\SetupWizard\Services\SetupService;
|
||||
use Domain\Subscriptions\Services\StripeService;
|
||||
use Illuminate\Contracts\Routing\ResponseFactory;
|
||||
use Cartalyst\Stripe\Exception\UnauthorizedException;
|
||||
use Domain\SetupWizard\Requests\StoreAppSetupRequest;
|
||||
use Domain\SetupWizard\Requests\StoreStripePlansRequest;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Domain\SetupWizard\Requests\StoreStripeBillingRequest;
|
||||
use Domain\SetupWizard\Requests\StoreEnvironmentSetupRequest;
|
||||
use Domain\SetupWizard\Requests\StoreStripeCredentialsRequest;
|
||||
use Domain\SetupWizard\Requests\StoreDatabaseCredentialsRequest;
|
||||
|
||||
class SetupWizardController extends Controller
|
||||
{
|
||||
/**
|
||||
* Inject Stripe Service
|
||||
*/
|
||||
public function __construct(
|
||||
public StripeService $stripe,
|
||||
public SetupService $setup,
|
||||
) {
|
||||
$this->check_setup_status();
|
||||
}
|
||||
|
||||
/**
|
||||
* Verify Envato purchase code
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response|mixed
|
||||
*/
|
||||
public function verify_purchase_code(Request $request)
|
||||
{
|
||||
// Verify purchase code
|
||||
$response = Http::get('https://verify.vuefilemanager.com/api/verify-code/' . $request->purchaseCode);
|
||||
|
||||
if ($response->successful()) {
|
||||
return response($response, 204);
|
||||
}
|
||||
|
||||
return response('Purchase code is invalid.', 400);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up database credentials
|
||||
*
|
||||
* @param StoreDatabaseCredentialsRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function setup_database(StoreDatabaseCredentialsRequest $request)
|
||||
{
|
||||
if (! app()->runningUnitTests()) {
|
||||
try {
|
||||
// Set temporary database connection
|
||||
config(['database.connections.test.driver' => $request->connection]);
|
||||
config(['database.connections.test.host' => $request->host]);
|
||||
config(['database.connections.test.port' => $request->port]);
|
||||
config(['database.connections.test.database' => $request->name]);
|
||||
config(['database.connections.test.username' => $request->username]);
|
||||
config(['database.connections.test.password' => $request->password]);
|
||||
|
||||
// Test connection
|
||||
\DB::connection('test')->getPdo();
|
||||
} catch (PDOException $e) {
|
||||
throw new HttpException(500, $e->getMessage());
|
||||
}
|
||||
|
||||
// TODO: add SANCTUM_STATEFUL_DOMAINS parameter
|
||||
|
||||
setEnvironmentValue([
|
||||
'DB_CONNECTION' => $request->connection,
|
||||
'DB_HOST' => $request->host,
|
||||
'DB_PORT' => $request->port,
|
||||
'DB_DATABASE' => $request->name,
|
||||
'DB_USERNAME' => $request->username,
|
||||
'DB_PASSWORD' => $request->password,
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
|
||||
Artisan::call('key:generate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
|
||||
Artisan::call('migrate:fresh', [
|
||||
'--force' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
// Store setup wizard progress
|
||||
Setting::forceCreate([
|
||||
'name' => 'setup_wizard_database',
|
||||
'value' => 1,
|
||||
]);
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store and test stripe credentials
|
||||
*
|
||||
* @param StoreStripeCredentialsRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_stripe_credentials(StoreStripeCredentialsRequest $request)
|
||||
{
|
||||
if (! app()->runningUnitTests()) {
|
||||
// Create stripe instance
|
||||
$stripe = Stripe::make($request->secret, '2020-03-02');
|
||||
|
||||
try {
|
||||
// Try to get stripe account details
|
||||
$stripe->account()->details();
|
||||
} catch (UnauthorizedException $e) {
|
||||
throw new HttpException(401, $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Set settings
|
||||
collect([
|
||||
[
|
||||
'name' => 'stripe_currency',
|
||||
'value' => $request->currency,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_configured',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_active',
|
||||
'value' => 1,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
// Set stripe credentials to .env
|
||||
setEnvironmentValue([
|
||||
'CASHIER_CURRENCY' => $request->currency,
|
||||
'STRIPE_KEY' => $request->key,
|
||||
'STRIPE_SECRET' => $request->secret,
|
||||
'STRIPE_WEBHOOK_SECRET' => $request->webhookSecret,
|
||||
]);
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store Stripe billings
|
||||
*
|
||||
* @param StoreStripeBillingRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_stripe_billings(StoreStripeBillingRequest $request)
|
||||
{
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
'name' => 'billing_phone_number',
|
||||
'value' => $request->billing_phone_number,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_postal_code',
|
||||
'value' => $request->billing_postal_code,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_vat_number',
|
||||
'value' => $request->billing_vat_number,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_address',
|
||||
'value' => $request->billing_address,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_country',
|
||||
'value' => $request->billing_country,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_state',
|
||||
'value' => $request->billing_state,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_city',
|
||||
'value' => $request->billing_city,
|
||||
],
|
||||
[
|
||||
'name' => 'billing_name',
|
||||
'value' => $request->billing_name,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create Stripe subscription plan
|
||||
*
|
||||
* @param StoreStripePlansRequest $request
|
||||
* @return \Illuminate\Contracts\Foundation\Application|ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_stripe_plans(StoreStripePlansRequest $request)
|
||||
{
|
||||
foreach ($request->plans as $plan) {
|
||||
$this->stripe->createPlan($plan);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store environment setup
|
||||
*
|
||||
* @param StoreEnvironmentSetupRequest $request
|
||||
* @return string
|
||||
*/
|
||||
public function store_environment_setup(StoreEnvironmentSetupRequest $request)
|
||||
{
|
||||
if (! app()->runningUnitTests()) {
|
||||
$drivers = [
|
||||
'local' => [
|
||||
'FILESYSTEM_DRIVER' => 'local',
|
||||
],
|
||||
's3' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'AWS_ACCESS_KEY_ID' => $request->storage['key'] ?? null,
|
||||
'AWS_SECRET_ACCESS_KEY' => $request->storage['secret'] ?? null,
|
||||
'AWS_DEFAULT_REGION' => $request->storage['region'] ?? null,
|
||||
'AWS_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
'spaces' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'DO_SPACES_KEY' => $request->storage['key'] ?? null,
|
||||
'DO_SPACES_SECRET' => $request->storage['secret'] ?? null,
|
||||
'DO_SPACES_ENDPOINT' => $request->storage['endpoint'] ?? null,
|
||||
'DO_SPACES_REGION' => $request->storage['region'] ?? null,
|
||||
'DO_SPACES_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
'wasabi' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'WASABI_KEY' => $request->storage['key'] ?? null,
|
||||
'WASABI_SECRET' => $request->storage['secret'] ?? null,
|
||||
'WASABI_ENDPOINT' => $request->storage['endpoint'] ?? null,
|
||||
'WASABI_REGION' => $request->storage['region'] ?? null,
|
||||
'WASABI_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
'backblaze' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'BACKBLAZE_KEY' => $request->storage['key'] ?? null,
|
||||
'BACKBLAZE_SECRET' => $request->storage['secret'] ?? null,
|
||||
'BACKBLAZE_ENDPOINT' => $request->storage['endpoint'] ?? null,
|
||||
'BACKBLAZE_REGION' => $request->storage['region'] ?? null,
|
||||
'BACKBLAZE_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
'oss' => [
|
||||
'FILESYSTEM_DRIVER' => $request->storage['driver'] ?? null,
|
||||
'OSS_ACCESS_KEY_ID' => $request->storage['key'] ?? null,
|
||||
'OSS_SECRET_ACCESS_KEY' => $request->storage['secret'] ?? null,
|
||||
'OSS_ENDPOINT' => $request->storage['endpoint'] ?? null,
|
||||
'OSS_REGION' => $request->storage['region'] ?? null,
|
||||
'OSS_BUCKET' => $request->storage['bucket'] ?? null,
|
||||
],
|
||||
];
|
||||
|
||||
// Storage credentials for storage
|
||||
setEnvironmentValue(
|
||||
$drivers[$request->storage['driver']]
|
||||
);
|
||||
|
||||
// Store credentials for mail
|
||||
// TODO: add options for mailgun
|
||||
setEnvironmentValue([
|
||||
'MAIL_DRIVER' => $request->mail['driver'],
|
||||
'MAIL_HOST' => $request->mail['host'],
|
||||
'MAIL_PORT' => $request->mail['port'],
|
||||
'MAIL_USERNAME' => $request->mail['username'],
|
||||
'MAIL_PASSWORD' => $request->mail['password'],
|
||||
'MAIL_ENCRYPTION' => $request->mail['encryption'],
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Store app settings
|
||||
* @param StoreAppSetupRequest $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response
|
||||
*/
|
||||
public function store_app_settings(StoreAppSetupRequest $request)
|
||||
{
|
||||
// Get options
|
||||
collect([
|
||||
[
|
||||
'name' => 'app_title',
|
||||
'value' => $request->title,
|
||||
],
|
||||
[
|
||||
'name' => 'app_description',
|
||||
'value' => $request->description,
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo',
|
||||
'value' => store_system_image($request, 'logo'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_horizontal',
|
||||
'value' => store_system_image($request, 'logo_horizontal'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_favicon',
|
||||
'value' => store_system_image($request, 'favicon'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_og_image',
|
||||
'value' => store_system_image($request, 'og_image'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_touch_icon',
|
||||
'value' => store_system_image($request, 'touch_icon'),
|
||||
],
|
||||
[
|
||||
'name' => 'google_analytics',
|
||||
'value' => $request->googleAnalytics,
|
||||
],
|
||||
[
|
||||
'name' => 'contact_email',
|
||||
'value' => $request->contactMail,
|
||||
],
|
||||
[
|
||||
'name' => 'registration',
|
||||
'value' => $request->userRegistration,
|
||||
],
|
||||
[
|
||||
'name' => 'storage_limitation',
|
||||
'value' => $request->storageLimitation,
|
||||
],
|
||||
[
|
||||
'name' => 'storage_default',
|
||||
'value' => $request->defaultStorage ?? 5,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
setEnvironmentValue([
|
||||
'APP_NAME' => Str::camel($request->title),
|
||||
]);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and login admin account
|
||||
*
|
||||
* @param Request $request
|
||||
* @return ResponseFactory|\Illuminate\Http\Response|\Symfony\Component\HttpFoundation\Response
|
||||
*/
|
||||
public function create_admin_account(Request $request)
|
||||
{
|
||||
// Validate request
|
||||
// TODO: validator do requestu
|
||||
$request->validate([
|
||||
'email' => 'required|string|email|unique:users',
|
||||
'password' => 'required|string|min:6|confirmed',
|
||||
'name' => 'required|string',
|
||||
'purchase_code' => 'required|string',
|
||||
'license' => 'required|string',
|
||||
'avatar' => 'sometimes|file',
|
||||
]);
|
||||
|
||||
// Create user
|
||||
$user = User::forceCreate([
|
||||
'role' => 'admin',
|
||||
'email' => $request->email,
|
||||
'password' => bcrypt($request->password),
|
||||
'email_verified_at' => now(),
|
||||
]);
|
||||
|
||||
$user
|
||||
->settings()
|
||||
->create([
|
||||
'storage_capacity' => get_setting('storage_default') ?? 5,
|
||||
'avatar' => store_avatar($request, 'avatar'),
|
||||
'name' => $request->name,
|
||||
]);
|
||||
|
||||
collect([
|
||||
[
|
||||
'name' => 'setup_wizard_success',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'license',
|
||||
'value' => $request->license,
|
||||
],
|
||||
[
|
||||
'name' => 'purchase_code',
|
||||
'value' => $request->purchase_code,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
// Set up application
|
||||
$this->setup->seed_default_pages();
|
||||
$this->setup->seed_default_settings($request->license);
|
||||
$this->setup->seed_default_language();
|
||||
|
||||
// Login account
|
||||
if (Auth::attempt($request->only(['email', 'password']))) {
|
||||
$request->session()->regenerate();
|
||||
|
||||
return response('Registration was successful', 204);
|
||||
}
|
||||
|
||||
return response('Something went wrong', 500);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setup wizard status
|
||||
*/
|
||||
private function check_setup_status()
|
||||
{
|
||||
try {
|
||||
// Check database connections
|
||||
DB::getPdo();
|
||||
|
||||
// Get setup_wizard status
|
||||
if (Schema::hasTable('settings') && get_setting('setup_wizard_success')) {
|
||||
// TODO: resolve
|
||||
//abort(410, 'Gone');
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\SetupWizard\Requests\StoreAppSetupRequest;
|
||||
|
||||
class StoreAppSettingsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Store app settings
|
||||
*/
|
||||
public function __invoke(
|
||||
StoreAppSetupRequest $request
|
||||
): Response {
|
||||
collect([
|
||||
[
|
||||
'name' => 'app_title',
|
||||
'value' => $request->input('title'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_description',
|
||||
'value' => $request->input('description'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo',
|
||||
'value' => store_system_image($request, 'logo'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_logo_horizontal',
|
||||
'value' => store_system_image($request, 'logo_horizontal'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_favicon',
|
||||
'value' => store_system_image($request, 'favicon'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_og_image',
|
||||
'value' => store_system_image($request, 'og_image'),
|
||||
],
|
||||
[
|
||||
'name' => 'app_touch_icon',
|
||||
'value' => store_system_image($request, 'touch_icon'),
|
||||
],
|
||||
[
|
||||
'name' => 'google_analytics',
|
||||
'value' => $request->input('googleAnalytics'),
|
||||
],
|
||||
[
|
||||
'name' => 'contact_email',
|
||||
'value' => $request->input('contactMail'),
|
||||
],
|
||||
[
|
||||
'name' => 'registration',
|
||||
'value' => $request->input('userRegistration'),
|
||||
],
|
||||
[
|
||||
'name' => 'storage_limitation',
|
||||
'value' => $request->input('storageLimitation'),
|
||||
],
|
||||
[
|
||||
'name' => 'storage_default',
|
||||
'value' => $request->input('defaultStorage') ?? 5,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
setEnvironmentValue([
|
||||
'APP_NAME' => Str::camel($request->input('title')),
|
||||
]);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Artisan;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\SetupWizard\Requests\StoreStripeBillingRequest;
|
||||
|
||||
class StoreBillingsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Store Stripe billings
|
||||
*/
|
||||
public function __invoke(
|
||||
StoreStripeBillingRequest $request
|
||||
): Response {
|
||||
collect([
|
||||
[
|
||||
'name' => 'billing_phone_number',
|
||||
'value' => $request->input('billing_phone_number'),
|
||||
],
|
||||
[
|
||||
'name' => 'billing_postal_code',
|
||||
'value' => $request->input('billing_postal_code'),
|
||||
],
|
||||
[
|
||||
'name' => 'billing_vat_number',
|
||||
'value' => $request->input('billing_vat_number'),
|
||||
],
|
||||
[
|
||||
'name' => 'billing_address',
|
||||
'value' => $request->input('billing_address'),
|
||||
],
|
||||
[
|
||||
'name' => 'billing_country',
|
||||
'value' => $request->input('billing_country'),
|
||||
],
|
||||
[
|
||||
'name' => 'billing_state',
|
||||
'value' => $request->input('billing_state'),
|
||||
],
|
||||
[
|
||||
'name' => 'billing_city',
|
||||
'value' => $request->input('billing_city'),
|
||||
],
|
||||
[
|
||||
'name' => 'billing_name',
|
||||
'value' => $request->input('billing_name'),
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Artisan;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Doctrine\DBAL\Driver\PDOException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Domain\SetupWizard\Requests\StoreDatabaseCredentialsRequest;
|
||||
|
||||
class StoreDatabaseCredentialsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Set up database credentials
|
||||
*/
|
||||
public function __invoke(
|
||||
StoreDatabaseCredentialsRequest $request
|
||||
): Response {
|
||||
if (! app()->runningUnitTests()) {
|
||||
try {
|
||||
// Set temporary database connection
|
||||
config([
|
||||
'database' => [
|
||||
'connections' => [
|
||||
'tests' => [
|
||||
'driver' => $request->input('connection'),
|
||||
'host' => $request->input('host'),
|
||||
'port' => $request->input('port'),
|
||||
'database' => $request->input('name'),
|
||||
'username' => $request->input('username'),
|
||||
'password' => $request->input('password'),
|
||||
],
|
||||
],
|
||||
],
|
||||
]);
|
||||
|
||||
// Test connection
|
||||
\DB::connection('test')->getPdo();
|
||||
} catch (PDOException $e) {
|
||||
throw new HttpException(500, $e->getMessage());
|
||||
}
|
||||
|
||||
// TODO: add SANCTUM_STATEFUL_DOMAINS parameter
|
||||
|
||||
setEnvironmentValue([
|
||||
'DB_CONNECTION' => $request->input('connection'),
|
||||
'DB_HOST' => $request->input('host'),
|
||||
'DB_PORT' => $request->input('port'),
|
||||
'DB_DATABASE' => $request->input('name'),
|
||||
'DB_USERNAME' => $request->input('username'),
|
||||
'DB_PASSWORD' => $request->input('password'),
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
|
||||
Artisan::call('key:generate', [
|
||||
'--force' => true,
|
||||
]);
|
||||
|
||||
Artisan::call('migrate:fresh', [
|
||||
'--force' => true,
|
||||
]);
|
||||
}
|
||||
|
||||
// Store setup wizard progress
|
||||
Setting::forceCreate([
|
||||
'name' => 'setup_wizard_database',
|
||||
'value' => 1,
|
||||
]);
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Artisan;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\SetupWizard\Requests\StoreEnvironmentSetupRequest;
|
||||
|
||||
class StoreEnvironmentSettingsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Store environment setup
|
||||
*/
|
||||
public function __invoke(
|
||||
StoreEnvironmentSetupRequest $request,
|
||||
): Response {
|
||||
if (! app()->runningUnitTests()) {
|
||||
$drivers = [
|
||||
'local' => [
|
||||
'FILESYSTEM_DRIVER' => 'local',
|
||||
],
|
||||
's3' => [
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver') ?? null,
|
||||
'AWS_ACCESS_KEY_ID' => $request->input('storage.key') ?? null,
|
||||
'AWS_SECRET_ACCESS_KEY' => $request->input('storage.secret') ?? null,
|
||||
'AWS_DEFAULT_REGION' => $request->input('storage.region') ?? null,
|
||||
'AWS_BUCKET' => $request->input('storage.bucket') ?? null,
|
||||
],
|
||||
'spaces' => [
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver') ?? null,
|
||||
'DO_SPACES_KEY' => $request->input('storage.key') ?? null,
|
||||
'DO_SPACES_SECRET' => $request->input('storage.secret') ?? null,
|
||||
'DO_SPACES_ENDPOINT' => $request->input('storage.endpoint') ?? null,
|
||||
'DO_SPACES_REGION' => $request->input('storage.region') ?? null,
|
||||
'DO_SPACES_BUCKET' => $request->input('storage.bucket') ?? null,
|
||||
],
|
||||
'wasabi' => [
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver') ?? null,
|
||||
'WASABI_KEY' => $request->input('storage.key') ?? null,
|
||||
'WASABI_SECRET' => $request->input('storage.secret') ?? null,
|
||||
'WASABI_ENDPOINT' => $request->input('storage.endpoint') ?? null,
|
||||
'WASABI_REGION' => $request->input('storage.region') ?? null,
|
||||
'WASABI_BUCKET' => $request->input('storage.bucket') ?? null,
|
||||
],
|
||||
'backblaze' => [
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver') ?? null,
|
||||
'BACKBLAZE_KEY' => $request->input('storage.key') ?? null,
|
||||
'BACKBLAZE_SECRET' => $request->input('storage.secret') ?? null,
|
||||
'BACKBLAZE_ENDPOINT' => $request->input('storage.endpoint') ?? null,
|
||||
'BACKBLAZE_REGION' => $request->input('storage.region') ?? null,
|
||||
'BACKBLAZE_BUCKET' => $request->input('storage.bucket') ?? null,
|
||||
],
|
||||
'oss' => [
|
||||
'FILESYSTEM_DRIVER' => $request->input('storage.driver') ?? null,
|
||||
'OSS_ACCESS_KEY_ID' => $request->input('storage.key') ?? null,
|
||||
'OSS_SECRET_ACCESS_KEY' => $request->input('storage.secret') ?? null,
|
||||
'OSS_ENDPOINT' => $request->input('storage.endpoint') ?? null,
|
||||
'OSS_REGION' => $request->input('storage.region') ?? null,
|
||||
'OSS_BUCKET' => $request->input('storage.bucket') ?? null,
|
||||
],
|
||||
];
|
||||
|
||||
// Storage credentials for storage
|
||||
setEnvironmentValue(
|
||||
$drivers[$request->input('storage.driver')]
|
||||
);
|
||||
|
||||
// Store credentials for mail
|
||||
// TODO: add options for mailgun
|
||||
setEnvironmentValue([
|
||||
'MAIL_DRIVER' => $request->input('mail.driver'),
|
||||
'MAIL_HOST' => $request->input('mail.host'),
|
||||
'MAIL_PORT' => $request->input('mail.port'),
|
||||
'MAIL_USERNAME' => $request->input('mail.username'),
|
||||
'MAIL_PASSWORD' => $request->input('mail.password'),
|
||||
'MAIL_ENCRYPTION' => $request->input('mail.encryption'),
|
||||
]);
|
||||
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
28
src/Domain/SetupWizard/Controllers/StorePlansController.php
Normal file
28
src/Domain/SetupWizard/Controllers/StorePlansController.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Subscriptions\Services\StripeService;
|
||||
use Domain\SetupWizard\Requests\StoreStripePlansRequest;
|
||||
|
||||
/**
|
||||
* Create Stripe subscription plan
|
||||
*/
|
||||
class StorePlansController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
public StripeService $stripe,
|
||||
) {
|
||||
}
|
||||
|
||||
public function store_stripe_plans(
|
||||
StoreStripePlansRequest $request
|
||||
): Response {
|
||||
foreach ($request->input('plans') as $plan) {
|
||||
$this->stripe->createPlan($plan);
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Stripe;
|
||||
use Artisan;
|
||||
use Illuminate\Http\Response;
|
||||
use Domain\Settings\Models\Setting;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Cartalyst\Stripe\Exception\UnauthorizedException;
|
||||
use Symfony\Component\HttpKernel\Exception\HttpException;
|
||||
use Domain\SetupWizard\Requests\StoreStripeCredentialsRequest;
|
||||
|
||||
class StoreSubscriptionServiceCredentialsController extends Controller
|
||||
{
|
||||
/**
|
||||
* Store and test stripe credentials
|
||||
*/
|
||||
public function store_stripe_credentials(
|
||||
StoreStripeCredentialsRequest $request
|
||||
): Response {
|
||||
if (! app()->runningUnitTests()) {
|
||||
// Create stripe instance
|
||||
$stripe = Stripe::make($request->input('secret'), '2020-03-02');
|
||||
|
||||
try {
|
||||
// Try to get stripe account details
|
||||
$stripe->account()->details();
|
||||
} catch (UnauthorizedException $e) {
|
||||
throw new HttpException(401, $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Set settings
|
||||
collect([
|
||||
[
|
||||
'name' => 'stripe_currency',
|
||||
'value' => $request->input('currency'),
|
||||
],
|
||||
[
|
||||
'name' => 'payments_configured',
|
||||
'value' => 1,
|
||||
],
|
||||
[
|
||||
'name' => 'payments_active',
|
||||
'value' => 1,
|
||||
],
|
||||
])->each(function ($col) {
|
||||
Setting::forceCreate([
|
||||
'name' => $col['name'],
|
||||
'value' => $col['value'],
|
||||
]);
|
||||
});
|
||||
|
||||
if (! app()->runningUnitTests()) {
|
||||
// Set stripe credentials to .env
|
||||
setEnvironmentValue([
|
||||
'CASHIER_CURRENCY' => $request->input('currency'),
|
||||
'STRIPE_KEY' => $request->input('key'),
|
||||
'STRIPE_SECRET' => $request->input('secret'),
|
||||
'STRIPE_WEBHOOK_SECRET' => $request->input('webhookSecret'),
|
||||
]);
|
||||
|
||||
// Clear cache
|
||||
Artisan::call('config:cache');
|
||||
}
|
||||
|
||||
return response('Done', 204);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
namespace Domain\SetupWizard\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Response;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
||||
class VerifyPurchaseCodeController extends Controller
|
||||
{
|
||||
/**
|
||||
* Verify Envato purchase code
|
||||
*/
|
||||
public function __invoke(Request $request): Response
|
||||
{
|
||||
// Verify purchase code
|
||||
$response = Http::get("https://verify.vuefilemanager.com/api/verify-code/{$request->input('purchaseCode')}");
|
||||
|
||||
if ($response->successful()) {
|
||||
return response($response, 204);
|
||||
}
|
||||
|
||||
return response('Purchase code is invalid.', 400);
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,9 @@ use Domain\Sharing\Models\Share;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Domain\Sharing\Resources\ShareResource;
|
||||
use Domain\Sharing\Actions\SendViaEmailAction;
|
||||
use Domain\Sharing\Requests\CreateShareRequest;
|
||||
use Domain\Sharing\Requests\UpdateShareRequest;
|
||||
use Domain\Sharing\Actions\SendViaEmailAction;
|
||||
|
||||
class ShareController extends Controller
|
||||
{
|
||||
|
||||
@@ -1,26 +1,21 @@
|
||||
<?php
|
||||
namespace Domain\Sharing\Controllers;
|
||||
|
||||
use Illuminate\View\View;
|
||||
use Domain\Files\Models\File;
|
||||
use Domain\Sharing\Models\Share;
|
||||
use Support\Services\HelperService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||
|
||||
class BrowseShareController extends Controller
|
||||
class SharePublicIndexController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private HelperService $helper,
|
||||
) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Show page index and delete access_token & shared_token cookie
|
||||
* @param Share $shared
|
||||
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View|\Symfony\Component\HttpFoundation\StreamedResponse
|
||||
* Show page index and delete share_session cookie
|
||||
*/
|
||||
public function index(Share $shared)
|
||||
{
|
||||
public function __invoke(
|
||||
Share $shared
|
||||
): View | StreamedResponse {
|
||||
// Delete share_session if exist
|
||||
if ($shared->is_protected) {
|
||||
cookie()->queue('share_session', '', -1);
|
||||
@@ -52,16 +47,9 @@ class BrowseShareController extends Controller
|
||||
|
||||
/**
|
||||
* Get image from storage and show it
|
||||
*
|
||||
* @param $file
|
||||
* @param $user_id
|
||||
* @return \Symfony\Component\HttpFoundation\StreamedResponse
|
||||
*/
|
||||
private function get_single_image($file, $user_id)
|
||||
private function get_single_image(File $file, string $user_id): StreamedResponse
|
||||
{
|
||||
// Format pretty filename
|
||||
$file_pretty_name = $file->name . '.' . $file->mimetype;
|
||||
|
||||
// Get file path
|
||||
$path = "/files/$user_id/$file->basename";
|
||||
|
||||
@@ -70,7 +58,7 @@ class BrowseShareController extends Controller
|
||||
abort(404);
|
||||
}
|
||||
|
||||
return Storage::response($path, $file_pretty_name, [
|
||||
return Storage::response($path, "{$file->name}.{$file->mimetype}", [
|
||||
'Content-Type' => Storage::mimeType($path),
|
||||
'Content-Length' => Storage::size($path),
|
||||
'Accept-Ranges' => 'bytes',
|
||||
@@ -13,7 +13,6 @@ class ShareViaEmailController extends Controller
|
||||
Request $request,
|
||||
string $token,
|
||||
): Response {
|
||||
|
||||
($sendLinkToEmailAction)(
|
||||
$request->input('emails'),
|
||||
$token
|
||||
|
||||
Reference in New Issue
Block a user