mirror of
				https://bitbucket.org/jsuto/piler.git
				synced 2025-10-31 01:32:27 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/php
 | |
| <?php
 | |
| 
 | |
| define('EXPORT_LOCK_FILE', '/var/piler/tmp/export-attachments.lock');
 | |
| 
 | |
| $webuidir = "";
 | |
| 
 | |
| $outdir = '';
 | |
| 
 | |
| 
 | |
| $opts = 'hw:d:';
 | |
| $lopts = [
 | |
|    'webui:',
 | |
|    'dir:',
 | |
|    'help'
 | |
| ];
 | |
| 
 | |
| 
 | |
| if($options = getopt($opts, $lopts)) {
 | |
|    if(isset($options['webui'])) { $webuidir = $options['webui']; }
 | |
|    if(isset($options['dir'])) { $outdir = $options['dir']; }
 | |
|    if(isset($options['help'])) { usage(); }
 | |
| }
 | |
| 
 | |
| 
 | |
| if($webuidir == '' || $outdir == '') { usage(); }
 | |
| 
 | |
| 
 | |
| 
 | |
| require_once("$webuidir/config.php");
 | |
| 
 | |
| require(DIR_SYSTEM . "/startup.php");
 | |
| 
 | |
| $request = new Request();
 | |
| Registry::set("request", $request);
 | |
| 
 | |
| 
 | |
| $start = NULL;
 | |
| 
 | |
| $loader = new Loader();
 | |
| Registry::set('load', $loader);
 | |
| 
 | |
| $loader->load->model('domain/domain');
 | |
| $loader->load->model('search/search');
 | |
| $loader->load->model('search/message');
 | |
| $loader->load->model('message/attachment');
 | |
| 
 | |
| 
 | |
| $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE, DB_PREFIX);
 | |
| Registry::set('db', $db);
 | |
| 
 | |
| Registry::set('auditor_user', 1);
 | |
| 
 | |
| openlog("export-attachments", LOG_PID, LOG_MAIL);
 | |
| 
 | |
| $fp = fopen(EXPORT_LOCK_FILE, "w");
 | |
| if(!flock($fp, LOCK_EX)) {
 | |
|    syslog(LOG_INFO, "WARN: couldn't get a lock on " . EXPORT_LOCK_FILE);
 | |
|    exit;
 | |
| }
 | |
| 
 | |
| 
 | |
| $domain = new ModelDomainDomain();
 | |
| $attachment = new ModelMessageAttachment();
 | |
| $message = new ModelSearchMessage();
 | |
| 
 | |
| $domains = $domain->get_mapped_domains();
 | |
| 
 | |
| $last_id = $attachment->get_last_attachment_id();
 | |
| $start_id = $attachment->get_checkpoint();
 | |
| 
 | |
| syslog(LOG_INFO, "start: $start_id, limit: $last_id");
 | |
| 
 | |
| 
 | |
| for($i=$start_id; $i<$last_id; $i++) {
 | |
|    $a = $attachment->get_attachment_by_id($i);
 | |
|    $m = $message->get_message_addresses_by_piler_id($a['piler_id'], $domains);
 | |
| 
 | |
|    $attachment->dump_attachment($outdir, "out", $m['sender'], $i, $a);
 | |
| 
 | |
|    foreach($m['rcpt'] as $rcpt) {
 | |
|       $attachment->dump_attachment($outdir, "in", $rcpt, $i, $a);
 | |
|    }
 | |
| 
 | |
|    if($i % 100 == 0) { $attachment->update_checkpoint($i); }
 | |
| }
 | |
| 
 | |
| $attachment->update_checkpoint($i);
 | |
| 
 | |
| // Release lock
 | |
| flock($fp, LOCK_UN);
 | |
| fclose($fp);
 | |
| 
 | |
| 
 | |
| 
 | |
| function usage() {
 | |
|    print "\nUsage: " . __FILE__ . "\n\n";
 | |
|    print "\t--webui <path to webui directory>\n";
 | |
|    print "\t--dir <basedir to write attachments>\n";
 | |
|    print "\t--help\n\n";
 | |
| 
 | |
|    exit;
 | |
| }
 |