diff options
Diffstat (limited to '0.2.5a2')
| -rw-r--r-- | 0.2.5a2/INSTALL.txt | 103 | ||||
| -rw-r--r-- | 0.2.5a2/LIESMICH.txt | 45 | ||||
| -rw-r--r-- | 0.2.5a2/TODO.txt | 27 | ||||
| -rw-r--r-- | 0.2.5a2/UPDATES.txt | 75 | ||||
| -rw-r--r-- | 0.2.5a2/bar.gif | bin | 0 -> 231 bytes | |||
| -rw-r--r-- | 0.2.5a2/config.pm | 320 | ||||
| -rw-r--r-- | 0.2.5a2/help.sno | 54 | ||||
| -rw-r--r-- | 0.2.5a2/htdocs.pl | 206 | ||||
| -rw-r--r-- | 0.2.5a2/index.pl | 368 | ||||
| -rw-r--r-- | 0.2.5a2/main.pl | 633 | ||||
| -rw-r--r-- | 0.2.5a2/main2.pl | 571 | ||||
| -rw-r--r-- | 0.2.5a2/online.pl | 56 | ||||
| -rw-r--r-- | 0.2.5a2/push.pl | 97 | ||||
| -rw-r--r-- | 0.2.5a2/setup.sh | 40 | ||||
| -rw-r--r-- | 0.2.5a2/unten.gif | bin | 0 -> 662 bytes | |||
| -rw-r--r-- | 0.2.5a2/yBanner.gif | bin | 0 -> 5185 bytes | |||
| -rw-r--r-- | 0.2.5a2/yBanner2.gif | bin | 0 -> 2105 bytes | |||
| -rw-r--r-- | 0.2.5a2/yChat.jpg | bin | 0 -> 50407 bytes |
18 files changed, 2595 insertions, 0 deletions
diff --git a/0.2.5a2/INSTALL.txt b/0.2.5a2/INSTALL.txt new file mode 100644 index 0000000..77c4628 --- /dev/null +++ b/0.2.5a2/INSTALL.txt @@ -0,0 +1,103 @@ +#############################################################################
+## yChat.de Version 0.2.5 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
+help.sno => Datei beinhaltet alle Chatbefehle
+
+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 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 wird Protokolliert, wann sich die Benutzer zum letzten mal eingelogt haben:
+ ./cgi-bin/yChat/data/user/lastlogin/*
+
+- 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. Die
+ Verzeichnisse der Räume werden automatisch erstellt.
+ ./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
+ yBanner.gif => 400x40 yChat-Banner
+ yBanner2.gif => 88x31 yChat-Banner
+
+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.5a2/LIESMICH.txt b/0.2.5a2/LIESMICH.txt new file mode 100644 index 0000000..1bfe3d9 --- /dev/null +++ b/0.2.5a2/LIESMICH.txt @@ -0,0 +1,45 @@ +#############################################################################
+## yChat.de Version 0.2.5 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.install.yChat.de => Installationsdokumentation
+ www.liesmich.yChat.de => Allgemeine Bedingungen usw.
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript zum testen
+
+Vielen Dank an:
+
+ - Andreas Buchwald für die Programmierung des "Nach-UntenScroll-JavaScripts"
+ (www.anklepper.de).
+
+ - Michi aka Snoopy für die Erstellung und Anregung der Farbtabelle
+ (www.berlin-singeltreff.de).
+
+ - Peacemaker für die Erstellung des yChat-Logos
+ (www.peaceplace.de).
diff --git a/0.2.5a2/TODO.txt b/0.2.5a2/TODO.txt new file mode 100644 index 0000000..80440ce --- /dev/null +++ b/0.2.5a2/TODO.txt @@ -0,0 +1,27 @@ +Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Totale Onlinezeit der einzelnen Chatter soll protokolliert
+ werden. Daraus wird dann eine Top20 der Chatter erstellt.
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Java-Applet-Eingabezeile für einen flüssigeren Chat
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-)
\ No newline at end of file diff --git a/0.2.5a2/UPDATES.txt b/0.2.5a2/UPDATES.txt new file mode 100644 index 0000000..f746a96 --- /dev/null +++ b/0.2.5a2/UPDATES.txt @@ -0,0 +1,75 @@ +########################### 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.4 auf 0.2.5
vom 15.12.2k + - Derjenige, der einen Raum zuerst betritt, hat Raumbesetzerrechte.
+ - Raumbesetzer, Wächter und Oberwächte können weitere Raumbesetzer
+ bestimmen. Diese können Raumbeseter auch wieder degradieren.
+ - Raumbesetzer, Wächter und Oberwächter können dem aktuellen Raum
+ auf/absperren und Themen geben. Wächter und Oberwächter können
+ abgesperrte Räume betreten.
+ - Das Verzeichnis ".data/htdocs" wurde entfernt. Die Datei help_html
+ heist nun help.sno und befindet sich im yChat-Hauptverzeichnis.
+ - Das Verzeichnis ".data/user/lastlogin" wurde hinzugefügt. Hier
+ wird beim erfolgreichen Einloggen ein "Timestamp" gesetzt. Später
+ sollen Oberwächter "veraltete" Benutzer entfernen können.
+ - Neuer Oberwächterbefehl: "/kill Alias" entfernt Alias ganz und gar
+ vom System. Oberwächter und Wächter können nicht entfernt werden.
+ - Perl-Cache wurde im gesamten System komplett deaktiviert ( Weniger
+ Ladezeiten der HTML-Dokumente ).
+ - Nur Nachrichten aus dem Raum "Cyberbar" werden gelogt.
+ Selbsterstellte Räume werden nichtmehr gelogt. Viele Logfunktionen
+ wurden entfernt (weniger Serverbalast).
+ - Beseitigung einiger kleinen Bugs.
+ - Unter "Optionen" im Chat wir die Farbe nun mit einem Drop-Down-Menü
+ ausgewählt ( Vielen dank an Michi aka Snoopy ).
+ - Auf der Startseite wird nun angezeigt wieviele Benutzer eingelogt
+ sind. Ist keiner eingelogt, dann wird das System "aufgeräumt". D.h.
+ Dateien die nicht mehr gebraucht werden und noch nicht gelöscht
+ wurden werden entfernt ( z.B. Nachrichtendateien der einzelnen
+ Chatter und die Dateien die die IP-Nummern der eingelogten Benutzer
+ beinhalteten usw.).
+ - Hunzufügung einer TODO-Liste. Hier sind mehrere Funktionen
+ vermerkt, die in späteren yChat-Versionen eingebaut werden sollen.
+ (www.todo.yChat.de oder TODO.txt).
+
+Update von 0.2.3 auf 0.2.4 - 30.11.2k
+ - Optimierung bzw. Verbesserung der Push-Routine push.pl.
+ - Server-Ping wurde von 2-Pings-per-Minute auf 4 erhöht.
+ - yChat-Banner wurde erstellt und ist unter
+ documents.yChat.de/yBanner.jpg vorzufinden.
+ - Unter der URL servers.yChat.de wurde eine Serverliste angelegt,
+ welche anzeigt wo yChat-Systeme laufen.
+ - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de
+ und liesmich.yChat.de eingerichtet.
+ - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer
+ Auflösung von 800x600 nur eine Zeile belegen.
+ - Einige Bugs wurden entfernt.
+
+Update von 0.2.2 auf 0.2.3 - 25.11.2k
+ - Smooth scrolling JavaScript ( Vielen Dank an Andreas Buchwald ).
+ - "IP#-Fehler" wurde so gut wie beseitigt.
+ - 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 auf 0.2.2 - 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 auf 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden nun anders verwaltet.
+
+Update von Alpha XVIII auf 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ überarbeitet.
+ - Neue Versionsnumern wurden eingeführt.
\ No newline at end of file diff --git a/0.2.5a2/bar.gif b/0.2.5a2/bar.gif Binary files differnew file mode 100644 index 0000000..61d02b7 --- /dev/null +++ b/0.2.5a2/bar.gif diff --git a/0.2.5a2/config.pm b/0.2.5a2/config.pm new file mode 100644 index 0000000..029394a --- /dev/null +++ b/0.2.5a2/config.pm @@ -0,0 +1,320 @@ +# yChat - Copyright by Paul C. Bütow
+
+########################### 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 = "16.12.2k";
+$version = "0.2.5a2";
+$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("$msg2post") if ($room eq "Cyberbar");
+}
+
+
+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("$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 ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ 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>");
+ } elsif ($method ne "kick") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ }
+ &rm_rstat($room,$alias) if ($room ne undef);
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind
+ my ($dir2rm,$rstatroom) = @_;
+ &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/$_");
+ &rm_rstat($rstatroom,$_) if ($rstatroom ne undef);
+ }
+ }
+ }
+ }
+}
+
+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);
+ if ($#dir2 = 1) {
+ rmdir("data/online/rooms/$_");
+ }
+ }
+ }
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($rstatroom,$r_alias) = @_;
+ &read_file("data/online/rstat/$rstatroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $newfile = $rstat[0].$rstat[1];
+ for ($i=2;$i<=$#rstat;$i++) {
+ $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n");
+ }
+ write_file_new("data/online/rstat/$rstatroom");
+ print DATEI $newfile;
+ 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,$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) {
+ 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 = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten
\ No newline at end of file diff --git a/0.2.5a2/help.sno b/0.2.5a2/help.sno new file mode 100644 index 0000000..8fe0455 --- /dev/null +++ b/0.2.5a2/help.sno @@ -0,0 +1,54 @@ +<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>Farbe/n (<font color=red>Namensfarbe</font> / <font color=ffa500>Textfarbe</font>) wechseln. Angabe in Hexadezimal.</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 <font color=red>Aktion</font></div></td><td><div>Handeln mit 2 Farben</div></td></tr> +<tr><td><div>NC</div></td><td><div>/me <font color=red>Aktion</font></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.</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</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 und nach 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 <font color=red>Raum</font></div></td><td><div>Zeigt an, wer sich im <font color=red>Raum</font> befindet. Wird kein Raum angegeben, dann wird jedeglich angezeigt, wer sich im System 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=778899>RB</font></div></td><td><div>/l</div></td><td><div>Der aktuelle Raum wird ab- bzw. aufgesperrt</div></td></tr> +<tr><td><div><font color=778899>RB</font></div></td><td><div>/rsu <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> die Raumbesetzerrechte entnehmen</div></td></tr> +<tr><td><div><font color=778899>RB</font></div></td><td><div>/su <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Raumbesetzer ernennen</div></td></tr> +<tr><td><div><font color=778899>RB</font></div></td><td><div>/t <font color=red>Thema</font></div></td><td><div>Dem aktuellen Raum wird ein <font color=red>Thema</font> gegeben</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>/kill <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird ganz und gar aus dem System entfernt</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 existierenden Räumen)</div></td></tr> +</table><hr> +<div> + Zur Erklärung: NC steht für "Normale Chatter", RB für "Raumbesetzer", WÄ für "Wächter" und OW für "Oberwächter". + Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n werden.<br><br> + Allerdings gibt es folgendes zu beachten: Oberwächter verfügen über alle Chatbefehle. Normale Wächter über alle Chatbefehle, außer über die der Oberwächter. + Raumbesetzer können nur Raumbesetzerbefehle und die Befehle der normalen Chatter durchführen. Normale Chatter haben jedeglich die Standardbefehle zu verwenden.<br><br> + Weitere Besonderheiten der Wächter und Oberwächter:<br><br> + Wächter und Oberwächter können ....<br> + ... abgesperrte Chaträume problemlos betreten.<br> + ... nicht gekickt, verbannt oder gekillt werden.<br> + ... Logdateien der Cyberbar lesen.<br><br> + + Des weiteren: Oberwächter ernennt nur der Systemadministrator! +</div> +</body> +</html>
\ No newline at end of file diff --git a/0.2.5a2/htdocs.pl b/0.2.5a2/htdocs.pl new file mode 100644 index 0000000..c1008a7 --- /dev/null +++ b/0.2.5a2/htdocs.pl @@ -0,0 +1,206 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +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("help.sno","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; +} elsif ($var eq "bar_html") { + print + $q->start_html(-bgcolor=>"ffa500"), + $q->end_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=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>] + [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Optionen</a>] + [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzer</a>] + [<a href="htdocs.pl?var=help_html" target="Befehle">Befehle</a>] + [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Board</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">Logs</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">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 = $_; + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + &list_dir("data/online/rooms/$room",2); + local $nr = $#dir2-1; + print $q->b( $_ ), + " $door ($nr) Raumthema: $rstat[1]", + $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") { + print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" 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" }, + "$_" ), + " "; + } + } + } 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." ), + $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.5a2/index.pl b/0.2.5a2/index.pl new file mode 100644 index 0000000..bd2ce53 --- /dev/null +++ b/0.2.5a2/index.pl @@ -0,0 +1,368 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +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; +&list_dir("data/online/users"); +my $logtin = $#dir-1; +&start_html("Created by Paul C. Bütow 2k"); +print <<END; + <center> + <table width=400> + <tr> + <td> + <b> + <div> + $title - ( <a href="http://servers.yChat.de">yChat-Servers</a> ) + <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 + } +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. Es sind z.Z. $logtin Benutzer online. + </td> + </tr> + </table> + </center> +</body> +</html> +END + if ($logtin == 0) { + &list_dir("data/msgs"); + &list_dir("data/online/rstat",2); + foreach(@dir) { + unlink("data/msgs/$_"); + unlink("data/online/ident/$_"); + } + foreach(@dir2) { + unlink("data/online/rstat/$_"); + } + } + # Falls d. Skript das Raumverz. gelöscht hat, neu anlegen + if (-d "data/online/rooms") { + } else { + mkdir "data/online/rooms", 0777; + } +} + + +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") { + $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; + &write_file_new("data/user/lastlogin/$alias"); + print DATEI time; + close DATEI; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + if ($lognotexists eq "true") { + } + &login_html; # Falls Login-Daten inkorrekt sind, zurück zur Startseite. +} + +sub create_alias { # Erstellung eines neuen Benutzers. + if ($alias =~ /[\W]/ || $alias eq "") { + &create_alias_html("alias_prohibited");; + exit; + } elsif ($id ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + &list_dir("data/user/options"); + for (my $i=0; $i<=$#dir; $i++) { + if ($dir[$i] eq $alias) { + &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>"); + &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,*,55"> + <frame name="menu" src="htdocs.pl?alias=$alias&var=menu_html&room=$room&col=$col&secol=$secol" 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.5a2/main.pl b/0.2.5a2/main.pl new file mode 100644 index 0000000..3934423 --- /dev/null +++ b/0.2.5a2/main.pl @@ -0,0 +1,633 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +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 "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>"); + } + if ($action ne "" && $action ne "whisper" && $action ne "away") { + print "<html><head><script language=\"JavaScript\">"; + if ($action eq "change_room") { + print "open(\"online.pl?alias=$alias&room=$room\",\"online\");"; + 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 "<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> +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. + $msg =~ s#<#<\;#g; # HTML-Tags deaktivieren + $msg =~ s#kilahu#yChat#g; + $msg =~ s#ooperle#ooper!#g; + if (substr($msg,0,1) ne "/") { # Überprüfen, ob Befehl oder Nachricht + $msg = "<b><font color=$col>$alias: <font color=$secol>".$msg."</font></font></b>"; + $msg =~ s#"#''#g; # " in '' umtauschen für den Befehl "//" + &input_html("true","",$id,$msg); # -> Reload=true, Action=none, Whisper=$id + &secure_checkip($alias,1); + &post($msg); + } else { + &secure_checkip($alias,2); + &cmd($msg); + } +} + +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; + &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") { + &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"); + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + my ($is,$nr) = ("t",0); + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + &post_prv("$alias","<font size=2 color=ffffff>$room $door ($nr) [".$rstat[1]."] : <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); + &read_file("data/online/rstat/$_"); + my @rstat = <DATEI>; + close DATEI; + my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n"); + my $nr = $#dir2-1; + $msg2post = $msg2post."<tr><td><b><font size=2 color=ffffff>$_ $door ($nr) [".$rstat[1]."] </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>"); +#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -< + } elsif ($cmd eq "l") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $lock = "0\n"; + &zeit; + if ($room eq "Cyberbar") { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ohne Erfolg ab ...</font></i>"); + } else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum ab ...</font></i>"); + } else { + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias sperrt den Raum auf ...</font></i>"); + } + for ($i=1;$i<=$#r_stat;$i++) { + $lock = $lock.$r_stat[$i]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $lock; + close DATEI; + } + } +#############>- RAUMBESETZER ERNENNEN -< + } elsif ($cmd eq "su") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2su = $cmd[1]; + &list_dir("data/online/rooms/$room"); + foreach(@dir) { + if ($_ eq $alias2su) { + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + &hirachie($alias2su); + &prove_besetzer($alias2su,$room); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + &input_html($reload,$action,$whisper); + &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)</font>"); + exit; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias ernennt \"$alias2su\" zum Raumbesetzer ...</font></i>"); + &write_file("data/online/rstat/$room"); + print DATEI $alias2su."\n"; + close DATEI; + &input_html("true",$action,$whisper); + exit; + } + } + &post_prv($alias,"<font color=ffa500>$alias2su</font> <font color=ffffff> kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)</font>"); + } +#############>- RAUMBESETZER ENTNENNEN -< + } elsif ($cmd eq "rsu") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $alias2rsu = $cmd[1]; + &read_file("data/online/rstat/$room"); + my @rstat = <DATEI>; + close DATEI; + &prove_besetzer($alias2rsu,$room); + if ($r_besetzer eq "true") { + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ...</font></i>"); + my $newrstat = $rstat[0].$rstat[1]; + for ($i=2;$i<=$#r_stat;$i++) { + $newrstat = $newrstat.$r_stat[$i] if ($r_stat[$i] ne $alias2rsu."\n"); + } + &write_file_new("data/online/rstat/$room"); + print DATEI $newrstat; + close DATEI; + } else { + &post_prv($alias,"<font size=2 color=ffa500>$alias2rsu <font color=ffffff>ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !</font></font>"); + } + } +#############>- RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "t") { + &prove_besetzer($alias,$room); + &hirachie($alias); + if ($r_besetzer eq "true" || $hirachie eq "wa" || $hirachie eq "ow") { + my $theme; + for ($i=1; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias gibt dem Raum das Thema <font color=red>( $theme )</font> ...</font></i>"); + $theme = $r_stat[0].$theme."\n"; + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]; + } + write_file_new("data/online/rstat/$room"); + print DATEI $theme; + close DATEI; + } +#############>- 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>"); + } + } + &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>"); + } 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>"); + } + } 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>"); + } 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>"); + } 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>",$_); + &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>"); + } +#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -< + } elsif ($cmd eq "kill") { + &hirachie($alias); + if ($hirachie eq "ow") { + my $alias2kill = $cmd[1]; + &hirachie($alias2kill); + if ($hirachie eq "ow") { + &post_prv($alias,"<font size color=ffa500>$alias2kill</font> <font color=ffffff>ist Oberwächter und kann nicht aus dem System entfernt werden !</font>"); + } elsif ($hirachie eq "wa") { + &post_prv($alias,"<font size color=ffa500>$alias2kill</font> <font color=ffffff>ist Wächter und kann nicht aus dem System entfernt werden !</font>"); + } else { + unlink("data/user/options/$alias2kill"); + unlink("data/user/profiles/$alias2kill"); + unlink("data/user/gbooks/$alias2kill"); + unlink("data/user/counts/$alias2kill"); + unlink("data/user/lastlogin/$alias2kill"); + &zeit; + &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias killt \"$alias2kill\" ganz und gar aus dem System ...</font></i>"); + } + } + #############>- 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>"); + } +#############>- 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>"); + } 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>"); + } 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>"); + } + } 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>"); + } + } 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>"); + } 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>"); + } + } + } +#############>- ENDE DER CHATBEFEHLE -< +} +&input_html($reload,$action,$whisper); +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + # Überprüfen, ob Alias Raum betreten darf + &read_file("data/online/rstat/$newroom"); + my @rstat = <DATEI>; + close DATEI; + if ($rstat[0] eq "1\n") { + &hirachie($alias); + if ($hirachie eq "wa" || $hirachie eq "ow") { + } else { + &post_prv("$alias","<font size=2 color=ffffff>Der Raum \"<font color=ffa500>$newroom</font>\" ist leider abgesperrt!</font>"); + &input_html("true",$action,$id); + exit; + } + } + $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>"); + } + # Sicherheitshalber Alias erneuert entf. + unlink("data/online/rooms/$oldroom/$alias"); + &rm_rstat($oldroom,$alias); + &rm_rooms; +} + +sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat + my ($r_alias,$r_room) = @_; + $r_besetzer = "false"; + &read_file("data/online/rstat/$r_room"); + @r_stat = <DATEI>; + close DATEI; + for($i=2;$i<=$#r_stat;$i++) { + $r_besetzer = "true" if ($r_stat[$i] eq $r_alias || $r_stat[$i] eq $r_alias."\n"); + } +}
\ No newline at end of file diff --git a/0.2.5a2/main2.pl b/0.2.5a2/main2.pl new file mode 100644 index 0000000..76f161b --- /dev/null +++ b/0.2.5a2/main2.pl @@ -0,0 +1,571 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +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#<#<\;#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]; + local $counter = undef; + &read_file("data/user/counts/$tmp"); + $counter = <DATEI>; + close DATEI; + $counter++; + &write_file_new("data/user/counts/$tmp"); + print DATEI $counter; + close DATEI; + &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> + Dieses Profil wurde insgesamt schon $counter mal aufgerufen ! + <br> + <br> + 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): + <br> + <select NAME="col" size="1"> + <option selected value="$col">($data[1])</option> + <option value="0000FF">Blau (1)</option> + <option value="008000">Grün</option> + <option value="000000">Schwarz</option> + <option value="808000">Oliv</option> + <option value="000080">Marineblau</option> + <option value="800080">Purpur</option> + <option value="808080">Braun</option> + <option value="FF00FF">Fuchsia</option> + <option value="008080">Stahlblau</option> + <option value="333333">Mittelschwarz</option> + <option value="003399">BärBlau</option> + <option value="0066CC">Blau (2)</option> + <option value="009933">Grün</option> + <option value="006666">Oliv</option> + <option value="FF0000">VollRot</option> + <option value="CC0000">RostRot</option> + <option value="990099">Lila</option> + <option value="FF00FF">Pink</option> + <option value="FF9900">Orange</option> + <option value="CC6600">Ocker</option> + <option value="996600">Braun</option> + <option value="666666">Grau</option> + <option value="0A6307">Dunkelgrün</option> + <option value="9C1B7C">Dunkellila</option> + <option value="3D0DB9">Dunkelblau</option> + <option value="8FA5ED">Hellblau</option> + <option value="FFFF00">Gelb</option> + <option value="3D4863">?????</option> + </select> + </div> + <br> + <div> + Deine zweite Farbe (Farbe Deiner Nachrichten): + <br> + <select NAME="secol" size="1"> + <option selected value="$col">($data[2])</option> + <option value="0000FF">Blau (1)</option> + <option value="008000">Grün</option> + <option value="000000">Schwarz</option> + <option value="808000">Oliv</option> + <option value="000080">Marineblau</option> + <option value="800080">Purpur</option> + <option value="808080">Braun</option> + <option value="FF00FF">Fuchsia</option> + <option value="008080">Stahlblau</option> + <option value="333333">Mittelschwarz</option> + <option value="003399">BärBlau</option> + <option value="0066CC">Blau (2)</option> + <option value="009933">Grün</option> + <option value="006666">Oliv</option> + <option value="FF0000">VollRot</option> + <option value="CC0000">RostRot</option> + <option value="990099">Lila</option> + <option value="FF00FF">Pink</option> + <option value="FF9900">Orange</option> + <option value="CC6600">Ocker</option> + <option value="996600">Braun</option> + <option value="666666">Grau</option> + <option value="0A6307">Dunkelgrün</option> + <option value="9C1B7C">Dunkellila</option> + <option value="3D0DB9">Dunkelblau</option> + <option value="8FA5ED">Hellblau</option> + <option value="FFFF00">Gelb</option> + <option value="3D4863">?????</option> + </select> + </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; + &edit_html("edit_profile_html","edit_profile_ok"); + } elsif ($method eq "edit_options") { + if ($id ne $tmp) { + &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; + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.2.5a2/online.pl b/0.2.5a2/online.pl new file mode 100644 index 0000000..cdc0d43 --- /dev/null +++ b/0.2.5a2/online.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; # CGI-Modul laden +$q = new CGI; + +require config; # config.pm in Dokument laden + +print + $q->header(); # HTTP-Header erzeugen + +&secure_checkip($alias); +&start_html("Online","online"); +&online($alias,$room); +&list_dir("data/online/rooms/".$room); +print + $q->div( "$room:" ), + "<font size=1 color=ffffef face=arial>"; + foreach $online (@dir) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "</font>", + $q->end_html; + +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") { # Falls Raum nicht existiert anlegen + } else { + &write_file_new("data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias\n"; + close DATEI; + 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; + } +} diff --git a/0.2.5a2/push.pl b/0.2.5a2/push.pl new file mode 100644 index 0000000..1cc55f0 --- /dev/null +++ b/0.2.5a2/push.pl @@ -0,0 +1,97 @@ +#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI;
+CGI->compile(':all');
+$q = new CGI;
+
+$| = 1; # Cache von Perl ausschalten
+
+print
+ $q->header; # HTML-Header erzeugen
+
+require config;
+
+&secure_checkip($alias);
+
+########################################
+##ANFANG DER ZU STREAMENDEN HTML-DATEI##
+########################################
+
+print <<END;
+<html>
+ <head>
+<script language="JavaScript">
+<!--
+// Scroll-Routine von Anklepper (http://www.anklepper.de)
+// speziell für yChat (http://www.yChat.de), Copyright 2000
+scrolling = true;
+moves_steps = 4; // Schrittgröße
+moves_interval = 4; // Schrittgeschwindigkeit
+
+function moves()
+{
+ if( scrolling != false )
+ window.scrollBy( 0, moves_steps );
+ window.setTimeout( "moves()", moves_interval );
+}
+
+moves();
+//-->
+</script>
+ </head>
+<body bgcolor=000000 link=FFFFFF alink=FFFFEF vlink=FFFFEF>
+END
+
+#############################
+##BEGRÜSSUNGSTEXT SCHREIBEN##
+#############################
+
+my $msgfile;
+
+ print
+ $q->font( { -size=>1,
+ -color=>"ffffff",
+ -face=>"arial"},
+ "$title Created & Copyright by Paul C. Bütow $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 PUSH##
+###############################
+
+my ($times,$online) = (0,"false");
+for (;;) {
+ for ($curpos = tell(MSGFILE); <MSGFILE>; $curpos = tell(MSGFILE)) {
+ print $_ ;
+ }
+ $times++;
+ if ($times > 14) { # Nach 15 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;
+ }
+ $online = "false"
+ }
+ sleep 1;
+ seek(MSGFILE, $curpos, 0); # Position wiederherstellen
+}
+
diff --git a/0.2.5a2/setup.sh b/0.2.5a2/setup.sh new file mode 100644 index 0000000..71d0b60 --- /dev/null +++ b/0.2.5a2/setup.sh @@ -0,0 +1,40 @@ +#!/bin/sh +mkdir data +mkdir data/logs +chmod 777 data/logs +mkdir data/msgs +chmod 777 data/msgs +mkdir data/user +chmod 777 data/user +mkdir data/user/counts +chmod 777 data/user/counts +mkdir data/user/options +chmod 777 data/user/options +mkdir data/user/profiles +chmod 777 data/user/profiles +mkdir data/user/gbooks +chmod 777 data/user/gbooks +mkdir data/user/lastlogin +chmod 777 data/user/lastlogin +mkdir data/online +chmod 777 data/online +mkdir data/online/rooms +chmod 777 data/online/rooms +mkdir data/online/rstat +chmod 777 data/online/rstat +mkdir data/online/users +chmod 777 data/online/users +mkdir data/online/ident +chmod 777 data/online/ident +chmod 777 data/htdocs/* +chmod 777 * +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.jpg ../../htdocs/yChat/ +echo +echo yChat Setup beendet ... +echo Created and copyrighted by Paul C. Bütow aka Snooper +echo + diff --git a/0.2.5a2/unten.gif b/0.2.5a2/unten.gif Binary files differnew file mode 100644 index 0000000..285fb53 --- /dev/null +++ b/0.2.5a2/unten.gif diff --git a/0.2.5a2/yBanner.gif b/0.2.5a2/yBanner.gif Binary files differnew file mode 100644 index 0000000..e4b691e --- /dev/null +++ b/0.2.5a2/yBanner.gif diff --git a/0.2.5a2/yBanner2.gif b/0.2.5a2/yBanner2.gif Binary files differnew file mode 100644 index 0000000..0e9684e --- /dev/null +++ b/0.2.5a2/yBanner2.gif diff --git a/0.2.5a2/yChat.jpg b/0.2.5a2/yChat.jpg Binary files differnew file mode 100644 index 0000000..61eabfb --- /dev/null +++ b/0.2.5a2/yChat.jpg |
