#!/usr/bin/perl -wT

# outboxer
# Frederik Vermeulen
# 2005-11-02

# Distributed under GPL.

### config

use strict;
use String::Random;
use MIME::QuotedPrint;
use MIME::Base64;
use URI::Escape;

# This directory needs to be writable by qmail-queue
# This directory probably should also be cleaned
# regularly by a crontab job a la
# find $outboxdir -type d -mtime +30 -exec rm -rf {} \;
my $outboxdir = '/var/www/outbox/';
my $outboxfile = '';
# This URL should not allow directory listing
my $outboxURL = 'https://inoa.net/outbox';
my $guidlen = 12;

### main

my $debug = 0;

my $guid =  new String::Random->randregex("[A-Za-z0-9]{$guidlen}");

if ((! -d $outboxdir) || (-d "$outboxdir/$guid")){
  exit 1;
}
umask 0022;
mkdir("$outboxdir/$guid", 0755) || exit 1;  

my $inheader= 1;
my $filename = 0;
while (<>){
 if ($inheader){
   if (/[\t ]filename=\"(.+)\"/){
     $filename = decode_qp($1);
   }elsif (/[\t ]filename=(\S+)/){
     $filename = decode_qp($1);
   }
   if (/^\n$/){
     $inheader = 0;
     if (!$filename){ exit 1;}
     $outboxfile = $outboxdir . "/" . $guid . "/" . $filename;
     $outboxURL .= "/" . $guid . "/" . uri_escape($filename);
     open (OUT, ">$outboxfile") || exit 1;
   }
 }else{
   print OUT decode_base64($_);
 } 
}
if ($inheader) { exit 1;}
close(OUT);
print $outboxURL;
exit 0;
