first upload all files

This commit is contained in:
NW
2023-06-11 13:14:03 +01:00
parent f14dbc52b5
commit c08b36d1b6
1705 changed files with 106852 additions and 0 deletions

View 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');
}
}

View 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
View 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,
];
}

View 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);
}
}

View 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;
}
}

View 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',
];
}

View 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);
}
}

View 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);
}
}

View 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);
}
}

View 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);
}
}

View 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',
];
}

View 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;
}

View 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 = [
//
];
}

View 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',
];
}
}