Rev 79 | Rev 81 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
79 | daniel-mar | 1 | <?php |
2 | |||
3 | /* |
||
4 | * VNag - Nagios Framework for PHP |
||
5 | * Developed by Daniel Marschall, ViaThinkSoft <www.viathinksoft.com> |
||
6 | * Licensed under the terms of the Apache 2.0 license |
||
7 | * |
||
8 | * Revision 2023-10-14 |
||
9 | */ |
||
10 | |||
11 | function vnag_make_phar($plugin) { |
||
80 | daniel-mar | 12 | $filename = __DIR__.'/../bin/'.$plugin.'.phar'; |
79 | daniel-mar | 13 | |
14 | copy(__DIR__.'/plugins/'.$plugin.'/icinga2.conf', $filename.'.conf'); |
||
15 | |||
16 | # --- |
||
17 | |||
18 | $input_files = [__DIR__.'/framework/vnag_framework.inc.php']; |
||
19 | $input_files = array_merge($input_files, glob(__DIR__.'/plugins/'.$plugin.'/*.php*')); |
||
20 | |||
21 | $main = ''; |
||
22 | $files_for_phar = []; |
||
23 | foreach ($input_files as &$input_file) { |
||
24 | |||
25 | if (strpos($input_file, 'index.php') !== false) continue; |
||
26 | |||
27 | $input_file_short = substr($input_file, strlen(__DIR__)+1); |
||
28 | |||
29 | if (strpos(file_get_contents($input_file),'->run()') !== false) { |
||
30 | $main = $input_file_short; |
||
31 | } |
||
32 | |||
33 | $files_for_phar[$input_file_short] = $input_file; |
||
34 | } |
||
35 | |||
36 | if (!$main) throw new Exception("Could not find VNag plugin main file for plugin $plugin"); |
||
37 | |||
38 | # --- |
||
39 | |||
40 | $max_mtime = 0; |
||
41 | foreach ($files_for_phar as $input_file_short => $input_file) { |
||
42 | $max_mtime = max($max_mtime, filemtime($input_file)); |
||
43 | } |
||
44 | |||
45 | if (file_exists($filename)) { |
||
46 | if (filemtime($filename) >= $max_mtime) { |
||
47 | echo "Plugin $filename already up-to-date\n"; |
||
48 | return; |
||
49 | } |
||
50 | } |
||
51 | |||
52 | # --- |
||
53 | |||
54 | if (file_exists($filename)) unlink($filename); |
||
55 | $phar = new Phar($filename); |
||
56 | echo "Generate $filename\n"; |
||
57 | foreach ($files_for_phar as $input_file_short => $input_file) { |
||
58 | echo "\tAdd: $input_file_short\n"; |
||
59 | $phar->addFromString ($input_file_short, php_strip_whitespace ($input_file)); |
||
60 | } |
||
61 | |||
62 | $shebang = '#!/usr/bin/env php'; |
||
63 | $phar->setStub(($shebang ? $shebang . PHP_EOL : "") . $phar->createDefaultStub($main)); |
||
64 | |||
65 | #$private = openssl_get_privatekey(file_get_contents(__DIR__.'/private.pem')); |
||
66 | #$pkey = ''; |
||
67 | #openssl_pkey_export($private, $pkey); |
||
68 | #$phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey); |
||
69 | #copy(__DIR__.'/public.pem', $filename.'.pubkey'); |
||
70 | $phar->setSignatureAlgorithm(Phar::SHA512); |
||
71 | |||
72 | $phar = null; // save |
||
73 | |||
74 | chmod($filename, fileperms($filename) | 0755); |
||
75 | |||
76 | touch($filename, $max_mtime); |
||
77 | } |
||
78 | |||
79 | $plugins = glob(__DIR__.'/plugins/*'); |
||
80 | foreach ($plugins as $plugin) { |
||
81 | if (!is_dir($plugin)) continue; |
||
82 | vnag_make_phar(basename($plugin)); |
||
83 | } |