summaryrefslogtreecommitdiff
path: root/0.2.1
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2013-04-06 13:14:47 +0200
committerPaul Buetow <paul@buetow.org>2013-04-06 13:14:47 +0200
commit630af0ed6c0af69c7df2e45aef7a87722a3c00c0 (patch)
treead76f850278b090f7e5c26561035d19c320400cc /0.2.1
parent2860b03f00e48264ed15c132ad90b240ebe6070b (diff)
tagging ychat-perl-legacyychat-perl-legacy
Diffstat (limited to '0.2.1')
-rw-r--r--0.2.1/HTDOCS.PL219
-rw-r--r--0.2.1/INDEX.PL339
-rw-r--r--0.2.1/INSTALL.txt83
-rw-r--r--0.2.1/LIESMICH.txt24
-rw-r--r--0.2.1/bar.gifbin0 -> 231 bytes
-rw-r--r--0.2.1/config.pm296
-rw-r--r--0.2.1/help_html616
-rw-r--r--0.2.1/logs_html391
-rw-r--r--0.2.1/main.pl555
-rw-r--r--0.2.1/main2.pl502
-rw-r--r--0.2.1/push.pl85
-rw-r--r--0.2.1/unten.gifbin0 -> 662 bytes
-rw-r--r--0.2.1/yChat.jpgbin0 -> 50407 bytes
13 files changed, 3110 insertions, 0 deletions
diff --git a/0.2.1/HTDOCS.PL b/0.2.1/HTDOCS.PL
new file mode 100644
index 0000000..cc2ae41
--- /dev/null
+++ b/0.2.1/HTDOCS.PL
@@ -0,0 +1,219 @@
+#!/usr/bin/perl -w
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "help_html") {
+ &printfile("data/htdocs/help_html","Alle Chatbefehle");
+} elsif ($var eq "menu_html") {
+ &menu_html;
+} elsif ($var eq "werda_html") {
+ &werda_html;
+} elsif ($var eq "logs_html") {
+ &logs_html;
+} elsif ($var eq "view_sulogs_html") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ &start_html("Oberwächter-Logdateien");
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>";
+ &printfile($tmp);
+ print "</div></body></html>";
+ }
+} elsif ($var eq "view_logs_html") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ &printfile($tmp,$tmp,"log");
+ }
+} elsif ($var eq "superuser_html") {
+ &superuser_html;
+} else {
+ print
+ $q->start_html(-bgcolor=>"000000"),
+ $q->end_html;
+}
+
+sub menu_html {
+ if ($tmp eq "quit") {
+ print
+ $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" );
+ sleep 1;
+ &remove_online($alias);
+ &secure_removeip($alias);
+ unlink("data/msgs/$alias");
+ }
+ &start_html("Menü","menu");
+print <<END;
+ <center>
+ <div>
+ [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>]
+ [<a href="main2.pl?var=alias_html&alias=$alias&tmp=$alias" target="DeinProfil">Dein Profil</a>]
+ [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>]
+ [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Chat-Optionen</a>]
+ [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzerliste</a>]
+ [<a href="htdocs.pl?var=help_html" target="Befehle">Chat-Befehle</a>]
+ [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Benutzerboard</a>]
+ [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>]
+ [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logdateien</a>]
+ [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>]
+ [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Chat verlassen</a>]
+ </div>
+ </center>
+</body>
+</html>
+END
+}
+
+
+sub werda_html { # Anzeige, wer eingelogt ist.
+ &start_html("Wer ist da?");
+ print <<END;
+<div>
+ $alias, schön daß Du hier bist :-)
+</div>
+<hr>
+<div>
+ Folgende Personen befinden sich im Chat:
+</div>
+<br>
+<div>
+END
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ my $room = $_;
+ &list_dir("data/online/rooms/$room",2);
+ local $nr = $#dir2-1;
+ print $q->b( $_ ),
+ "($nr)",
+ $q->br;
+ foreach(@dir2) {
+ if ($_ ne ".." && $_ ne ".") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " ";
+ }
+ }
+ print $q->br, $q->br;
+ }
+ }
+ print
+ "</div>",
+ $q->end_html;
+}
+
+sub logs_html {
+ &secure_checkip($alias);
+ &start_html("Logdateien");
+ print <<END;
+<div>
+ Hier befinden sich alle Logdateien
+</div>
+<hr>
+END
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ if ($hirachie eq "ow") {
+ print $q->div( "Folgende Logdateien können nur von Oberwächtern (OW) gelesen werden" );
+ &printfile("data/htdocs/logs_html");
+ &list_dir("data/logs/ow");
+ my @sortedir = sort(@dir);
+ foreach(@sortedir) {
+ if (-f "data/logs/ow/$_") {
+ print $q->a( { -href=>"htdocs.pl?var=view_sulogs_html&alias=$alias&tmp=data/logs/ow/$_",
+ -target=>$_},
+ "$_" ).
+ " ",
+ }
+ }
+ print $q->hr;
+ }
+ print $q->div( "Folgende Logdateien können nur von Wächtern und Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ),
+ $q->br;
+ &list_dir("data/logs");
+ my @sortedir = sort(@dir);
+ foreach(@sortedir) {
+ if (-f "data/logs/$_") {
+ print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_",
+ -target=>"_new" },
+ "$_" ),
+ " ";
+ }
+ }
+ if ($hirachie eq "wa") {
+ print $q->hr,
+ $q->div( "Oberwächter können zusätzlich die Systemlogdateien lesen. Du bist allerdings ein \"Wächter\" und ",
+ " bist nicht dazu berechtigt " ),
+ $q->br;
+ &printfile("data/htdocs/logs_html");
+ }
+ } else {
+ print $q->div( "Logdateien können nur von Oberwächtern (OW) und von Wächtern (WÄ) gelesen werden. Du bist jedoch ein ",
+ "\"Normaler Chatter\". Wächter können alles nachlesen, was öffentlich gechattet wurde. Oberwächter ",
+ "können folgende Systemlogdateien zusätzlich lesen:" ),
+ $q->hr;
+ &printfile("data/htdocs/logs_html");
+ }
+ print
+ $q->end_html;
+}
+
+sub superuser_html { # Zeigt an, wer Superuser ist
+ &start_html("Superuser");
+ print "<div>Hallo $alias. Du bist als ";
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ print
+ $q->b( "Oberwächter" ),
+ " (OW) eingetragen.</div>",
+ $q->hr;
+ } elsif ( $hirachie eq "wa") {
+ print
+ $q->b( "Wächter" ),
+ " (WÄ) eingetragen.</div>",
+ $q->hr;
+ } else {
+ print
+ $q->b( "normaler Chatter" ),
+ " (NC) eingetragen.</div>",
+ $q->hr;
+ }
+ my $nrow = $#ows+1;
+ print
+ "<div>",
+ $q->b( "OW" ),
+ "s ($nrow Stück)";
+ foreach(@ows) {
+ print
+ $q->font( { -color=>"FFA500" },
+ " ".$_);
+ }
+ my $nrwa = $#was+1;
+ print
+ "</div>",
+ $q->hr,
+ "<div>",
+ $q->b( "WÄ" ),
+ "s ($nrwa Stück)";
+ foreach(@was) {
+ print
+ $q->font( { -color=>"FFA500" },
+ " ".$_);
+ }
+print <<END;
+<hr>
+ Die jeweiligen Fähigkeiten der Oberwächter (OW) und der Wächter (WÄ) sind unter
+ "<a href="htdocs.pl?var=help_html">Chat-Befehle</a>"
+ dokumentiert.
+</div>
+</body>
+</html>
+END
+} \ No newline at end of file
diff --git a/0.2.1/INDEX.PL b/0.2.1/INDEX.PL
new file mode 100644
index 0000000..1533656
--- /dev/null
+++ b/0.2.1/INDEX.PL
@@ -0,0 +1,339 @@
+#!/usr/bin/perl -w
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header; # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUFGERUFEN WERDEN?##
+#####################################
+if ($var eq "create_alias_html") {
+ &create_alias_html;
+} elsif ($var eq "create_alias") {
+ &create_alias;
+} elsif ($var eq "login_html") {
+ &login_html;
+} elsif ($alias eq "") {
+ &login_html;
+} else {
+ &checklogin;
+}
+
+sub login_html { # Erste Startseite
+local $counter = undef;
+&read_file("data/count");
+ $counter = <DATEI>;
+close DATEI;
+$counter++;
+&write_file_new("data/count");
+ print DATEI $counter;
+close DATEI;
+&start_html("Created by Paul C. Bütow 2k");
+print <<END;
+ <center>
+ <table width=400>
+ <tr>
+ <td>
+ <b>
+ <div>
+ $title
+ <img src="$gfxpath/yChat.jpg">
+ </div>
+ </b>
+END
+ if ($tmp eq "true") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Wahrscheinlich existiert Dein Alias "$alias" nicht,
+ <br>
+ Du hast Dich verschrieben oder das Passwort ist falsch.
+ <br>
+ Versuch es erneuert !
+ </div>
+END
+ } elsif ($tmp eq "quit") {
+print <<END;
+ <div>
+ Du hast soeben den Chat verlassen.
+ <br>
+ Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)
+ </div>
+END
+ } elsif ($tmp eq "banned") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein Alias "$alias" wurde verbannt.
+ <br>
+ Z.z. kannst Du Dich leider nicht in den Chat einloggen.
+ <br>
+ Sorry!
+ </div>
+END
+ } elsif ($tmp eq "kick") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Du wurdest soeben aus dem Chat katapultiert!
+ <br>
+ Schlechtes Verhalten mag die Ursache hierfür sein.
+ <br>
+ Sorry!
+ </div>
+END
+ } elsif ($var eq "create_alias") {
+print "<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf \"Los Geht's\" klicken :-)</div>";
+ } else {
+print <<END;
+ <div>
+ Herzlich willkommen!
+ <br>
+ Einfach Daten eingeben und auf "Los Geht's" klicken :-)
+ </div>
+END
+ &log("system","\"first_http_ok\"");
+ }
+print <<END;
+ <hr>
+ <form action="index.pl">
+ <input type="hidden" name="tmp" value="true">
+ <table>
+ <tr>
+ <td>
+ <div>
+ Dein Alias:
+ <br>
+ <input name="alias" value="$alias">
+ </div>
+ </td>
+ <td>
+ <div>
+ Dein Passwort:
+ <br>
+ <input type="password" name="id" value="$id">
+ </div>
+ </td>
+ </tr>
+ </table>
+ <br>
+ <br>
+ <div>
+ Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!
+ </div>
+ <br>
+ <table>
+ <tr>
+ <td>
+ <font color="ffffff">
+ <input type="submit" value="Los geht's!">
+ </font>
+ </form>
+ </td>
+ <td>
+ <form action="index.pl">
+ <input type="hidden" name="var" value="create_alias_html">
+ <font color="ffffff">
+ <input type="submit" value="Registrieren">
+ </font>
+ </form>
+ </td>
+ </tr>
+ </table>
+ <hr>
+ <div>
+ yChat befindet sich momentan noch in der Entwicklungsphase !
+ <br>
+ Fragen gehen an Paul Bütow (
+ <a href="mailto:paul\@buetow.oxg.de">
+ paul\@buetow.oxg.de
+ </a>
+ ) :-)
+ <br>
+ <br>
+ Diese Seite wurde schon $counter mal aufgerufen.
+ </td>
+ </tr>
+ </table>
+ </center>
+</body>
+</html>
+END
+}
+
+
+sub create_alias_html { # HTML-Form für Erstellung eines neuen Benutzers.
+my $reload = $_[0];
+&start_html("Registration");
+print <<END;
+ <center>
+ <table width=400>
+ <tr>
+ <td>
+END
+ if ($reload eq "alias_exists") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Der von Dir gewählte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit
+ einem anderen Benutzernamen !
+ </div>
+ <hr>
+END
+} elsif ($reload eq "pw_wrong") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Deine beiden Passworteingaben stimmen nicht überein. Bitte geb das Passwort erneuert an um sicherzugehen, daß
+ kein falsches Passwort abgespeichert wird !
+ </div>
+ <hr>
+END
+} else {
+print <<END;
+ <div>
+ Hier kannst Du Dich registrieren. Bitte beachte, daß die Passworteingabefelder übereinstimmen!
+ </div>
+ <hr>
+END
+}
+print <<END;
+ <form action="index.pl">
+ <input type="hidden" name="var" value="create_alias">
+ <div>
+ Dein Alias:
+ <font color="ffa500">
+ (Muß angegeben werden)
+ </font>
+ <br>
+ <input name="alias" VALUE="$alias">
+ </div>
+ <br>
+ <div>
+ Dein gewünschtes Passwort:
+ <br>
+ <input type="password" name="id" value="$id">
+ </div>
+ <br>
+ <div>
+ Geb hier Dein Passwort erneuert ein:
+ <br>
+ <input type="password" name="tmp">
+ </div>
+ <br>
+ <font color=ffffff>
+ <input type="submit" value="Registrieren">
+ </font>
+ <br>
+ </form>
+ <hr>
+ <div>
+ Um den Chat zu betreten müssen die Daten nach der Registration auf der Startseite erneuert bestätigt werden !
+ </div>
+ </td>
+ </tr>
+ </table>
+</center>
+</body>
+</html>
+END
+}
+
+sub checklogin { # Überprüfen, ob die Login-Daten korrekt sind.
+ my $lognotexists = "true";
+ &list_dir("data/user/options");
+ for (my $i=0; $i<=$#dir; $i++) {
+ if ($dir[$i] eq $alias) {
+ &read_file("data/user/options/$alias");
+ @datei = <DATEI>;
+ close DATEI;
+ chomp($datei[0]);
+ if ($datei[0] eq $id) {
+ &read_file("data/ban"); # Überprüfen, ob Alias verbannt ist
+ @banned = <DATEI>;
+ close DATEI;
+ foreach(@banned) {
+ if ($_ eq "$alias\n") {
+ &log("system","\"login_alias_banned\"");
+ $tmp = "banned";
+ &login_html();
+ exit;
+ }
+ }
+ $col = $datei[1];
+ $secol = $datei[2];
+ &secure_setip($alias);
+ &frameset_html;
+ exit;
+ } else {
+ &log("system","\"login_pw_wrong\"");
+ $lognotexists = "false";
+ }
+ }
+ }
+ if ($lognotexists eq "true") {
+ &log("system","\"login_alias_notexists\"");
+ }
+ &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite.
+}
+
+sub create_alias { # Erstellung eines neuen Benutzers.
+ if ($alias =~ /[\W]/ || $alias eq "") {
+ &log("system","\"reg_alias_prohibited\"");
+ &create_alias_html("alias_prohibited");;
+ exit;
+ } elsif ($id ne $tmp) {
+ &log("system","\"reg_pw_wrong\"");
+ &create_alias_html("pw_wrong");
+ exit;
+ }
+ &list_dir("data/user/options");
+ for (my $i=0; $i<=$#dir; $i++) {
+ if ($dir[$i] eq $alias) {
+ &log("system","\"reg_alias_exists\"");
+ &create_alias_html("alias_exists");
+ exit;
+ }
+ }
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n";
+ close DATEI;
+ &zeit;
+ &list_dir("data/user/options");
+ my $number = $#dir-1;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias [$number] hat sich soeben als neuer Benutzer registriert :-) ...</font></i>");
+ &log("system","\"reg_ok\"");
+ &login_html;
+}
+
+sub frameset_html {
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - Created by Paul C. Bütow 2k
+ </title>
+ </head>
+<frameset border=0 frameborder=0 framespacing=0 rows="50,1,*,55">
+ <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" scrolling="no">
+ <frame name="inroom" src="main.pl?var=inroom_html&alias=$alias&room=$room" scrolling="no">
+ <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen">
+ <frame name="input" src="main.pl?alias=$alias&var=input_html&room=$room&col=$col&secol=$secol&tmp=login" scrolling="no">
+</frameset>
+</html>
+END
+}
diff --git a/0.2.1/INSTALL.txt b/0.2.1/INSTALL.txt
new file mode 100644
index 0000000..16cfd0a
--- /dev/null
+++ b/0.2.1/INSTALL.txt
@@ -0,0 +1,83 @@
+#############################################################################
+## yChat.de Version 0.2.1 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => 500 Configurationsdatei ("Shared subs")
+htdocs.pl => 101 HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => 101 Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => 101 Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => 101 Skript für editieren der Benutzerdaten etc.
+push.pl => 101 Server-Push-Routine
+LIESMICH.txt => Beinhaltet wichtige Informationen
+INSTALL.txt => Dieses Dokument
+
+Folgende Verzeichnisse müssen erstellt werden (chmod 777 sollte
+funktionieren):
+
+- Hier befinden sich alle für den Chat notwenidgen Daten:
+ ./cgi-bin/yChat/data/*
+
+- Hier befinden sich alle für den Chat notwendigen HTML-Dokumente:
+ ./cgi-bin/yChat/data/htdocs/*
+
+ Folgende Dateien müssen in das "data/htdocs" verzeichnis bewegt werden:
+
+ help_html => 101 Hilfedatei
+ logs_html => 101 Logbeschreibung
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier befinden sich alle Chat-Optionen und Passwörter der registrierten
+ Benutzer:
+ ./cgi-bin/yChat/data/user/options/*
+
+- Hier befinden sich alle Benutzerprofile der Benutzer:
+ ./cgi-bin/yChat/data/user/profiles/*
+
+- Hier befinden sich alle Gästebucheinträge der Benutzer:
+ ./cgi-bin/yChat/data/user/gbooks/*
+
+- Hier befinden sich alle Daten zu den aktuellen Chaträumen und User die online sind
+ ./cgi-bin/yChat/data/online/*
+
+- Hier befinden sich alle offnenen Räume
+ ./cgi-bin/yChat/data/online/rooms/*
+
+- Hier befinden sich die Chatter, die sich in den jew. Räumen befinden
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper \ No newline at end of file
diff --git a/0.2.1/LIESMICH.txt b/0.2.1/LIESMICH.txt
new file mode 100644
index 0000000..93db3ce
--- /dev/null
+++ b/0.2.1/LIESMICH.txt
@@ -0,0 +1,24 @@
+#############################################################################
+## yChat.de Version 0.2.1 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hallo Du,
+vielen Dank, daß Du Dir die Zeit nimmst, dieses Dokument sorgfältig zu
+lesen. Die grundliegende Idee von yChat.de ist die, ein funktionsfähiges,
+einfach zu bedienendes und zu installierendes Chat-System zu bieten. yChat
+ist keineswegs Free- oder Shareware und darf somit NICHT ohne die Erlaubnis
+vom Autor weitergegeben oder kopiert werden.
+Diejenigen, die dazu befugt sind, yChat vom eigenen Server aus zu betreiben,
+dürfen keineswegs die Copyright-Hinweise des Systems so manipulieren, daß
+diese für den Besucher nicht mehr ersichtlich sind.
+Weitergabe des yChat-Systems darf nur durch Einwilligung des Autors
+durchgeführt werden. Dies geschieht nur gegen entsprechende Gegenleistungen
+wie z.B. Bannerwerbung für www.yChat.de auf viel Besuchten Seiten (
+Seitenbesuche müssen nachgewiesen werden ), Werbung in vielgelesenen
+Newslettern o.Ä. . Allerdings sollte dem Autor vorher um Erlaubnis geboten
+werden. Gegen Geld ist das yChat-System noch nicht zu haben. Allerdings
+wird der Preis in etwa DM 500,- betragen. Für Fragen und Antworten bitte an
+die obrige E-Mail Adresse wenden.
+Installationshinweise findest Du in der datei INSTALL.txt
+MfG
+Paul C. Bütow aka Snooper
diff --git a/0.2.1/bar.gif b/0.2.1/bar.gif
new file mode 100644
index 0000000..61d02b7
--- /dev/null
+++ b/0.2.1/bar.gif
Binary files differ
diff --git a/0.2.1/config.pm b/0.2.1/config.pm
new file mode 100644
index 0000000..3baeb56
--- /dev/null
+++ b/0.2.1/config.pm
@@ -0,0 +1,296 @@
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "20.11.2k";
+$version = "0.2.1";
+$title = "yChat.de ($version)";
+$gfxpath = "http://localhost/yChat/";
+#$gfxpath = "../../gfx/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ print @file2print;
+}
+
+
+sub start_html { # Der HEADER einer HTML-Datei
+print <<END;
+<html>
+ <head>
+ <title>
+ $title - $_[0]
+ </title>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("msg","$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($method,$msg2log) = @_;
+ &zeit;
+ if ( $method eq "msg") {
+ $log = "data/logs/$room-$day.$month.$year";
+ } elsif ($method eq "logins") {
+ $log = "data/logs/ow/logins-$day.$month.$year";
+ $syslog = "data/logs/ow/system-$day.$month.$year";
+ } elsif ($method eq "system") {
+ $log = "data/logs/ow/system-$day.$month.$year";
+ }
+ &write_file($log);
+ if ($method eq "msg") {
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ } elsif ($method eq "logins") {
+ print DATEI "($day.$month.-$hours:$min:$sec) User: $alias IP#: $ENV{'REMOTE_ADDR'} Agent: $ENV{'HTTP_USER_AGENT'}\n<br>";
+ close DATEI;
+ &write_file($syslog);
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ } elsif ($method eq "system") {
+ print DATEI "($day.$month.-$hours:$min:$sec) $msg2log User: $alias IP#: $ENV{'REMOTE_ADDR'}\n<br>";
+ }
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } else {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ &log("system","\"logout_$__ok\"");
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_");
+ &list_dir("data/online/rooms/$_",2);
+ rmdir("data/online/rooms/$_") if ($#dir2 = 1);
+ }
+ }
+}
+
+sub secure_setip { # Beim einloggen die IP-Nummer in dat/ip eintragen.
+ my $alias2set = $_[0];
+ &write_file_new("data/online/ident/$alias2set");
+ print DATEI $ENV{'REMOTE_ADDR'};
+ close DATEI;
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my $alias2check = $_[0];
+ &read_file("data/online/ident/$alias2check");
+ my $ip2check = <DATEI>;
+ close DATEI;
+ if ($ip2check ne $ENV{'REMOTE_ADDR'}) {
+ &log("system","\"secure_ip\"");
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ exit;
+ }
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = "nc";
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+
+
diff --git a/0.2.1/help_html b/0.2.1/help_html
new file mode 100644
index 0000000..79b94fa
--- /dev/null
+++ b/0.2.1/help_html
@@ -0,0 +1,616 @@
+<div>
+ Alle Chat-Befehle:
+</div>
+<hr>
+<table width=100% bgcolor=555555>
+ <tr>
+ <th bgcolor=666666>
+ <div>
+ SU
+ </div>
+ </th>
+ <th bgcolor=666666>
+ <div>
+ Befehl
+ </div>
+ </th>
+ <th bgcolor=666666>
+ <div>
+ Beschreibung
+ </div>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/about
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt aktuelle Version und andere Infos der Community an
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/away
+ <font color=red>
+ Nachricht
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Abmelden mit einer
+ <font color=red>
+ Abmeldenachricht
+ </font>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/clear
+ </div>
+ </td>
+ <td>
+ <div>
+ Bildschirm wird gelöscht
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/col
+ <font color=red>
+ XXXXXX
+ </font>
+ <font color=ffa500>
+ XXXXXX
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Abmelden mit einer
+ Farbe/n (
+ <font color=red>
+ Namensfarbe
+ </font>/
+ <font color=ffa500>
+ Textfarbe
+ </font>
+ ) wechseln. Angabe in Hexadezimal. Wird
+ <font color=ffa500>
+ Textfarbe
+ </font>
+ nicht angegeben, dann hat der Text die
+ <font color=red>
+ Namensfarbe
+ </font>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+ /date
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt aktuelles Datum und Urzeit an
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/j
+ <font color=red>
+ Raumname
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Raum wechseln/erstellen
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+ /ju
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ in den Raum wechseln/folgen, wo sich
+ <font color=red>
+ Alias
+ </font>
+ befindet.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/m
+ </div>
+ </td>
+ <td>
+ <div>
+ Handeln mit 2 Farben
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/me
+ </div>
+ </td>
+ <td>
+ <div>
+ Handeln mit einer Farbe
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+ /msg
+ <font color=red>
+ Alias
+ </font>
+ <font color=ffa500>
+ Nachricht
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ <font color=red>
+ Alias
+ </font>
+ eine private
+ <font color=ffa500>
+ Nachricht
+ </font>
+ flüstern. (Wird nicht vom Chat protokolliert)
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+ /
+ <font color=ffa500>
+ Nachricht
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Eine private
+ <font color=ffa500>
+ Nachricht
+ </font>
+ demjenigen flüstern, dem zuletzt eine geflüstert wurde. (Wird nicht vom Chat protokolliert)
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+//
+ </div>
+ </td>
+ <td>
+ <div>
+ Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet. (Funktioniert nicht bei Befehlen, flüstern oder schreien)
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/q
+ </div>
+ </td>
+ <td>
+ <div>
+ Cumunnity verlassen
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/s <font color=red>Nachricht</font>
+ </div>
+ </td>
+ <td>
+ <div>
+ <font color=red>Nachricht</font> schreien
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/w
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt an, wer sich im aktuellen Raum befindet.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+/wc
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt an, wer eingelog ist.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+ /wc
+ <font color=red>
+ Raum
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt an, wer sich im
+ <font color=red>
+ Raum
+ </font>
+ befindet.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+ /wc/
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt alle offenen Räume und deren Chatter an
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ NC
+ </div>
+ </td>
+ <td>
+ <div>
+ /wj
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt an, in welchen Raum sich
+ <font color=red>
+ Alias
+ </font>
+ befindet.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=ffa500>
+ WÄ
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ /k
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ <font color=red>
+ Alias
+ </font>
+ wird aus dem Chat katapultiert!
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=green>
+ OW
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+/ban
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt alle verbannten Benutzer an
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=green>
+ OW
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+/ban
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ <font color=red>
+ Alias
+ </font>
+ verbannen.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=green>
+ OW
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+/rban
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ <font color=red>
+ Alias
+ </font>
+ "entbannen"
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=green>
+ OW
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ /ip
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Zeigt die IP-Nummer von
+ <font color=red>
+ Alias
+ </font>
+ an.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=green>
+ OW
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ /wa
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ <font color=red>
+ Alias
+ </font>
+ zum Wächter ernennen
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=green>
+ OW
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ /rwa
+ <font color=red>
+ Alias
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ <font color=red>
+ Alias
+ </font>
+ vom Wächter zum normalen Chatter degradieren
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ <font color=green>
+ OW
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ /sys
+ <font color=red>
+ Nachricht
+ </font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Systemnachricht schreiben. (Erscheint in allen bestehenden Räumen)
+ </div>
+ </td>
+ </tr>
+</table>
+<hr>
+<div>
+ Zur Erklärung: NC steht für "Normale Chatter", WÄ für "Wächter" und OW für "Oberwächter".
+ Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n oder höher ausgeführt werden.
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/0.2.1/logs_html b/0.2.1/logs_html
new file mode 100644
index 0000000..1317062
--- /dev/null
+++ b/0.2.1/logs_html
@@ -0,0 +1,391 @@
+<br>
+<div>
+ In der System-Logdatei tauchen folgende Ursachen auf:
+</div>
+<br>
+<table border=0 width=100% bgcolor=555555>
+ <tr>
+ <th bgcolor=666666>
+ <div>
+ Ursache
+ </div>
+ </th>
+ <th bgcolor=666666>
+ <div>
+ Beschreibung
+ </div>
+ </th>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ edit_profile_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Benutzername hat sein Profil erfolgreich editiert.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ edit_pw_wrong
+ </div>
+ </td>
+ <td>
+ <div>
+ Beim Editieren der Chat-Optionen stimmten die beiden Passwortfelder nicht überein.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ edit_colors_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Benutzername hat seine Chatfarben erfolgreich gewechselt.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+edit_options_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Benutzername hat seine Chat-Optionen erfolgreich editiert.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+first_http_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Der angegebenen IP# wurde Startseite erfolgreich angezeigt. (Benutzername noch nicht vorhanden)
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+login_alias_banned
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Benutzer konnte sich nicht in das System einloggen, da sein benutzername verbannt war.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ login_alias_notexists
+ </div>
+ </td>
+ <td>
+ <div>
+ Beim Einlogversuch existierte der angegebene Benutzername nicht.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+login_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Benutzer hat sich erfolgreich in das System eingelogt.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ login_pw_wrong
+ </div>
+ </td>
+ <td>
+ <div>
+ Beim Einloggen wurde das falsche PW eingegeben.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ logout_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Benutzer hat sich erfolgreich (manuell) aus dem System ausgelogt. ("... verläßt den Chat ...")
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ logout_<font color=red>Alias</font>_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ User hat gemerkt, daß sich
+ <font color=red>
+ Alias
+ </font>
+ nicht mehr im Chat befindet. ("... hat den Chat verlassen ...").
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ow_ban_<font color=red>Alias</font>_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat
+ <font color=red>
+ Alias
+ </font>
+ verbannt
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ow_ban_<font color=red>Alias</font>_ow
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat ohne Erfolg versucht
+ <font color=red>
+ Alias
+ </font>
+ zu verbannen (
+ <font color=red>
+ Alias
+ </font>
+ war Oberwächter und konnte nicht verbannt werden )
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ow_rban_<font color=red>Alias</font>_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat
+ <font color=red>
+ Alias
+ </font>
+ "entbannt"
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ ow_wa_<font color=red>Alias</font>_exists
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat ohne Erfolg versucht
+ <font color=red>
+ Alias
+ </font>
+ zum Wächter zu ernennen. (
+ <font color=red>
+ Alias
+ </font>
+ war bereits als Wächter eingetragen.)
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ ow_wa_<font color=red>Alias</font>_notexists
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat ohne Erfolg versucht
+ <font color=red>
+ Alias
+ </font>
+ zum Wächter zu ernennen. (
+ <font color=red>
+ Alias
+ </font>
+ existierte nicht in der Benutzerdatenbank.)
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ ow_wa_<font color=red>Alias</font>_ow-exists
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat ohne Erfolg versucht
+ <font color=red>
+ Alias
+ </font>
+ zum Wächter zu ernennen. (
+ <font color=red>
+ Alias
+ </font>
+ war bereits als Oberwächter eingetragen. Oberwächter können nicht zeitgleich Wächter sein.)
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ ow_wa_<font color=red>Alias</font>_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat
+ <font color=red>
+ Alias
+ </font>
+ erfolgreich zum Wächter ernannt.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ ow_rwa_<font color=red>Alias</font>_notexists
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter konnte
+ <font color=red>
+ Alias
+ </font>
+ nicht zum Wächter ernennen. (War nicht als WÄ registriert)..
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ ow_rwa_<font color=red>Alias</font>_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Oberwächter hat
+ <font color=red>
+ Alias
+ </font>
+ vom Wächter zum normalen Chatter degradiert.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ reg_alias_exists
+ </div>
+ </td>
+ <td>
+ <div>
+ Bei der Registrierung war der Benutzername bereits vorhanden.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ reg_alias_prohibited
+ </div>
+ </td>
+ <td>
+ <div>
+ Bei der Registrierung war der angegebene Benutzername verboten (enthielt Sonderzeichen).
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ reg_ok
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Benutzername hat sich erfolgreich registriert.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ reg_pw_wrong
+ </div>
+ </td>
+ <td>
+ <div>
+ Bei der Registrierung wurde das PW falsch eingegeben.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ secure_ip
+ </div>
+ </td>
+ <td>
+ <div>
+ Unbefugter Zugriff der angegebenen IP# auf den angegebenen Benutzernamen.
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td>
+ <div>
+ sys_msg_<font color=red>Raum</font>
+ </div>
+ </td>
+ <td>
+ <div>
+ Angegebener Oberwächter schreibt eine Systemnachricht aus
+ <font color=red>
+ Raum
+ </font>.
+ </div>
+ </td>
+ </tr>
+</table>
+<br> \ No newline at end of file
diff --git a/0.2.1/main.pl b/0.2.1/main.pl
new file mode 100644
index 0000000..0a48de6
--- /dev/null
+++ b/0.2.1/main.pl
@@ -0,0 +1,555 @@
+#!/usr/bin/perl -w
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "input_html") {
+ &input_html;
+} elsif ($var eq "inroom_html") {
+ &inroom_html($alias,$room);
+} elsif ($var eq "post_msg") {
+ &post_msg;
+} elsif ($var eq "change_room") {
+ &change_room;
+} else {
+ &error("Parameter fehlt");
+}
+
+sub input_html { # Eingabemaske für den Chat.
+ my ($reload,$action,$whisper,$lastmsg) = @_;
+ $action = $q->param('action') if ($action eq "");
+ if ($tmp eq "away") {
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich zurück ... </font></i>");
+ } elsif ($tmp eq "login") {
+ &remove_rooms;
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat den Chat betreten ...</font></i>");
+ &log("logins","\"login_ok\"");
+ }
+ if ($action ne "" && $action ne "whisper" && $action ne "away") {
+ print "<html><head><script language=\"JavaScript\">";
+ if ($action eq "change_room") {
+ print "open(\"main.pl?var=inroom_html&alias=$alias&room=$room&col=$col&secol=$secol&tmp=$tmp\",\"inroom\");";
+ print "open(\"main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol\",\"input\");";
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");";
+ } elsif ($action eq "change_colors") {
+ print "open(\"htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol\",\"menu\");";
+ }
+ print "</script></head><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>";
+ } else {
+ print "<html><body background=\"$gfxpath/unten.gif\" bgcolor=ffa500>";
+ }
+ print "<center><form action=\"main.pl\">";
+ print "<input type=\"hidden\" name=\"tmp\" value=\"away\">" if ($action eq "away");
+ print <<END;
+ <input type="hidden" name="var" value="post_msg">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="room" value="$room">
+ <input type="hidden" name="col" value="$col">
+ <input type="hidden" name="secol" value="$secol">
+ <input type="hidden" name="id" value="$whisper">
+ <input type="hidden" name="lastmsg" value="$lastmsg">
+ <input size="70" name="msg">
+ <input type="submit" value="Texten"></form></center>
+END
+if ($reload eq "true") {
+print <<END;
+ <script language="JavaScript">
+ <!--
+ document.forms[0].msg.focus();
+ //-->
+ </script>
+END
+}
+print
+ $q->end_html;
+}
+
+sub post_msg { # Wird aufgerufen, wenn aus input_html eine Eingabe gepostet wurde.
+ &secure_checkip($alias);
+ $msg =~ s#<#&lt\;#g; # HTML-Tags deaktivieren
+ $msg =~ s#kilahu#yChat#g;
+ $msg =~ s#perle#per!#g;
+ if (substr($msg,0,1) eq "/") { # Überprüfen, ob Befehl oder Nachricht
+ &cmd($msg);
+ } else {
+ $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>";
+ &post($msg);
+ $msg =~ s#"#'#g; # " in ' umtauschen für den befehl "//"
+ &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id
+ }
+}
+
+sub cmd { # Alle Chatbefehle, die über input_html eingegeben werden können.
+ $_[0] = $_[0]." ";
+ $_[0] = substr($_[0], 1, length($_[0])-1);
+ my @cmd = split(/ /, $_[0]);
+ my $cmd = substr($_[0],0 , index($_[0], " "));
+ my ($reload,$action,$whisper) = ("true","",$id);
+#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -<
+#############>- DER LETZTEN ZUGEFLÜSTERTEN PERSON NOCHEINMAL FLÜSTERN -<
+ if ($cmd eq "/") {
+ &post($q->param('lastmsg'));
+#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -<
+ } elsif ($cmd eq "about") {
+ &post_prv("$alias","<font size=2 color=ffffff>Aktuelle Version ist $title und wurde am $datum aktuallisiert. Created by Paul C. Bütow 2k.</font>");
+#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -<
+ } elsif ($cmd eq "away") {
+ if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde
+ $tmp = "";
+ }
+ for ($i=1; $i <= $#cmd; $i++) {
+ $tmp = $tmp." ".$cmd[$i];
+ }
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias meldet sich ab (<font color=red>$tmp</font> ) ...</i></font>");
+ $action = "away";
+#############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -<
+ } elsif ($cmd eq "clear") {
+ &post_prv("$alias","<script language=\"JavaScript\">window.open(\"push.pl?alias=$alias&room=$room&var=clear_screen\",\"main\");</script>");
+#############>- FARBEN WECHSELN -<
+ } elsif ($cmd eq "col") {
+ $col = $cmd[1];
+ my $tmpsecol = $cmd[2];
+ if ($tmpsecol eq "") {
+ $secol = $col
+ } else {
+ $secol = $tmpsecol;
+ }
+ &read_file("data/user/options/$alias");
+ my @pro = <DATEI>;
+ close DATEI;
+ &write_file_new("data/user/options/$alias");
+ print DATEI $pro[0]."".$col."\n".$secol;
+ close DATEI;
+ &log("system","\"edit_colors_ok\"");
+ &zeit;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=$col>$alias</font> <font color=$secol> hat die Farbe gewechselt ...</font></i>");
+ $action = "change_colors";
+#############>- AKTUELLES DATUM UND URZEIT AUSGEBEN -<
+ } elsif ($cmd eq "date") {
+ &zeit;
+ &post_prv("$alias","<font size=2 color=ffffff>Heute ist der $day.$month. Jahr $year. Es ist genau $hours:$min Uhr und $sec Sekunden.</font>");
+#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -<
+ } elsif ($cmd eq "j") {
+# $tmp = $room; #Alter Raum nach tmp
+# $room = $cmd[1]; #Neuer Raum nach room
+ &change_room("j",$cmd[1],$room);
+ $action = "change_room";
+#############>- HANDELN -<
+ } elsif ($cmd eq "me" || $cmd eq "m") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $me_msg = $me_msg." ".$cmd[$i];
+ }
+ if ($cmd eq "m") {
+ &post("<i><font color=$col>$alias <font color=$secol>$me_msg</font></font></i>");
+ } else {
+ &post("<i><font color=$col>$alias $me_msg</font></i>");
+ }
+#############>- FLÜSTERN ( Auch mit '/' ) -<
+ } elsif ($cmd eq "msg" || $cmd eq "") {
+ my ($alias2post,$msg2post) = ($cmd[1],"");
+ if ($cmd eq "msg") {
+ for ($i=2; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ } else {
+ $alias2post = $id;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2post = $msg2post." ".$cmd[$i];
+ }
+ }
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ if ($_ eq $alias2post) {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "<i><font color=$col>$alias flüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &write_file("data/msgs/$alias");
+ print DATEI "<i><font color=$col>Zu $alias2post geflüstert <font color=ffffff>=></font><font color=$secol>$msg2post</font></font></i><br>\n";
+ close DATEI;
+ &input_html($reload,"",$alias2post);
+ exit;
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2post <font color=ffffff>ist momentan nicht anwesend !</font></font>");
+#############>- DAS SYSTEM VERLASSEN -<
+ } elsif ($cmd eq "q") {
+ &post_prv("$alias","<script language=\"JavaScript\">window.open(\"index.pl?tmp=quit\",\"_top\");</script>");
+ sleep 1;
+ &remove_online($alias,$room);
+ &secure_removeip($alias);
+ unlink("data/msgs/$alias");
+ exit;
+#############>- SCHREIEN -<
+ } elsif ($cmd eq "s") {
+ my $msg2scream,$msg2post;
+ for ($i=1; $i <= $#cmd; $i++) {
+ $msg2scream = $msg2scream." ".$cmd[$i];
+ }
+ $msg2post = "\U$msg2scream";
+ &post("<font color=$col><i>$alias schreit:</i> <b><font color=$secol>".$msg2post."</font></font></b>");
+#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -<
+} elsif ($cmd eq "w") {
+ &list_dir("data/online/rooms/$room");
+ my ($is,$nr) = ("t",0);
+ foreach(@dir) {
+ if (-f "data/online/rooms/$room/$_") {
+ $personen = $personen." ".$_;
+ $nr++;
+ }
+ }
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs befinde$is sich im aktuellen Raum (\"$room\"): <font color=ffa500>$personen</font></font>");
+#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -<
+ } elsif ($cmd eq "wc" || $cmd eq "wc/") {
+ $raum = $cmd[1];
+ if ($raum eq "" && $cmd eq "wc") {
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/users/$_");
+ }
+ my $nr = ($#dir-1);
+ my ($nrs,$is) = ("","ist");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "sind";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>$nr Person$nrs $is insgesamt eingelogt: <font color=ffa500>$personen</font></font>");
+ } elsif ($raum eq "" && $cmd eq "wc/") {
+ my $msg2post;
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ &list_dir("data/online/rooms/$_",2);
+ my $nr = $#dir2-1;
+ $msg2post = $msg2post."<tr><td><b><font size=2 color=ffffff>$_ ($nr)</font></b></td><td><font size=2 color=ffffff>";
+ foreach $chatter (@dir2) {
+ if (-f "data/online/rooms/$_/$chatter") {
+ $msg2post = $msg2post."$chatter ";
+ }
+ }
+ print "</font></td>";
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Räume sind offen:</font><table>$msg2post</table>");
+ } elsif ($raum ne "") {
+ my $personen;
+ &list_dir("data/online/rooms/$raum");
+ foreach(@dir) {
+ $personen = $personen." ".$_ if (-f "data/online/rooms/$raum/$_");
+ }
+ my ($nr,$is) = (($#dir-1),"t");
+ if ($nr != 1) {
+ $nrs = "en";
+ $is = "n";
+ }
+ &post_prv("$alias","<font size=2 color=ffffff> $nr Person$nrs befinde$is sich im Raum \"$raum\": <font color=ffa500>$personen</font></font>");
+ }
+#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -<
+ } elsif ($cmd eq "wj" || $cmd eq "ju") {
+ my $alias2search = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2) if (-d "data/online/rooms/$raum");
+ foreach $user (@dir2) {
+ if (-f "data/online/rooms/$raum/$user") {
+ if ($user eq $alias2search) {
+ if ($cmd eq "wj") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff>befindet sich im Raum \"$raum\" !</font></font>");
+ } else {
+ $action = "change_room";
+ &change_room("ju",$raum,$room,$alias2search);
+ }
+ &input_html($reload,$action,$whisper);
+ exit;
+ }
+ }
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2search <font color=ffffff> ist nicht eingelogt !</font></font>");
+#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -<
+#############>- ALIAS VERBANNEN BZW. ENTBANNEN -<
+ } elsif ($cmd eq "ban" || $cmd eq "rban") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my ($alias2handle,$registriert) = $cmd[1];
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ $registriert = "true" if ($_ eq $alias2handle);
+ }
+ if ($registriert ne "true") {
+ if ($cmd eq "ban") {
+ if ($alias2handle ne "") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nich verbannt werden !</font></font>");
+ } else {
+ &read_file("data/ban");
+ my @banned = <DATEI>;
+ my ($benutzer);
+ my $nr = $#banned+1;
+ close DATEI;
+ foreach(@banned) {
+ $benutzer = $benutzer." ".$_;
+ }
+ &post_prv("$alias","<font size=2 color=ffffff>Folgende Benutzer sind verbannt [$nr]: <font color=ffa500>$benutzer</font></font>");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> existiert nicht in der Benutzerdatenbank und kann so nicht \"entbannt\" werden !</font></font>");
+ }
+ &input_html("true");
+ exit;
+ }
+ &read_file("data/ban");
+ my @banlist = <DATEI>;
+ close DATEI;
+ foreach(@banlist) {
+ if ($_ eq "$alias2handle\n") {
+ if ($cmd eq "ban") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist bereits verbannt worden !</font></font>");
+ } else {
+ my $banned = "false";
+ foreach(@banlist) {
+ $banned = "true" if ($_ eq "$alias2handle\n");
+ }
+ if ($banned eq "true") {
+ my @newbanlist;
+ foreach(@banlist) {
+ push @newbanlist,$_ if ($_ ne "$alias2handle\n");
+ }
+ &write_file_new("data/ban");
+ print DATEI @newbanlist;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben \"entbannt\" !</font></font>");
+ &log("system","\"ow_rban_$alias2handle_ok\"");
+ }
+ }
+ &input_html("true");
+ exit;
+ }
+ }
+ if ($cmd eq "ban") {
+ &hirachie($alias2handle);
+ if ($hirachie ne "ow") {
+ &write_file("data/ban");
+ print DATEI "$alias2handle\n";
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> wurde soeben verbannt und kann sich nun nichtmehr in den Chat einloggen !</font>");
+ &log("system","\"ow_ban_$alias2handle_ok\"");
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> ist ein Oberwächter und kann deshalb nicht verbannt werden !</font></font>");
+ &log("system","\"ow_ban_$alias2handle_ow\"");
+ }
+ } else {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff> konnte nicht \"entbannt\" werden, da <font color=ffa500>$alias2handle</font> garnicht verbannt war !</font></font>");
+ }
+ }
+#############>- IP # VON ALIAS ANZEIGEN LASSEN -<
+ } elsif ($cmd eq "ip") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ my $alias2prove = $cmd[1];
+ &list_dir("data/online/ident");
+ foreach(@dir) {
+ if ($_ eq $alias2prove) {
+ &read_file("data/online/ident/$_");
+ local $ipnr = <DATEI>;
+ close DATEI;
+ &post_prv("$alias","<font size=2 color=ffa500>$_ <font color=ffffff>hat die IP-Nummer $ipnr !</font></font>");
+ }
+ }
+ }
+#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -<
+ } elsif ($cmd eq "k") {
+ &hirachie($alias);
+ if ($hirachie eq "wa" || $hirachie eq "ow") {
+ my $alias2kick = $cmd[1];
+ &list_dir("data/online/rooms");
+ foreach $raum (@dir) {
+ &list_dir("data/online/rooms/$raum",2);
+ foreach $chatter (@dir2) {
+ if ($chatter eq $alias2kick) {
+ &hirachie($alias2kick);
+ if ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Oberwächter und kann nicht \"gekickt\" werden !</font></font>");
+ &log("system","wa_k_$alias2kick_ow"); #!!
+ } elsif ($hirachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist Wächter und kann nicht \"gekickt\" werden !</font></font>");
+ &log("system","wa_k_$alias2kick_ow"); #!!
+ } else {
+ &post_prv("$alias2kick","<script language=\"JavaScript\">window.open(\"index.pl?tmp=kick\",\"_top\");</script>");
+ &zeit;
+ $_ = undef if ($room eq $_);
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias katapultiert \"$alias2kick\" aus dem Chat ...</font></i>",$_);
+ &log("system","wa_k_$alias2kick"); #!!
+ &remove_online($alias2kick,$_,"kick");
+ &secure_removeip($alias2kick);
+ }
+ &input_html("true");
+ exit;
+ }
+ }
+ }
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2kick <font color=ffffff> ist nicht anwesend und kann nicht \"gekickt\" werden !</font></font>");
+ }
+#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -<
+ } elsif ($cmd eq "sys") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ for ($i=1; $i <= $#cmd; $i++) {
+ $sys_msg = $sys_msg." ".$cmd[$i];
+ }
+ &zeit;
+ &post_all("<i><font color=ffffff>($hours:$min:$sec)</font></i> <b><font size=2 color=red>SYSTEMNACHRICHT</font></b><i><font color=ffffff>: $sys_msg ...</font></i>");
+ &log("system","\"sys_msg_$room\"");
+ }
+#############>- ALIAS ZUM WÄCHTER ERNNENNEN BZW. ZUM NORMALEN CHATTER DEGRADIEREN -<
+ } elsif ($cmd eq "wa" || $cmd eq "rwa") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ &zeit;
+ my $alias2handle = $cmd[1];
+ if ($cmd eq "wa") {
+ my $anerkennen = "false";
+ &list_dir("data/user/options");
+ foreach(@dir) {
+ if ($_ eq $alias2handle) {
+ $anerkennen = "true";
+ }
+ }
+ if ($anerkennen eq "true") {
+ &hirachie($alias2handle);
+ if ($hirachie eq "wa") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!</font></font>");
+ &log("system","\"oh_wa_".$alias2handle."_exists\"");
+ } elsif ($hirachie eq "ow") {
+ &post_prv("$alias","<font size=2 color=ffa500>$alias2handle <font color=ffffff>ist schon als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!</font></font>");
+ &log("system","\"oh_wa_".$alias2handle."_oh-exists\"");
+ } else {
+ &write_file("data/wa");
+ print DATEI $alias2handle."\n";
+ close DATEI;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font><font color=ffa500> $alias ernennt \"$alias2handle\" zum Wächter ...</font></i>");
+ &log("system","\"oh_wa_".$alias2handle."_ok\"");
+ }
+ } else {
+ &post_prv($alias,"<font size=2 color=ffa500>$alias2handle <font color=ffffff>kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!</font></font>");
+ &log("system","\"oh_wa_".$alias2handle."_notexists\"");
+ }
+ } elsif ($cmd eq "rwa") {
+ &read_file("data/wa");
+ my @wafile = <DATEI>;
+ close DATEI;
+ my $aberkennen = "false";
+ foreach(@wafile) {
+ if ($_ ne "$alias2handle\n") {
+ push @newafile,$_;
+ } else {
+ $aberkennen = "true";
+ }
+ }
+ &write_file_new("data/wa");
+ print DATEI @newafile;
+ close DATEI;
+ if ($aberkennen eq "true") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias hat \"$alias2handle\" vom Wächter zum normalen Chatter degradiert ...</font></i>");
+ &log("system","\"oh_rwa_".$alias2handle."_ok\"");
+ } else {
+ &post("<font size=2 color=ffa500>$alias2handle <font color=ffffff>konnte der Wächterstatus nicht aberkannt werden da Benutzer kein Wächter ist!</font></font>");
+ &log("system","\"oh_rwa_".$alias2handle."_notexists\"");
+ }
+ }
+ }
+#############>- ENDE DER CHATBEFEHLE -<
+}
+&input_html($reload,$action,$whisper);
+}
+
+sub inroom_html { # Auto-refresh für Raumonlineliste
+ my ($alias,$room) = @_;
+print <<END;
+<html>
+ <head>
+ <meta http-equiv="refresh" content="20" URL="main.pl?var=inchat_html&alias=$alias&room=$room">
+ </head>
+<body bgcolor=ffa500>
+</body>
+</html>
+END
+ &online($alias,$room);
+}
+
+sub change_room { # Den Chat-Raum wechseln
+ my ($method,$newroom,$oldroom,$alias2follow) = @_;
+ $room = $oldroom;
+ &secure_checkip($alias); # IP Nummer überprüfen
+ &zeit; # Zeit 'erneuern'
+ if ($method eq "j") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias wechselt in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ } elsif ($method eq "ju") {
+ unlink("data/online/rooms/$oldroom/$alias");
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias folgt \"$alias2follow\" in den Raum \"$newroom\" ...</font></i>");
+ $room = $newroom;
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ...</font></i>");
+ &post_prv("$alias","<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...</font></i>");
+ }
+ &rm_rooms;
+}
+
+sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern
+ my ($alias,$room) = @_;
+ &write_file_new("data/online/users/$alias");
+ print DATEI time;
+ close DATEI;
+ if (-e "data/online/rooms/$room") {
+ } else {
+ mkdir "data/online/rooms/$room", 0777;
+ }
+ &write_file_new("data/online/rooms/$room/$alias");
+ print DATEI time;
+ close DATEI;
+ &read_file("data/online/prove"); # Räume und Chatter auf Existenz überprüfen
+ my $provetime = <DATEI>;
+ close DATEI;
+ if ($provetime < (time - 30)) {
+ &write_file_new("data/online/prove");
+ print DATEI time;
+ close DATEI;
+ &rm_alias("data/online/users");
+ &rm_rooms;
+ }
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, die älter als 60 Sekunden sind
+ my $dir2rm = $_[0];
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_") {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ }
+ }
+ }
+ }
+}
diff --git a/0.2.1/main2.pl b/0.2.1/main2.pl
new file mode 100644
index 0000000..9e6066c
--- /dev/null
+++ b/0.2.1/main2.pl
@@ -0,0 +1,502 @@
+#!/usr/bin/perl -w
+
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+
+if ($var eq "list_alias_html") {
+ &list_alias_html;
+} elsif ($var eq "alias_html") {
+ &alias_html;
+} elsif ($var eq "edit_profile_html") {
+ &edit_html("edit_profile_html");
+} elsif ($var eq "edit_options_html") {
+ &edit_html("edit_options_html");
+} elsif ($var eq "gb_html") {
+ &gb_html;
+} elsif ($var eq "post_gb") {
+ &post_gb;
+} elsif ($var eq "rm_gb_alias") {
+ &rm_gb;
+} elsif ($var eq "edit_profile") {
+ &edit("edit_profile");
+} elsif ($var eq "edit_options") {
+ &edit("edit_options");
+} else {
+ &error("Parameter fehlt");
+}
+
+###########################
+##HAUPTTEIL DIESER DATEI:##
+###########################
+
+sub gb_html { # Das Benutzerboard/Gästebuch.
+ my $message = $_[0];
+ &start_html("Benutzerboard");
+if ($message eq "post_empty") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Du wolltest soeben einen leeren Eintrag posten. Bitte schreib
+ <i>
+ zuerst
+ </i>
+ einen Text und poste
+ <u>dann</u>
+ !
+ </div>
+ <hr>
+END
+} elsif ($message eq "post_ok") {
+print <<END;
+ <div class=b>
+ Meldung:
+ </div>
+ <div>
+ Vielen Dank für Deinen Beitrag. Wenn Du willst, kannst Du jetzt gleich noch einen Eintrag posten ...
+ </div>
+ <hr>
+END
+} else {
+print <<END;
+ <div>
+ Falls Du Anregungen oder Verbesserungsvorschläge für die Community hast, dann poste doch einen kleinen Eintrag :-)
+ </div>
+ <hr>
+END
+}
+print <<END;
+ <form action="main2.pl">
+ <input type="hidden" name="var" value="post_gb">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="tmp" value="guestbook">
+ <input type="hidden" name="id" value="y">
+ <input size="40" name="msg">
+ <font color="ffffff">
+ <input type="submit" value="Hinterlassen ...">
+ </font>
+ </form>
+ <hr>
+END
+ if (-e "data/guestbook") {
+ open (DATEI,"<data/guestbook") || &error("Konnte dat/guestbook nicht öffnen");
+ @datei = <DATEI>;
+ close DATEI;
+ print
+ $q->div(@datei);
+ }
+ print
+ $q->end_html;
+}
+
+
+sub post_gb { # Wenn etwas in ein Gästebuch eingetragen wird
+ &secure_checkip($alias);
+ &zeit;
+ if ($msg eq "") {
+ if ($id eq "y") { # Überprüfen, ob Benutzerboard- oder Privatgästebuch
+ &gb_html("post_empty");
+ } else {
+ &alias_html("post_empty");
+ }
+ exit;
+ }
+ $msg =~ s#<#&lt\;#g;
+ my $tmpath = "";
+ if ($id eq "y") {
+ $tmpath = "data/guestbook";
+ } else {
+ $tmpath = "data/user/gbooks/$tmp";
+ }
+ if (-e "$tmpath") {
+ &read_file("$tmpath");
+ my @datei = <DATEI>;
+ close DATEI;
+ pop(@datei) if ($#datei > 99);
+ my @newdatei = "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ @newdatei = ("@newdatei", "@datei");
+ &write_file_new("$tmpath");
+ print DATEI @newdatei;
+ close DATEI;
+ } else {
+ &write_file_new("$tmpath");
+ print DATEI "<br><b>$alias schrieb am $day.$month.$year um $hours:$min:$sec ...</b><br>$msg<br>\n";
+ close DATEI;
+ }
+ if ($id eq "y") {
+ &gb_html("post_ok");
+ exit;
+ } else {
+ post_prv("$tmp","<font size=2 color=ffffff><a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$alias\" target=\"_new\">$alias</a> hat soeben einen Pin in <a href=\"main2.pl?alias=$alias&var=alias_html&tmp=$tmp\" target=\"_new\">Dein Profil</a> gehängt ... </font>");
+ &alias_html;
+ exit;
+ }
+}
+
+sub rm_gb { # Gästebucheintrag entfernen
+ &secure_checkip($alias);
+ $tmp = $alias;
+ &read_file("data/user/gbooks/$alias");
+ my @gbfile = <DATEI>;
+ close DATEI;
+ my @newgbfile = ();
+ for($i=0; $i <= $#gbfile; $i++) {
+ push(@newgbfile,$gbfile[$i]) if ($i != $id);
+ }
+ &write_file_new("data/user/gbooks/$alias");
+ print DATEI @newgbfile;
+ close DATEI;
+ &alias_html("rm_ok");
+}
+
+sub list_alias_html { # Liste aller Benutzer
+ &start_html("Alle Benutzer");
+ &list_dir("data/user/options");
+ my @liste = sort(@dir);
+ my $nr = $#dir-1;
+print <<END;
+ <div>
+ Es sind z.Z. genau $nr Benutzernamen in der Datenbank vorhanden! (Sortiert nach #, A-Z, a-z)
+ </div>
+ <hr>
+ <div>
+END
+ foreach(@liste) {
+ if (-f "data/user/options/$_") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" },
+ "$_"),
+ " ";
+ }
+ }
+print <<END;
+ </div>
+</body>
+</html>
+END
+}
+
+sub alias_html { # Anzeigen eines Benutzerprofils
+ my $message = $_[0];
+ &start_html($tmp);
+print <<END;
+<div>
+ <a href="htdocs.pl?var=werda_html&alias=$alias">Hier</a>
+ gehts zur Gesamtübersicht !
+</div>
+<hr>
+END
+if ($message eq "rm_ok") {
+print <<END;
+ <div class=b>
+ Meldung:
+ </div>
+ <div>
+ Der von Dir gewählte Eintrag wurde erfolgreich gelöscht.
+ </div>
+ <hr>
+END
+} elsif ($message eq "post_empty") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Du wolltest soeben einen leeren Eintrag posten. Bitte schreib
+ <i>
+ zuerst
+ </u>
+ einen Text und poste
+ <u>dann</u>
+ !
+ <hr>
+END
+}
+ &read_file("data/user/profiles/$tmp");
+ @data = <DATEI>;
+ close DATEI;
+print <<END;
+ <div>
+ Alias: $tmp
+ <br>
+ <br>
+ Nachname: $data[0]
+ <br>
+ <br>
+ Vorname: $data[1]
+ <br>
+ <br>
+ Alter: $data[2]
+ <br>
+ <br>
+ Wohnort: $data[3]
+ <br>
+ <br>
+ E-Mail:
+ <a href="mailto:$data[4]">$data[4]</a>
+ <br>
+ <br>
+ ICQ-Nummer: $data[5]
+ <br>
+ <br>
+ Homepage:
+ <a href="$data[6]" target="_new">$data[6]</a>
+ <br>
+ <br>
+ Weiteres:
+ <br>
+ $data[7]
+ <hr>
+ Hier kannst Du $tmp eine Nachricht hinterlassen!
+ <form action="main2.pl">
+ <input type="hidden" name="var" value="post_gb">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="tmp" value="$tmp">
+ <input type="text" size="40" name="msg">
+ <font color="ffffff">
+ <input type="submit" value="Hinterlassen ...">
+ </font>
+ </form>
+ <hr>
+END
+if (-e "data/user/gbooks/$tmp") {
+ open (DATEI,"<data/user/gbooks/$tmp") || &error("Konnte data/user/gbooks/$tmp nicht öffnen");
+ @datei = <DATEI>;
+ close DATEI;
+ if ($alias ne $tmp) {
+ print @datei;
+ } else {
+print <<END;
+ <table>
+ <form action="main2.pl">
+ <input type="hidden" name="var" value="rm_gb_alias">
+ <input type="hidden" name="alias" value="$alias">
+END
+for($i=0; $i <= $#datei; $i++) {
+print <<END;
+ <tr>
+ <td>
+ <input type="radio" name="id" value="$i">
+ </td>
+ <td>
+ <div class=q>
+ $datei[$i]
+ </div>
+ </td>
+ </tr>
+END
+}
+print <<END;
+ </table>
+ <table>
+ <tr>
+ <td>
+ <font color=ffffff>
+ <input type="submit" value="Makierten Eintrag löschen">
+ </font>
+ </td>
+ <td>
+ <font color=ffffff>
+ <input type="reset" value="Makierung rückgängig machen">
+ </font>
+ </td>
+ </tr>
+ </table>
+ </form>
+END
+}
+}
+ print
+ $q->end_html;
+}
+
+sub edit_html { # Chat-Optionen / Benutzerprofil editieren
+ my ($method,$message) = @_;
+ &secure_checkip($alias);
+ &start_html("Benutzerprofil ändern");
+ if ($method eq "edit_options_html") {
+ &read_file("data/user/options/$alias");
+ } elsif ($method eq "edit_profile_html") {
+ &read_file("data/user/profiles/$alias");
+ }
+ @data = <DATEI>;
+ close DATEI;
+ if ($method eq "edit_options_html") {
+ chomp($data[0]);
+ if ($message eq "edit_options_ok") {
+print <<END;
+<script language="JavaScript">
+ open("main.pl?var=input_html&alias=$alias&room=$room&col=$col&secol=$secol","input");
+ open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol","menu");
+</script>
+<div class=b>
+ Hinweis:
+</div>
+<div>
+ Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um
+ weiterzuchatten einfach auf <a href="push.pl?alias=$alias&room=$room">Weiterchatten</a> klicken.
+</div>
+<hr>
+END
+ } elsif ($message eq "edit_pw_wrong") {
+print <<END;
+<div class=b>
+ ACHTUNG!
+</div>
+<div>
+ Du hast soeben versucht, dein Passwort zu ändern. Jedoch stimmte die Erste Eingabe nicht mit der Zweiten überein.
+ Bitte versuch es erneuert ...
+</div>
+<hr>
+END
+ } else {
+ print
+ $q->div( "Hier kannst Du Deine Chat-Optionen editieren!" ),
+ $q->hr;
+ }
+print <<END;
+<form action="main2.pl">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="var" value="edit_options">
+ <div>
+ Dein Passwort
+ <font color=ffa500>
+ (Gut merken !!)
+ </font>
+ <br>
+ <input type="password" name="id" value="$data[0]">
+ </div>
+ <br>
+ <div>
+ Geb hier das Passwort erneuert ein:
+ <br>
+ <input type="password" name="tmp" value="$data[0]">
+ </div>
+ <br>
+ <div>
+ "Deine Farbe (Farbe Deines Nicks, Angabe in Hexadezimal):
+ <br>
+ <input type="text" name="col" value="$data[1]">
+ </div>
+ <br>
+ <div>
+ Deine zweite Farbe (Farbe Deiner Nachrichten, Angabe in Hexadezimal):
+ <br>
+ <input type="text" name="secol" value="$data[2]">
+ </div>
+ <br>
+END
+ } elsif ($method eq "edit_profile_html") {
+ if ($message eq "edit_profile_ok") {
+print <<END;
+ <div class=b>
+ Hinweis:
+ </div>
+ <div>
+ Du hast soeben Dein Profil erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren:
+ <hr>
+END
+ } else {
+ print
+ $q->div( "Hier kannst Du Dein Profil editieren!" ),
+ $q->hr;
+ }
+print <<END;
+ <form action="main2.pl">
+ <input type="hidden" name="alias" value="$alias">
+ <input type="hidden" name="var" value="edit_profile">
+ <div>
+ Dein Nachname:
+ <br>
+ <input name="nachname" value="$data[0]">
+ </div>
+ <br>
+ <div>
+ Dein Vorname:
+ <br>
+ <input name="vorname" value="$data[1]">
+ </div>
+ <br>
+ <div>
+ Dein Alter:
+ <br>
+ <input name="alter" value="$data[2]">
+ </div>
+ <br>
+ <div>
+ Dein Wohnort:
+ <br>
+ <input name="wohnort" value="$data[3]">
+ </div>
+ <br>
+ <div>
+ Deine E-Mail Adresse:
+ <br>
+ <input name="email" value="$data[4]">
+ </div>
+ <br>
+ <div>
+ Deine ICQ-Nummer:
+ <br>
+ <input name="icq" value="$data[5]">
+ </div>
+ <br>
+ <div>
+ Deine Homepage:
+ <br>
+ <input name="homepage" value="$data[6]">
+ </div>
+ <br>
+ <div>
+ Weiteres:
+ <br>
+ <textarea rows="5" cols="40"name="weiteres" wrap="virtual">$data[7]</textarea>
+ </div>
+END
+ }
+print <<END;
+ <hr>
+ <font color=ffffff>
+ <input type="submit" value="Daten ändern ...">
+ </font>
+ </form>
+</body>
+</html>
+END
+}
+
+
+sub edit { # Benutzerprofil od. Chat-Optionen abspeichern
+ &secure_checkip($alias);
+ my $method = $_[0];
+ if ($method eq "edit_profile") {
+ &write_file_new("data/user/profiles/$alias");
+ print DATEI $q->param('nachname')."\n".$q->param('vorname')."\n".$q->param('alter')."\n".$q->param('wohnort')."\n".$q->param('email')."\n".$q->param('icq')."\n".$q->param('homepage')."\n".$q->param('weiteres');
+ close DATEI;
+ &log("system","\"edit_profile_ok\"");
+ &edit_html("edit_profile_html","edit_profile_ok");
+ } elsif ($method eq "edit_options") {
+ if ($id ne $tmp) {
+ &log("system","\"edit_pw_wrong\"");
+ &edit_html("edit_options_html","edit_pw_wrong");
+ exit;
+ }
+ &secure_checkip($alias);
+ &write_file_new("data/user/options/$alias");
+ print DATEI $id."\n".$col."\n".$secol;
+ close DATEI;
+ &log("system","\"edit_options_ok\"");
+ &edit_html("edit_options_html","edit_options_ok");
+ }
+}
diff --git a/0.2.1/push.pl b/0.2.1/push.pl
new file mode 100644
index 0000000..5489592
--- /dev/null
+++ b/0.2.1/push.pl
@@ -0,0 +1,85 @@
+#!/usr/bin/perl -w
+use CGI;
+$q = new CGI;
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkip($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+print <<END;
+<html>
+ <head>
+ <script language="JavaScript">
+ <!--
+ scrolling=true;
+ function scroll_wnd() {
+ if (scrolling != false) {
+ window.scroll(1, 500000);
+ }
+ window.setTimeout("scroll_wnd()", 100);
+ }
+ scroll_wnd();
+ //-->
+ </script>
+ </head>
+<body bgcolor=000000 link=FFFFFF alink=FFFFEF vlink=FFFFEF>
+END
+
+$| = 1; # Cache von Perl ausschalten
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title Copyright by Paul C. Bütow 2k $tmp\n");
+
+if ($var eq "push_logs_html") {
+ $msgfile = $tmp;
+ print "<hr><font size=2 color=ffffff face=arial>";
+} elsif ($var eq "clear_screen") {
+ $msgfile = "data/msgs/$alias";
+ &write_file_new($msgfile);
+ print DATEI $q->br;
+ close DATEI;
+} else {
+ $msgfile = "data/msgs/$alias";
+ print $q->br;
+}
+
+open (MSGFILE, $msgfile);
+
+#################################
+##ENDLOSSCHLEIFE FÜR DEN STREAM##
+#################################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 29) { # Nach 30 Sekunden
+ print "\n<!--PING//-->"; # Ping zum Browser senden
+ $times = 0; # Sekundenzahl auf 0 zurücksetzen
+ $online = "true" if (-e "data/online/users/$alias");
+ if ($online eq "false") {
+ print "<font size=2 color=red>Aus technischen Gründen bitte auf <a href=\"push.pl?alias=$alias&room=$room&var=clear_screen\">Weiterchatten</a> klicken.</font>";
+ exit;
+ }
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
diff --git a/0.2.1/unten.gif b/0.2.1/unten.gif
new file mode 100644
index 0000000..285fb53
--- /dev/null
+++ b/0.2.1/unten.gif
Binary files differ
diff --git a/0.2.1/yChat.jpg b/0.2.1/yChat.jpg
new file mode 100644
index 0000000..61eabfb
--- /dev/null
+++ b/0.2.1/yChat.jpg
Binary files differ