diff --git a/.env.example b/.env.example index b384930432cc..9f8319b00738 100644 --- a/.env.example +++ b/.env.example @@ -55,5 +55,7 @@ PHANTOMJS_PDF_GENERATION=true PHANTOMJS_KEY='a-demo-key-with-low-quota-per-ip-address' PHANTOMJS_SECRET=secret +UPDATE_SECRET= + COMPOSER_AUTH='{"github-oauth": {"github.com": "${{ secrets.GITHUB_TOKEN }}"}}' SENTRY_LARAVEL_DSN=https://cc7e8e2c678041689e53e409b7dba236@sentry.invoicing.co/5 \ No newline at end of file diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index 9d975aaebc17..b1e2a1b41838 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -12,7 +12,6 @@ namespace App\Http\Controllers; -use \Illuminate\Support\Facades\DB; use App\Http\Requests\Setup\CheckDatabaseRequest; use App\Http\Requests\Setup\CheckMailRequest; use App\Http\Requests\Setup\StoreSetupRequest; @@ -20,6 +19,7 @@ use App\Jobs\Account\CreateAccount; use App\Jobs\Util\VersionCheck; use App\Models\Account; use App\Utils\CurlUtils; +use App\Utils\Ninja; use App\Utils\SystemHealth; use App\Utils\Traits\AppSetup; use Beganovich\Snappdf\Snappdf; @@ -29,10 +29,12 @@ use Illuminate\Contracts\Routing\ResponseFactory; use Illuminate\Http\JsonResponse; use Illuminate\Http\Response; use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\Cache; +use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Request; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Storage; -use Illuminate\Support\Facades\File; +use \Illuminate\Support\Facades\DB; /** * Class SetupController. @@ -267,4 +269,29 @@ class SetupController extends Controller return response([], 500); } } + + public function update() + { + + if( Ninja::isNinja() || !request()->has('secret') || (request()->input('secret') != config('ninja.update_secret')) ) + return redirect('/'); + + $cacheCompiled = base_path('bootstrap/cache/compiled.php'); + if (file_exists($cacheCompiled)) { unlink ($cacheCompiled); } + $cacheServices = base_path('bootstrap/cache/services.php'); + if (file_exists($cacheServices)) { unlink ($cacheServices); } + + Artisan::call('clear-compiled'); + Artisan::call('cache:clear'); + Artisan::call('debugbar:clear'); + Artisan::call('route:clear'); + Artisan::call('view:clear'); + Artisan::call('config:clear'); + Cache::flush(); + Artisan::call('migrate', ['--force' => true]); + Artisan::call('db:seed', ['--force' => true]); + + return redirect('/?clear_cache=true'); + + } } diff --git a/config/ninja.php b/config/ninja.php index 95f8a0df3753..f3702aad3497 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -38,7 +38,7 @@ return [ 'sentry_dsn' => env('SENTRY_LARAVEL_DSN', 'https://9b4e15e575214354a7d666489783904a@sentry.invoicing.co/6'), 'environment' => env('NINJA_ENVIRONMENT', 'selfhost'), // 'hosted', 'development', 'selfhost', 'reseller' 'preconfigured_install' => env('PRECONFIGURED_INSTALL',false), - + 'update_secret' => env('UPDATE_SECRET', false), // Settings used by invoiceninja.com 'terms_of_service_url' => [ diff --git a/routes/web.php b/routes/web.php index 6a6673112a94..914077b0b8c2 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,6 +8,7 @@ Route::get('/', 'BaseController@flutterRoute')->middleware('guest'); Route::get('setup', 'SetupController@index')->middleware('guest'); Route::post('setup', 'SetupController@doSetup')->middleware('guest'); +Route::get('update', 'SetupController@update')->middleware('guest'); Route::post('setup/check_db', 'SetupController@checkDB')->middleware('guest'); Route::post('setup/check_mail', 'SetupController@checkMail')->middleware('guest');