FOSSology  4.4.0
Open Source License Compliance by Open Source Software
change-license-bulk.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014-2015, 2018 Siemens AG
4 
5  SPDX-License-Identifier: GPL-2.0-only
6 */
7 
14 use Symfony\Component\HttpFoundation\JsonResponse;
15 use Symfony\Component\HttpFoundation\Request;
16 
18 {
19  const NAME = "change-license-bulk";
21  private $licenseDao;
23  private $dbManager;
25  private $uploadDao;
26 
27  function __construct()
28  {
29  parent::__construct(self::NAME, array(
30  self::TITLE => _("Private: schedule a bulk scan from post"),
31  self::PERMISSION => Auth::PERM_WRITE
32  ));
33 
34  $this->dbManager = $this->getObject('db.manager');
35  $this->licenseDao = $this->getObject('dao.license');
36  $this->uploadDao = $this->getObject('dao.upload');
37  }
38 
43  public function handle(Request $request)
44  {
45  $uploadTreeId = intval($request->get('uploadTreeId'));
46  if ($uploadTreeId <= 0) {
47  return new JsonResponse(array("error" => 'bad request'), JsonResponse::HTTP_BAD_REQUEST);
48  }
49 
50  try {
51  $jobQueueId = $this->getJobQueueId($uploadTreeId, $request);
52  } catch (Exception $ex) {
53  $errorMsg = $ex->getMessage();
54  return new JsonResponse(array("error" => $errorMsg), JsonResponse::HTTP_INTERNAL_SERVER_ERROR);
55  }
57 
58  return new JsonResponse(array("jqid" => $jobQueueId));
59  }
60 
67  private function getJobQueueId($uploadTreeId, Request $request)
68  {
69  $uploadEntry = $this->uploadDao->getUploadEntry($uploadTreeId);
70  $uploadId = intval($uploadEntry['upload_fk']);
71  $userId = Auth::getUserId();
72  $groupId = Auth::getGroupId();
73 
74  if ($uploadId <= 0 || !$this->uploadDao->isAccessible($uploadId, $groupId)) {
75  throw new Exception('permission denied');
76  }
77 
78  $bulkScope = $request->get('bulkScope');
79  switch ($bulkScope) {
80  case 'u':
81  $uploadTreeTable = $this->uploadDao->getUploadtreeTableName($uploadId);
82  $topBounds = $this->uploadDao->getParentItemBounds($uploadId, $uploadTreeTable);
83  $uploadTreeId = $topBounds->getItemId();
84  break;
85 
86  case 'f':
87  if (!Isdir($uploadEntry['ufile_mode']) &&
88  !Iscontainer($uploadEntry['ufile_mode']) &&
89  !Isartifact($uploadEntry['ufile_mode'])) {
90  $uploadTreeId = $uploadEntry['parent'] ?: $uploadTreeId;
91  }
92  break;
93 
94  default:
95  throw new InvalidArgumentException('bad scope request');
96  }
97 
98  $refText = $request->get('refText');
99  $actions = $request->get('bulkAction');
100  $ignoreIrrelevantFiles = (intval($request->get('ignoreIrre')) == 1);
101  $scanFindingsOnly = boolval(intval($request->get('scanOnlyFindings')));
102  $delimiters = $request->get('delimiters');
103 
104  $licenseRemovals = array();
105  foreach ($actions as $licenseAction) {
106  $licenseRemovals[$licenseAction['licenseId']] = array(($licenseAction['action']=='Remove'), $licenseAction['comment'], $licenseAction['reportinfo'], $licenseAction['acknowledgement']);
107  }
108  $bulkId = $this->licenseDao->insertBulkLicense($userId, $groupId,
109  $uploadTreeId, $licenseRemovals, $refText, $ignoreIrrelevantFiles,
110  $delimiters, $scanFindingsOnly);
111 
112  if ($bulkId <= 0) {
113  throw new Exception('cannot insert bulk reference');
114  }
115  $upload = $this->uploadDao->getUpload($uploadId);
116  $uploadName = $upload->getFilename();
117  $job_pk = JobAddJob($userId, $groupId, $uploadName, $uploadId);
119  $deciderPlugin = plugin_find("agent_deciderjob");
120  $dependecies = array(array('name' => 'agent_monk_bulk', 'args' => $bulkId));
121  $conflictStrategyId = intval($request->get('forceDecision'));
122  $errorMsg = '';
123  $jqId = $deciderPlugin->AgentAdd($job_pk, $uploadId, $errorMsg, $dependecies, $conflictStrategyId);
124 
125  if (!empty($errorMsg)) {
126  throw new Exception(str_replace('<br>', "\n", $errorMsg));
127  }
128  return $jqId;
129  }
130 }
131 
132 register_plugin(new ChangeLicenseBulk());
handle(Request $request)
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
ReportCachePurgeAll()
Purge all records from the report cache.
Isdir($mode)
Definition: common-dir.php:20
Isartifact($mode)
Definition: common-dir.php:29
Iscontainer($mode)
Definition: common-dir.php:38
plugin_find($pluginName)
Given the official name of a plugin, return the $Plugins object.
#define PERM_WRITE
Read-Write permission.
Definition: libfossology.h:33
fo_dbManager * dbManager
fo_dbManager object
Definition: process.c:16