<?php
 
namespace App\Http\Middleware;

use App\Helpers\Security;
use App\Models\SecurityEvent;

use App\Notifications\SlackNotification;

use Closure;
use Notification;
 
class Whitelist
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */

    public function handle($_request, Closure $_next, $_list)
    {
        if(array_search(Security::real_ip(), config("creatia.whitelist.$_list")) !== false) {
            if($_request->method() !== 'GET') {
            
                SecurityEvent::create([
                    'user_id'       => 1,
                    'ip'            => Security::real_ip(),
                    'user_agent'    => $_request->userAgent(),
                    'route'         => $_request->path(),
                    'payload'       => json_encode($_request->input()),
                    'description'   => 'Whitelist Event - Ignore UID',
                ]);
            }

            return $_next($_request);
        }
        
        Notification::route('slack', config('creatia.webhook.standard'))->notify(
            new SlackNotification('Whitelist Security Middleware: ' . Security::real_ip() . ' attempted to access ' . $_request->path())
        );

        return response()->json([], 418);
    }
 
}