summaryrefslogtreecommitdiff
path: root/0.2.3
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.3
parent2860b03f00e48264ed15c132ad90b240ebe6070b (diff)
tagging ychat-perl-legacyychat-perl-legacy
Diffstat (limited to '0.2.3')
-rw-r--r--0.2.3/INDEX.PL354
-rw-r--r--0.2.3/INSTALL.txt104
-rw-r--r--0.2.3/LIESMICH.txt24
-rw-r--r--0.2.3/UPDATES.txt31
-rw-r--r--0.2.3/bar.gifbin0 -> 231 bytes
-rw-r--r--0.2.3/config.pm321
-rw-r--r--0.2.3/help_html616
-rw-r--r--0.2.3/htdocs.pl222
-rw-r--r--0.2.3/logs_html391
-rw-r--r--0.2.3/main.pl497
-rw-r--r--0.2.3/main2.pl513
-rw-r--r--0.2.3/online.pl52
-rw-r--r--0.2.3/push.pl93
-rw-r--r--0.2.3/setup.sh42
-rw-r--r--0.2.3/unten.gifbin0 -> 662 bytes
-rw-r--r--0.2.3/yBanner.gifbin0 -> 5185 bytes
-rw-r--r--0.2.3/yChat.jpgbin0 -> 50407 bytes
17 files changed, 3260 insertions, 0 deletions
diff --git a/0.2.3/INDEX.PL b/0.2.3/INDEX.PL
new file mode 100644
index 0000000..a2d7bd3
--- /dev/null
+++ b/0.2.3/INDEX.PL
@@ -0,0 +1,354 @@
+#!/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
+} elsif ($reload eq "alias_prohibited") {
+print <<END;
+ <div class=b>
+ ACHTUNG!
+ </div>
+ <div>
+ Dein gewählter Benutername "$alias" enthält illegale Zeichen. Bitte versuch einen anderen Benutzernamen!
+ </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];
+ &write_file_new("data/online/ident/$alias");
+ print DATEI $ENV{'REMOTE_ADDR'};
+ close DATEI;
+ &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 src="htdocs.pl?var=bar_html scrolling="no">
+ <frameset border=0 frameborder=0 framespacing=0 cols="150,*">
+ <frame name="online" src="online.pl?room=$room&alias=$alias">
+ <frame name="main" src="push.pl?room=$room&alias=$alias&var=clear_screen">
+ </frameset>
+ <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.3/INSTALL.txt b/0.2.3/INSTALL.txt
new file mode 100644
index 0000000..c58665e
--- /dev/null
+++ b/0.2.3/INSTALL.txt
@@ -0,0 +1,104 @@
+#############################################################################
+## yChat.de Version 0.2.3 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 :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+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 => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+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 wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde:
+ ./cgi-bin/yChat/data/user/counts/*
+
+- 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.3/LIESMICH.txt b/0.2.3/LIESMICH.txt
new file mode 100644
index 0000000..e9bafb0
--- /dev/null
+++ b/0.2.3/LIESMICH.txt
@@ -0,0 +1,24 @@
+#############################################################################
+## yChat.de Version 0.2.3 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.3/UPDATES.txt b/0.2.3/UPDATES.txt
new file mode 100644
index 0000000..2e777cf
--- /dev/null
+++ b/0.2.3/UPDATES.txt
@@ -0,0 +1,31 @@
+########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.2 nach 0.2.3 vom 25.11.2k
+ - Smooth scrolling JavaScript (Vielen Dank an Andreas Buchwald).
+ - "IP#-Fehler" wurde so gut wie eleminiert.
+ - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt.
+ Diese werden in data/user/counts/* gespeichert.
+ - Automatische Einrichtung des Chats mit setup.sh und Telnet.
+ - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch
+ stets über die Onlineliste aufgerufen werden kann.
+
+Update von 0.2.1 nach 0.2.2 vom 23.11.2k
+ - Einige Bugs wurden entfernt.
+ - Geschwindigkeit des Chats wurde optimiert.
+ - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür
+ wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle
+ 20 Sekunden.
+ - Die UPDATES.txt wurde eingeführt.
+
+Update von 0.2.0 nach 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden
+ nun anders verwaltet.
+
+Update von Alpha XVIII nach 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ konzeptiert.
+ - Neue Versionsnumern wurden eingeführt.
diff --git a/0.2.3/bar.gif b/0.2.3/bar.gif
new file mode 100644
index 0000000..61d02b7
--- /dev/null
+++ b/0.2.3/bar.gif
Binary files differ
diff --git a/0.2.3/config.pm b/0.2.3/config.pm
new file mode 100644
index 0000000..f89f5b2
--- /dev/null
+++ b/0.2.3/config.pm
@@ -0,0 +1,321 @@
+########################### 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 = "25.11.2k";
+$version = "0.2.3";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$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 }
+ body.online { background-color: 444444; background-image: none }
+ 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 "<html><head>";
+print "<meta http-equiv=\"refresh\" content=\"20\" URL=\"online.pl?room=$room\">" if ($_[1] eq "online");
+print <<END;
+ <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_alias { # Chatter aus dem System entfernen, die älter als 60 Sekunden sind
+ my $dir2rm = $_[0];
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &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/$_");
+ }
+ }
+ }
+ }
+}
+
+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_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,$method) = @_;
+ my $ip;
+ for($i=0 ;$i<=5;) {
+ &read_file("data/online/ident/$alias2check");
+ $ip = <DATEI>;
+ close DATEI;
+ if ($ip ne $ENV{'REMOTE_ADDR'}) {
+ $i++;
+ } else {
+ goto ENDCHECKIP
+ }
+ if ($i<=5) {
+ &log("system","\"secure_ip\"");
+ if ($method eq undef) {
+ &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.");
+ } else {
+ &post_prv("$alias2check","<font color=red>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.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+ }
+ENDCHECKIP:
+}
+
+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.3/help_html b/0.2.3/help_html
new file mode 100644
index 0000000..79b94fa
--- /dev/null
+++ b/0.2.3/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>