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