View.php
  1  <?php
  2  
  3  namespace App\Http\Livewire\VulnerabilityMail;
  4  
  5  use App\Models\Notification;
  6  use App\Models\TOE;
  7  use App\Models\Vulnerability;
  8  use App\Models\VulnerabilityMail;
  9  use App\Notifications\VulnerabilityCreated;
 10  use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
 11  use Illuminate\Support\Facades\Notification as FacadesNotification;
 12  use Livewire\Component;
 13  use WireUi\Traits\Actions;
 14  
 15  class View extends Component
 16  {
 17      use AuthorizesRequests, Actions;
 18  
 19      public $severityValues = [ 'Critical', 'High', 'Low', 'Medium', 'Negligible', 'Unknown' ];
 20  
 21      public int $entityId;
 22      public VulnerabilityMail $mail;
 23  
 24      public array $vulnerability = [
 25          'vid' => '',
 26          'severity' => 'Unknown',
 27          'description' => '',
 28          'state' => '',
 29          'artifact_name' => '',
 30          'artifact_version' => '',
 31          'artifact_type' => '',
 32          'source' => '',
 33      ];
 34      public array $toesIds = [];
 35  
 36      protected $rules = [
 37          'vulnerability.vid' => 'required',
 38          'vulnerability.severity' => 'required',
 39          'vulnerability.description' => 'required',
 40          'vulnerability.state' => 'required',
 41          'vulnerability.artifact_name' => 'required',
 42          'vulnerability.artifact_version' => 'required',
 43          'vulnerability.artifact_type' => 'required',
 44          'vulnerability.source' => 'required',
 45          'toesIds' => 'required|array',
 46      ];
 47  
 48      public function mount()
 49      {
 50          $this->authorize('can_read_vulnerability_mail');
 51          $this->mail = VulnerabilityMail::findOrFail($this->entityId);
 52      }
 53  
 54      public function getToesProperty()
 55      {
 56          return TOE::all();
 57      }
 58  
 59      public function remove()
 60      {
 61          $this->authorize('can_write_vulnerability_mail');
 62  
 63          $this->mail->reviewed = true;
 64          $this->mail->save();
 65  
 66          $this->emitUp('closePanel');
 67          $this->emitTo('vulnerability-mail.index', 'refresh');
 68  
 69          $this->notification()->success(__('vulnerabilities.notifications.reviewed'));
 70      }
 71  
 72      public function create()
 73      {
 74          $this->validate();
 75          $this->authorize('can_write_vulnerabilities');
 76  
 77          $toes = TOE::whereIn('id', $this->toesIds)->get();
 78  
 79          $this->mail->reviewed = true;
 80          $this->mail->save();
 81  
 82          $vulnerability = Vulnerability::create($this->vulnerability);
 83          $vulnerability->toes()->sync($this->toesIds);
 84  
 85          foreach ($toes as $toe) {
 86              foreach ($toe->getNotifiableUsers() as $user) {
 87                  $msg = new VulnerabilityCreated(collect([$vulnerability]), $toe);
 88                  $user->notify($msg);
 89              }
 90          }
 91  
 92          $this->emit('closePanel');
 93          $this->emitTo('vulnerability-mail.index', 'refresh');
 94          $this->notification()->success(__('vulnerabilities.notifications.created'));
 95      }
 96  
 97      public function render()
 98      {
 99          return view('livewire.vulnerability-mail.view');
100      }
101  }