first upload all files
This commit is contained in:
69
app/Http/Controllers/InstallController.php
Normal file
69
app/Http/Controllers/InstallController.php
Normal file
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Controllers;
|
||||
|
||||
use Exception;
|
||||
use FleetCart\Install\App;
|
||||
use FleetCart\Install\Store;
|
||||
use FleetCart\Install\Database;
|
||||
use FleetCart\Install\Requirement;
|
||||
use Illuminate\Routing\Controller;
|
||||
use FleetCart\Install\AdminAccount;
|
||||
use FleetCart\Http\Requests\InstallRequest;
|
||||
use Jackiedo\DotenvEditor\Facades\DotenvEditor;
|
||||
use FleetCart\Http\Middleware\RedirectIfInstalled;
|
||||
|
||||
class InstallController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware(RedirectIfInstalled::class);
|
||||
}
|
||||
|
||||
public function preInstallation(Requirement $requirement)
|
||||
{
|
||||
return view('install.pre_installation', compact('requirement'));
|
||||
}
|
||||
|
||||
public function getConfiguration(Requirement $requirement)
|
||||
{
|
||||
if (! $requirement->satisfied()) {
|
||||
return redirect()->route('install.pre_installation');
|
||||
}
|
||||
|
||||
return view('install.configuration', compact('requirement'));
|
||||
}
|
||||
|
||||
public function postConfiguration(
|
||||
InstallRequest $request,
|
||||
Database $database,
|
||||
AdminAccount $admin,
|
||||
Store $store,
|
||||
App $app
|
||||
) {
|
||||
@set_time_limit(0);
|
||||
|
||||
try {
|
||||
$database->setup($request->db);
|
||||
$admin->setup($request->admin);
|
||||
$store->setup($request->store);
|
||||
$app->setup();
|
||||
} catch (Exception $e) {
|
||||
return back()->withInput()
|
||||
->with('error', $e->getMessage());
|
||||
}
|
||||
|
||||
return redirect('install/complete');
|
||||
}
|
||||
|
||||
public function complete()
|
||||
{
|
||||
if (config('app.installed')) {
|
||||
return redirect()->route('home');
|
||||
}
|
||||
|
||||
DotenvEditor::setKey('APP_INSTALLED', 'true')->save();
|
||||
|
||||
return view('install.complete');
|
||||
}
|
||||
}
|
||||
33
app/Http/Controllers/LicenseController.php
Normal file
33
app/Http/Controllers/LicenseController.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Controllers;
|
||||
|
||||
use FleetCart\License;
|
||||
use Illuminate\Routing\Controller;
|
||||
use FleetCart\Http\Middleware\RedirectIfShouldNotCreateLicense;
|
||||
|
||||
class LicenseController extends Controller
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware(RedirectIfShouldNotCreateLicense::class);
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('license.create');
|
||||
}
|
||||
|
||||
public function store(License $license)
|
||||
{
|
||||
request()->validate([
|
||||
'purchase_code' => 'required',
|
||||
], [
|
||||
'required' => 'The purchase code field is required.',
|
||||
]);
|
||||
|
||||
$license->activate(request('purchase_code'));
|
||||
|
||||
return redirect()->intended();
|
||||
}
|
||||
}
|
||||
62
app/Http/Kernel.php
Normal file
62
app/Http/Kernel.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http;
|
||||
|
||||
use Illuminate\Foundation\Http\Kernel as HttpKernel;
|
||||
|
||||
class Kernel extends HttpKernel
|
||||
{
|
||||
/**
|
||||
* The application's global HTTP middleware stack.
|
||||
*
|
||||
* These middleware are run during every request to your application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middleware = [
|
||||
\FleetCart\Http\Middleware\EncryptCookies::class,
|
||||
\Illuminate\Session\Middleware\StartSession::class,
|
||||
\FleetCart\Http\Middleware\CheckForMaintenanceMode::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\FleetCart\Http\Middleware\TrimStrings::class,
|
||||
\FleetCart\Http\Middleware\ConvertStringBooleans::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
\FleetCart\Http\Middleware\TrustProxies::class,
|
||||
\FleetCart\Http\Middleware\RedirectToInstallerIfNotInstalled::class,
|
||||
\FleetCart\Http\Middleware\RunUpdater::class,
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware groups.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $middlewareGroups = [
|
||||
'web' => [
|
||||
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
|
||||
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
|
||||
\FleetCart\Http\Middleware\VerifyCsrfToken::class,
|
||||
\Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
],
|
||||
'api' => [
|
||||
'throttle:60,1',
|
||||
'bindings',
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
* The application's route middleware.
|
||||
*
|
||||
* These middleware may be assigned to groups or used individually.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $routeMiddleware = [
|
||||
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
|
||||
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
|
||||
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
|
||||
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
|
||||
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
|
||||
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
|
||||
];
|
||||
}
|
||||
41
app/Http/Middleware/CheckForMaintenanceMode.php
Normal file
41
app/Http/Middleware/CheckForMaintenanceMode.php
Normal file
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode as BaseCheckForMaintenanceMode;
|
||||
|
||||
class CheckForMaintenanceMode extends BaseCheckForMaintenanceMode
|
||||
{
|
||||
/**
|
||||
* The URIs that should be accessible while maintenance mode is enabled.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
'*/admin*',
|
||||
];
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*
|
||||
* @throws \Symfony\Component\HttpKernel\Exception\HttpException
|
||||
* @throws \Illuminate\Foundation\Http\Exceptions\MaintenanceModeException
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (
|
||||
config('app.installed')
|
||||
&& $this->app->isDownForMaintenance()
|
||||
&& optional(auth()->user())->hasRoleName('Admin')
|
||||
) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
return parent::handle($request, $next);
|
||||
}
|
||||
}
|
||||
28
app/Http/Middleware/ConvertStringBooleans.php
Normal file
28
app/Http/Middleware/ConvertStringBooleans.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\TransformsRequest;
|
||||
|
||||
class ConvertStringBooleans extends TransformsRequest
|
||||
{
|
||||
/**
|
||||
* Transform the given value.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
protected function transform($key, $value)
|
||||
{
|
||||
if ($value === 'true' || $value === 'TRUE') {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ($value === 'false' || $value === 'FALSE') {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
17
app/Http/Middleware/EncryptCookies.php
Normal file
17
app/Http/Middleware/EncryptCookies.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Illuminate\Cookie\Middleware\EncryptCookies as Middleware;
|
||||
|
||||
class EncryptCookies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The names of the cookies that should not be encrypted.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
'currency',
|
||||
];
|
||||
}
|
||||
24
app/Http/Middleware/RedirectIfInstalled.php
Normal file
24
app/Http/Middleware/RedirectIfInstalled.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class RedirectIfInstalled
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (config('app.installed')) {
|
||||
return redirect()->route('home');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
32
app/Http/Middleware/RedirectIfShouldNotCreateLicense.php
Normal file
32
app/Http/Middleware/RedirectIfShouldNotCreateLicense.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use FleetCart\License;
|
||||
|
||||
class RedirectIfShouldNotCreateLicense
|
||||
{
|
||||
private $license;
|
||||
|
||||
public function __construct(License $license)
|
||||
{
|
||||
$this->license = $license;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if ($this->license->valid() || ! $this->license->shouldCreateLicense()) {
|
||||
return redirect()->intended('/admin');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
24
app/Http/Middleware/RedirectToInstallerIfNotInstalled.php
Normal file
24
app/Http/Middleware/RedirectToInstallerIfNotInstalled.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
|
||||
class RedirectToInstallerIfNotInstalled
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (! config('app.installed') && ! $request->is('install/*')) {
|
||||
return redirect()->route('install.pre_installation');
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
25
app/Http/Middleware/RunUpdater.php
Normal file
25
app/Http/Middleware/RunUpdater.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use FleetCart\Updater;
|
||||
|
||||
class RunUpdater
|
||||
{
|
||||
/**
|
||||
* Handle an incoming request.
|
||||
*
|
||||
* @param \Illuminate\Http\Request $request
|
||||
* @param \Closure $next
|
||||
* @return mixed
|
||||
*/
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (config('app.installed') && file_exists(storage_path('app/update'))) {
|
||||
Updater::run();
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
18
app/Http/Middleware/TrimStrings.php
Normal file
18
app/Http/Middleware/TrimStrings.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\TrimStrings as BaseTrimmer;
|
||||
|
||||
class TrimStrings extends BaseTrimmer
|
||||
{
|
||||
/**
|
||||
* The names of the attributes that should not be trimmed.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
'password',
|
||||
'password_confirmation',
|
||||
];
|
||||
}
|
||||
28
app/Http/Middleware/TrustProxies.php
Normal file
28
app/Http/Middleware/TrustProxies.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Middleware\TrustProxies as Middleware;
|
||||
|
||||
class TrustProxies extends Middleware
|
||||
{
|
||||
/**
|
||||
* The trusted proxies for this application.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $proxies = '*';
|
||||
|
||||
/**
|
||||
* The current proxy header mappings.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $headers =
|
||||
Request::HEADER_X_FORWARDED_FOR |
|
||||
Request::HEADER_X_FORWARDED_HOST |
|
||||
Request::HEADER_X_FORWARDED_PORT |
|
||||
Request::HEADER_X_FORWARDED_PROTO |
|
||||
Request::HEADER_X_FORWARDED_AWS_ELB;
|
||||
}
|
||||
17
app/Http/Middleware/VerifyCsrfToken.php
Normal file
17
app/Http/Middleware/VerifyCsrfToken.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Middleware;
|
||||
|
||||
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
|
||||
|
||||
class VerifyCsrfToken extends BaseVerifier
|
||||
{
|
||||
/**
|
||||
* The URIs that should be excluded from CSRF verification.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $except = [
|
||||
//
|
||||
];
|
||||
}
|
||||
77
app/Http/Requests/InstallRequest.php
Normal file
77
app/Http/Requests/InstallRequest.php
Normal file
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
|
||||
namespace FleetCart\Http\Requests;
|
||||
|
||||
use Illuminate\Validation\Rule;
|
||||
use Modules\Core\Http\Requests\Request;
|
||||
|
||||
class InstallRequest extends Request
|
||||
{
|
||||
/**
|
||||
* 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 [
|
||||
'db.host' => 'required',
|
||||
'db.port' => 'required',
|
||||
'db.username' => 'required',
|
||||
'db.password' => 'nullable',
|
||||
'db.database' => 'required',
|
||||
'admin.first_name' => 'required',
|
||||
'admin.last_name' => 'required',
|
||||
'admin.email' => 'required|email',
|
||||
'admin.phone' => 'required',
|
||||
'admin.password' => 'required|confirmed|min:6',
|
||||
'store.store_name' => 'required',
|
||||
'store.store_email' => 'required|email',
|
||||
'store.store_phone' => 'required',
|
||||
'store.search_engine' => ['required', Rule::in(['mysql', 'algolia', 'meilisearch'])],
|
||||
'store.algolia_app_id' => 'required_if:store.search_engine,algolia',
|
||||
'store.algolia_secret' => 'required_if:store.search_engine,algolia',
|
||||
'store.meilisearch_host' => 'required_if:store.search_engine,meilisearch',
|
||||
'store.meilisearch_key' => 'required_if:store.search_engine,meilisearch',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get custom attributes for validator errors.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function attributes()
|
||||
{
|
||||
return [
|
||||
'db.host' => 'host',
|
||||
'db.port' => 'port',
|
||||
'db.username' => 'username',
|
||||
'db.password' => 'password',
|
||||
'db.database' => 'datbase',
|
||||
'admin.first_name' => 'first name',
|
||||
'admin.last_name' => 'last name',
|
||||
'admin.email' => 'email',
|
||||
'admin.phone' => 'phone',
|
||||
'admin.password' => 'password',
|
||||
'store.store_name' => 'store name',
|
||||
'store.store_email' => 'store email',
|
||||
'store.store_phone' => 'store phone',
|
||||
'store.search_engine' => 'search engine',
|
||||
'store.algolia_app_id' => 'algolia application id',
|
||||
'store.algolia_secret' => 'algolia admin api key',
|
||||
'store.meilisearch_host' => 'meilisearch host',
|
||||
'store.meilisearch_key' => 'meilisearch key',
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user