#!/usr/bin/perl

$siteroot = "./omatsivut/";
$urlroot = "http://www.paimionrasti.fi/suma/";
$progurl = "http://www.paimionrasti.fi/suma/extra.cgi";
$area_file = "./omatsivut/areas.csv";
$rndnrofile = "./omatsivut/rndnros.cgi";
$pwfile = "./pwfile.cgi";
$cgiurl = "http://www.paimionrasti.fi/suma/extra.cgi";
$shorturl = "/suma/extra.cgi";
$log_out_url = "http://www.paimionrasti.fi/suma/index.cgi";

&lue_parametrit;

## Tässä passitetaan noutamaan valid Cookie tai päästetään
## ohjelmaan.

if ($cookie{username} ne "") {
    &userOpen;
    &teeHommat;
}
else {
    if ($FORM{toiminto} eq "getCookie") {&getCookie}
    else {&loginForm}
}


#################    #
## Aliohjelmat ##    #
#################  #####

sub teeHommat {
    if ($FORM{toiminto} eq "") {&viewPage;}
    elsif ($FORM{toiminto} eq "editPage") {&editPage;}
    elsif ($FORM{toiminto} eq "submitEditPage") {&submitEditPage;}
    elsif ($FORM{toiminto} eq "addPage") {&addPage;}
    elsif ($FORM{toiminto} eq "addPageForm") {&addPageForm;}
    elsif ($FORM{toiminto} eq "editFiles") {&editFiles;}
    elsif ($FORM{toiminto} eq "listFiles") {&listFiles;}
    elsif ($FORM{toiminto} eq "poistu") {&poistuOhjelmasta;}
    else {error("Hei maza, kerro mitä tehdä!")}
}

sub addPage {
    open(FILES,">>$siteroot$FORM{alue}/index.files") or error("Sivulistausta ei löydy");
    print FILES "$FORM{filename}|$FORM{title}|1|\n";
    close(FILES);
    &listFiles;
}

sub addPageForm {
    print "Content-type: text/html\n\n";

    print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/DTD/loose.dtd\">";
    print "<HTML><HEAD>";
    print "<TITLE>Tiedoston lisäys</TITLE></HEAD>\n";
    print "<BODY>\n";
    print "<h1>Tiedoston lisäys:</h1>";
    print "Tiedosto lisätään alueeseen $FORM{alue}";
    print "<form action=\"$cgiurl\" method=\"post\">";
    print "Tiedostonimi: <input type='text' name='filename'> <small>(identtinen alueessa, lyhyt, ei erikoismerkkeja)</small><BR>";
    print "Otsikko: <input type='text' name='title'>";
    print "<input type='hidden' name='toiminto' value='addPage'>\n";
    print "<input type='hidden' name='alue' value='$FORM{alue}'>\n";
    print "<input type='submit' value='Tallenna'>\n";
    print "</form>";
    print "</BODY></HTML>\n";
}

sub editFiles {
    open(FILES,"<$siteroot$FORM{alue}/index.files") or error("Sivua ei löydy");
    @lines = <FILES>;
    close(FILES);
    foreach $line(@lines) {
	@sivu = split(/\|/,$line);
	if ($FORM{$sivu[0]} eq "") {&error("Virhe: Joku muu editoi samaan aikaan??");}
	else {
	    if ($FORM{$sivu[0]} ne "poista") {
		push(@newlines,"$sivu[0]|$sivu[1]|$FORM{$sivu[0]}|\n");
	    }
	    else {
		unlink("$siteroot$FORM{alue}/index.files") or error("Poistettavaa tiedostoa ei löydy!");
	    }
	}

    }
    open(FILES,">$siteroot$FORM{alue}/index.files") or error("Sivua ei löydy");
    print FILES @newlines;
    close(FILES);
    &listFiles;
}

sub listFiles {
    &open_areas;
    print "Content-type: text/html\n\n";

    print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/DTD/loose.dtd\">";
    print "<HTML><HEAD>";
    print "<TITLE>ListFiles::</TITLE></HEAD>\n";
    print "<BODY>\n";
    print "<h1>Tiedostot alueessa: $FORM{alue}</h1>";
    print "<form action=\"$cgiurl\" method=\"post\">";



    open(FILES,"<$siteroot$FORM{alue}/index.files") or error("Sivua ei löydy");
    @lines = <FILES>;
    close(FILES);
    print "<table border='1'>";
    print "<tr><th>Tiedosto<th>Otsikko<th>Tila</tr>";
    foreach $line(@lines) {
	@sivu = split(/\|/,$line);
	print "<tr>";
	print "<td><a href='$cgiurl?toiminto=editPage&alue=$FORM{alue}&tiedosto=$sivu[0]'>$sivu[0]</a>";
	print "<td>$sivu[1]";
	print "<td><select name='$sivu[0]'>\n";

	print "<option label='piilotettu' value='0'"; if ($sivu[2] eq "0") {print " selected";}
	print ">piilotettu</option>\n";
	print "<option label='Käytössä' value='1'"; if ($sivu[2] eq "1") {print " selected";}
	print ">Käytössä</option>\n";
	if ($sivu[0] ne "index.data") {
	    print "<option label='Poista' value='poista'>Poista</option>\n";
	}
	print "</select>";
	
    }
    print "</table>";

    print "<input type='hidden' name='toiminto' value='editFiles'>\n";
    print "<input type='hidden' name='alue' value='$FORM{alue}'>\n";
    print "<input type='submit' value='Tallenna'>\n";
    print "</form>";
    print "</BODY></HTML>\n";
}



sub userOpen {
    open(FILE,"$pwfile") or error("Can't Find/Open Password file!");
    @filepass = <FILE>;
    close(FILE);
    open(NROS,"$rndnrofile") or error("Can't Find/Open CookieDB!");
    my(@rndnros) = <NROS>;
    close(NROS);
    $logged = "false";
    foreach $line(@rndnros) {
	chomp $line;
	@rnddata = split(/\|/,$line);
	if ($rnddata[0] == $cookie{rndnro} && $rnddata[1] eq $cookie{username}) {
	    $logged = "true";
	}
    }    

    if ($logged eq "true") {
    foreach $filepas(@filepass) {
	($usernm,$passwd,$emailaddr,$grp,$realname) = split(/\|/, $filepas);

	if($cookie{username} eq $usernm) {
	    $user=$usernm;

	    $usersEmail=$emailaddr;
	    $group=$grp;
	    $realName=$realname;
	}
    }
    }
    if ($group eq "admin") {$oikeudet = "ok";$admin = "true";}
    if($user eq ""){
	error("Tunnus tai salasana väärin!");
    }
}

sub loginForm {
    &open_areas;
    &writeHeader;
    &writeValikko;
    print "<form action='$cgiurl' method='post'>";
    print "<h3>Kirjaudu Extranetiin:</h3>";
    print "Käyttäjätunnus: <input type='text' name='user'><BR>\n";
    print "Salasana: <input type='password' name='passwd'><BR>\n";
    print "<input type='hidden' name='toiminto' value='getCookie'>";
    print "<input type='submit' value='Kirjaudu'><BR>\n";
    print "</form><BR>\n";
    &writeFooter;
}

sub getCookie {
    &userAuth;

    print "Set-Cookie: rndnro=$newrndnro; path=$shorturl\n";
    print "Set-Cookie: username=$FORM{user}; path=$shorturl\n";

    print "Content-type: text/html\n\n";
    print "<HTML><HEAD>\n";
    print "<TITLE>Sisäänkirjautuminen</TITLE>\n";
    print "<META HTTP-EQUIV='Refresh' CONTENT='1;URL=$cgiurl'></HEAD>";
    print "<BODY>";
    print "Olet kirjautumassa Extranetiin...";
    print "</BODY></HTML>\n";

}

sub userAuth {
    open(FILE,"$pwfile") or error("Can't Find/Open Password file!");
    @filepass = <FILE>;
    close(FILE);
	
    foreach $filepass(@filepass) {
	($usernm,$passwd,$emailaddr,$grp,$realname) = split(/\|/, $filepass);

	if($FORM{user} eq $usernm and ($FORM{passwd} eq $passwd)) {
	    $user=$usernm;

	    $usersEmail=$emailaddr;
	    $usersGroups=$grp;
	    $realName=$realname;
	}
    }
    if($user eq "") {
	error("Tunnus tai salasana väärin!");
    }
    $newrndnro = int(rand(10000));
    open(NROS, "$rndnrofile") or error("Cookie tarkistusnumerotiedoston kanssa ongelmia");
    @rndnros = <NROS>;
    close(NROS);
 #    message(@rndnros);
    open(NROS, ">$rndnrofile") or error("Cookie tarkistusnumerotiedoston kanssa ongelmia");
    print NROS "$newrndnro|$user\n";
# Vain kymmeneen asti, jotta vanhat unohtuneet poisloggaukset häviää ajallaan
    for($i=0;$i<9;$i++){
	print NROS $rndnros[$i];
    }
    close(NROS);
}


sub poistuOhjelmasta {
    open(NROS, "$rndnrofile") or error("Cookie tarkistusnumerotiedoston kanssa ongelmia");
    @rndnros = <NROS>;
    close(NROS);
 #    message(@rndnros);
    open(NROS, ">$rndnrofile");
    foreach $line(@rndnros){
	chomp $line;
	@rnddata = split(/\|/,$line);
	if (!($rnddata[0] == $cookie{rndnro} && $rnddata[1] eq $cookie{username})) {
	    print NROS "$line\n";
	}
    }	
    close(NROS);

    print "Set-Cookie: rndnro=; path=$shorturl\n";
    print "Set-Cookie: username=; path=$shorturl\n";

    print "Content-type: text/html\n\n";
    print "<HTML><HEAD>\n";
    print "<TITLE>Uloskirjautuminen</TITLE>\n";
    print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"0;URL=$log_out_url\"></HEAD>";
    print "<BODY>";
    print "Olet kirjautumassa ulos Extranetistä";
    print "</BODY></HTML>";
}

sub message {
	push @messages,@_;
}

sub submitEditPage {
    &open_areas;
    open(DATA,">$siteroot$data/$FORM{tiedosto}") or error("Tiedostoa ei löydy!");
    print DATA $FORM{body};
    close(DATA);
    open(FILES,"<$siteroot$data/index.files");
    @lines = <FILES>;
    close(FILES);

    open(FILES,">$siteroot$data/index.files");
    foreach $line(@lines) {
	chomp $line;
	@file = split(/\|/,$line);
	if ($file[0] eq $FORM{tiedosto}) {
	    print FILES "$file[0]|$FORM{title}|$file[2]|\n";
	}
	else {print FILES "$line\n";}
    }
    close(FILES);
    &editPage;
}

sub editPage {
    &open_areas;
    open(FILES,"<$siteroot$data/index.files");
    @lines = <FILES>;
    close(FILES);
    foreach $line(@lines) {
	@_ = split(/\|/,$line);
	if ($_[0] eq $FORM{tiedosto}) {$title = $_[1];}
    }
    print "Content-type: text/html\n\n";

    print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/DTD/loose.dtd\">";
    print <<ENDOFHTML;
<HTML>
  <HEAD>
    <TITLE>Edit page::</TITLE>
<style type="text/css">
<!--
#tallennus {
position: absolute;
top: 0px;
left: 0px;
 background: #FF0000;
 visibility: hidden;
}
#odota {
position: absolute;
top: 0px;
left: 0px;
 background: #FF0000;
 visibility: hidden;
}

-->
</style>  
<script type="text/javascript">
<!--
  var timer;
  function unsetInfo(){
    document.getElementById('tallennus').style.visibility = 'hidden';
  }
-->
</script>
  </HEAD>

ENDOFHTML
    print "<BODY onunload=\"javascript:opener.location = opener.location;\" ";

  if($FORM{'toiminto'} eq "submitEditPage" ) {
      print <<END;
onload="javascript:document.getElementById('tallennus').style.visibility = 'visible'; timer = setTimeout('unsetInfo();',3000);return true;"
END
}
print ">\n";

print <<ENDOFHTML;
<div id="tallennus">
Tiedosto tallennettu.
</div>
<div id="odota">
Odota, tiedostoa tallennetaan...
</div>
ENDOFHTML
    print "<h1>Muokkaat tiedostoa: $FORM{alue}/$FORM{tiedosto}</h1>";
    print "<form action=\"$cgiurl\" method=\"post\">";
    print "Title: <input type='text' size='40' name='title' value='$title'>";
    print "<textarea name='body' rows='30' cols='80' STYLE=\" font-family:  Courier, Courier New, Monaco;\" WRAP='virtual'>\n";
    open(DATA,"$siteroot$data/$FORM{tiedosto}");
    @lines = <DATA>;
    close(DATA);

    print @lines;
    print "</textarea><BR>\n";
    print "<input type='hidden' name='toiminto' value='submitEditPage'>\n";
    print "<input type='hidden' name='alue' value='$FORM{alue}'>\n";
    print "<input type='hidden' name='tiedosto' value='$FORM{tiedosto}'>\n";
    print "<input type='submit' value='Tallenna' onclick=\"javascript:document.getElementById('odota').style.visibility = 'visible';return true;\">\n";

    print "</BODY></HTML>\n";
}

sub viewPage {
    if ($FORM{alue} eq "") {$FORM{alue} = "etusivu";}
    &open_areas;
    &writeHeader;
    &writeValikko;
    &writeBody;
    &writeFooter;

}

sub writeBody {
    if ($type eq "html") {
	if ($FORM{tiedosto} eq "") {$FORM{tiedosto} = "index.data"} 
	open(DATA,"$siteroot$data/$FORM{tiedosto}");
	@lines = <DATA>;
	close(DATA);
	if ($lines[0] ne "") {
	   print "<div id=\"sisalto\">\n";
	    print @lines;
	    print "</div>\n";
	    open(INDEX,"$siteroot$FORM{alue}/index.files");
	    @files = <INDEX>;
	    close(INDEX);
	    if ($files[0] ne "") {
		print "<HR style=\"clear: both;\">\n<small> |";
		foreach $file (@files) {
		    @fileinfo = split(/\|/,$file);
		    if ($fileinfo[2] != 0) {
			if ($fileinfo[0] ne "$FORM{tiedosto}") {
			    
			    print " <A HREF=\"$cgiurl?alue=$FORM{alue}&tiedosto=$fileinfo[0]\">$fileinfo[1]</A> |";
			}
			else {
			    print " $fileinfo[1] |";
			}
		    }
		}
		print "</small>";
	    }
	}
	else {
	    print "<BR><BR>Sivut kesken..<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR>\n\n\n\n\n";
	}

	print "<small> ";
	print "<A HREF='#' onClick=linkWindow=window.open(\"$cgiurl?toiminto=editPage&alue=$FORM{alue}&tiedosto=$FORM{tiedosto}\",\"displayWindow\",\"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=750,height=650\");return false;'>Muokkaa sivua</A> | ";
	print "<A HREF='#' onClick=linkWindow=window.open(\"$cgiurl?toiminto=addPageForm&alue=$FORM{alue}\",\"displayWindow\",\"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=750,height=650\");return false;'>Lisää uusi alasivu</A> | ";
	print "<A HREF='#' onClick=linkWindow=window.open(\"$cgiurl?toiminto=listFiles&alue=$FORM{alue}\",\"displayWindow\",\"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=750,height=650\");return false;'>Listaa alueen sivut</A>";
	print " | <a href=\"?toiminto=poistu\">Poistu</a>";
	print "</small>\n";
    }
    elsif ($type eq "cgi") {
##Cgi-ajo jne
    }
    else {print "Vituiks meni!"}
}

sub open_areas {
    open(AREAS,"$area_file") or error("Vikaa areafilessä!");
    @areas = <AREAS>;
    close(AREAS);

    foreach $line(@areas) {
	@_ = split(/\|/, $line);
	if ($_[0] eq $FORM{alue}) {
	    $subtitle = $_[3];
	    $data= $_[1];
	    $type = $_[2];
	}
    }
  

}

sub lue_parametrit {
  if ( ($ENV{'REQUEST_METHOD'} eq 'POST') || ($ENV{'REQUEST_METHOD'} eq 'post') ) {
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    @cgiPairs = split(/\&/,$buffer);
  }

  elsif ($ENV{'QUERY_STRING'} ne "") {
    @cgiPairs = split(/\&/,$ENV{'QUERY_STRING'}); 
  }
  else {@cgiPairs = @ARGV;}

  #Arvot HASHiin välilyönnein erotettuna saman nimiset
  foreach $pair ( @cgiPairs ) {
       	($var,$val) = split("=",$pair);
       	$val =~ s/\+/ /g;
       	$val =~ s/%(..)/pack("c",hex($1))/ge;
       	$val =~ s/\|/ /g;
	$val =~ s/\r//g;
       	
       	## rivinvaihdot tageiksi
#		if ($var eq "body") {$val =~ s/\n/<BR>\n/g;}
		if ($FORM{$var} eq "") {$FORM{$var} = "$val";} else {$FORM{$var} = "$FORM{$var} $val";}
  }

  @nvpairs=split(/; /, $ENV{'HTTP_COOKIE'});
  foreach $pair (@nvpairs) {
      ($cookiename, $cookievalue) = split(/=/, $pair);
      $cookie{$cookiename} = $cookievalue;
  }
}

sub writeHeader {
print "Content-type: text/html\n\n";
print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/DTD/loose.dtd\">";
print "<HTML><HEAD>";
print "<TITLE>SUMA :: $subtitle</TITLE>";


print "<LINK REL=STYLESHEET HREF=\"$urlroot/tyylit.css\" TYPE=\"text/css\">";
print <<EndOfHtml;
</HEAD>
<body>
<div id="runko">
EndOfHtml
}



sub writeValikko {
    foreach $line(@areas) {
	@_ = split(/\|/, $line);
	if ($_[5] == 1 && $_[0] eq $FORM{alue}) {$alasivuja = 1;}
	if ($alasivuja) {
	    $valittu = "valikko1valittualasivuja";
	    $normaali = "valikko1alasivuja";
	}
	else {
	    $valittu = "valikko1valittu";
	    $normaali = "valikko1";
	}
    }
    print "<div id=\"ylavalikko\">\n";
    print "<ul>\n";
    foreach $line(@areas) {
	@_ = split(/\|/, $line);
 
##Valittu nappula
	if ($_[0] eq $FORM{alue}) {
	    print "<li class=\"current\"><a href=\"$progurl?alue=$_[0]\" name=\"$_[4]\" >$_[3]</a></li>\n";
   	}
	else {
##Normaali nappula
	    print "<li><a href=\"$progurl?alue=$_[0]\" name=\"$_[4]\" >";
	    print "$_[3]</a></li>\n";
	}
    }
    print "</ul>\n";
    print "</div>\n";
    if ($alasivuja == 1) {
	print "<div id=\"alavalikko\">\n";
	print "<ul>\n";
	open(INDEX,"$siteroot$FORM{alue}/index.files");
	@files = <INDEX>;
	close(INDEX);
	if ($files[0] ne "") {
	    $i = 0;
	    foreach $file (@files) {
		@fileinfo = split(/\|/,$file);
		if ($fileinfo[2] !=0) {
		    if ($fileinfo[0] eq $FORM{tiedosto} || ($FORM{tiedosto} eq "" && $i == 0)) {
			print "<li class=\"current\"><a href=\"$progurl?alue=$FORM{alue}&tiedosto=$fileinfo[0]\">$fileinfo[1]</a></li>\n";
		    }
		    else {
			print "<li><a href=\"$progurl?alue=$FORM{alue}&tiedosto=$fileinfo[0]\">$fileinfo[1]</a></li>\n";
		    }
		}
		$i++;
	    }
	}
	print "</ul>\n";
	print "</div>\n";
    }
}

sub error
{
    my($errmsg) = @_;
    print "Content-type: text/html\n\n";
    print "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/DTD/loose.dtd\">";
    print "<HTML><HEAD>";
    print "<TITLE>Virhe!</TITLE></HEAD>";
    print "<body><center><h2>VIRHE!</h2>";
    print "<p>$errmsg</p>\n";
    print "toiminto: $FORM{toiminto}";
    &writeFooter;
    exit;
}

sub writeFooter {
    print "<BR><IMG SRC=\"$urlroot/1x1empty.gif\" width=\"740\" height=\"1\" alt=\"pixel\">";
    print <<EndOfHtml;
</div>
<div style="text-align: center;"><small>mstahv ät utu.fi </small></div>
</body>
</html>
EndOfHtml

}







