require "./config.pl";

sub GenerarSid
{

    local($sid);

    # read in the SID

    if (open (SID, $SID_path))
    {
    	$sid = <SID>;
    	close (SID); 
    } else
    {
	$sid=0;
    }

    # reset the SID at 40,000

    if (($sid > 40000) || ($sid < 0))
    {
	$sid = 0;
    }

    # write out the new SID 

    open (SID, ">$SID_path");
    $temp = $sid + 1;
    $sid = $temp - 1; 
    print SID ("$temp\n");
    close (SID);

    # the process ID is part of the SID in case two users run make_sid at the same time

    srand();
    $sid = int(rand(100)) . "$$" . time() . $sid . int(rand(100));  

    return $sid;
}

sub AlmacenarSid
{
	local($mi_sid) = @_;

	open(SID_FILE, ">>$SID_file");

	# No se rellena el identificador de cliente
	# hasta que se ha autenticado.
	print SID_FILE "$mi_sid" . "|" . time() . "|\n";

	close(SID_FILE);
}

sub ActualizarSid
{
	local($mi_sid) = @_;
	local($sid);
	local %fecha_sids;
	local %cliente_sids;
	local($actual,$fecha);

	open(SID_FILE, "$SID_file");

	while (<SID_FILE>)
	{
		chop;
		($sid, $fecha, $cliente) = split(/\|/);
		$fecha_sids{$sid} = $fecha;
		$cliente_sids{$sid} = $cliente;
	}
	close (SID_FILE);

	$actual = time();

	$fecha_sids{$mi_sid} = $actual;


	open(SID_FILE, ">$SID_file");
	foreach (keys %fecha_sids)
	{
		$sid = $_;
		if ( $actual < $fecha_sids{$sid} + $vida_sid)
		{
			print SID_FILE "$sid" . "|" . $fecha_sids{$sid} . "|" . $cliente_sids{$sid} . "\n";
		}
	}
	close(SID_FILE);
}

sub FechaValidaSid
{
	local($mi_sid) = @_;
	local($sid);
	local($actual);

	open(SID_FILE, "$SID_file");

	while (<SID_FILE>)
	{
		chop;
		($sid, $fecha, $cliente) = split(/\|/);
		if ($sid == $mi_sid)
		{
			$actual = time();
			if ( $actual < $fecha + $vida_sid)
			{	
				close(SID_FILE);
				return 1;
			} else
			{
				close(SID_FILE);
				return 0;
			}
		}
	}
	close (SID_FILE);
	return 0;
}

sub ActualizarClienteSid
{
	local($mi_cliente, $mi_sid) = @_;
	local($sid);
	local %fecha_sids;
	local %cliente_sids;
	local($actual,$fecha);

	open(SID_FILE, "$SID_file");

	while (<SID_FILE>)
	{
		chop;
		($sid, $fecha, $cliente) = split(/\|/);
		$fecha_sids{$sid} = $fecha;
		$cliente_sids{$sid} = $cliente;
	}
	close (SID_FILE);

	$cliente_sids{$mi_sid} = $mi_cliente;

	open(SID_FILE, ">$SID_file");
	foreach (keys %fecha_sids)
	{
		$sid = $_;
		print SID_FILE "$sid" . "|" . $fecha_sids{$sid} . "|" . $cliente_sids{$sid} . "\n";
	}
	close(SID_FILE);
}

sub SesionAutenticada
{
	local($mi_sid) = @_;
	local($sid);
	local($actual);

	open(SID_FILE, "$SID_file");

	while (<SID_FILE>)
	{
		chop;
		($sid, $fecha, $cliente) = split(/\|/);
		if ($sid == $mi_sid)
		{
			close (SID_FILE);

			if ($cliente)
			{
				return $cliente;
			} else
			{
				return 0;
			}
		}
	}
	close (SID_FILE);
	return 0;
}

1;
