FOSSology  4.7.1
Open Source License Compliance by Open Source Software
common-sysconfig.php
Go to the documentation of this file.
1 <?php
2 /*
3  SPDX-FileCopyrightText: © 2011-2015 Hewlett-Packard Development Company, L.P.
4  SPDX-FileCopyrightText: © 2021 Siemens AG
5 
6  SPDX-License-Identifier: LGPL-2.1-only
7 */
8 
10 
17 define("CONFIG_TYPE_INT", 1);
19 define("CONFIG_TYPE_TEXT", 2);
21 define("CONFIG_TYPE_TEXTAREA", 3);
23 define("CONFIG_TYPE_PASSWORD", 4);
25 define("CONFIG_TYPE_DROP", 5);
27 define("CONFIG_TYPE_BOOL", 6);
28 
29 
65 function ConfigInit($sysconfdir, &$SysConf, $exitOnDbFail=true)
66 {
67  global $PG_CONN;
68 
69  $PG_CONN = get_pg_conn($sysconfdir, $SysConf, $exitOnDbFail);
70 
72  return $PG_CONN;
73 } // ConfigInit()
74 
85 function get_pg_conn($sysconfdir, &$SysConf, $exitOnDbFail=true)
86 {
87  /************* Parse VERSION *******************/
88  $versionFile = "{$sysconfdir}/VERSION";
89  $versionConf = parse_ini_file($versionFile, true);
90 
91  /* Add this file contents to $SysConf, then destroy $VersionConf
92  * This file can define its own groups and is eval'd.
93  */
94  foreach ($versionConf as $groupName => $groupArray) {
95  foreach ($groupArray as $var => $assign) {
96  $toeval = "\$$var = \"$assign\";";
97  eval($toeval);
98  $SysConf[$groupName][$var] = ${$var};
99  $GLOBALS[$var] = ${$var};
100  }
101  }
102  unset($versionConf);
103 
104  /************* Parse Db.conf *******************/
105  $dbPath = "{$sysconfdir}/Db.conf";
106  $dbConf = parse_ini_file($dbPath, true);
107 
108  /* Add this file contents to $SysConf, then destroy $dbConf
109  * This file can define its own groups and is eval'd.
110  */
111  foreach ($dbConf as $var => $val) {
112  $SysConf['DBCONF'][$var] = $val;
113  }
114  unset($dbConf);
115 
116  /*
117  * Connect to the database. If the connection fails,
118  * DBconnect() will print a failure message and exit.
119  */
120  $pg_conn = DBconnect($sysconfdir, "", $exitOnDbFail);
121 
122  if (! $exitOnDbFail && ($pg_conn === null || $pg_conn === false)) {
123  return -1;
124  }
125 
126  global $container;
127  $postgresDriver = new \Fossology\Lib\Db\Driver\Postgres($pg_conn);
128  $container->get('db.manager')->setDriver($postgresDriver);
129 
130  return $pg_conn;
131 }
132 
139 function populate_from_sysconfig($conn, &$SysConf)
140 {
141  /* populate the global $SysConf array with variable/value pairs */
142  $sql = "SELECT variablename, conf_value FROM sysconfig;";
143  $result = pg_query($conn, $sql);
144  DBCheckResult($result, $sql, __FILE__, __LINE__);
145 
146  while ($row = pg_fetch_assoc($result)) {
147  $SysConf['SYSCONFIG'][$row['variablename']] = $row['conf_value'];
148  }
149  pg_free_result($result);
150 }
151 
156 {
157  global $PG_CONN;
158 
159  $columns = array("variablename", "conf_value", "ui_label", "vartype", "group_name",
160  "group_order", "description", "validation_function", "option_value");
161  $valueArray = array();
162 
163  /* CorsOrigin */
164  $variable = "CorsOrigins";
165  $prompt = _('Allowed origins for REST API');
166  $desc = _('[scheme]://[hostname]:[port], "*" for anywhere');
167  $valueArray[$variable] = array("'$variable'", "'*'", "'$prompt'",
168  strval(CONFIG_TYPE_TEXT), "'PAT'", "3", "'$desc'", "null", "null");
169 
170  /* Email */
171  $variable = "SupportEmailLabel";
172  $supportEmailLabelPrompt = _('Support Email Label');
173  $supportEmailLabelDesc = _('e.g. "Support"<br>Text that the user clicks on to create a new support email. This new email will be preaddressed to this support email address and subject. HTML is ok.');
174  $valueArray[$variable] = array("'$variable'", "'Support'", "'$supportEmailLabelPrompt'",
175  strval(CONFIG_TYPE_TEXT), "'Support'", "1", "'$supportEmailLabelDesc'", "null", "null");
176 
177  $variable = "SupportEmailAddr";
178  $supportEmailAddrPrompt = _('Support Email Address');
179  $supportEmailAddrValid = "check_email_address";
180  $supportEmailAddrDesc = _('e.g. "support@mycompany.com"<br>Individual or group email address to those providing FOSSology support.');
181  $valueArray[$variable] = array("'$variable'", "null", "'$supportEmailAddrPrompt'",
182  strval(CONFIG_TYPE_TEXT), "'Support'", "2", "'$supportEmailAddrDesc'", "'$supportEmailAddrValid'", "null");
183 
184  $variable = "SupportEmailSubject";
185  $supportEmailSubjectPrompt = _('Support Email Subject line');
186  $supportEmailSubjectDesc = _('e.g. "fossology support"<br>Subject line to use on support email.');
187  $valueArray[$variable] = array("'$variable'", "'FOSSology Support'", "'$supportEmailSubjectPrompt'",
188  strval(CONFIG_TYPE_TEXT), "'Support'", "3", "'$supportEmailSubjectDesc'", "null", "null");
189 
190  /* oAuth2 Service */
191  $variable = "OidcAppName";
192  $oidcPrompt = _('OIDC App Name');
193  $oidcDesc = _('e.g. "my oAuth"<br>App name to display on login page.');
194  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
195  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "1", "'$oidcDesc'", "null", "null");
196 
197  $variable = "OidcClientIdClaim";
198  $oidcPrompt = _('OIDC Client Id Claim');
199  $oidcDesc = _('e.g. "azp"<br>Client ID claim in the decoded payload.');
200  $valueArray[$variable] = array("'$variable'", "'client-id'", "'$oidcPrompt'",
201  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "2", "'$oidcDesc'", "null", "null");
202 
203  $variable = "OidcResourceOwnerId";
204  $oidcPrompt = _('Resource owner id field');
205  $oidcDesc = _('e.g. "email", "upn"<br>Field in token which provides user id. The field <b>should not be empty</b>.');
206  $valueArray[$variable] = array("'$variable'", "'email'", "'$oidcPrompt'",
207  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "3", "'$oidcDesc'", "null", "null");
208 
209  $variable = "OidcTokenType";
210  $oidcPrompt = _('Token to use from provider');
211  $oidcDesc = _('OpenID Connect providers 2 types of tokens, access and id. Which to use for authentication?<br>AzureAD prefers ID token.');
212  $valueArray[$variable] = array("'$variable'", "'A'", "'$oidcPrompt'",
213  strval(CONFIG_TYPE_DROP), "'OauthSupport'", "4", "'$oidcDesc'", "null", "'Access Token{A}|ID Token{I}'");
214 
215  $variable = "OidcAppId";
216  $oidcPrompt = _('OIDC Client Id');
217  $oidcDesc = _('e.g. "e0ec21b9f4b21adc76f185962b52bdfc13af134a"<br>Client ID generated while registering your application.');
218  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
219  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "5", "'$oidcDesc'", "null", "null");
220 
221  $variable = "OidcSecret";
222  $oidcPrompt = _('OIDC Secret');
223  $oidcDesc = _('e.g. "cf13476f185b9f4b2e0ec962b52211adbdfc13aa"<br>Secret generated while registering your application.');
224  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
225  strval(CONFIG_TYPE_PASSWORD), "'OauthSupport'", "6", "'$oidcDesc'", "null", "null");
226 
227  $variable = "OidcRedirectURL";
228  $oidcPrompt = _('Redirect URL');
229  $oidcDesc = _('e.g. "http://fossology.application.url.com/repo"<br>URL of your fossology application.');
230  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
231  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "7", "'$oidcDesc'", "null", "null");
232 
233  $variable = "OidcDiscoveryURL";
234  $oidcPrompt = _('OIDC Discovery URL');
235  $oidcDesc = _('e.g. "http://oauth.com/.well-known/openid-configuration"<br>URL for OIDC Discovery document JSON to fill following fields upon save.');
236  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
237  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "8", "'$oidcDesc'", "null", "null");
238 
239  $variable = "OidcIssuer";
240  $oidcPrompt = _('OIDC Token Issuer');
241  $oidcDesc = _('e.g. "http://oauth.com"<br>Issuer for OIDC tokens.');
242  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
243  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "9", "'$oidcDesc'", "null", "null");
244 
245  $variable = "OidcAuthorizeURL";
246  $oidcPrompt = _('OIDC Authorize URL');
247  $oidcDesc = _('e.g. "http://oauth.com/authorization.oauth2"<br>URL for OAuth2 authorization endpoint.');
248  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
249  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "10", "'$oidcDesc'", "null", "null");
250 
251  $variable = "OidcAccessTokenURL";
252  $oidcPrompt = _('OIDC Access Token URL');
253  $oidcDesc = _('e.g. "http://oauth.com/token.oauth2"<br>URL for OAuth2 access token endpoint.');
254  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
255  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "11", "'$oidcDesc'", "null", "null");
256 
257  $variable = "OidcResourceURL";
258  $oidcPrompt = _('OIDC User Info URL');
259  $oidcDesc = _('e.g. "http://oauth.com/userinfo.oauth2"<br>URL for OAuth2 user info endpoint.');
260  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
261  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "12", "'$oidcDesc'", "null", "null");
262 
263  $variable = "OidcJwksURL";
264  $oidcPrompt = _('OIDC JWKS URL');
265  $oidcDesc = _('e.g. "http://oauth.com/jwks.oauth2"<br>URL for OIDC JWKS keys.');
266  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
267  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "13", "'$oidcDesc'", "null", "null");
268 
269  $variable = "OidcJwkAlgInject";
270  $oidcPrompt = _('OIDC JWKS Algorithm inject');
271  $oidcDesc = _('Algorithm value to inject for JWKS. Leave empty to not modify.' .
272  '<br><a href="https://datatracker.ietf.org/doc/html/rfc7517#section-4.4">Check info</a>.');
273  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
274  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "14", "'$oidcDesc'", "null", "null");
275 
276  $variable = "OidcLogoutURL";
277  $oidcPrompt = _('Logout URL');
278  $oidcDesc = _('e.g. "http://oauth.com/logout.oauth2"<br>URL to redirect user to for logout.');
279  $valueArray[$variable] = array("'$variable'", "null", "'$oidcPrompt'",
280  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "15", "'$oidcDesc'", "null", "null");
281 
282  $variable = "OidcScope";
283  $prompt = _('OIDC Scope');
284  $desc = _('Scope of OIDC for client_credential grant. Used with LicenseDB.');
285  $valueArray[$variable] = array("'$variable'", "''", "'$prompt'",
286  strval(CONFIG_TYPE_TEXT), "'OauthSupport'", "16", "'$oidcDesc'", "null", "null");
287 
288  /* Banner Message */
289  $variable = "BannerMsg";
290  $bannerMsgPrompt = _('Banner message');
291  $bannerMsgDesc = _('This is message will be displayed on every page with a banner. HTML is ok.');
292  $valueArray[$variable] = array("'$variable'", "null", "'$bannerMsgPrompt'",
293  strval(CONFIG_TYPE_TEXTAREA), "'Banner'", "1", "'$bannerMsgDesc'", "null", "null");
294 
295  /* Logo */
296  $variable = "LogoImage";
297  $logoImagePrompt = _('Logo Image URL');
298  $logoImageValid = "check_logo_image_url";
299  $logoImageDesc = _('e.g. "http://mycompany.com/images/companylogo.png" or "images/mylogo.png"<br>This image replaces the fossology project logo. Image is constrained to 150px wide. 80-100px high is a good target. If you change this URL, you MUST also enter a logo URL.');
300  $valueArray[$variable] = array("'$variable'", "null", "'$logoImagePrompt'",
301  strval(CONFIG_TYPE_TEXT), "'Logo'", "1", "'$logoImageDesc'", "'$logoImageValid'", "null");
302 
303  $variable = "LogoLink";
304  $logoLinkPrompt = _('Logo URL');
305  $logoLinkDesc = _('e.g. "http://mycompany.com/fossology"<br>URL a person goes to when they click on the logo. If you change the Logo URL, you MUST also enter a Logo Image.');
306  $logoLinkValid = "check_logo_url";
307  $valueArray[$variable] = array("'$variable'", "null", "'$logoLinkPrompt'",
308  strval(CONFIG_TYPE_TEXT), "'Logo'", "2", "'$logoLinkDesc'", "'$logoLinkValid'", "null");
309 
310  $variable = "FOSSologyURL";
311  $urlPrompt = _("FOSSology URL");
312  $hostname = exec("hostname -f");
313  if (empty($hostname)) {
314  $hostname = "localhost";
315  }
316  $fossologyURL = $hostname."/repo/";
317  $urlDesc = _("URL of this FOSSology server, e.g. $fossologyURL");
318  $urlValid = "check_fossology_url";
319  $valueArray[$variable] = array("'$variable'", "'$fossologyURL'", "'$urlPrompt'",
320  strval(CONFIG_TYPE_TEXT), "'URL'", "1", "'$urlDesc'", "'$urlValid'", "null");
321 
322  $variable = "ClearlyDefinedURL";
323  $urlPrompt = _("ClearlyDefined URL");
324  $cdURL = "https://api.clearlydefined.io/";
325  $urlDesc = _("URL of ClearlyDefined server, e.g. $cdURL");
326  $urlValid = "check_url";
327  $valueArray[$variable] = array("'$variable'", "'$cdURL'", "'$urlPrompt'",
328  strval(CONFIG_TYPE_TEXT), "'URL'", "2", "'$urlDesc'", "'$urlValid'", "null");
329 
330  $variable = "NomostListNum";
331  $nomosNumPrompt = _("Maximum licenses to List");
332  $nomostListNum = "2200";
333  $NomosNumDesc = _("For License List and License List Download, you can set the maximum number of lines to list/download. Default 2200.");
334  $valueArray[$variable] = array("'$variable'", "'$nomostListNum'", "'$nomosNumPrompt'",
335  strval(CONFIG_TYPE_TEXT), "'Number'", "1", "'$NomosNumDesc'", "null", "null");
336 
337  $variable = "BlockSizeHex";
338  $hexPrompt = _("Chars per page in hex view");
339  $hexDesc = _("Number of characters per page in hex view");
340  $valueArray[$variable] = array("'$variable'", "'8192'", "'$hexPrompt'",
341  strval(CONFIG_TYPE_TEXT), "'Number'", "2", "'$hexDesc'", "null", "null");
342 
343  $variable = "BlockSizeText";
344  $textPrompt = _("Chars per page in text view");
345  $textDesc = _("Number of characters per page in text view");
346  $valueArray[$variable] = array("'$variable'", "'81920'", "'$textPrompt'",
347  strval(CONFIG_TYPE_TEXT), "'Number'", "3", "'$textDesc'", "null", "null");
348 
349  $variable = "ShowJobsAutoRefresh";
350  $contextNamePrompt = _("ShowJobs Auto Refresh Time");
351  $contextValue = "10";
352  $contextDesc = _("No of seconds to refresh ShowJobs");
353  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$contextNamePrompt'",
354  strval(CONFIG_TYPE_TEXT), "'Number'", "4", "'$contextDesc'", "null", "null");
355 
356  /* Report Header Text */
357  $variable = "ReportHeaderText";
358  $contextNamePrompt = _("Report Header Text");
359  $contextValue = "FOSSology";
360  $contextDesc = _("Report Header Text at right side corner");
361  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$contextNamePrompt'",
362  strval(CONFIG_TYPE_TEXT), "'ReportText'", "1", "'$contextDesc'", "null", "null");
363 
364  $variable = "CommonObligation";
365  $contextNamePrompt = _("Common Obligation");
366  $contextValue = "";
367  $commonExObligations = _('you can add HTML line break, Also use json format for table rows');
368  $contextDesc = _("Common Obligation Text,". "$commonExObligations");
369  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$contextNamePrompt'",
370  strval(CONFIG_TYPE_TEXTAREA), "'ReportText'", "2", "'$contextDesc'", "null", "null");
371 
372  $variable = "AdditionalObligation";
373  $contextNamePrompt = _("Additional Obligation");
374  $contextValue = "";
375  $contextDesc = _("Additional Obligation Text,". "$commonExObligations");
376  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$contextNamePrompt'",
377  strval(CONFIG_TYPE_TEXTAREA), "'ReportText'", "3", "'$contextDesc'", "null", "null");
378 
379  $variable = "ObligationAndRisk";
380  $contextNamePrompt = _("Obligation And Risk Assessment");
381  $contextValue = "";
382  $contextDesc = _("Obligations and risk assessment,". "$commonExObligations");
383  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$contextNamePrompt'",
384  strval(CONFIG_TYPE_TEXTAREA), "'ReportText'", "4", "'$contextDesc'", "null", "null");
385 
386  $variable = "EnableOsselotReuse";
387  $prompt = ("Enable OSSelot Reuse");
388  $desc = ("When enabled, shows the OSSelot-based reuse option in the Reuser plugin");
389  $valueArray[$variable] = array("'$variable'","true","'$prompt'",
390  strval(CONFIG_TYPE_BOOL),"'ReportText'","5","'$desc'","'check_boolean'","null");
391 
392  $variable = "OsselotCuratedUrl";
393  $osselotCuratedPrompt = _('OSSelot Curated API URL');
394  $osselotCuratedValid = "check_url";
395  $osselotCuratedDesc = _('URL for OSSelot curated package information API.');
396  $valueArray[$variable] = array("'$variable'", "'https://www.osselot.org/curated.php'", "'$osselotCuratedPrompt'",
397  strval(CONFIG_TYPE_TEXT), "'OSSelot'", "1", "'$osselotCuratedDesc'", "'$osselotCuratedValid'", "null");
398 
399  $variable = "OsselotPackageAnalysisUrl";
400  $osselotPackagePrompt = _('OSSelot Package Analysis Base URL');
401  $osselotPackageValid = "check_url";
402  $osselotPackageDesc = _('Base URL for OSSelot package analysis repository.');
403  $valueArray[$variable] = array("'$variable'", "'https://raw.githubusercontent.com/Open-Source-Compliance/package-analysis/main/analysed-packages'", "'$osselotPackagePrompt'",
404  strval(CONFIG_TYPE_TEXT), "'OSSelot'", "2", "'$osselotPackageDesc'", "'$osselotPackageValid'", "null");
405 
406  $variable = "OsselotPrimaryDomain";
407  $osselotPrimaryPrompt = _('OSSelot Primary Domain');
408  $osselotPrimaryValid = "check_domain";
409  $osselotPrimaryDesc = _('Primary domain used in OSSelot package analysis URLs (e.g., raw.githubusercontent.com).');
410  $valueArray[$variable] = array("'$variable'", "'raw.githubusercontent.com'", "'$osselotPrimaryPrompt'",
411  strval(CONFIG_TYPE_TEXT), "'OSSelot'", "3", "'$osselotPrimaryDesc'", "'$osselotPrimaryValid'", "null");
412 
413  $variable = "OsselotFallbackDomain";
414  $osselotFallbackPrompt = _('OSSelot Fallback Domain');
415  $osselotFallbackValid = "check_domain";
416  $osselotFallbackDesc = _('Fallback domain used when primary domain fails (e.g., osselot.org).');
417  $valueArray[$variable] = array("'$variable'", "'osselot.org'", "'$osselotFallbackPrompt'",
418  strval(CONFIG_TYPE_TEXT), "'OSSelot'", "4", "'$osselotFallbackDesc'", "'$osselotFallbackValid'", "null");
419 
420  /* "Upload from server"-configuration */
421  $variable = "UploadFromServerWhitelist";
422  $contextNamePrompt = _("Whitelist for serverupload");
423  $contextValue = "/tmp";
424  $contextDesc = _("List of allowed prefixes for upload, separated by \":\" (colon)");
425  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$contextNamePrompt'",
426  strval(CONFIG_TYPE_TEXT), "'UploadFromServer'", "1", "'$contextDesc'", "null", "null");
427 
428  $variable = "UploadFromServerAllowedHosts";
429  $contextNamePrompt = _("List of allowed hosts for serverupload");
430  $contextValue = "localhost";
431  $contextDesc = _("List of allowed hosts for upload, separated by \":\" (colon)");
432  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$contextNamePrompt'",
433  strval(CONFIG_TYPE_TEXT), "'UploadFromServer'", "2", "'$contextDesc'", "null", "null");
434 
435  /* SMTP config */
436  $variable = "SMTPHostName";
437  $smtpHostPrompt = _('SMTP Host Name');
438  $smtpHostDesc = _('e.g.: "smtp.domain.com"<br>The domain to be used to send emails.');
439  $valueArray[$variable] = array("'$variable'", "null", "'$smtpHostPrompt'",
440  strval(CONFIG_TYPE_TEXT), "'SMTP'", "1", "'$smtpHostDesc'", "null", "null");
441 
442  $variable = "SMTPPort";
443  $smtpPortPrompt = _('SMTP Port');
444  $smtpPortDesc = _('e.g.: "25"<br>SMTP port to be used.');
445  $valueArray[$variable] = array("'$variable'", "25", "'$smtpPortPrompt'",
446  strval(CONFIG_TYPE_INT), "'SMTP'", "2", "'$smtpPortDesc'", "null", "null");
447 
448  $variable = "SMTPAuth";
449  $smtpAuthPrompt = _('SMTP Auth Type');
450  $smtpAuthDesc = _('Algorithm to use for login.<br>Login => Encrypted<br>None => No authentication<br>Plain => Send as plain text');
451  $valueArray[$variable] = array("'$variable'", "'L'", "'$smtpAuthPrompt'",
452  strval(CONFIG_TYPE_DROP), "'SMTP'", "3", "'$smtpAuthDesc'", "null", "'Login{L}|None{N}|Plain{P}'");
453 
454  $variable = "SMTPFrom";
455  $smtpFrom = _('SMTP Email');
456  $smtpFromDesc = _('e.g.: "user@domain.com"<br>Sender email.');
457  $valueArray[$variable] = array("'$variable'", "null", "'$smtpFrom'",
458  strval(CONFIG_TYPE_TEXT), "'SMTP'", "4", "'$smtpFromDesc'", "'check_email_address'", "null");
459 
460  $variable = "SMTPAuthUser";
461  $smtpAuthUserPrompt = _('SMTP User');
462  $smtpAuthUserDesc = _('e.g.: "user"<br>Login to be used for login on SMTP Server.');
463  $valueArray[$variable] = array("'$variable'", "null", "'$smtpAuthUserPrompt'",
464  strval(CONFIG_TYPE_TEXT), "'SMTP'", "5", "'$smtpAuthUserDesc'", "null", "null");
465 
466  $variable = "SMTPAuthPasswd";
467  $smtpAuthPasswdPrompt = _('SMTP Login Password');
468  $smtpAuthPasswdDesc = _('Password used for SMTP login.');
469  $valueArray[$variable] = array("'$variable'", "null", "'$smtpAuthPasswdPrompt'",
470  strval(CONFIG_TYPE_PASSWORD), "'SMTP'", "6", "'$smtpAuthPasswdDesc'", "null", "null");
471 
472  $variable = "SMTPSslVerify";
473  $smtpSslPrompt = _('SMTP SSL Verify');
474  $smtpSslDesc = _('The SSL verification for connection is required?');
475  $valueArray[$variable] = array("'$variable'", "'S'", "'$smtpSslPrompt'",
476  strval(CONFIG_TYPE_DROP), "'SMTP'", "7", "'$smtpSslDesc'", "null", "'Ignore{I}|Strict{S}|Warn{W}'");
477 
478  $variable = "SMTPStartTls";
479  $smtpTlsPrompt = _('Start TLS');
480  $smtpTlsDesc = _('Use TLS connection for SMTP?');
481  $valueArray[$variable] = array("'$variable'", "'1'", "'$smtpTlsPrompt'",
482  strval(CONFIG_TYPE_DROP), "'SMTP'", "8", "'$smtpTlsDesc'", "null", "'Yes{1}|No{2}'");
483 
484  $variable = "UploadVisibility";
485  $prompt = _('Default Upload Visibility');
486  $desc = _('Default Visibility for uploads by the user');
487  $valueArray[$variable] = array("'$variable'", "'protected'", "'$prompt'",
488  strval(CONFIG_TYPE_DROP), "'UploadFlag'", "1", "'$desc'", "null", "'Visible only for active group{private}|Visible for all groups{protected}|Make Public{public}'");
489 
490  /* Password policy config */
491  $variable = "PasswdPolicy";
492  $prompt = _('Enable password policy');
493  $desc = _('Enable password policy check');
494  $valueArray[$variable] = array("'$variable'", "false", "'$prompt'",
495  strval(CONFIG_TYPE_BOOL), "'PASSWD'", "1", "'$desc'",
496  "'check_boolean'", "null");
497 
498  $variable = "PasswdPolicyMinChar";
499  $prompt = _('Minimum characters');
500  $desc = _('Blank for no limit');
501  $valueArray[$variable] = array("'$variable'", "8", "'$prompt'",
502  strval(CONFIG_TYPE_INT), "'PASSWD'", "2", "'$desc'", "null", "null");
503 
504  $variable = "PasswdPolicyMaxChar";
505  $prompt = _('Maximum characters');
506  $desc = _('Blank for no limit');
507  $valueArray[$variable] = array("'$variable'", "16", "'$prompt'",
508  strval(CONFIG_TYPE_INT), "'PASSWD'", "3", "'$desc'", "null", "null");
509 
510  $variable = "PasswdPolicyLower";
511  $prompt = _('Lowercase');
512  $desc = _('Minimum one lowercase character.');
513  $valueArray[$variable] = array("'$variable'", "true", "'$prompt'",
514  strval(CONFIG_TYPE_BOOL), "'PASSWD'", "4", "'$desc'",
515  "'check_boolean'", "null");
516 
517  $variable = "PasswdPolicyUpper";
518  $prompt = _('Uppercase');
519  $desc = _('Minimum one uppercase character.');
520  $valueArray[$variable] = array("'$variable'", "true", "'$prompt'",
521  strval(CONFIG_TYPE_BOOL), "'PASSWD'", "5", "'$desc'",
522  "'check_boolean'", "null");
523 
524  $variable = "PasswdPolicyDigit";
525  $prompt = _('Digit');
526  $desc = _('Minimum one digit.');
527  $valueArray[$variable] = array("'$variable'", "true", "'$prompt'",
528  strval(CONFIG_TYPE_BOOL), "'PASSWD'", "6", "'$desc'",
529  "'check_boolean'", "null");
530 
531  $variable = "PasswdPolicySpecial";
532  $prompt = _('Allowed special characters');
533  $desc = _('Empty for do not care');
534  $valueArray[$variable] = array("'$variable'", "'@$!%*?&'", "'$prompt'",
535  strval(CONFIG_TYPE_TEXT), "'PASSWD'", "7", "'$desc'", "null", "null");
536 
537  $variable = "PATMaxExipre";
538  $patTokenValidityPrompt = _('Max token validity');
539  $patTokenValidityDesc = _('Maximum validity of tokens (in days)');
540  $valueArray[$variable] = array("'$variable'", "30", "'$patTokenValidityPrompt'",
541  strval(CONFIG_TYPE_INT), "'PAT'", "1", "'$patTokenValidityDesc'", "null", "null");
542 
543  $variable = "PATMaxPostExpiryRetention";
544  $patTokenRetentionPrompt = _('Max expired token retention period');
545  $patTokenRetentionDesc = _('Maximum retention period of expired tokens (in days) for Maintagent');
546  $valueArray[$variable] = array("'$variable'", "30", "'$patTokenRetentionPrompt'",
547  strval(CONFIG_TYPE_INT), "'PAT'", "2", "'$patTokenRetentionDesc'", "null", "null");
548 
549  $variable = "SkipFiles";
550  $mimeTypeToSkip = _("Skip MimeTypes from scanning");
551  $mimeTypeDesc = _("add comma (,) separated mimetype to exclude files from scanning");
552  $valueArray[$variable] = array("'$variable'", "null", "'$mimeTypeToSkip'",
553  strval(CONFIG_TYPE_TEXT), "'Skip'", "1", "'$mimeTypeDesc'", "null", "null");
554 
555  $perm_admin=Auth::PERM_ADMIN;
556  $perm_write=Auth::PERM_WRITE;
557  $variable = "SourceCodeDownloadRights";
558  $SourceDownloadRightsPrompt = _('Access rights required to download source code');
559  $SourceDownloadRightsDesc = _('Choose which access level will be required for user to be able to download source code.');
560  $valueArray[$variable] = array("'$variable'", "'$perm_write'", "'$SourceDownloadRightsPrompt'",
561  strval(CONFIG_TYPE_DROP), "'DOWNLOAD'", "1", "'$SourceDownloadRightsDesc'", "null", "'Administrator{{$perm_admin}}|Read_Write{{$perm_write}}'");
562 
563  $variable = "UserDescReadOnly";
564  $prompt = _('Make account details read-only');
565  $desc = _('Make account details (username, email, description) read-only');
566  $valueArray[$variable] = array("'$variable'", "false", "'$prompt'",
567  strval(CONFIG_TYPE_BOOL), "'USER_READ_ONLY'", "1", "'$desc'",
568  "'check_boolean'", "null");
569 
570  $variable = "LicenseTypes";
571  $licenseTypeTitle = _("License Types");
572  $contextValue = "Permissive, Strong Copyleft, Weak Copyleft";
573  $licenseTypeDesc = _("add comma (,) separated different license types");
574  $valueArray[$variable] = array("'$variable'", "'$contextValue'", "'$licenseTypeTitle'",
575  strval(CONFIG_TYPE_TEXT), "'LICENSE'", "1", "'$licenseTypeDesc'", "null", "null");
576 
577  /* SoftwareHeritage agent config */
578  $variable = "SwhURL";
579  $prompt = _('SoftwareHeritage URL');
580  $desc = _('URL to Software Heritage servers');
581  $valueArray[$variable] = array("'$variable'",
582  "'https://archive.softwareheritage.org'", "'$prompt'",
583  strval(CONFIG_TYPE_TEXT), "'SWH'", "1", "'$desc'", "'check_url'", "null");
584 
585  $variable = "SwhBaseURL";
586  $prompt = _('SoftwareHeritage API base URI');
587  $desc = _('Base URI for API calls');
588  $valueArray[$variable] = array("'$variable'", "'/api/1/content/sha256:'",
589  "'$prompt'", strval(CONFIG_TYPE_TEXT), "'SWH'", "2", "'$desc'", "null",
590  "null");
591 
592  $variable = "SwhContent";
593  $prompt = _('Content endpoint');
594  $desc = _('Endpoint to get content about file');
595  $valueArray[$variable] = array("'$variable'", "'/license'", "'$prompt'",
596  strval(CONFIG_TYPE_TEXT), "'SWH'", "3", "'$desc'", "null", "null");
597 
598  $variable = "SwhSleep";
599  $prompt = _('Max sleep time');
600  $desc = _('Max time to sleep for rate-limit. Note: This concerns with scheduler heartbeat.');
601  $valueArray[$variable] = array("'$variable'", "100", "'$prompt'",
602  strval(CONFIG_TYPE_INT), "'SWH'", "4", "'$desc'", "null", "null");
603 
604  $variable = "SwhToken";
605  $prompt = _('Auth token');
606  $desc = _('');
607  $valueArray[$variable] = array("'$variable'", "''", "'$prompt'",
608  strval(CONFIG_TYPE_PASSWORD), "'SWH'", "5", "'$desc'", "null", "null");
609 
610  $variable = "ScAPIURL";
611  $prompt = _('Scanoss API url');
612  $desc = _('Set URL to SCANOSS API (blank for default osskb.org)');
613  $valueArray[$variable] = array("'$variable'",
614  "''", "'$prompt'",
615  strval(CONFIG_TYPE_TEXT), "'SSS'", "1", "'$desc'", "null", "null");
616 
617  $variable = "ScToken";
618  $prompt = _('Access token');
619  $desc = _('Set token to access full service (blank for basic scan)');
620  $valueArray[$variable] = array("'$variable'",
621  "''", "'$prompt'",
622  strval(CONFIG_TYPE_TEXT), "'SSS'", "2", "'$desc'", "null", "null");
623 
624  /* LicenseDB config */
625  $variable = "LicenseDBBaseURL";
626  $prompt = _('LicenseDB API base URI');
627  $desc = _('Base URI for API calls e.g. /api/v1');
628  $valueArray[$variable] = array("'$variable'", "'http://localhost:8080/api/v1'",
629  "'$prompt'", strval(CONFIG_TYPE_TEXT), "'LicenseDB'", "1", "'$desc'", "null",
630  "null");
631 
632  $variable = "LicenseDBHealth";
633  $prompt = _('Health check');
634  $desc = _('Endpoint to check health of LicenseDB service');
635  $valueArray[$variable] = array("'$variable'", "'/health'", "'$prompt'",
636  strval(CONFIG_TYPE_TEXT), "'LicenseDB'", "2", "'$desc'", "null", "null");
637 
638  $variable = "LicenseDBContent";
639  $prompt = _('Export endpoint Licenses');
640  $desc = _('Endpoint to Export licenses in JSON e.g. /licenses/export');
641  $valueArray[$variable] = array("'$variable'", "'/licenses/export'", "'$prompt'",
642  strval(CONFIG_TYPE_TEXT), "'LicenseDB'", "3", "'$desc'", "null", "null");
643 
644  $variable = "LicenseDBContentObligations";
645  $prompt = _('Export endpoint Obligations');
646  $desc = _('Endpoint to Export Obligations in JSON e.g. /obligations/export');
647  $valueArray[$variable] = array("'$variable'", "'/obligations/export'", "'$prompt'",
648  strval(CONFIG_TYPE_TEXT), "'LicenseDB'", "4", "'$desc'", "null", "null");
649 
650  $variable = "LicenseDBToken";
651  $prompt = _('Auth token For LicenseDB');
652  $desc = _("Token from LicenseDB. Do not set if using OIDC for LicenseDB and FOSSology communication.");
653  $valueArray[$variable] = array("'$variable'", "''", "'$prompt'",
654  strval(CONFIG_TYPE_PASSWORD), "'LicenseDB'", "5", "'$desc'", "null", "null");
655 
656  $variable = "ExcludeFolders";
657  $mimeTypeToSkip = _("Exclude Folders from scanning");
658  $mimeTypeDesc = _("Add comma (,) separated folder patterns to exclude from unpacking");
659  $valueArray[$variable] = array("'$variable'", "null", "'$mimeTypeToSkip'",
660  strval(CONFIG_TYPE_TEXT), "'Skip'", "1", "'$mimeTypeDesc'", "null", "null");
661 
662  /* kotoba Agent */
663  $variable = "KotobaDelimiters";
664  $prompt = _('Kotoba Agent Delimiters');
665  $desc = _('Comma-separated list of additional delimiter characters for kotoba agent. Space, comma, tab, newline, carriage return, and form feed are always included as delimiters. Leave empty to use only the default delimiters. Example: "#,^,%,*" to add special characters');
666  $valueArray[$variable] = array("'$variable'", "null", "'$prompt'",
667  strval(CONFIG_TYPE_TEXT), "'Kotoba'", "1", "'$desc'", "null", "null");
668 
669  /* Doing all the rows as a single insert will fail if any row is a dupe.
670  So insert each one individually so that new variables get added.
671  */
672  foreach ($valueArray as $variable => $values) {
673  /*
674  * Check if the variable already exists. Insert it if it does not.
675  * This is better than an insert ignoring duplicates, because that
676  * generates a postresql log message.
677  */
678  $VarRec = GetSingleRec("sysconfig", "WHERE variablename='$variable'");
679  if (empty($VarRec)) {
680  $sql = "INSERT INTO sysconfig (" . implode(",", $columns) . ") VALUES (" .
681  implode(",", $values) . ");";
682  } else { // Values exist, update them
683  $updateString = [];
684  foreach ($columns as $index => $column) {
685  if ($index != 0 && $index != 1) { // Skip variablename and conf_value
686  $updateString[] = $column . "=" . $values[$index];
687  }
688  }
689  $sql = "UPDATE sysconfig SET " . implode(",", $updateString) .
690  " WHERE variablename='$variable';";
691  }
692  $result = pg_query($PG_CONN, $sql);
693  DBCheckResult($result, $sql, __FILE__, __LINE__);
694  pg_free_result($result);
695  unset($VarRec);
696  }
697 }
698 
709 function check_boolean($value)
710 {
711  if (! strcmp($value, 'true') || ! strcmp($value, 'false')) {
712  return 1;
713  } else {
714  return 0;
715  }
716 }
717 
727 function check_fossology_url($url)
728 {
729  $url_array = explode("/", $url, 2);
730  $name = $url_array[0];
731  if (! empty($name)) {
732  $hostname = exec("hostname -f");
733  if (empty($hostname)) {
734  $hostname = "localhost";
735  }
736  if (check_IP($name)) {
737  $hostname1 = gethostbyaddr($name);
738  if (strcmp($hostname, $hostname1) == 0) {
739  return 0; // host is not reachable
740  }
741  }
742  $server_name = $_SERVER['SERVER_NAME'];
743 
744  /* intput $name must match either the hostname or the server name */
745  if (strcmp($name, $hostname) && strcmp($name, $server_name)) {
746  return 0;
747  }
748  } else {
749  return 0;
750  }
751  return 1;
752 }
753 
763 function check_logo_url($url)
764 {
765  if (empty($url)) {
766  return 1; /* logo url can be null, with the default */
767  }
768  // $res = check_url($url);
769  $res = is_available($url);
770  if (1 == $res) {
771  return 1;
772  } else {
773  return 0;
774  }
775 }
776 
786 function check_logo_image_url($url)
787 {
788  global $SysConf;
789 
790  if (empty($url)) {
791  return 1; /* logo url can be null, with the default */
792  }
793  $logoLink = @$SysConf["LogoLink"];
794  $new_url = $logoLink . $url;
795  if (is_available($url) || is_available($new_url)) {
796  return 1;
797  } else {
798  return 0;
799  }
800 
801 }
802 
813 function check_email_address($email_address)
814 {
815  return 1;
816 }
817 
827 function is_available($url, $timeout = 2, $tries = 2)
828 {
829  global $SysConf;
830 
831  $proxyStmts = "";
832  if (array_key_exists('http_proxy', $SysConf['FOSSOLOGY']) &&
833  $SysConf['FOSSOLOGY']['http_proxy']) {
834  $proxyStmts .= "export http_proxy={$SysConf['FOSSOLOGY']['http_proxy']};";
835  }
836  if (array_key_exists('https_proxy', $SysConf['FOSSOLOGY']) &&
837  $SysConf['FOSSOLOGY']['https_proxy']) {
838  $proxyStmts .= "export https_proxy={$SysConf['FOSSOLOGY']['https_proxy']};";
839  }
840  if (array_key_exists('ftp_proxy', $SysConf['FOSSOLOGY']) &&
841  $SysConf['FOSSOLOGY']['ftp_proxy']) {
842  $proxyStmts .= "export ftp_proxy={$SysConf['FOSSOLOGY']['ftp_proxy']};";
843  }
844 
845  $commands = "$proxyStmts wget --spider '$url' --tries=$tries --timeout=$timeout";
846  system($commands, $return_var);
847  if (0 == $return_var) {
848  return 1;
849  } else {
850  return 0;
851  }
852 }
853 
859 function check_url($url)
860 {
861  if (empty($url) ||
862  preg_match("@^((http)|(https)|(ftp))://([[:alnum:]]+)@i", $url) != 1 ||
863  preg_match("@[[:space:]]@", $url) != 0) {
864  return 0;
865  } else {
866  return 1;
867  }
868 }
869 
875 function check_IP($ip)
876 {
877  $e = "([0-9]|1[0-9]{2}|[1-9][0-9]|2[0-4][0-9]|25[0-5])";
878  return preg_match("/^$e\.$e\.$e\.$e$/", $ip);
879 }
880 
885 function set_python_path(): array
886 {
887  global $SysConf;
888  $path = "/home/" . $SysConf['DIRECTORIES']['PROJECTUSER'] . "/pythondeps";
889  putenv("PYTHONPATH=$path");
890  return ["PYTHONPATH" => $path];
891 }
901 {
902  // Get No.of cores
903  $cores = trim(shell_exec("nproc"));
904 
905  // Get CPU load
906  $load = sys_getloadavg()[1];
907 
908  $percentageOfLoad = ($load / $cores);
909 
910  if ($percentageOfLoad < 0.30) {
911  $class = 'btn-success';
912  } else if ($percentageOfLoad < 0.60) {
913  $class = 'btn-warning';
914  } else {
915  $class = 'btn-danger';
916  }
917 
918  return '<button type="button" aria-disabled="true" disabled class="btn '.$class.'">System Load</button>';
919 }
920 
Contains the constants and helpers for authentication of user.
Definition: Auth.php:24
DBconnect($sysconfdir, $options="", $exitOnFail=true)
Connect to database engine. This is a no-op if $PG_CONN already has a value.
Definition: common-db.php:33
DBCheckResult($result, $sql, $filenm, $lineno)
Check the postgres result for unexpected errors. If found, treat them as fatal.
Definition: common-db.php:189
GetSingleRec($Table, $Where="")
Retrieve a single database record.
Definition: common-db.php:91
Populate_sysconfig()
Populate the sysconfig table with core variables.
check_fossology_url($url)
Validation function check_fossology_url().
is_available($url, $timeout=2, $tries=2)
Check if the URL is available.
check_IP($ip)
Check if the ip address is valid.
const CONFIG_TYPE_TEXTAREA
check_logo_image_url($url)
Validation function check_logo_image_url().
const CONFIG_TYPE_TEXT
check_logo_url($url)
Validation function check_logo_url().
get_pg_conn($sysconfdir, &$SysConf, $exitOnDbFail=true)
get_system_load_average()
Get system load average.
ConfigInit($sysconfdir, &$SysConf, $exitOnDbFail=true)
Initialize the fossology system after bootstrap().
check_email_address($email_address)
Validation function check_email_address().
const CONFIG_TYPE_DROP
check_boolean($value)
Validation function check_boolean().
populate_from_sysconfig($conn, &$SysConf)
const CONFIG_TYPE_INT
set_python_path()
check_url($url)
Check if the url is valid.
const CONFIG_TYPE_BOOL
const CONFIG_TYPE_PASSWORD
char * trim(char *ptext)
Trimming whitespace.
Definition: fossconfig.c:690
#define PERM_WRITE
Read-Write permission.
Definition: libfossology.h:33
#define PERM_ADMIN
Administrator.
Definition: libfossology.h:34
foreach($Options as $Option=> $OptVal) if(0==$reference_flag &&0==$nomos_flag) $PG_CONN