]> BookStack Code Mirror - bookstack/blobdiff - dev/licensing/gen-licenses-shared.php
Layout: Converted tri-layout component to ts
[bookstack] / dev / licensing / gen-licenses-shared.php
index 265c209cafbe66d7912a7dcf2ce01e89bf22de1b..a8ad350f22df73c091a8f375e757dc96ed2f3f13 100644 (file)
@@ -2,3 +2,65 @@
 
 declare(strict_types=1);
 
+$warnings = [];
+
+function findLicenseFile(string $packageName, string $packagePath): string
+{
+    $licenseNameOptions = [
+        'license', 'LICENSE', 'License',
+        'license.*', 'LICENSE.*', 'License.*',
+        'license-*.*', 'LICENSE-*.*', 'License-*.*',
+    ];
+    $packageDir = dirname($packagePath);
+
+    $foundLicenses = [];
+    foreach ($licenseNameOptions as $option) {
+        $search = glob("{$packageDir}/$option");
+        array_push($foundLicenses, ...$search);
+    }
+
+    if (count($foundLicenses) > 1) {
+        warn("Package {$packageName}: more than one license file found");
+    }
+
+    if (count($foundLicenses) > 0) {
+        $fileName = basename($foundLicenses[0]);
+        return "{$packageDir}/{$fileName}";
+    }
+
+    warn("Package {$packageName}: no license files found");
+    return '';
+}
+
+function findCopyright(string $licenseFile): string
+{
+    $fileContents = file_get_contents($licenseFile);
+    $pattern = '/^.*?copyright (\(c\)|\d{4})[\s\S]*?(\n\n|\.\n)/mi';
+    $matches = [];
+    preg_match($pattern, $fileContents, $matches);
+    $copyright = trim($matches[0] ?? '');
+
+    if (str_contains($copyright, 'i.e.')) {
+        return '';
+    }
+
+    $emailPattern = '/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/i';
+    return preg_replace_callback($emailPattern, obfuscateEmail(...), $copyright);
+}
+
+function obfuscateEmail(array $matches): string
+{
+    return preg_replace('/[^@.]/', '*', $matches[1]);
+}
+
+function warn(string $text): void
+{
+    global $warnings;
+    $warnings[] = "WARN:" . $text;
+}
+
+function getWarnings(): array
+{
+    global $warnings;
+    return $warnings;
+}