FOSSology  4.5.1
Open Source License Compliance by Open Source Software
DeciderAgentPlugin.php
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2014-2018 Siemens AG
4 
5 
6  SPDX-License-Identifier: GPL-2.0-only
7 */
8 
10 use Symfony\Component\HttpFoundation\Request;
11 
12 include_once(__DIR__ . "/../agent/version.php");
13 
19 {
20  const RULES_FLAG = "-r";
21  const LICENSE_FLAG = "-t";
22 
23  function __construct()
24  {
25  $this->Name = "agent_decider";
26  $this->Title = _("Automatic Concluded License Decider, based on scanners Matches");
27  $this->AgentName = AGENT_DECIDER_NAME;
28 
29  parent::__construct();
30  }
31 
32 
38  public function renderContent(&$vars)
39  {
40  global $SysConf;
41  $renderer = $GLOBALS['container']->get('twig.environment');
42  $vars['isNinkaInstalled'] = false;
43  if ($ninkaUi=plugin_find('agent_ninka')) {
44  $vars['isNinkaInstalled'] = $ninkaUi->isNinkaInstalled();
45  }
46  $vars['isSpacyInstalled'] = file_exists("/home/" .
47  $SysConf['DIRECTORIES']['PROJECTUSER'] . "/pythondeps/bin/spacy");
48  $licenseTypes = array_map('trim', explode(',',
49  $SysConf['SYSCONFIG']['LicenseTypes']));
50  $vars['licenseTypes'] = array_combine($licenseTypes, $licenseTypes);
51  return $renderer->load('agent_decider.html.twig')->render($vars);
52  }
53 
59  public function renderFoot(&$vars)
60  {
61  return "";
62  }
63 
72  public function scheduleAgent($jobId, $uploadId, &$errorMsg, $request)
73  {
74  $dependencies = array();
75 
76  $rules = $request->get('deciderRules', []);
77  $agents = $request->get('agents', []);
78  if (in_array('agent_nomos', $agents)) {
79  $checkAgentNomos = true;
80  } else {
81  $checkAgentNomos = $request->get('Check_agent_nomos', false);
82  }
83 
84  if (in_array('agent_copyright', $agents)) {
85  $checkAgentCopyright = true;
86  } else {
87  $checkAgentCopyright = $request->get('Check_agent_copyright') ?: false;
88  }
89  $rulebits = 0;
90 
91  foreach ($rules as $rule) {
92  switch ($rule) {
93  case 'nomosInMonk':
94  $dependencies[] = 'agent_nomos';
95  $dependencies[] = 'agent_monk';
96  $rulebits |= 0x1;
97  break;
98  case 'nomosMonkNinka':
99  $dependencies[] = 'agent_nomos';
100  $dependencies[] = 'agent_monk';
101  $dependencies[] = 'agent_ninka';
102  $rulebits |= 0x2;
103  break;
104  case 'reuseBulk':
105  $dependencies[] = 'agent_nomos';
106  $dependencies[] = 'agent_monk';
107  $dependencies[] = 'agent_reuser';
108  $rulebits |= 0x4;
109  break;
110  case 'wipScannerUpdates':
111  $this->addScannerDependencies($dependencies, $request);
112  $rulebits |= 0x8;
113  break;
114  case 'ojoNoContradiction':
115  if ($checkAgentNomos) {
116  $dependencies[] = 'agent_nomos';
117  }
118  $dependencies[] = 'agent_ojo';
119  $rulebits |= 0x10;
120  break;
121  case 'copyrightDeactivation':
122  if ($checkAgentCopyright) {
123  $dependencies[] = 'agent_copyright';
124  }
125  $rulebits |= 0x20;
126  break;
127  case 'copyrightDeactivationClutterRemoval':
128  if ($checkAgentCopyright) {
129  $dependencies[] = 'agent_copyright';
130  }
131  $rulebits |= 0x40;
132  break;
133  case 'licenseTypeConc':
134  $dependencies[] = 'agent_compatibility';
135  $rulebits |= 0x80;
136  break;
137  }
138  }
139 
140  if (empty($rulebits)) {
141  return 0;
142  }
143 
144  $args = self::RULES_FLAG . $rulebits;
145 
146  if ($rulebits & 0x80) {
147  $licenseType = $this->getLicenseTypeConf($request);
148  if ($licenseType != "") {
149  $args .= " " . self::LICENSE_FLAG . escapeshellarg($licenseType);
150  }
151  }
152 
153  return parent::AgentAdd($jobId, $uploadId, $errorMsg,
154  array_unique($dependencies), $args, $request);
155  }
156 
162  protected function addScannerDependencies(&$dependencies, Request $request)
163  {
164  $agentList = $request->get('agents') ?: array();
165  foreach (array('agent_nomos', 'agent_monk', 'agent_ninka') as $agentName) {
166  if (in_array($agentName, $dependencies)) {
167  continue;
168  }
169  if ($request->get('Check_'.$agentName)) {
170  $dependencies[] = $agentName;
171  continue;
172  }
173  if (in_array($agentName, $agentList)) {
174  $dependencies[] = $agentName;
175  }
176  }
177  }
178 
183  public function preInstall()
184  {
185  menu_insert("ParmAgents::" . $this->Title, 0, $this->Name);
186  }
187 
193  private function getLicenseTypeConf(Request $request)
194  {
195  global $SysConf;
196  $licenseTypes = array_map('trim', explode(',',
197  $SysConf['SYSCONFIG']['LicenseTypes']));
198  $licenseType = trim($request->get("licenseTypeConc", ""));
199  if (in_array($licenseType, $licenseTypes)) {
200  return $licenseType;
201  }
202  return "";
203  }
204 }
205 
206 register_plugin(new DeciderAgentPlugin());
UI plugin for DeciderAgent.
renderFoot(&$vars)
Render footer HTML.
addScannerDependencies(&$dependencies, Request $request)
Add dependencies on DeciderAgent.
getLicenseTypeConf(Request $request)
scheduleAgent($jobId, $uploadId, &$errorMsg, $request)
Schedule decider agent.
renderContent(&$vars)
Render HTML from template.
menu_insert($Path, $LastOrder=0, $URI=NULL, $Title=NULL, $Target=NULL, $HTML=NULL)
Given a Path, order level for the last item, and optional plugin name, insert the menu item.
plugin_find($pluginName)
Given the official name of a plugin, return the $Plugins object.
char * trim(char *ptext)
Trimming whitespace.
Definition: fossconfig.c:690