diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 62599c6c..dad177f4 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -278,4 +278,24 @@ class AccountController extends Controller return response()->json(['msg' => 'success'], 200); } + + public function sudoMode(Request $request) + { + return view('auth.sudo'); + } + + public function sudoModeVerify(Request $request) + { + $this->validate($request, [ + 'password' => 'required|string|max:500' + ]); + $user = Auth::user(); + $password = $request->input('password'); + $next = $request->session()->get('redirectNext', '/'); + if(password_verify($password, $user->password) === true) { + $request->session()->put('sudoMode', time()); + return redirect($next); + } + return redirect($next); + } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index cb2b9187..b90d197a 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -57,6 +57,7 @@ class Kernel extends HttpKernel 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'dangerzone' => \App\Http\Middleware\DangerZone::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, diff --git a/app/Http/Middleware/DangerZone.php b/app/Http/Middleware/DangerZone.php new file mode 100644 index 00000000..d1a1b4af --- /dev/null +++ b/app/Http/Middleware/DangerZone.php @@ -0,0 +1,34 @@ +is('i/auth/sudo')) { + if( !$request->session()->has('sudoMode') ) { + $request->session()->put('redirectNext', $request->url()); + return redirect('/i/auth/sudo'); + } + if( $request->session()->get('sudoMode') < Carbon::now()->subMinutes(30)->timestamp ) { + $request->session()->put('redirectNext', $request->url()); + return redirect('/i/auth/sudo'); + } + } + return $next($request); + } +} diff --git a/app/ImportJob.php b/app/ImportJob.php index dc0e1cda..52b1187d 100644 --- a/app/ImportJob.php +++ b/app/ImportJob.php @@ -6,5 +6,19 @@ use Illuminate\Database\Eloquent\Model; class ImportJob extends Model { - // + public function url() + { + return url("/i/import/job/{$this->uuid}/{$this->stage}"); + } + + public function files() + { + return $this->hasMany(ImportData::class, 'job_id'); + } + + public function mediaJson() + { + $path = storage_path("app/$this->media_json"); + return json_decode(file_get_contents($path), true); + } } diff --git a/database/migrations/2018_09_10_024252_update_import_datas_table.php b/database/migrations/2018_09_10_024252_update_import_datas_table.php new file mode 100644 index 00000000..c4fb14c3 --- /dev/null +++ b/database/migrations/2018_09_10_024252_update_import_datas_table.php @@ -0,0 +1,33 @@ +bigInteger('job_id')->unsigned()->nullable()->after('profile_id'); + $table->string('original_name')->nullable()->after('stage'); + $table->boolean('import_accepted')->default(false)->nullable()->after('original_name'); + $table->unique(['job_id', 'original_name']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/resources/views/auth/sudo.blade.php b/resources/views/auth/sudo.blade.php new file mode 100644 index 00000000..79f2917c --- /dev/null +++ b/resources/views/auth/sudo.blade.php @@ -0,0 +1,49 @@ +@extends('layouts.blank') + +@section('content') +
Confirm password to continue
+You do not have permission to view this page.
Please try again, if this error keeps happening please contact an admin.
+Our services are overloaded at the moment, please try again later.
+Our services are in maintenance mode, please try again later.
+