FOSSology  4.5.1
Open Source License Compliance by Open Source Software
ScanOptions.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2017 Siemens AG
4  SPDX-FileCopyrightText: © 2021 Orange by Piotr Pszczola <piotr.pszczola@orange.com>
5  SPDX-FileCopyrightText: © 2025 Tiyasa Kundu <tiyasakundu20@gmail.com>
6 
7  SPDX-License-Identifier: GPL-2.0-only
8 */
14 namespace Fossology\UI\Api\Models;
15 
20 use Symfony\Component\HttpFoundation\Request;
21 
22 if (!class_exists("AgentAdder", false)) {
23  require_once dirname(__DIR__, 2) . "/agent-add.php";
24 }
25 require_once dirname(__DIR__, 4) . "/lib/php/common-folders.php";
26 
32 {
37  private $analysis;
42  private $reuse;
47  private $decider;
52  private $scancode;
61  {
62  $this->analysis = $analysis;
63  $this->reuse = $reuse;
64  $this->decider = $decider;
65  $this->scancode = $scancode;
66  }
67 
72  public function getArray()
73  {
74  return [
75  "analysis" => $this->analysis,
76  "reuse" => $this->reuse,
77  "decide" => $this->decider,
78  "scancode" => $this->scancode
79  ];
80  }
81 
93  public function scheduleAgents($folderId, $uploadId , $newUpload = true)
94  {
95  $uploadsAccessible = FolderListUploads_perm($folderId, Auth::PERM_WRITE);
96 
97  if (! $newUpload) {
98  $found = false;
99  foreach ($uploadsAccessible as $singleUpload) {
100  if ($singleUpload['upload_pk'] == $uploadId) {
101  $found = true;
102  break;
103  }
104  }
105  if ($found === false) {
106  throw new HttpNotFoundException(
107  "Folder id $folderId does not have upload id " .
108  "$uploadId or you do not have write access to the folder.");
109  }
110  }
111 
112  $paramAgentRequest = new Request();
113  $agentsToAdd = $this->prepareAgents($paramAgentRequest);
114  $this->prepareReuser($paramAgentRequest);
115  $this->prepareDecider($paramAgentRequest);
116  $this->prepareScancode($paramAgentRequest);
117  $returnStatus = (new \AgentAdder())->scheduleAgents($uploadId, $agentsToAdd, $paramAgentRequest);
118  if (is_numeric($returnStatus)) {
119  return new Info(201, $returnStatus, InfoType::INFO);
120  } else {
121  throw new HttpForbiddenException($returnStatus);
122  }
123  }
124 
130  private function prepareAgents(Request &$request)
131  {
132  $agentsToAdd = [];
133 
134  $apiVersion = ApiVersion::getVersionFromUri();
135 
136  if ($apiVersion == ApiVersion::V2) {
137  foreach ($this->analysis->getArray($apiVersion) as $agent => $set) {
138  if ($set === true) {
139  if ($agent == "copyrightEmailAuthor") {
140  $agentsToAdd[] = "agent_copyright";
141  $request->request->set("Check_agent_copyright", 1);
142  } elseif ($agent == "ipra") {
143  $agentsToAdd[] = "agent_ipra";
144  $request->request->set("Check_agent_ipra", 1);
145  } elseif ($agent == "pkgagent") {
146  $agentsToAdd[] = "agent_pkgagent";
147  $request->request->set("Check_agent_pkgagent", 1);
148  } elseif ($agent == "softwareHeritage") {
149  $agentsToAdd[] = "agent_shagent";
150  $request->request->set("Check_agent_shagent", 1);
151  } else {
152  $agentsToAdd[] = "agent_$agent";
153  $request->request->set("Check_agent_$agent", 1);
154  }
155  }
156  }
157  } else {
158  foreach ($this->analysis->getArray($apiVersion) as $agent => $set) {
159  if ($set === true) {
160  if ($agent == "copyright_email_author") {
161  $agentsToAdd[] = "agent_copyright";
162  $request->request->set("Check_agent_copyright", 1);
163  } elseif ($agent == "patent") {
164  $agentsToAdd[] = "agent_ipra";
165  $request->request->set("Check_agent_ipra", 1);
166  } elseif ($agent == "package") {
167  $agentsToAdd[] = "agent_pkgagent";
168  $request->request->set("Check_agent_pkgagent", 1);
169  } elseif ($agent == "heritage") {
170  $agentsToAdd[] = "agent_shagent";
171  $request->request->set("Check_agent_shagent", 1);
172  } else {
173  $agentsToAdd[] = "agent_$agent";
174  $request->request->set("Check_agent_$agent", 1);
175  }
176  }
177  }
178  }
179  return $agentsToAdd;
180  }
181 
186  private function prepareReuser(Request &$request)
187  {
188  if ($this->reuse->getReuseUpload() == 0) {
189  // No upload to reuse
190  return;
191  }
192  $reuserRules = [];
193  if ($this->reuse->getReuseMain() === true) {
194  $reuserRules[] = 'reuseMain';
195  }
196  if ($this->reuse->getReuseEnhanced() === true) {
197  $reuserRules[] = 'reuseEnhanced';
198  }
199  if ($this->reuse->getReuseReport() === true) {
200  $reuserRules[] = 'reuseConf';
201  }
202  if ($this->reuse->getReuseCopyright() === true) {
203  $reuserRules[] = 'reuseCopyright';
204  }
205  $userDao = $GLOBALS['container']->get("dao.user");
206  $reuserSelector = $this->reuse->getReuseUpload() . "," . $userDao->getGroupIdByName($this->reuse->getReuseGroup());
207  $request->request->set('uploadToReuse', $reuserSelector);
208  $request->request->set('reuseMode', $reuserRules);
209  }
210 
215  private function prepareDecider(Request &$request)
216  {
217  $deciderRules = [];
218  if ($this->decider->getNomosMonk() === true) {
219  $deciderRules[] = 'nomosInMonk';
220  }
221  if ($this->decider->getBulkReused() === true) {
222  $deciderRules[] = 'reuseBulk';
223  }
224  if ($this->decider->getNewScanner() === true) {
225  $deciderRules[] = 'wipScannerUpdates';
226  }
227  if ($this->decider->getOjoDecider() === true) {
228  $deciderRules[] = 'ojoNoContradiction';
229  }
230  if ($this->decider->getCopyrightDeactivation() === true) {
231  $deciderRules[] = 'copyrightDeactivation';
232  }
233  if ($this->decider->getCopyrightClutterRemoval() === true) {
234  $deciderRules[] = 'copyrightDeactivationClutterRemoval';
235  }
236  if (! empty($this->decider->getConcludeLicenseType())) {
237  $deciderRules[] = 'licenseTypeConc';
238  $request->request->set('licenseTypeConc',
239  $this->decider->getConcludeLicenseType());
240  }
241  $request->request->set('deciderRules', $deciderRules);
242  if ($this->analysis->getNomos()) {
243  $request->request->set('Check_agent_nomos', 1);
244  }
245  }
246 
251  private function prepareScancode(Request &$request)
252  {
253  $scancodeRules = [];
254  if ($this->scancode->getScanLicense() === true) {
255  $scancodeRules[] = 'license';
256  }
257  if ($this->scancode->getScanCopyright() === true) {
258  $scancodeRules[] = 'copyright';
259  }
260  if ($this->scancode->getScanEmail() === true) {
261  $scancodeRules[] = 'email';
262  }
263  if ($this->scancode->getScanUrl() === true) {
264  $scancodeRules[] = 'url';
265  }
266  $request->request->set('scancodeFlags', $scancodeRules);
267  }
268 }
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
Info model to contain general error and return values.
Definition: Info.php:19
Model to hold add settings for new scan.
Definition: ScanOptions.php:32
scheduleAgents($folderId, $uploadId, $newUpload=true)
Definition: ScanOptions.php:93
__construct($analysis, $reuse, $decider, $scancode)
Definition: ScanOptions.php:60
FolderListUploads_perm($ParentFolder, $perm)
Returns an array of uploads in a folder.