isDir() || unlink($fileinfo->getRealPath()); } $terser = ROOT_DIR . '/node_modules/terser/bin/terser'; $manifest = []; require ROOT_DIR . '/snappymail/v/0.0.0/app/libraries/RainLoop/Plugins/AbstractPlugin.php'; $keys = [ 'author', 'category', 'description', 'file', 'id', 'license', 'name', 'release', 'required', 'type', 'url', 'version' ]; /* $released = [ 'add-x-originating-ip-header', 'avatars', 'backup', 'black-list', 'change-password', 'change-password-froxlor', 'change-password-hestia', 'change-password-hmailserver', 'change-password-ispconfig', 'change-password-poppassd', 'custom-login-mapping', 'imap-contacts-suggestions', 'kolab', 'ldap-contacts-suggestions', 'ldap-identities', 'ldap-login-mapping', 'ldap-mail-accounts', 'login-external', 'login-external-sso', 'login-override', 'login-register', 'login-remote', 'mailbox-detect', 'nextcloud', 'override-smtp-credentials', 'set-remote-addr', 'smtp-use-from-adr-account', 'snowfall-on-login-screen', 'two-factor-auth', 'view-ics', 'white-list' ]; */ foreach (glob(ROOT_DIR . '/plugins/*', GLOB_NOSORT | GLOB_ONLYDIR) as $dir) { if (is_file("{$dir}/index.php") && !strpos($dir, '.bak')) { require "{$dir}/index.php"; $name = basename($dir); // if (!in_array($name, $released)) continue; $class = new ReflectionClass(str_replace('-', '', $name) . 'Plugin'); $manifest_item = []; foreach ($class->getConstants() as $key => $value) { $key = \strtolower($key); if (in_array($key, $keys)) { $manifest_item[$key] = $value; } } $version = $manifest_item['version']; if (0 < floatval($version)) { echo "+ {$name} {$version}\n"; // Minify JavaScript foreach (glob("{$dir}/*.js") as $file) { if (!strpos($file,'.min')) { $mfile = str_replace('.js', '.min.js', $file); passthru("{$terser} {$file} --output {$mfile} --compress 'drop_console' --ecma 6 --mangle"); } } foreach (glob("{$dir}/js/*.js") as $file) { if (!strpos($file,'.min')) { $mfile = str_replace('.js', '.min.js', $file); passthru("{$terser} {$file} --output {$mfile} --compress 'drop_console' --ecma 6 --mangle"); } } $manifest_item['type'] = 'plugin'; $manifest_item['id'] = $name; $manifest_item['file'] = "plugins/{$name}-{$version}.tgz"; $tar_destination = PLUGINS_DEST_DIR . "/{$name}-{$version}.tar"; $tgz_destination = PLUGINS_DEST_DIR . "/{$name}-{$version}.tgz"; @unlink($tgz_destination); @unlink("{$tar_destination}.gz"); $tar = new PharData($tar_destination); $tar->buildFromDirectory('./plugins/', '/' . \preg_quote("./plugins/{$name}/", '/') . '((?!\.bak).)*$/'); $tar->compress(Phar::GZ); unlink($tar_destination); rename("{$tar_destination}.gz", $tgz_destination); /* if (Phar::canWrite()) { $phar_destination = PLUGINS_DEST_DIR . "/{$name}.phar"; @unlink($phar_destination); $tar = new Phar($phar_destination); $tar->buildFromDirectory("./plugins/{$name}/", '/^((?!\.bak).)*$/'); $tar->compress(Phar::GZ); unlink($phar_destination); rename("{$phar_destination}.gz", $phar_destination); } */ if (isset($options['sign'])) { passthru('gpg --local-user 1016E47079145542F8BA133548208BA13290F3EB --armor --detach-sign '.escapeshellarg($tgz_destination), $return_var); $manifest_item['pgp_sig'] = trim(preg_replace('/-----(BEGIN|END) PGP SIGNATURE-----/', '', file_get_contents($tgz_destination.'.asc'))); } ksort($manifest_item); $manifest[$name] = $manifest_item; } else { echo "- {$name} {$version}\n"; } } else { echo "- {$name}\n"; } } ksort($manifest); $manifest = json_encode(array_values($manifest)); $manifest = str_replace('{"', "\n\t{\n\t\t\"", $manifest); $manifest = str_replace('"}', "\"\n\t}", $manifest); $manifest = str_replace('}]', "}\n]", $manifest); $manifest = str_replace('","', "\",\n\t\t\"", $manifest); $manifest = str_replace('\/', '/', $manifest); file_put_contents(dirname(PLUGINS_DEST_DIR) . "/packages.json", $manifest); exit;