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 }