#!/usr/bin/perl

use CGI qw(:standard);
use strict;
use File::MMagic;
use FileHandle;

my $query = new CGI;

my $usuario = $query->param('u');
my $timestamp = $query->param('t');
my $fichero = $query->param('f');

my $tipo_contenido = "application/octet-stream";

my $fichero_disco = "/datos/mcheckin/attachments/$usuario/$timestamp/$fichero";

if ( -f $fichero_disco ) {
    
        my $mm = new File::MMagic;
	my $tipo_contenido_mm = $mm->checktype_filename($fichero_disco);
        
        if ( $fichero_disco =~ /\.pps$/ ) {
            $tipo_contenido = "application/vnd.ms-powerpoint";
        } elsif ( $tipo_contenido_mm ) {
	    $tipo_contenido = $tipo_contenido_mm;
	}

	print $query->header( -type => $tipo_contenido, -attachment => $fichero );

	my $lin = undef;
	open ( FICHERO, "< $fichero_disco" );
	while ( $lin = <FICHERO> ) {
		print $lin;
	}
	close ( FICHERO );
 
	Log ( $query->remote_host(), "GET U: $usuario T: $timestamp  F: $fichero TC: $tipo_contenido" );

} else {
	# Error no disponible

        print header;

	print $query->start_html(-title=>'Fichero no encontrado');

	print qq{El fichero buscado "$fichero" ya no se encuentra disponible.};

	print $query->end_html;

	Log ( $query->remote_host(), "No Disponible U: $usuario T: $timestamp  F: $fichero TC: $tipo_contenido" );
}

sub Log ($$) {
    my ( $ip_cliente, $log_str ) = @_;
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
    my %NUM_A_MESES = (
                       "1" => "Enero", "2" => "Febrero", "3" => "Marzo",
                       "4" => "Abril", "5" => "Mayo", "6" => "Junio",
                       "7" => "Julio", "8" => "Agosto", "9" => "Septiembre",
                       "10" => "Octubre", "11" => "Noviembre", "12" => "Diciembre"
                       );


    $year += 1900;
    $mon ++;

    my $fecha = sprintf ( "%d/%s/%d:%02d:%02d:%02d +%02d00", $mday, $NUM_A_MESES{$mon}, $year, $hour, $min, $sec, 1 + $isdst );

    open ( LOG, ">> /datos/mcheckin/logs/attachments.log" );
    print LOG qq{$ip_cliente - - [$fecha] - $log_str\n};
    close ( LOG );
}
