WelcomeRedirector.pl

per Victor Carceler darrera modificació 2020-03-25T16:40:45+02:00

text/x-perl WelcomeRedirector.pl — 2.1 KB

Continguts del fitxer

#!/usr/bin/perl
#
#       WelcomeRedirector v0.2 (por Victor Carceler)
#
#       Este script es software libre GPL
#
#       Este script es un redirector para Squid (http://www.squid-cache.org/Doc/FAQ/FAQ-15.html)
#       Cuando Squid recibe una petición, se la pasa a WelcomeRedirector y el script retorna
#       la URL que Squid debe retornar al cliente.
#
#       Si es la primera vez que el cliente realiza la petición, o hace más de TIMEOUT segundos
#       desde la última petición, el cliente es dirigido a URL. En caso contrario el cliente
#       obtiene el documento que pidió.
#       NO_REDIRECT_PREFIX indica un prefijo que si se encuentra en la dirección del cliente
#       evitará que sea redirigido (aunque sea la primera conexión).
#
#       Para que Squid utilice este software debe configurar la directiva redirect_program
#       y redirect_children (con valor 1) en squid.conf

my $TIMEOUT = 3600;
my $URL = "http://iespuigcastellar.xeill.net/activitats/xeill";
my $NO_REDIRECT_PREFIX = "192.168";

$|=1;

my %registro;

while (<>) {
        @X = split;
        $url = $X[0];
        $address = $X[1];
        $ident = $X[2];
        $method = $X[3];

        #print "Petición: $url -> $address -> $ident -> $method\n";

	my $registrado = 0;

	# Sólo redirigimos peticiones que no coinciden con NO_REDIRECT_PREFIX
	if ($address !~ /$NO_REDIRECT_PREFIX/) {
	        # Tenemos $address registrada ?
        	my @ips = keys %registro;
        	foreach(@ips) {
                	if ($_ == $address) {
                        	if ((time - $registro{$address}) >= $TIMEOUT) {delete $registro{$address};
                        	} else {
                               		$registrado = 1;
                                	#print  "Tengo la ip registrada !!!";
                        	}
                	}
        	}
	} else {
		$registrado = 1; # Nos saltamos la redirección
	}

        if (! $registrado) {
                $url = $URL;
                print "302:$url\n";
                $registro{$address}=time;
        } else {
                print "$url\n";
        }
}