#!perl
#
# Migrate from 3.6 to 4.0 Proxy server.

BEGIN 
{
	$rootDir = $ENV{'NETSITE_ROOT'};
	@INC = ('../../perl');    
}
use Cgi;
use BinUtil;
use ES40lnf;
use Help;

$| = 1;
$isNT = -d '\\';
open(STDERR, ">&STDOUT");

$perl = "$rootDir/bin/proxy/perl/perl";
@cgis = ("$perl importCore");
@subtitles = ('Server Settings');
# optional subcomponents
if ($cgiVars{'ldif'}==1)
{  
	push(@cgis, "$perl importUsers");
    	push(@subtitles, 'Users and Groups');
}
if ($cgiVars{'security'})
{
 	push(@cgis, "$perl importSecurity");
    	push(@subtitles, 'Keys and Certificates');
}


# set up directory variables
$sname = "proxy-$cgiVars{'name'}";
$serverDir = "$rootDir/$sname";
$ENV{'SERVER_NAMES'} = $sname;
$trail = substr($cgiVars{'dir'}, length($cgiVars{'dir'})-1, length($cgiVars{'dir'}));
if ($trail eq "/" || $trail eq "\\") {
    chop($cgiVars{'dir'});
}
$newHome = "$rootDir/$sname";
# on NT, check that the name is still available as a service id
my $serviceTaken = 0;
my $validuser = 0;
my $validcached = 0;
my $validcaches = 0;

if ($isNT) 
{
    my $rez = `$rootDir/bin/proxy/admin/bin/getservice $sname`;
    if (($rez =~ /Service exists/)) 
    { 
	$serviceTaken = 1;
    }
    $validuser=1;
}

if (!$isNT)
{
	if ($cgiVars{'user'}&& !$cgiVars{'nonroot'})
	{	$username= $cgiVars{'user'};
		$idnum = 0;
		$idnum = getpwnam($username);
		if (!($idnum eq ""))
		{
			$validuser=1;
		}
		else 
		{
			$validuser=0;
		}
	}
       if ($cgiVars{'nonroot'})
       {
		$validuser=1;
       }
	 }


if ($cgiVars{'cachedir'})
	{ 
		$cached = $cgiVars{'cachedir'};
  		$cached =~ s/^\s+//g;
  		$cached =~ s/\s+$//g;
		if ($cached =~ /^<default>$/)
		{
			$validcached=1;
		}
		elsif ((-e $cached)||($cached =~ /\s/)||($cached =~ /^[^\/]+$/))
        	{
			$validcached=0;
		}	
                elsif ($cached =~ /(.*)\/[^\/]+/)
                {if (!(-e $1))
		 {
			$validcached=0;
 		 }
                 else 
		 {
			$validcached=1;
		 } 	
               }
		else 
		{
		 	$validcached=1;
		}
	}
if ($cgiVars{'cachesize'})
	{
		$cachesize=$cgiVars{'cachesize'};
                $cachesize =~ s/^\s+//g;
		$cachesize =~ s/\s+$//g;
	if (($cachesize=~ /[^0-9]/)||($cachesize<125)||($cachesize>32000)||($cachesize%125)||($cachesize%2 && $cachesize!=125))
            	{ 	
			$validcaches=0;
		}
        else
                {
			$validcaches=1;
		}	
}


# make sure directory is available
if (!(-e $serverDir) && !$serviceTaken && $validuser && $validcached && $validcaches )
{
# create directory
	mkdir( $serverDir, 0755 ) or die die_horrible_death("Can't create $serverDir: $!\n");
	chmod(0755,$serverDir);
}
else
{
    	open( CGI, "$perl importInfo |" );
    	while ( <CGI> )
	{
		print;
    	}
    	close( CGI );
    	exit;
}


# perform  migration
$title = "Migrating $cgiVars{'server'} to $sname";

open(CGI,"$perl includecss.pl \"$title\" \"$title\"|");
while (<CGI>)
{
print;
}
close(CGI);

print "<TABLE BORDER=\"0\" TITLE=\"\" CELLPADDING=\"0\" CELLSPACING=\"0\">\n";
foreach $cgi (@cgis) 
 {     
    $subtitle = shift(@subtitles);
    print "<TR><TD><DIV CLASS=\"TtlTxtDiv\">\n";
    print "<H2 CLASS=\"TtlTxt\">Migrating $subtitle...</H2>\n";
    print "</DIV></TD>\n</TR><BR/>\n";
    print "<TR><TD>\n";
    open(CGI, "$cgi |") or die "&nbsp;&nbsp;<FONT COLOR=\"red\">[Error]</FONT>Can't run $cgi: ", $! + 0,"\n";
    $error = 0;
    while (<CGI>)
    {
	if (/<FONT COLOR=\"red\">\[Error\]<\/FONT>/)
        {
	    print;
       	    $error = 1;
	    last;
	}
	print;
	print "  <BR/>";
    }
    close(CGI);
    print "</TR></TD>\n";
    if ($error) 
    {
	print "<BR/><TR><TD><DIV CLASS=\"TtlTxtDiv\">\n";
        print "<H2 CLASS=\"TtlTxt\"><FONT COLOR=\"red\">Assimilation failed.</FONT></TD></TR>\n";
    }
}
if (!$error)
{
print "\n\n<TR><TD><DIV CLASS=\"TtlTxtDiv\">\n";
print "<H2 CLASS=\"TtlTxt\">Assimilation complete.</TD></TR>\n";
}

print "</TABLE>\n";

print "<SCRIPT>\n";
print "parent.tabs.helplocation='migrate-log'\n</SCRIPT>";
if (!$error)
{# Success!
print "<div class=\"TtlHlpDiv\">";
print "<div class=\"HlpPgeTxt\"><b>&nbsp;New server created, but not started.";
print "You should either stop the 3.6 server, and start this one,<BR/>";
print "&nbsp;or change the port number of the latter before starting it.</b></div></div>\n";
print "<SCRIPT>\n";
print "function configureServer() {\n";
print "  top.location = '/$sname/bin/index';\n";
print "}\n";
print "</SCRIPT>\n";
print "<FORM>\n";
print "<br/><br/><center><table width=\"50%\"><tr><td width=\"33%\" align=\"left\"><INPUT TYPE=\"submit\" VALUE=\"Configure Migrated Server\" class=\"Btn1\" ONCLICK=\"configureServer()\" ></td></tr></table></center>\n";
print "</FORM>\n";
print "</BODY>\n";
print "</HTML>\n";
if (!$isNT) 
{
chown((getpwnam($username))[2,3],"$newHome");
chown((getpwnam($cgiVars{'user'}))[2, 3],"$newHome/start", "$newHome/stop", "$newHome/restart", "$newHome/reconfig", "$newHome/rotate","$newHome/start-sockd","$newHome/stop-sockd","$newHome/restart-sockd");
    chown((getpwnam($cgiVars{'user'}))[2, 3],"$newHome/logs", "$newHome/config", "$newHome/conf_bk","$newHome/pac");
    chown((getpwnam($cgiVars{'user'}))[2, 3],"$newHome/ClassCache", "$newHome/SessionData");
chown((getpwnam($cgiVars{'user'}))[2, 3],"$newHome/config/icp.conf", "$newHome/config/magnus.conf", "$newHome/config/obj.conf", "$newHome/config/bu.conf","$newHome/config/server.xml", "$newHome/config/socks5.conf","$newHome/config/keyfile","$newHome/config/parent.pat", "$newHome/config/parray.pat","$newHome/config/socks5.conf","$newHome/config/magnus.conf.clfilter","$newHome/config/obj.conf.clfilter","$newHome/config/server.xml.clfilter","$newHome/config/mime.types","$newHome/logs/errors","$newHome/pac/proxy.pac","$rootDir/httpacl/generated.$sname.acl","$rootDir/httpacl/genwork.$sname.acl");
 chown((getpwnam($cgiVars{'user'}))[2, 3],"$newHome/conf_bk/backups.conf","$newHome/conf_bk/bu.conf", "$newHome/conf_bk/magnus.conf", "$newHome/conf_bk/obj.conf", "$newHome/conf_bk/server.xml", "$newHome/conf_bk/parent.pat","$newHome/conf_bk/keyfile","$newHome/conf_bk/parray.pat", "$newHome/conf_bk/socks5.conf","$newHome/conf_bk/icp.conf","$newHome/conf_bk/mime.types");
chown((getpwnam($cgiVars{'user'}))[2, 3],"$newHome/conf_bk/magnus.conf.1", "$newHome/conf_bk/obj.conf.1","$newHome/conf_bk/bu.conf.1", "$newHome/conf_bk/server.xml.1", "$newHome/conf_bk/parent.pat.1","$newHome/conf_bk/keyfile.1","$newHome/conf_bk/parray.pat.1", "$newHome/conf_bk/socks5.conf.1","$newHome/conf_bk/icp.conf.1","$newHome/conf_bk/mime.types.1");
}
}


