#!/usr/bin/perl
use POSIX qw(strftime);

use constant HSPCCONFDIR		=> '/etc/hspc';
use constant HSPCCONF			=> 'hspc.conf';
use constant HSPCHTTPDCONFDIR	=> '/etc/sw-cp-server/applications.d';
use constant HSPCHTTPDCONF		=> 'hspc-httpd.conf';
use constant TMPLDIR			=> '/usr/share/hspc-config/templates';
use Sys::Hostname;
use IO::Socket;
use IO::Interface qw(:flags);

sub fill_in_values
{
	my $template	= shift;
	my $list		= shift;

	foreach (keys %$list)
	{
		$template =~ s/\@\@$_\@\@/$list->{$_}/g;
	}
	return $template;
}


sub process_config($$)
{
	my $conf_dir = shift;
	my $conf_file = shift;

	my $file = $conf_dir.'/'.$conf_file;
	my $infile = &TMPLDIR.'/'.$conf_file.'.in';

	my $ip_addr = '127.0.0.1';
	my $socket = IO::Socket::INET->new(Proto => 'udp');
	my @ips = grep{$_ ne '127.0.0.1'} map {$socket->if_addr($_)} $socket->if_list;
	if (@ips){
		$ip_addr	= $ips[0];
	}else{
		$ip_addr	= '127.0.0.1';
	}

	my $hostname = `hostname -f`;
	my $admemail = ($ENV{ADMEMAIL}?$ENV{ADMEMAIL}:"root\@$hostname");
	my $list = {
		DATE		=> (strftime ("%D %T",localtime())),
		SERVERIP	=> $ip_addr,
		SERVERNAME	=> $hostname,
		SERVERPORT	=> '12443',
		VAROPT		=> '/var/opt',
		USRSBIN		=> '/usr/sbin',
		LOCKDIR		=> '/var/lock/hspc/',
		ADMEMAIL	=> $admemail,
		COOKIEDOMAIN=> `/bin/dnsdomainname`,
	};

	die "File $infile not found." unless(-f $infile);

	# Save current file
	rename($file, "$file.orig");

	local $/;
	open(TMPL,$infile);
	my $template = <TMPL>;
	close(TMPL);

	$template = fill_in_values($template, $list);

	# all done
	open(INFILE,">$file");
	print INFILE $template;
	close(INFILE);

	# Permissions
	my ($login,$pass,$uid,$gid) = getpwnam("hspc");
	chown $uid, $gid, $file;
	chmod 0644, $file;
}

process_config(&HSPCCONFDIR, &HSPCCONF);
process_config(&HSPCHTTPDCONFDIR, &HSPCHTTPDCONF);

1;
