33
2
mirror of https://github.com/joomla-extensions/jedchecker.git synced 2024-12-29 04:42:36 +00:00

move lists of GPL and compatible licenses to separate files

This commit is contained in:
Denis Ryabov 2021-01-31 11:52:32 +03:00
parent 92ff3e2bec
commit 02ccd6fa65
4 changed files with 341 additions and 65 deletions

View File

@ -11,4 +11,4 @@
;
; The valid constants to search for
constants="Apache,Artistic,BSD,CC0,Creative Commons Attribution,MIT,MPL"
constants=""

View File

@ -47,6 +47,20 @@ class JedcheckerRulesGpl extends JEDcheckerRule
*/
protected $description = 'COM_JEDCHECKER_RULE_PH1_DESC';
/**
* Regular expression to match GPL licenses.
*
* @var string
*/
protected $regex_gpl_licenses;
/**
* Regular expression to match GPL-compatible licenses.
*
* @var string
*/
protected $regex_compat_licenses;
/**
* Initiates the file search and check
*
@ -54,6 +68,9 @@ class JedcheckerRulesGpl extends JEDcheckerRule
*/
public function check()
{
// Prepare regexp
$this->init();
// Find all php files of the extension
$files = JFolder::files($this->basedir, '.php$', true, true);
@ -70,7 +87,94 @@ class JedcheckerRulesGpl extends JEDcheckerRule
}
/**
* Reads a file and searches for the _JEXEC statement
* Initialization (prepare regular expressions)
*/
protected function init()
{
$gpl_licenses = (array) file(__DIR__ . '/gpl_gnu.txt');
$this->regex_gpl_licenses = $this->generate_regexp($gpl_licenses);
$compat_licenses = (array) file(__DIR__ . '/gpl_compat.txt');
$extra_licenses = $this->params->get('constants');
$extra_licenses = explode(',', $extra_licenses);
$compat_licenses = array_merge($compat_licenses, $extra_licenses);
$this->regex_compat_licenses = $this->generate_regexp($compat_licenses);
}
/**
* Generate regular expression to match the given list of license names
* @param $lines
* @return string
*/
protected function generate_regexp($lines)
{
$titles = array();
$ids = array();
foreach ($lines as $line)
{
$line = trim($line);
if ($line === '' || $line[0] === '#')
{
// skip empty and commented lines
continue;
}
$title = $line;
if (substr($line, -1, 1) === ')')
{
// extract identifier
$pos = strrpos($line, '(');
if ($pos !== false)
{
$title = trim(substr($line, 0, $pos));
$id = trim(substr($line, $pos + 1, -1));
if ($id !== '')
{
$id = preg_quote($id, '#');
$ids[$id] = 1;
}
}
}
if ($title !== '')
{
$title = preg_quote($title, '#');
// expand vN.N to different version formats
$title = preg_replace('/(?<=\S)\s+v(?=\d)/', ',?\s+(?:v\.?\s*|version\s+)?', $title);
$title = preg_replace('/\s+/', '\s+', $title);
$titles[$title] = 1;
}
}
if (count($titles) === 0)
{
return null;
}
$titles = implode('|', array_keys($titles));
if (count($ids))
{
$ids = implode('|', array_keys($ids));
$titles .=
'|\blicense\b.+?(?:' . $ids . ')' .
'|\b(?:' . $ids . ')\s+license\b';
}
return '#^.*?(?:' . $titles . ').*?$#im';
}
/**
* Reads a file and searches for its license
*
* @param string $file - The path to the file
*
@ -78,72 +182,37 @@ class JedcheckerRulesGpl extends JEDcheckerRule
*/
protected function find($file)
{
$content = (array) file($file);
// Get the constants to look for
$licenses = $this->params->get('constants');
$licenses = explode(',', $licenses);
$hascode = 0;
foreach ($content AS $key => $line)
// check the file is empty (i.e. comments-only)
$content = php_strip_whitespace($file);
if (preg_match('#^<\?php\s+$#', $content))
{
$tline = trim($line);
if ($tline == '' || $tline == '<?php' || $tline == '?>')
{
continue;
}
if ($tline['0'] != '/' && $tline['0'] != '*')
{
$hascode = 1;
}
// Search for GPL license
$gpl = stripos($line, 'GPL');
$gnu = stripos($line, 'GNU');
$gpl_long = stripos($line, 'general public license');
if ($gpl || $gnu || $gpl_long)
{
$this->report->addInfo(
$file,
JText::_('COM_JEDCHECKER_PH1_LICENSE_FOUND') . ':' . '<strong>' . $line . '</strong>',
$key
);
return true;
}
// Search for the constant name
foreach ($licenses AS $license)
{
$license = trim($license);
// Search for the license
$found = strpos($line, $license);
// Skip the line if the license is not found
if ($found === false)
{
continue;
}
else
{
$this->report->addInfo(
$file,
JText::_('COM_JEDCHECKER_GPL_COMPATIBLE_LICENSE_WAS_FOUND') . ':' . '<strong>' . $line . '</strong>',
$key
);
return true;
}
}
return true;
}
unset($content);
$content = file_get_contents($file);
return $hascode ? false : true;
if (preg_match($this->regex_gpl_licenses, $content, $match, PREG_OFFSET_CAPTURE))
{
$line_no = substr_count($content, "\n", 0, $match[0][1]) + 1;
$this->report->addInfo(
$file,
JText::_('COM_JEDCHECKER_PH1_LICENSE_FOUND') . ':' . '<strong>' . $match[0][0] . '</strong>',
$line_no
);
return true;
}
if (preg_match($this->regex_compat_licenses, $content, $match, PREG_OFFSET_CAPTURE))
{
$line_no = substr_count($content, "\n", 0, $match[0][1]) + 1;
$this->report->addInfo(
$file,
JText::_('COM_JEDCHECKER_GPL_COMPATIBLE_LICENSE_WAS_FOUND') . ':' . '<strong>' . $match[0][0] . '</strong>',
$line_no
);
return true;
}
return false;
}
}

View File

@ -0,0 +1,169 @@
# Based on:
# https://www.gnu.org/licenses/license-list.en.html
# https://opensource.org/licenses/alphabetical
# https://spdx.org/licenses/
# Comments are marked with the "#" character in the first position of the line
# Each line contains the full name of the license with the optional abbreviation in parenthesis
# The version of the license (if presented) should be written in the form
# [space][the letter "v"][digit(s)]
# (see examples below)
# BSD Licenses
BSD License
0-clause BSD License (0BSD)
BSD Zero Clause License
Zero-Clause BSD / Free Public License v1.0.0
1-clause BSD License (BSD-1-Clause)
BSD 1-Clause License
2-clause BSD License (BSD-2-Clause)
BSD 2-Clause "Simplified" License
BSD-2-Clause Plus Patent License (BSD-2-Clause-Patent)
BSD+Patent
FreeBSD License
3-clause BSD License (BSD-3-Clause)
BSD 3-Clause "New" or "Revised" License
Lawrence Berkeley National Labs BSD variant License (BSD-3-Clause-LBNL)
Modified BSD License
Clear BSD License
# Other OSI Licenses
Academic Free License v1.1 (AFL-1.1)
Academic Free License v1.2 (AFL-1.2)
Academic Free License v2.0 (AFL-2.0)
Academic Free License v2.1 (AFL-2.1)
Academic Free License v3.0 (AFL-3.0)
Adaptive Public License (APL-1.0)
Apache License v1.1 (Apache-1.1)
Apache Software License v1.1
Apache License v2.0 (Apache-2.0)
Apple Public Source License v1.0 (APSL-1.0)
Apple Public Source License v1.1 (APSL-1.1)
Apple Public Source License v1.2 (APSL-1.2)
Apple Public Source License v2.0 (APSL-2.0)
Apple Public Source License
Artistic License v1.0 (Artistic-1.0)
Artistic License
Artistic License v2.0 (Artistic-2.0)
Attribution Assurance License (AAL)
Berkeley Database License
Boost Software License (BSL-1.0)
CeCILL v2
CeCILL License v2.1 (CECILL-2.1)
CeCILL Free Software License Agreement v2.1
CERN Open Hardware Licence v2 - Permissive (CERN-OHL-P-2.0)
CERN Open Hardware Licence v2 - Weakly Reciprocal (CERN-OHL-W-2.0)
CERN Open Hardware Licence v2 - Strongly Reciprocal (CERN-OHL-S-2.0)
Clarified Artistic License
Common Development and Distribution License v1.0 (CDDL-1.0)
Common Public Attribution License v1.0 (CPAL-1.0)
Common Public License v1.0 (CPL-1.0)
Computer Associates Trusted Open Source License v1.1 (CATOSL-1.1)
Cryptix General License
Cryptographic Autonomy License v1.0 (CAL-1.0)
CUA Office Public License v1.0 (CUA-OPL-1.0)
Eclipse Public License v1.0 (EPL-1.0)
Eclipse Public License v2.0 (EPL-2.0)
eCos License v2.0 (eCos-2.0)
Educational Community License v1.0 (ECL-1.0)
Educational Community License v2.0 (ECL-2.0)
Eiffel Forum License v1.0 (EFL-1.0)
Eiffel Forum License v2.0 (EFL-2.0)
Entessa Public License (Entessa)
EU DataGrid Software License (EUDatagrid)
European Union Public License v1.1 (EUPL-1.1)
European Union Public License v1.2 (EUPL-1.2)
Expat License
Fair License (Fair)
Frameworx License (Frameworx-1.0)
Frameworx Open License v1.0
Freetype Project License
Historical Permission Notice and Disclaimer (HPND)
IBM Public License v1.0 (IPL-1.0)
Independent JPEG Group License
Intel Open Source License (Intel)
IPA Font License (IPA)
ISC License (ISC)
Jabber Open Source License
LaTeX Project Public License v1.3c (LPPL-1.3c)
Licence Libre du Québec Permissive (LiLiQ-P) v1.1 (LiliQ-P)
Licence Libre du Québec Permissive v1.1 (LiLiQ-P-1.1)
Licence Libre du Québec Réciprocité (LiLiQ-R) v1.1 (LiliQ-R)
Licence Libre du Québec Réciprocité v1.1 (LiLiQ-R-1.1)
Licence Libre du Québec Réciprocité forte (LiLiQ-R+) v1.1 (LiliQ-R+)
Licence Libre du Québec Réciprocité forte v1.1 (LiLiQ-Rplus-1.1)
Lucent Public License ("Plan9") v1.0 (LPL-1.0)
Lucent Public License v1.0
Lucent Public License v1.02 (LPL-1.02)
Microsoft Public License (MS-PL)
Microsoft Reciprocal License (MS-RL)
MirOS Licence (MirOS)
MIT License (MIT)
MIT No Attribution (MIT-0)
MITRE Collaborative Virtual Workspace License (CVW)
Motosoto License (Motosoto)
Mozilla Public License v1.0 (MPL-1.0)
Mozilla Public License v1.1 (MPL-1.1)
Mozilla Public License v2.0 (MPL-2.0)
Mulan Permissive Software License v2 (MulanPSL-2.0)
Multics License (Multics)
NASA Open Source Agreement v1.3 (NASA-1.3)
Naumen Public License (Naumen)
Nethack General Public License (NGPL)
Nokia Open Source License (Nokia)
Non-Profit Open Software License v3.0 (NPOSL-3.0)
NTP License (NTP)
OCLC Research Public License v2.0 (OCLC-2.0)
Open Group Test Suite License (OGTSL)
Open Software License v1.0 (OSL-1.0)
Open Software License v2.0 (OSL-2.0)
Open Software License v2.1 (OSL-2.1)
Open Software License v3.0 (OSL-3.0)
OpenLDAP License v2.7
OpenLDAP Public License v2.8 (OLDAP-2.8)
Open LDAP Public License v2.8
OSET Public License v2.1 (OSET-PL-2.1)
PHP License v3.0 (PHP-3.0)
PHP License v3.01 (PHP-3.01)
PostgreSQL License (PostgreSQL)
Python License (Python-2.0)
CNRI Python License (CNRI-Python)
Q Public License (QPL-1.0)
RealNetworks Public Source License v1.0 (RPSL-1.0)
Reciprocal Public License v1.1 (RPL-1.1)
Reciprocal Public License v1.5 (RPL-1.5)
Ricoh Source Code Public License (RSCPL)
SGI Free Software License B v2.0
SIL Open Font License v1.1 (OFL-1.1)
Simple Public License v2.0 (SimPL-2.0)
Sleepycat License (Sleepycat)
Sleepycat Software Product License
Standard ML of New Jersey Copyright License
Sun Industry Standards Source License (SISSL)
Sun Public License v1.0 (SPL-1.0)
Sybase Open Watcom Public License v1.0 (Watcom-1.0)
Unicode Data Files and Software License (Unicode-DFS-2016)
Unicode License Agreement - Data Files and Software
Unicode, Inc. License Agreement for Data Files and Software
Universal Permissive License (UPL)
Universal Permissive License v1.0 (UPL-1.0)
University of Illinois/NCSA Open Source License (NCSA)
NCSA/University of Illinois Open Source License
Unlicense
Upstream Compatibility License v1.0 (UCL-1.0)
Vovida Software License v.1.0 (VSL-1.0)
W3C License (W3C)
W3C Software Notice and License
WTFPL v2
WxWidgets Library License
wxWindows Library License (WXwindows)
X11 License
XFree86 v1.1 License
X.Net License (Xnet)
Zope Public License v2.0 (ZPL-2.0)
Zope Public License v2.1
zlib/libpng License (Zlib)
zlib License

View File

@ -0,0 +1,38 @@
# GPL Licenses
# Based on:
# https://www.gnu.org/licenses/license-list.en.html
# https://opensource.org/licenses/alphabetical
# https://spdx.org/licenses/
# Comments are marked with the "#" character in the first position of the line
# Each line contains the full name of the license with the optional abbreviation in parenthesis
# The version of the license (if presented) should be written in the form
# [space][the letter "v"][digit(s)]
# (see examples below)
GNU General Public License
GNU GPL
GNU/GPL
GNU Lesser General Public License
GNU LGPL
GNU/LGPL
GNU General Public License v2 (GPL-2.0)
//www.gnu.org/licenses/gpl-2.0.html
GNU General Public License v3 (GPL-3.0)
//www.gnu.org/licenses/gpl-3.0.html
GNU Affero General Public License v3 (AGPL-3.0)
GNU Affero General Public License (AGPL) v3
GNU Library General Public License v2 (LGPL-2.0)
GNU Lesser General Public License v2.1 (LGPL-2.1)
GNU Lesser General Public License (LGPL) v2.1
GNU Lesser General Public License v3 (LGPL-3.0)
GNU Lesser General Public License (LGPL) v3
GNU All-Permissive License