#!/usr/bin/perl
#######################################################################################################
# #
# "prosoz.pl" - Grunddatei auf dem Webserver für die eGovernment-Funktionalität #
# #
# © 2003 PROSOZ Herten GmbH #
# #
# !!! Diese Datei darf nicht verändert werden !!! #
# #
#######################################################################################################
use CGI;
use CGI::Carp "fatalsToBrowser";
###################
$iss = ""; # Der Pfad auf dem ISS (incl "/" am Ende)
###################
use lib $iss."module"; # Erweitern der @INC-Liste um das Modul-Verzeichnis
use PConfig; # Modul mit Konfiguration einbinden
use Pallg; # Modul mit allgemeinen Fkt. einbinden
use XMLServ; # Modul für XML-Service-Fkt. einbinden
$sn = $ENV{"SCRIPT_NAME"};
$ua = $ENV{"HTTP_USER_AGENT"}; # Prüfen, ob der Browser auf einem PDA läuft
$Pallg::pda = 0;
if($ua =~ /Windows CE/)
{
$Pallg::pda = 1;
}
$h = new CGI; # Übergabeparameter auslesen
$act = $h->param("act");
$sid = $h->cookie(-name=>"SID"); # SID aus Cookie lesen
$param="";
mkdir $Conf_UplVerz if(!(-d $Conf_UplVerz)); # ggf. Upload-Verzeichnis erzeugen
if ($act eq "mail")
{ # Kontakt-Mail schicken
require Mail;
$name = $h->param("name");
$email = $h->param("email");
$message = $h->param("message");
$continue = $h->param("continue");
my $myMail = Mail->new();
$myMail->setFrom("bauordnungsamt\@lkspn.de");
$myMail->setTo($Conf_Email);
$myMail->setSubject("Nachricht von der Elektronischen Bauakte");
$myMail->setData("Name: $name");
$myMail->setData("Email: $email");
$myMail->setData("Message: $message");
$Output = $myMail->sendMail();
print "Location:$continue\n\n";
exit;
}
if ($act eq "logout" && $sid ne "")
{ # Logout-Seite erzeugen
print "Set-Cookie: SID=; path=/\n"; # Cookie mit SID löschen
my $XMLService = socketTools->new();
$XMLService->setParam("LOGOUT $sid");
$Output = $XMLService->sendRequest(0);
$act = "";
my @Eintraege;
if(-d $Conf_UplVerz)
{
opendir(DIR,"$Conf_UplVerz"); # Tmp-Dateien beim Logout löschen
@Eintraege = readdir(DIR);
closedir(DIR);
foreach (@Eintraege)
{
unlink($Conf_UplVerz."/".$_) if(substr($_,0,length($sid)) eq $sid);
}
}
if($Conf_LogoutLoc ne "")
{
print "Location:".$Conf_LogoutLoc."\n\n";
exit;
}
}
if($act eq "") # Start - Frameset erzeugen
{
$user = $h->param("user");
if($Pallg::pda == 0)
{
print "Content-Type: text/html\n\n";
if(-f $iss."module/Frame.pm")
{
require $iss."module/Frame.pm";
}
else
{
print "
".$Conf_AppTitel."".
"";
}
}
else
{
print "Location: $sn?act=loginpda&user=$user\n\n";
}
exit;
}
elsif($act eq "directlogin")
{
$user=$h->param("user");
$pwd=$h->param("pwd");
print "Content-Type: text/html\n\n";
if(-f $iss."module/Frame.pm")
{
require $iss."module/Frame.pm";
}
else
{
print "".$Conf_AppTitel."".
"".
"".
"\n".
"".
"".
"";
}
exit;
}
elsif ($act eq "loginpda")
{ # Startseite mit Loginfenster für PDA
$user=$h->param("user");
$Output = "".
"$user".
"";
XMLOut($Output,"start");
exit;
}
elsif ($act eq "mainpda")
{
$user = $h->param("user");
$pwd = $h->param("pwd");
my $XMLService = socketTools->new();
$XMLService->setParam("LOGIN $user $pwd");
$Output = $XMLService->sendRequest();
$Output =~ //g; # SID auslesen
$Treffer = pos($Output);
$sid = substr($Output,$Treffer,36);
print "Set-Cookie: SID=".$sid."; path=/\n"; # Cookie mit SID setzen
my $XMLService = socketTools->new();
$XMLService->setParam("GETDATA ".$sid."00001000009");
my $Xml = $XMLService->sendRequest();
XMLOut($Xml,"meineaz");
exit;
}
if ($act eq "login")
{ # Startseite mit Loginfenster
$hua = $ENV{"HTTP_USER_AGENT"};
$xml = (($hua =~ /MSIE 6/) || $Conf_HTML == 1) ? 1 : 0;
$user=$h->param("user");
$Output = "".
"$user".
"$xml".
"";
XMLOut($Output,"start");
exit;
}
if ($act eq "oben")
{ # Kopfzeile erzeugen
$Output = "";
$Output .= "";
XMLOut($Output,"kopf");
exit;
}
if ($act eq "chpwd")
{ # Seite zum Passwort ändern
$Output = "0";
my $XMLService = socketTools->new();
$XMLService->setParam("GETUSERDATA $sid"); # Benuterdaten einfügen
$Output .= $XMLService->sendRequest();
$Output .= "";
XMLOut($Output,"chpwd");
exit;
}
if ($act eq "datenschutz") # DATENSCHUTZSEITE LKSPN
{
$xml = (($hua =~ /MSIE 6/) || $Conf_HTML == 1) ? 1 : 0; # Seite zum Datenschutz
$Output ="0";
XMLOut($Output,"datenschutz");
exit;
}
if ($act eq "kommunikation") # Seite zum Kommunikationshinweis
{
$Output ="0";
XMLOut($Output,"kommunikation");
exit;
}
if ($act eq "navi")
{ # Allgemeine Navigation erzeugen
$Output = "";
if($sid ne "")
{
my $XMLService = socketTools->new();
$XMLService->setParam("GETNAVI $sid"); # Navigation holen
$Output .= $XMLService->sendRequest();
$XMLService->setParam("GETUSERDATA $sid"); # Benutername einfügen
$Output .= $XMLService->sendRequest();
$Output .= "0";
}
else
{
$Output .= "1";
}
$Output .= "";
XMLOut($Output,"navi");
}
if ($act eq "checknewuser")
{ # Neuen User prüfen
$login = $h->param("login"); # Daten einlesen
$vorn = $h->param("vorn");
$nachn = $h->param("nachn");
$email = $h->param("email");
$str = $h->param("str");
$hnr = $h->param("hnr");
$plz = $h->param("plz");
$ort = $h->param("ort");
$pwd1 = $h->param("pwd1");
$pwd2 = $h->param("pwd2");
$az = $h->param("az");
$tel = $h->param("tel");
$fax = $h->param("fax");
@error[0] = CheckValue($login,1,20); # Daten auf Gültigkeit prüfen
@error[1] = CheckValue($vorn,1,50);
@error[2] = CheckValue($nachn,1,50);
@error[3] = CheckValue($email,1,100);
@error[4] = CheckValue($str,1,50);
@error[5] = CheckValue($hnr,1,10);
@error[6] = CheckValue($plz,5,5);
@error[7] = CheckValue($ort,1,50);
if(($pwd != "" && $Conf_NewUserMode == 2) || $Conf_NewUserMode == 1)
{
if($Conf_PassLen > 0)
{
@error[8] = CheckValue($pwd1,$Conf_PassLen,30);
}
else
{
@error[8] = CheckValue($pwd1,7,30);
}
}
#if(($tel != "" && $Conf_NewUserMode == 2) || $Conf_NewUserMode == 1)
#{
# @error[9] = CheckValue($tel,1,30);
#}
#if(($fax != "" && $Conf_NewUserMode == 2) || $Conf_NewUserMode == 1)
#{
# @error[10] = CheckValue($fax,1,30);
#}
if($pwd1 ne $pwd2)
{
@error[8] = "prüfen";
}
if(@error[0] ne "" || @error[1] ne "" || @error[2] ne "" ||
@error[3] ne "" || @error[4] ne "" || @error[5] ne "" ||
@error[6] ne "" || @error[7] ne "" || @error[8] ne "" ||
@error[9] ne "" || @error[10] ne "")
{ # Fehler bei der Eingabe
$Output = CheckNewUser();
XMLOut($Output,"newuser");
exit;
}
else # Prüfung ok
{
if($Conf_NewUserMode == 1)
{
$xml = "".
"$login".
"$pwd1".
"$vorn".
"$nachn".
"$email".
"$str".
"$hnr".
"$plz".
"$ort".
"$tel".
"$fax".
"";
$xml = umlauterev($xml);
my $XMLService = socketTools->new();
$XMLService->setParam("CREATEUSEREXT $xml");
$Output = $XMLService->sendRequest(0);
if (lc(substr($Output,0,7)) eq "") # Fehler beim Erzeugen
{
if($Output =~ /300/) # Benutzername existiert bereits
{
@error[0] = "existiert bereits";
$Output = CheckNewUser();
XMLOut($Output,"newuser");
exit;
}
else
{
XMLOut($Output,"error");
}
exit;
}
else # Benutzer erzeugt
{
$act="main"; # Prüfung ok - Anmeldung erfolgt
$user = $login;
$pwd = $pwd1;
$param = "newuser";
}
}
else
{
require Mail;
use Socket;
$hostip = gethostbyaddr(inet_aton($ENV{'SERVER_ADDR'}), AF_INET);
$hostip =~ s/[\n\r]//g;
my $SB_Mail = Mail->new();
$SB_Mail->setFrom("bauordnungsamt\@lkspn.de");
$SB_Mail->setTo($Conf_Email);
$SB_Mail->setSubject("Neuanmeldung für die Bauen-Online");
$SB_Mail->setData("Login: ".umlauterev($login));
$SB_Mail->setData("Passwort: ".umlauterev($pwd1));
$SB_Mail->setData("Name: ".umlauterev($vorn)." ".umlauterev($nachn));
$SB_Mail->setData("Email: ".umlauterev($email));
$SB_Mail->setData("Straße: ".umlauterev($str)." $hnr");
$SB_Mail->setData("Ort: $plz ".umlauterev($ort));
$SB_Mail->setData("Aktenzeichen: $az");
$Nix = $SB_Mail->sendMail();
$Output = "".
"$vorn $nachn".
"";
XMLOut($Output,"neuanm");
}
}
}
if ($act eq "main")
{
if($param ne "newuser")
{
$user = $h->param("user");
$pwd = $h->param("pwd");
}
my $XMLService = socketTools->new();
$XMLService->setParam("LOGIN $user $pwd");
$Output = $XMLService->sendRequest();
if(lc(substr($Output,0,7)) eq "")
{
XMLOut($Output,"error");
exit;
}
$Output =~ //g; # SID auslesen
$Treffer = pos($Output);
$sid = substr($Output,$Treffer,36);
print "Set-Cookie: SID=".$sid."; path=/\n"; # Cookie mit SID setzen
my $Xml = "";
my $XMLService = socketTools->new();
$XMLService->setParam("GETUSERDATA $sid");
$Xml .= $XMLService->sendRequest();
$Xml .= "";
XMLOut($Xml,"main");
exit;
}
if ($act eq "newuser")
{ # Neuen User registrieren
$Output = CheckNewUser();
XMLOut($Output,"newuser");
exit;
}
if($h->param("type") eq "public" && $sid eq "")
{
$sid="abcdefghijklmnopqrstuvwxyz1234567890";
}
##################### Ab hier geht nichts mehr ohne SID! ######################
if($sid eq "")
{
$Output = error(700,"Dieser Aufruf ist ohne angemeldete Session nicht erlaubt");
XMLOut($Output,"error");
}
elsif ($act eq "dochpwd")
{ # Passwort ändern
$oldpwd = $h->param("oldpwd");
$newpwd1 = $h->param("newpwd1");
$newpwd2 = $h->param("newpwd2");
$uid = $h->param("uid");
if($newpwd1 ne $newpwd2)
{
$Output = "1$uid";
XMLOut($Output,"chpwd");
}
elsif(length($newpwd1) < $Conf_PassLen)
{
$Output = error(701,"Das eingegebene Kennwort ist zu kurz");
XMLOut($Output,"error");
}
else
{
my $XMLService = socketTools->new();
$XMLService->setParam("CHANGEPWD $oldpwd$newpwd1$uid");
$Output = $XMLService->sendRequest();
XMLOut($Output,"answer");
}
exit;
}
elsif($act eq "key")
{ # Daten aus Produktmodulen ausgeben
$key = $h->param("key");
$folge = $h->param("folge");
$ProdID = $folge ne "" ? substr($folge,0,5) : substr($key,0,5); # Produkt-ID aus Schlüssel holen
if(!(-f $iss."module/P".$ProdID.".pm")) # Produktmodul vorhanden?
{
$Output = error(703,"Das für diesen Aufruf erforderliche Produktmodul ist nicht vorhanden");
XMLOut($Output,"error");
exit;
}
require $iss."module/P".$ProdID.".pm"; # Produktmodul einbinden
eval("P".$ProdID."::SonderAufruf(\"$sid\",\"$key\",\"$folge\");"); # Sonderaufruf (z.B. Download ohne XML-Ausgabe)
$XSLDoc = eval("P".$ProdID."::GetXSL(\"$key\",\"$folge\", \"$sid\");"); # XSL-Dokument finden
$Aufruf = eval("P".$ProdID."::GetAufruf(\"$sid\",\"$key\",\"$folge\");"); # Aufruf für die Socket-Verbindung holen
if($Aufruf eq "")
{ # Ohne Aufruf den DirectOutput holen (z.B. Suchmaske)
$Output = eval("P".$ProdID."::DirectOutput(\"$sid\",\"$key\",\"$folge\");");
}
else
{
my $XMLService = socketTools->new();
$XMLService->setParam($Aufruf); # Daten holen
$Output = $XMLService->sendRequest();
}
$Pallg::Zwischenspeicher = $Output;
eval("P".$ProdID."::SonderAufruf2(\"$sid\",\"$key\",\"$folge\");"); # Sonderaufruf2 (z.B. XML Zwischenspeichern)
writelog("Output: ".$Output." XSLDoc: ".$XSLDoc);
XMLOut($Output,$XSLDoc);
exit;
}
else
{
$Output = error(704,"Ungültiger Aufruf"); # Ungültiger Aufruf
XMLOut($Output,"error");
}
####################### F u n k t i o n e n ################################
sub CheckNewUser # XML für CheckNewUser erzeugen
{
my $Output = "".
"$login".
"$vorn".
"$nachn".
"$email".
"$str".
"$hnr".
"$plz".
"$ort".
"".
"$error[0]".
"$error[1]".
"$error[2]".
"$error[3]".
"$error[4]".
"$error[5]".
"$error[6]".
"$error[7]".
"$error[8]".
"".
"";
return $Output;
}