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.4.7a2/CREDITS.txt | 30 ++ 0.4.7a2/README.txt | 24 ++ 0.4.7a2/SETUP.txt | 136 ++++++++ 0.4.7a2/TODO.txt | 36 +++ 0.4.7a2/UPDATES.txt | 192 +++++++++++ 0.4.7a2/colors.sno | 290 +++++++++++++++++ 0.4.7a2/config.pm | 247 ++++++++++++++ 0.4.7a2/help.sno | 57 ++++ 0.4.7a2/htdocs.pl | 241 ++++++++++++++ 0.4.7a2/index.pl | 421 ++++++++++++++++++++++++ 0.4.7a2/input.pl | 194 +++++++++++ 0.4.7a2/main.pl | 912 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 0.4.7a2/main2.pl | 594 ++++++++++++++++++++++++++++++++++ 0.4.7a2/online.pl | 71 ++++ 0.4.7a2/push.pl | 112 +++++++ 0.4.7a2/setup.sh | 50 +++ 0.4.7a2/y.gif | Bin 0 -> 5408 bytes 0.4.7a2/yIntro.swf | Bin 0 -> 15455 bytes 0.4.7a2/ySymbol.swf | Bin 0 -> 9548 bytes 0.4.7a2/y_.gif | Bin 0 -> 1518 bytes 20 files changed, 3607 insertions(+) create mode 100644 0.4.7a2/CREDITS.txt create mode 100644 0.4.7a2/README.txt create mode 100644 0.4.7a2/SETUP.txt create mode 100644 0.4.7a2/TODO.txt create mode 100644 0.4.7a2/UPDATES.txt create mode 100644 0.4.7a2/colors.sno create mode 100644 0.4.7a2/config.pm create mode 100644 0.4.7a2/help.sno create mode 100644 0.4.7a2/htdocs.pl create mode 100644 0.4.7a2/index.pl create mode 100644 0.4.7a2/input.pl create mode 100644 0.4.7a2/main.pl create mode 100644 0.4.7a2/main2.pl create mode 100644 0.4.7a2/online.pl create mode 100644 0.4.7a2/push.pl create mode 100644 0.4.7a2/setup.sh create mode 100644 0.4.7a2/y.gif create mode 100644 0.4.7a2/yIntro.swf create mode 100644 0.4.7a2/ySymbol.swf create mode 100644 0.4.7a2/y_.gif (limited to '0.4.7a2') diff --git a/0.4.7a2/CREDITS.txt b/0.4.7a2/CREDITS.txt new file mode 100644 index 0000000..6f2a6cc --- /dev/null +++ b/0.4.7a2/CREDITS.txt @@ -0,0 +1,30 @@ +########################### yChat.de CREDITS ################################ +## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ## +############################################################################# + +Vielen Dank an alle Personen, dir mit geholfen haben ( und immernoch helfen ) +yChat besser zu machen: + + - Andreas Buchwald aka Anklepper, für ... + ... die Programmierung des "Nach-UntenScroll-JavaScripts", des + "Nachrichten-Verlauf-JavaScripts" im Texteingabeframe. + ... die technische Umsetzung, daß sich das Inputframe bei jedem + Textposting nicht wieder reloadet. + ... ein nettes JavaScript, welches erlaubt, Formularwerte + frameübergreifend zu ändern. + ... die Erstellung der Flashanimationen. + ... die Programmierung der Auto-Away- und der Auto-Logout Funktion. + ( www.anklepper.de ). + + - Dave aka Truhe, für ... + ... die Erstellung der Farbtabelle unter Chatoptionen inkl. + Auswähl-JavaScript! + ... die Erstellung einiger CSS. + ... die Unterstützung der Umsetzung der Auto-Away- und Auto-Logout + Funktion. + ( maligree.yi.org ) + + - Florian Bütow aka Coke, für die Programmierung des Top 20 Ranking Skripts + in PHP4 ! + + - Larry Wall, für die Erfindung von Perl ! \ No newline at end of file diff --git a/0.4.7a2/README.txt b/0.4.7a2/README.txt new file mode 100644 index 0000000..b67f15e --- /dev/null +++ b/0.4.7a2/README.txt @@ -0,0 +1,24 @@ +############################## yChat.de README ############################## +## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.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 www.home.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 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. \ No newline at end of file diff --git a/0.4.7a2/SETUP.txt b/0.4.7a2/SETUP.txt new file mode 100644 index 0000000..b1e17f8 --- /dev/null +++ b/0.4.7a2/SETUP.txt @@ -0,0 +1,136 @@ +############################## yChat.de SETUP ############################### +## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.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 +einrichten: + +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 => Generiert dynamische HTML-Inhalte +index.pl => Startskript (Registrierung, Login, Chatframeset) +input.pl => Skript für das Chateingabeframe +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 +README.txt => Beinhaltet wichtige Informationen +UPDATES.txt => Updateliste der verschiedenen Versionen +CREDITS.txt => Personen, die geolfen haben yChat zu proggen +SETUP.txt => Dieses Dokument +colors.sno => Datei beinhaltet alle Farben in hex. für die Chatoptionen +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 und wie lange die Chatter schon online waren: + ./cgi-bin/yChat/data/user/counts/* + +- Hier werden alle Memos abgespeichert. + ./cgi-bin/yChat/data/user/memos/* + +- 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 abgespeichert, wann der der jew. benutzer zum letzten mal das + System betreten hat. + ./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 PIDs (Process IDs) der Chatter in den jew. Räumen. + ./cgi-bin/yChat/data/online/pids/* + +- Hier befinden sich alle Chatter, die sich z.Z. im System befinden + ./cgi-bin/yChat/data/online/users/* + +- Hier befinden sich alle IP-Nummern und TempIDs der eingelogten Chatter + ./cgi-bin/yChat/data/online/ident/* + +Alle Grafikdateien (+.gif und *.jpg) sollten in ein nicht-CGI-BIN-Verzeichnis +kopiert werden. Z.B. nach ./yChat/. + +Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. +Allerdings sollten die Copyright Hinweise und die Versionsnummern nicht +manipuliert werden. + +Im Folgendem werde ich ein wenig auf die im yChat-Sourcecode oft verwendeten . +Variablen eingehen: + + $var => Sagt dem Skript, wie es gestartet werden soll. + $alias => Teilt dem Skript den Benutzername mit. + $tmpid => Beim einloggen in den Chat wird für den Benutzer eine + temporäre ID generiert. Diese wird so wohl in der Variable + $tmpid als auch in eine Datei geschrieben. Handelt der + Benutzer, so wird vom Skript die Variable $tmpid mit dem + Eintrag in der Datei verglichen. Sind beide Werte + identisch, dann wird die Handlung des Benutzers + ausgeführt. Stimmen die Werte nicht überein, dann wird + die Fehlermeldung, daß der Benutzer die falsche $tmpid hat + um mit $alias zu handeln,ausgegeben und das Skript beendet + sich. Dies ist eine Sicherheitsmaßnahme welche verbietet, + mit fremden Benutzernamen im System zu handeln. + $room => Sagt dem Skript, wie der aktuelle Raumname lautet. + $col => Sagt dem Skript, wie die aktuelle Chatfarbe des Nicks von + $alias lautet. + $seccol => Sagt dem Skript, wie die aktuelle Chatfarbe der Schrift von + $alias lautet. + $msg => Beinhaltet den von $alias zu postenden Text im Chat. + Hiervon wird auch in den Benutzergästebüchern und im + Benutzerboard Gebrauch gemacht. + $whisper => Beinhaltet den Benutzernamen, zu dem $alias zuletzt + geflüstert hat. + $id und $tmp => Temporäre Variablen zwecks Übermittlung diverser Daten. + $pw => Wird im Skript index.pl verwendet um das Zugangspassword + zu übermitteln. + +Viel Spaß beim Chatten ... \ No newline at end of file diff --git a/0.4.7a2/TODO.txt b/0.4.7a2/TODO.txt new file mode 100644 index 0000000..9c5ecb8 --- /dev/null +++ b/0.4.7a2/TODO.txt @@ -0,0 +1,36 @@ +############################## yChat.de TODO ################################ +## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ## +############################################################################# + +Folgende Funktionen werden demnächst evtl. in yChat integriert: + + - In den Chatoptionen sollen diverse Einstellungen des Nachrichtenverlaufes + vorgenommen werden können. + + - 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. + + - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach dem + Anfangsbuchstaben gesucht werden können (vergl. Kilahu). + + - Linux- und Windows-yChat-Client soll programmiert werden. Mit diesem läßt + sich dann im yChat chatten, ohne sich über http://www.yChat.de eingelogt zu + haben. Der Client soll gleicheitig auch als Messenger (ICQ-Like) fungieren + können (yChat-Messenger bzw. yCM). + + - 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 mail@paulbuetow.de :-) + + +www.yCm.de \ No newline at end of file diff --git a/0.4.7a2/UPDATES.txt b/0.4.7a2/UPDATES.txt new file mode 100644 index 0000000..d165c93 --- /dev/null +++ b/0.4.7a2/UPDATES.txt @@ -0,0 +1,192 @@ +########################### yChat.de UPDATE LIST ########################### +## Copyright by Paul C. Bütow 2000 - 2001 (mail@paulbuetow.de) ## +############################################################################# +Hier sind alle Erneuerungen der Versionen dokumentiert: + +Update von 0.4.7 auf 0.4.7a2 (22.01.01) + - Top 20 Ranking Liste in PHP4. + - Überarbeitung des Flash-Intros. + +Update von 0.4.6 auf 0.4.7 (20.01.01) + - Auto-Away: Ist ein Chatter 5 Minuten inaktiv, dann erscheint im + aktuellen Raum die Nachricht "Alias wurde vom System + abgemeldet ..." . Bei Wiederaufnahme des Chats, meldet sich Alias + wieder zurück. + - Auto-Logout: Ist ein Chatter 20 Minuten inaktiv, dann wird dieser + aus dem System automatisch ausgelogt. + - Neue CSS für die Formulareingabefelder und dem Chat-Menü. + (Funktioniert allerdings nicht mit NN4.x, hier werden alle + Formulareingabefelder ohne CSS-Definitionen angezeigt.) + +Update von 0.4.5 auf 0.4.6 (18.01.01) + - Verbesserung: Beim Posten einer neuen Chatnachricht wird sogleich + ein Signal an alle laufenden Chatprozesse (PIDs) gesendet, so daß + diese aufgefordert werden, aus der Nachrichtendatei die neuen + Zeilen einzulesen. Das Push-Skript (push.pl) muß so nicht jede + Sekunde prüfen, ob neue Nachrichten da sind, da es diese + Information über das Signal erhält. Das Push-Skript verbraucht nun + weniger Prozessorleistung, da es jetzt 15 Sekunden lang + "dauerschläft" (sleep 15;), lediglich einen versendet + und dann weiter schläft usw. Beendet sich push.pl, oder wird ein + Raum gewechselt, dann wird auch die PID aus der PID-Liste des + aktuellen Raums gelöscht und ggf. neu geschrieben. + Die Dateien "./data/online/pids/*" beinhalten alle aktuellen PIDs, + wobei * der jew. Raum ist. + +Update von 0.4.4 auf 0.4.5 (16.01.01) + - Jeder Chatraum hat nun eine globale Nachrichtendatei. Bisher + existierte für jeden Chatter enzelnd eine. Die Nachrichten werden + nun schneller gepostet. + - Neue Wächterbefehle: + "/st Raum Thema" ermöglicht das Ändern das Themas eines anderen + Raums. + "/sl Raum" ermöglicht das auf- und absperren eines anderen Raums. + - Nur noch Oberwächter können die Chatlogs lesen. + - Referenzierung der Variable $msg in main.pl. + - Flashanimationen. + +Update von 0.4.3 auf 0.4.4 (04.01.01) + - Optimiertung aller Chatbefehle. + - Neuer WÄ-Befehl: Mit "/ss Raum Nachricht" wird aus dem aktuellen + Raum heraus in den angegebenen Raum eine beliebige Nachricht + gerufen. + - Das Skript main.pl wurde in zwei verschiedene Skripts unterteilt: + main.pl => Beinhaltet hauptsächlich die Chatbefehle + input.pl => Beinhaltet das zu generierende Chateingabeframe. + - Das Chateingabeframe wird nun nie wieder reloadet. (Dies geschah + bisher noch nach Ausführung der Befehle /col /j /ju /msg und nach + Änderung der Chateinstellungen und erwies sich als recht nervige + Angelegenheit.) JavaScript macht es möglich. + - Überarbeitung und Erweiterung der Dokudateien. + +Update von 0.4.2 auf 0.4.3 (30.12.2k) + - Optimierung der Zuweisung der Variabeln im Programmcode: + Variablen werden nun wirklich nur deffiniert, wenn diese auch + erforderlich sind. + - Komplette Neuprogrammierung diverser Subs (nun leistungsfähiger) + - Bei Aufrug der Login-Seite wird der gesamte Chat auf leerstehende + Räume und "alte" Chatter überprüft und ggf. entfernt. + - Verbesserung diverser JavaScript-Codes. + - Editiert ein Benutzer sein Profil, so wird dies mit der Meldung + "Alias hat sein Profil geändert ..." bekanntgegeben. + - Mit "/t" ohne weiteren Text erscheint die Nachricht "Alias hat das + Thema des Raums gelöscht ..." + - Hinzufügung diverser Administratorbefehle: "/pw Alias" zeigt + Zugangspassword von Alias an. "/ow Alias" ernennt Alias zum OW. + "/row Alias" entzieht Alias die OW-Rechte. + +Update von 0.4.1 auf 0.4.2 (25.12.2k) + - Im Texteingabeformular werden nun per JavaScript die letzten 10 + Postings zwischengespeichert und können per Drop-Down-Menü + wieder in das Submittextfeld geladen werden um erneuert getextet + zu werden. + - Neues Design. + - Diverse Dateien wurden umbenannt: + INSTALL.txt -> SETUP.txt + LIESMICH.txt -> README.txt + - Die Datei CREDITS.txt wurde angelegt und somit auch die URL + www.credits.yChat.de. + +Update von 0.4.0 auf 0.4.1 (22.12.2k) + - Design wurde geändert. + - Unter "Optionen" ist nun eine komplette Farbtabelle eingebaut. + - Folgende Oberwächterbefehle wurden nun auch für normale Wächter + freigegeben: /ip /ban /rban. + +Update von 0.2.6 auf 0.4.0 (19.12.2k) + - Der berüchtigte "IP-Bug" wurde beseitigt! Und zwar wurden TempIDs + eingeführt => Eine dauerhafte Überprüfung der Benutzer-IP-Nummer + ist also nicht mehr notwendig. + - Die totale Chat-Online-Zeit wird protokolliert und kann jew. mit + "/online Alias" aufgerufen werden. Die Onlinezeit wird alle 20 Sek. + aktualisiert. + - Neue Befehle: "/seen Alias" zeigt an, vor wieviel St. sich Alias + zuletzt in das System eingelogt hat. Der Befehle "/rmgb" entfernt + alle Einträge des eigenen Benutzergästebuchs im Profil. + +Update von 0.2.5 auf 0.2.6 (17.12.2k) + - Das Eingabeframe reloaded sich nicht mehr nach jedem Posting. + Vielen Dank an Truhe aka Dave und Klepper aka Andreas Buchwald! + Bei den Chatbefehlen /col /away /j und /ju muß sich das + Eingabeframe weiterhin reloaden. + - Der Befehl // wurde entfernt. Dieser war nicht mehr erforderlich. + weil Nachrichten werden nur noch sehr selten verschluckt. Dieser + Chatbefehl postete die letzte Nachricht nocheinmal. + - Neuer Befehl: mit "/memo Alias hier der Text" hinterläßt man + Alias eine Memo. Logt sich Alias in den Chat ein, dann erhält + er diese sofort. Dafür wurde das Verzeichnis ".data/user/memos/" + angelegt. + - Programmcode wurde ein wenig optimiert. + - Das Design wurde ein wenig geändert. + - Beseitigung diverser Bugs. + +Update von 0.2.4 auf 0.2.5 (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.4.7a2/colors.sno b/0.4.7a2/colors.sno new file mode 100644 index 0000000..3640b9e --- /dev/null +++ b/0.4.7a2/colors.sno @@ -0,0 +1,290 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
0000000000330000660000990000CC0000FF
0033000033330033660033990033CC0033FF
0066000066330066660066990066CC0066FF
0099000099330099660099990099CC0099FF
00CC0000CC3300CC6600CC9900CCCC00CCFF
00FF0000FF3300FF6600FF9900FFCC00FFFF
3300003300333300663300993300CC3300FF
3333003333333333663333993333CC3333FF
3366003366333366663366993366CC3366FF
3399003399333399663399993399CC3399FF
33CC0033CC3333CC6633CC9933CCCC33CCFF
33FF0033FF3333FF6633FF9933FFCC33FFFF
6600006600336600666600996600CC6600FF
6633006633336633666633996633CC6633FF
6666006666336666666666996666CC6666FF
6699006699336699666699996699CC6699FF
66CC0066CC3366CC6666CC9966CCCC66CCFF
66FF0066FF3366FF6666FF9966FFCC66FFFF
9900009900339900669900999900CC9900FF
9933009933339933669933999933CC9933FF
9966009966339966669966999966CC9966FF
9999009999339999669999999999CC9999FF
99CC0099CC3399CC6699CC9999CCCC99CCFF
99FF0099FF3399FF6699FF9999FFCC99FFFF
CC0000CC0033CC0066CC0099CC00CCCC00FF
CC3300CC3333CC3366CC3399CC33CCCC33FF
CC6600CC6633CC6666CC6699CC66CCCC66FF
CC9900CC9933CC9966CC9999CC99CCCC99FF
CCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFF
FF0000FF0033FF0066FF0099FF00CCFF00FF
FF3300FF3333FF3366FF3399FF33CCFF33FF
FF6600FF6633FF6666FF6699FF66CCFF66FF
FF9900FF9933FF9966FF9999FF99CCFF99FF
FFCC00FFCC33FFCC66FFCC99FFCCCCFFCCFF
FFFF00FFFF33FFFF66FFFF99FFFFCCFFFFFF
\ No newline at end of file diff --git a/0.4.7a2/config.pm b/0.4.7a2/config.pm new file mode 100644 index 0000000..280f476 --- /dev/null +++ b/0.4.7a2/config.pm @@ -0,0 +1,247 @@ +# yChat - Copyright by Paul C. Bütow + +########################### Dieser Teil bestimmt die Standart-Variabeln. +##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.) +########################### +$datum = "22.01.01"; +$version = "0.4.7a2"; +$title = "yChat [$version]"; +$gfxpath = "../../yChat"; +$style = < + body { background-color: #005146 } + body.blank { background-color: #000000 } + body.online { background-color: #000000 } + div { font-family: arial, verdana, helvetiva; font-size: 9pt; color: #ffffff } + div.b { font-weight: bold; color: #ffa500 } + a { color: #ffffef; } + a:hover { color: #ffffff; } + p { font-family:verdana, arial, geneva, helvetica, sans-serif; color:#FFFFFF; font-size:12px; } + + +ENDCSS + +############### Dieser TeFil 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); + } + open(FILE2PRINT,"<$file2print"); + @file2print = ; + close FILE2PRINT; + print @file2print; +} + + +sub start_html { # Der HEADER einer HTML-Datei +print ""; +print "" if ($_[1] eq "online"); +print < + $title - $_[0] + + $_[2] + $style + +END + if ($_[1] eq "start") { + print ""; + } elsif ($_[1] ne "") { + print ""; + } else { + print ""; + } +} + +sub post { # Öffentliche Nachricht posten. + my ($room,$msg2post,$secroom) = @_; + my @rooms,@pids = $room; + @rooms = ($room,$secroom) if ($room ne $secroom); + foreach(@rooms) { + open(MSGFILE,">>data/msgs/$_"); + open(PID,"; + close PID; + close MSGFILE; + kill INT => @pids; + } + &log($msg2post) if ($room eq "Cyberbar"); +} + +sub post_prv { # Private Nachricht posten (flüstern). + my ($alias2post,$msg2post) = @_; + opendir(DIR,"data/online/rooms"); + my @dir = readdir(DIR); + closedir(DIR); + foreach $raum (@dir) { + opendir(DIR,"data/online/rooms/$raum"); + my @chatter = readdir(DIR); + closedir(DIR); + foreach $chatter (@chatter) { + if ($chatter eq $alias2post) { + open(MSGFILE,">>data/msgs/$raum"); + print MSGFILE "$alias2post<;".time."<;!<;!<;$msg2post<;\n"; + close MSGFILE; + open(PID,"; + close PID; + kill INT => @pids; + goto ENDPRV; + } + } + } +ENDPRV: +} + +sub log { # Protokollieren der Nachrichten etc. + local $msg2log = $_[0]; + &zeit; + open(LOG,">>data/logs/$day.$month.$year"); + print LOG "
($hours:$min:$sec) $msg2log\n"; + close LOG; +} + + +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 read_file { # Datei öffnen. + my $file2read = $_[0]; + if (-e "$file2read") { + open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen"); + } +} + +sub error { # Error-Ausgabe. + my $error_msg = $_[0]; + &start_html( "Error: ($error_msg)" ); + print $q->div( "Error: ($error_msg)" ), + $q->end_html; + open(ERROR,">>data/error"); + print ERROR $error_msg."\n"; + close ERROR; + exit; +} + +sub check_online { # Auf alte Räume und Chatter prüfen und ggf. entfernen. + open(PROVE,">data/online/prove"); + print PROVE time; + close PROVE; + opendir(RAUMDIR, "data/online/rooms"); + my @raumdir = readdir(RAUMDIR); + closedir(RAUMDIR); + foreach $raum (@raumdir) { + opendir(BENUTZERDIR, "data/online/rooms/$raum"); + my @benutzerdir = readdir(BENUTZERDIR); + closedir(BENUTZERDIR); + my $raumleer= 1; + foreach $benutzer (@benutzerdir) { + if (-f "data/online/rooms/$raum/$benutzer") { + $raumleer = 0; + open (BENUTZER,"; + close BENUTZER; + if ($benutzerstamp < (time - 40)) { + unlink("data/online/$raum/$benutzer"); + open (BENUTZER2,"; + close BENUTZER2; + if ($benutzerstamp2 < (time - 40)) { + if ($benutzer ne $alias) { + &rm_alias($benutzer,$raum); # ohne $raum/benutzer entf. + } else { + unlink("data/online/rooms/$raum/$benutzer"); + } + &zeit; + &post($raum,"($hours:$min:$sec) $benutzer hat den Chat verlassen ... "); + } + } + } + } + if ($raumleer == 1) { # Falls Raum leer ist => entf. + rmdir("data/online/rooms/$raum"); + unlink("data/online/rstat/$raum"); + unlink("data/online/pids/$raum"); + unlink("data/msgs/$raum"); + } + } +} + +sub rm_alias { # Falls Benutzer offline gegangen ist + my($benutzer,$raum) = @_; + unlink("data/online/rooms/$raum/$benutzer"); + unlink("data/online/users/$benutzer"); + unlink("data/online/ident/$benutzer"); + &rm_rstat($benutzer,$raum); +} + +sub rm_rstat { # Benutzer als Raumbesetzer austragen + my ($r_alias,$rstatroom) = @_; + open (RSTAT,"; + close RSTAT; + my @rstat2 = ($rstat[0],$rstat[1]); + for ($i=2;$i<=$#rstat;$i++) { + push(@rstat2,$rstat[$i]) if ($rstat[$i] ne $r_alias."\n"); + } + open (RSTAT,">data/online/rstat/$rstatroom"); + print RSTAT @rstat2; + close RSTAT; +} + + +sub secure_checkid { # TmpID überprüfen + my ($alias2check) = @_; + open(IDENT,"; + close IDENT; + if ($ident[1] ne $tmpid) { + &error("Falsche TempID ! Du bist nicht befugt zu handeln !"); + } +} + +sub hierachie { # Chatter nach Sonderrechte überprüfen. + my $alias2prove = $_[0]; + $hierachie = undef; + open(WA,"; + close WA; + foreach $wa (@was) { + if ($wa eq $alias2prove || $wa eq "$alias2prove\n") { + $hierachie = "wa"; + } + } + open(OW,"; + close OW; + if ($hierachie ne "wa" || $_ eq "$alias2prove\n") { + foreach $ow (@ows) { + if ($ow eq $alias2prove || $ow eq "$alias2prove\n") { + $hierachie = "ow"; + } + } + } +} diff --git a/0.4.7a2/help.sno b/0.4.7a2/help.sno new file mode 100644 index 0000000..558d4fd --- /dev/null +++ b/0.4.7a2/help.sno @@ -0,0 +1,57 @@ +
+ Alle Chat-Befehle: +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SU
Befehl
Beschreibung
NC
/about
Zeigt aktuelle Version und andere Infos der Community an
NC
/away Nachricht
Abmelden mit einerAbmeldenachricht
NC
/clear
Bildschirm wird gelöscht
NC
/col XXXXXX XXXXXX
Farbe/n (Namensfarbe / Textfarbe) wechseln. Angabe in Hexadezimal.
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 Aktion
Handeln mit 2 Farben
NC
/me Aktion
Handeln mit einer Farbe
NC
/memo Alias Nachricht
Alias eine Memonachricht hinterlassen
NC
/msg Alias Nachricht
Alias eine private Nachricht flüstern
NC
/ Nachricht
Eine private Nachricht demjenigen flüstern, dem zuletzt eine geflüstert wurde
NC
/online Alias
Zeigt Onlineminuten von Alias an
NC
/q
Cumunnity verlassen
NC
/rmgb
Das eigene Gästebuch komplett weglöschen
NC
/s Nachricht
Nachricht schreien
NC
/seen Alias
Zeigt an, vor wieviel Stunden sich Nachricht zum letzten Mal in das System eingelogt hat
NC
/w
Zeigt an, wer sich im aktuellen Raum befindet
NC
/wc Raum
Zeigt an, wer sich im Raum befindet. Wird kein Raum angegeben, dann wird ledeglich angezeigt, wer sich im System befindet
NC
/wc/
Zeigt alle offenen Räume und deren Chatter an
NC
/wj Alias
Zeigt an, in welchen Raum sich Alias befindet
RB
/l
Der aktuelle Raum wird ab- bzw. aufgesperrt
RB
/rsu Alias
Alias die Raumbesetzerrechte entnehmen
RB
/su Alias
Alias zum Raumbesetzer ernennen
RB
/t Thema
Dem aktuellen Raum wird ein Thema gegeben
/ban
Zeigt alle verbannten Benutzer an
/ban Alias
Alias verbannen
/rban Alias
Alias "entbannen"
/ip Alias
Zeigt die IP-Nummer von Alias an
/k Alias
Alias wird aus dem Chat katapultiert!
/ss Raum Nachricht
Eine Nachricht in Raum hinüber rufen
OW
/kill Alias
Alias wird ganz und gar aus dem System entfernt
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 existierenden Räumen)

+
+ 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.

+ 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.

+ Weitere Besonderheiten der Wächter und Oberwächter:

+ Wächter und Oberwächter können ....
+ ... abgesperrte Chaträume problemlos betreten.
+ ... nicht gekickt, verbannt oder gekillt werden.
+ ... Logdateien der Cyberbar lesen.

+ + Des weiteren: Oberwächter ernennt nur der Systemadministrator! +
+ + \ No newline at end of file diff --git a/0.4.7a2/htdocs.pl b/0.4.7a2/htdocs.pl new file mode 100644 index 0000000..61fcd77 --- /dev/null +++ b/0.4.7a2/htdocs.pl @@ -0,0 +1,241 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print + $q->header; + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +$var = $q->param("var"); +if ($var eq "help_html") { + &printfile("help.sno","Alle Chatbefehle"); +} elsif ($var eq "logo_html") { + &start_html("Logo"); +print<
+ + + + + + + + + + +
+END +print $q->end_html; +} elsif ($var eq "menu_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + $room = $q->param("room"); + $col = $q->param("col"); + $secol = $q->param("secol"); + $tmp = $q->param("tmp"); + &menu_html; +} elsif ($var eq "werda_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &werda_html; +} elsif ($var eq "logs_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &secure_checkid($alias); + &logs_html; +} elsif ($var eq "view_logs_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + $tmp = $q->param("tmp"); + &secure_checkid($alias); + &hierachie($alias); + if ($hierachie eq "ow" || $hierachie eq "wa") { + &printfile($tmp,"Logdatei","blank"); + } +} elsif ($var eq "superuser_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &secure_checkid($alias); + &superuser_html; +} else { + print + $q->start_html(-bgcolor=>"000000"), + $q->end_html; +} + +sub menu_html { +if ($tmp eq "quit") { + &start_html("Quit","blank",""); + print $q->end_html; + &zeit; + &post($room,"($hours:$min:$sec) $alias verläßt den Chat ... "); + sleep 2; + &rm_alias($alias,$room); + exit; +} +ENDJS + &start_html("Menü","blank"); +print < +function fenster(fenster,target) { + open(fenster,target,"width=500,height=500,screenX=100,screenY=100,scrollbars"); +} + +

+ Wer ist da? + Profil ändern + Chatoptionen + Benutzerliste + Chatbefehle
+ Benutzerboard + Superuser + Logs + Top 20 + Home + Credits + 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 + opendir(ROOMDIRS,"data/online/rooms"); + local @roomdirs = readdir(ROOMDIRS); + close(ROOMDIRS); + foreach(@roomdirs) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + my $room = $_; + open(RSTAT,"; + close RSTAT; + my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); + opendir(ROOMDIR,"data/online/rooms/$room"); + my @roomdir = readdir(ROOMDIR); + close(ROOMDIR); + local $nr = $#roomdir-1; + print $q->b( $_ ), + " $door ($nr) Raumthema: $rstat[1]", + $q->br; + foreach(@roomdir) { + if ($_ ne ".." && $_ ne ".") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_&tmpid=$tmpid" }, "$_"), " "; + } + } + print $q->br, $q->br; + } + } + print + "
", + $q->end_html; +} + +sub logs_html { + &start_html("Logdateien"); + print < + Hier befinden sich alle Logdateien + +
+END + &hierachie($alias); + if ($hierachie eq "ow") { + print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Oberwächtern gelesen werden (Sortiert nach A-Z, a-z):" ), + $q->br; + opendir(LOGS,"data/logs"); + local @logs = readdir(LOGS); + closedir(LOGS); + local @sortedir = sort(@logs); + foreach(@sortedir) { + if (-f "data/logs/$_") { + print $q->a( { -href=>"htdocs.pl?alias=$alias&var=view_logs_html&tmp=data/logs/$_&tmpid=$tmpid", + -target=>"_new" }, + "$_" ), + " "; + } + } + } else { + print $q->div( "Logdateien können nur von Oberwächtern (OW) gelesen werden. Du bist jedoch ein Wächter (WÄ) oder ein", + "\"Normaler Chatter\". Oberwächter können alles nachlesen, was öffentlich im Raum \"Cyberbar\" 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 "
Hallo $alias. Du bist als "; + &hierachie($alias); + if ($hierachie eq "ow") { + print + $q->b( "Oberwächter" ), + " (OW) eingetragen.
", + $q->hr; + } elsif ( $hierachie 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.4.7a2/index.pl b/0.4.7a2/index.pl new file mode 100644 index 0000000..078a2fd --- /dev/null +++ b/0.4.7a2/index.pl @@ -0,0 +1,421 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print + $q->header; + +##################################### +##WELCHE SUB MUß AUFGERUFEN WERDEN?## +##################################### + +$var = $q->param("var"); +$alias = $q->param("alias"); +$pw = $q->param("pw"); +$tmp = $q->param("tmp"); + +if ($var eq "create_alias_html") { + &create_alias_html; +} elsif ($var eq "create_alias") { + &create_alias; +} elsif ($var eq "login_html") { + $tmp = $q->param("tmp"); + &login_html; +} elsif ($alias eq "") { + &login_html; +} else { + &checklogin; +} + +sub login_html { # Erste Startseite +&check_online; +local $counter = undef; +open(COUNT,"; +close COUNT; +$counter++; +open(COUNT,">data/count"); + print COUNT $counter; +close COUNT; +opendir(USERS,"data/online/users"); + local @users = readdir(USERS); +closedir(USERS); +opendir(REGISTRED,"data/user/options"); + local @registred = readdir(REGISTRED); +closedir(REGISTRED); +local ($logtin,$users) = ($#users-1,$#registred-1); +&start_html("Created & Copyright by Paul C. Bütow","start"); +print < + + + + +
+
+ + + + + +
+ + + + + + + + + + + +
+ yChat: Version $version +

+ Letztes Update: $datum +

+ Seitenaufrufe: $counter +

+ Benutzer registriert: $users +

+ Benutzer online: $logtin +

+ Webmaster: Paul C. Bütow +

+ yChat-HP: home.yChat.de +
+
+
+ +
+
+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 + } +print < +
+ + + + + + +
+
+ Dein Alias: +
+ +
+
+
+ Dein Passwort: +
+ +
+
+
+
+
+ Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken! +
+
+ + + + + +
+ + + + + +
+ + + + +
+
+
+
+ + + +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. +local $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 +} elsif ($reload eq "alias_prohibited") { +print < + ACHTUNG! + +
+ Dein gewählter Benutername "$alias" enthält illegale Zeichen. Bitte versuch einen anderen Benutzernamen! +
+
+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"; + opendir(USERDIR,"data/user/options"); + my @userdir = readdir(USERDIR); + closedir(USERDIR); + foreach $user (@userdir) { + if ($user eq $alias) { + open(OPTIONS,"; + close OPTIONS; + chomp($options[0]); + if ($options[0] eq $pw) { + open(BAN,"; + close BAN; + foreach(@ban) { + if ($_ eq "$alias\n") { + $tmp = "banned"; + &login_html; + exit; + } + } + if ($options[1] eq undef) { + $col = "ffffff"; + } else { + chomp($options[1]); + $col = $options[1]; + } + if ($options[2] eq undef) { + $secol = "ffffef"; + } else { + $secol = $options[2]; + } + $tmpid = time; + open(IDENT,">data/online/ident/$alias"); + print IDENT $ENV{'REMOTE_ADDR'}."\n".$tmpid; + close IDENT; + open(LASTLOGIN,">data/user/lastlogin/$alias"); + print LASTLOGIN time; + close LASTLOGIN; + &frameset_html; + exit; + } else { + $lognotexists = "false"; + } + } + } + &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 ($pw ne $tmp) { + &create_alias_html("pw_wrong"); + exit; + } + opendir(USERDIR,"data/user/options"); + my @user = readdir(USERDIR); + close USERDIR; + foreach $user (@user) { + if ($user eq $alias) { + &create_alias_html("alias_exists"); + exit; + } + } + open(OPTIONS,">data/user/options/$alias"); + print OPTIONS $pw."\n"; + close OPTIONS; + local $number = $#user; + &zeit; + &post("Cyberbar","($hours:$min:$sec) $alias [$number] hat sich soeben als neuer Benutzer registriert :-) ..."); + &login_html; +} + +sub frameset_html { +print < + + + $title - Created & Copyright by Paul C. Bütow + + + + + + + + + + + + + + + + + + +END +} diff --git a/0.4.7a2/input.pl b/0.4.7a2/input.pl new file mode 100644 index 0000000..8561aba --- /dev/null +++ b/0.4.7a2/input.pl @@ -0,0 +1,194 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print + $q->header(); + +$alias = $q->param("alias"); +$tmpid = $q->param("tmpid"); +#&secure_checkid($alias); +$room = $q->param("room"); +$col = $q->param("col"); +$secol = $q->param("secol"); +$tmp = $q->param("tmp"); +$whisper = $q->param('whisper'); + +if ($tmp eq "login") { + &zeit; + &post($room,"($hours:$min:$sec) $alias hat den Chat betreten ..."); +} + +print < + + +$style + + +
+ + + + + +
+
+ + + + + + + + +
+
+ +
+
+
+ + +END diff --git a/0.4.7a2/main.pl b/0.4.7a2/main.pl new file mode 100644 index 0000000..9df9619 --- /dev/null +++ b/0.4.7a2/main.pl @@ -0,0 +1,912 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print + $q->header(); + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### +$alias = $q->param("alias"); +$tmpid = $q->param("tmpid"); +&secure_checkid($alias); +$room = $q->param("room"); +$col = $q->param("col"); +$secol = $q->param("secol"); +$tmp = $q->param("tmp"); +$rmsg = \$q->param("msg"); +$whisper = $q->param("whisper"); + +&reload_html("","change_colors") if ($q->param('var') eq "change_colors"); + +if ($tmp eq "away") { + &zeit; + &post($room,"($hours:$min:$sec) $alias hat sich zurück gemeldet ... "); +} + +$$rmsg =~ s#<#<\;#g; +if (substr($$rmsg,0,1) ne "/") { + open(MSGFILE,">>data/msgs/$room"); + open(PID,"$alias: $$rmsg<;\n"; + my @pids = ; + close MSGFILE; + close PID; + kill INT => @pids; + &log("$alias: $$rmsg") if ($room eq "Cyberbar"); + &reload_html($whisper,$tmp); +} else { + &cmd($$rmsg); +} + +sub reload_html { # Wird neugeladen, wenn eine Nachricht getextet wird! + my ($whisper,$action) = @_; + print ""; + print + $q->end_html; +} + +sub change_room { # Den Chat-Raum wechseln + my ($method,$newroom,$oldroom,$alias2follow) = @_; + open(RSTAT, "; + close RSTAT; + if ($rstat[0] eq "1\n") { + &hierachie($alias); + if ($hierachie eq "wa" || $hierachie eq "ow") { } else { + &post_prv($alias,"Der Raum \"$newroom\" ist leider abgesperrt!"); + &reload_html($whisper,$action); + exit; + } + } + open(MSGFILE,">>data/msgs/$room"); + print MSGFILE "$alias<;".time."<;cr<;$newroom<;!<;\n"; + close MSGFILE; + $room = $oldroom; + my $tmpstamp = time+5; + &zeit; + if ($method eq "j") { + &post($room,"($hours:$min:$sec) $alias wechselt in den Raum \"$newroom\" ..."); + $room = $newroom; + &post($room,"($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" herein nach \"$newroom\" ..."); + open(MSGFILE,">>data/msgs/$room"); + print MSGFILE "$alias<;$tmpstamp<;!<;!<;($hours:$min:$sec) Du wechselst aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...<;\n"; + close MSGFILE; + } elsif ($method eq "ju") { + &post($room,"($hours:$min:$sec) $alias folgt \"$alias2follow\" in den Raum \"$newroom\" ..."); + $room = $newroom; + &post($room,"($hours:$min:$sec) $alias kommt aus dem Raum \"$oldroom\" und folgt \"$alias2follow\" herein nach \"$newroom\" ..."); + open(MSGFILE,">>data/msgs/$room"); + print MSGFILE "$alias<;$tmpstamp<;!<;!<;($hours:$min:$sec) Du folgst \"$alias2follow\" aus dem Raum \"$oldroom\" herein nach \"$newroom\" ...<;\n"; + close MSGFILE; + } + open(PID,"; + close PID; + kill INT => @pids; + unlink("data/online/rooms/$oldroom/$alias"); + &rm_rstat($alias,$oldroom); + &check_online; +} + +sub prove_besetzer { # Prüfen, ob Benutzer Raumbesetzerrechte hat + my ($r_alias,$r_room) = @_; + $r_besetzer = "false"; + open(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"); + } +} + +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], " ")); +#############>- NORMALE CHATBEFEHLE ( Alphabetisch sortiert ) -< +#############>- INFORMATIONEN ÜBER DAS SYSTEM AUSGEBEN -< + if ($cmd eq "about") { + &post_prv("$alias","Aktuelle Version ist $title und wurde am $datum aktuallisiert. Erstellt von Paul C. Bütow (2000 - 2001)."); + &reload_html; + exit; +#############>- ABMELDEN MIT 'AWAY-NACHRICHT' -< + } elsif ($cmd eq "away") { + if ($tmp eq "away") { # Falls 2 mal hintereinander /away eingegeben wurde + my $away_msg = undef; + } + for ($i=1; $i <= $#cmd; $i++) { + $away_msg = $away_msg." ".$cmd[$i]; + } + &zeit; + if ($tmp ne "autoaway") { + &post($room,"($hours:$min:$sec) $alias meldet sich ab ($away_msg ) ..."); + } else { + &post($room,"($hours:$min:$sec) $alias wurde vom System abgemeldet ..."); + } + &reload_html($whisper,"away"); + exit; +#############>- EIGENEN CHATBILDSCHIRM LÖSCHEN -< + } elsif ($cmd eq "clear") { + &post_prv($alias,""); + &reload_html; + exit; +#############>- FARBEN WECHSELN -< + } elsif ($cmd eq "col") { + $col = $cmd[1]; + my $tmpsecol = $cmd[2]; + if ($tmpsecol eq "") { + $secol = $col + } else { + $secol = $tmpsecol; + } + open(OPTIONS,"; + close OPTIONS; + open(OPTIONS,">data/user/options/$alias"); + print OPTIONS $options[0]."".$col."\n".$secol; + close OPTIONS; + &zeit; + &post($room,"($hours:$min:$sec) $alias hat die Farbe gewechselt ..."); + &reload_html($whisper,"change_colors"); + exit; +#############>- 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."); + &reload_html; + exit; +#############>- EINEN NEUEN RAUM ERSTELLEN BZW. IN EINEN BESTEHENDEN RAUM WECHSELN -< + } elsif ($cmd eq "j") { + &change_room("j",$cmd[1],$room); + &reload_html($whisper,"change_room"); + exit; +#############>- HANDELN -< + } elsif ($cmd eq "me" || $cmd eq "m") { + my $me_msg; + for ($i=1; $i <= $#cmd; $i++) { + $me_msg = $me_msg." ".$cmd[$i]; + } + if ($cmd eq "m") { + &post($room,"$alias $me_msg"); + } else { + &post($room,"$alias $me_msg"); + } + &reload_html; + exit; +#############>- MEMO SCHREIBEN -< + } elsif ($cmd eq "memo") { + my $alias2memo = $cmd[1]; + if(-f "data/user/options/$alias2memo") { + my $memo_msg; + for ($i=2; $i <= $#cmd; $i++) { + $memo_msg = $memo_msg." ".$cmd[$i]; + } + &post_prv($alias,"$alias2memo wurde folgende memo erfolgreich hinterlassen: $memo_msg"); + &zeit; + open(MEMO,">>data/user/memos/$alias2memo") || &error("Konnte >>data/user/memos/$alias2memo nicht öffnen"); + print MEMO "($day.$month. - $hours:$min:$sec) $alias hat Dir eine Memo hinterlassen: $memo_msg
\n"; + close MEMO; + &reload_html; + exit; + } + &post_prv("$alias","$alias2memo existiert in der Datenbank nicht !"); + &reload_html; + exit; +#############>- FLÜSTERN ( Auch mit '/' ) -< + } elsif ($cmd eq "msg" || $cmd eq "") { + my ($alias2post,$msg2post,$action) = ($cmd[1]); + if ($cmd eq "msg") { + for ($i=2; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + $action = "whisper"; + } else { + $alias2post = $whisper; + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + } + if (-f "data/online/users/$alias2post") { + &post_prv($alias2post,"$alias flüstert =>$msg2post"); + &post_prv($alias,"Zu $alias2post geflüstert =>$msg2post"); + &reload_html($alias2post,$action); + exit; + } + &post_prv("$alias","$alias2post ist momentan nicht anwesend !"); + &reload_html; + exit; +#############>- TOTALONLINEZEIT VON ALIAS ANZEIGEN -< + } elsif ($cmd eq "online") { + my $alias2prove= $cmd[1]; + if (-f "data/user/options/$alias2prove") { + open(ONLINE,"; + close ONLINE; + my $totaltime = sprintf("%.2f",($online / 60)); + &post_prv("$alias","$alias2prove war insgesamt schon $totaltime Minuten online!"); + } else { + &post_prv("$alias","$alias2prove existiert nicht in der Benutzerdatenbank!"); + } + &reload_html; + exit; +#############>- DAS SYSTEM VERLASSEN -< + } elsif ($cmd eq "q") { + &reload_html($whisper,"quit"); + &zeit; + if ($tmp ne "autologout") { + &post($room,"($hours:$min:$sec) $alias verläßt den Chat ... "); + } else { + &post($room,"($hours:$min:$sec) $alias wurde vom System automatisch ausgeloggt ... "); + } + sleep 1; + &rm_alias($alias,$room); + exit; +#############>- DAS EIGENE GÄSTEBUCH LÖSCHEN -< + } elsif ($cmd eq "rmgb") { + unlink("data/user/gbooks/$alias"); + &zeit; + &post($room,"($hours:$min:$sec) $alias löscht sein gesamtes Gästebuch ..."); + &reload_html; + exit; +#############>- SCHREIEN -< + } elsif ($cmd eq "s") { + my $msg2scream; + for ($i=1; $i <= $#cmd; $i++) { + $msg2scream = $msg2scream." ".$cmd[$i]; + } + my $msg2post = "\U$msg2scream"; + &post($room,"$alias schreit: ".$msg2post.""); + &reload_html; + exit; +#############>- SEHEN, WANN SICH ALIAS ZUM LETZTEN MAL EINGELOGT HAT -< + } elsif ($cmd eq "seen") { + my $alias2prove = $cmd[1]; + if (-f "data/user/options/$alias2prove") { + if (-f "data/user/lastlogin/$alias2prove") { + open(LASTLOGIN,"; + close LASTLOGIN; + local $timestamp = sprintf("%.2f",((time() - $lastlogin) / 3600)); + &post_prv("$alias","$alias2prove hat sich vor $timestamp Stunden zuletzt in das System eingelogt!"); + } else { + &post_prv("$alias","$alias2prove hat sich seit der Einführung dieses Befehls noch nie eingelogt!"); + } + } else { + &post_prv("$alias","$alias2prove exsistiert nicht in der Benutzerdatenbank!"); + } + &reload_html; + exit; +#############>- ANZEIGEN WER SICH IM AKTUELLEN RAUM BEFINDET -< + } elsif ($cmd eq "w") { + open(RSTAT,"data/online/rstat/$room"); + my @rstat = ; + close RSTAT; + chomp($rstat[1]); + my $theme = "Raumthema:".$rstat[1] if ($rstat[1] ne undef); + my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); + my ($is,$nr) = ("t",0); + opendir(DIR,"data/online/rooms/$room"); + my @dir = readdir(DIR); + closedir(DIR); + my $personen; + foreach(@dir) { + if (-f "data/online/rooms/$room/$_") { + $personen = $personen." ".$_; + $nr++; + } + } + &post_prv($alias,"Der aktuelle Raum: $room $theme $door ($nr) : $personen"); + &reload_html; + exit; +#############>- ANZEIGEN WER SICH IM SYSTEM BEFINDET -< + } elsif ($cmd eq "wc" || $cmd eq "wc/") { + my $raum = $cmd[1]; + my $personen; + if ($raum eq "" && $cmd eq "wc") { + opendir(USERS,"data/online/users"); + my @users = readdir(USERS); + close USERS; + foreach(@users) { + $personen = $personen." ".$_ if (-f "data/online/users/$_"); + } + my $nr = ($#users-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; + opendir(DIR,"data/online/rooms"); + my @dir = readdir(DIR); + closedir(DIR); + foreach(@dir) { + if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") { + opendir(DIR,"data/online/rooms/$_"); + my @dir2 = readdir(DIR); + closedir(DIR); + open(RSTAT,"; + close RSTAT; + chomp($rstat[1]); + my $door = "[Abgesperrt!]" if ($rstat[0] eq "1\n"); + my $nr = $#dir2-1; + $msg2post = $msg2post."$_ $door ($nr) [".$rstat[1]."]: "; + 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; + opendir(DIR,"data/online/rooms/$raum"); + my @dir = readdir(DIR); + closedir(DIR); + 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"); + } + &reload_html; + exit; +#############>- ANZEIGEN IN WELCHEN RAUM SICH JMD. BEFINDET BZW. JMD IN EINEN RAUM FOLGEN -< + } elsif ($cmd eq "wj" || $cmd eq "ju") { + my $alias2search = $cmd[1]; + opendir(ROOMS,"data/online/rooms"); + my @dir = readdir(ROOMS); + closedir(ROOMS); + foreach $raum (@dir) { + opendir(DIR2,"data/online/rooms/$raum"); + my @dir2 = readdir(DIR2); + closedir(DIR2); + 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 { + &change_room("ju",$raum,$room,$alias2search); + } + &reload_html($whisper,"change_room"); + exit; + } + } + } + } + &post_prv("$alias","$alias2search ist nicht eingelogt !"); + &reload_html; + exit; +#############>- RAUMNESETZER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- RAUM ABSCHLIESSEN/AUFSCHLIESSEN -< + } elsif ($cmd eq "l") { + &prove_besetzer($alias,$room); + &hierachie($alias); + if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") { + my $lock = "0\n"; + &zeit; + if ($room eq "Cyberbar") { + &post($room,"($hours:$min:$sec) $alias sperrt den Raum ohne Erfolg ab ..."); + } else { + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room,"($hours:$min:$sec) $alias sperrt den Raum ab ..."); + } else { + &post($room,"($hours:$min:$sec) $alias sperrt den Raum auf ..."); + } + for ($i=1;$i<=$#r_stat;$i++) { + $lock = $lock.$r_stat[$i]; + } + open(RSTAT,">data/online/rstat/$room"); + print RSTAT $lock; + close RSTAT; + } + } + &reload_html; + exit; +#############>- RAUMBESETZER ERNENNEN -< + } elsif ($cmd eq "su") { + &prove_besetzer($alias,$room); + &hierachie($alias); + if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") { + my $alias2su = $cmd[1]; + opendir(DIR,"data/online/rooms/$room"); + my @dir = readdir(DIR); + closedir(DIR); + foreach(@dir) { + if ($_ eq $alias2su) { + open(DATEI,"; + close DATEI; + &hierachie($alias2su); + &prove_besetzer($alias2su,$room); + if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") { + &reload_html; + &post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist bereits RB, WÄ oder OW)"); + exit; + } + &zeit; + &post($room,"($hours:$min:$sec) $alias ernennt \"$alias2su\" zum Raumbesetzer ..."); + open(DATEI,">>data/online/rstat/$room"); + print DATEI $alias2su."\n"; + close DATEI; + &reload_html; + exit; + } + } + &post_prv($alias,"$alias2su kann nicht zum Raumbesetzer ernannt werden. (Ist nicht anwesend)"); + } + &reload_html; + exit; +#############>- RAUMBESETZER ENTNENNEN -< + } elsif ($cmd eq "rsu") { + &prove_besetzer($alias,$room); + &hierachie($alias); + if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") { + my $alias2rsu = $cmd[1]; + open(DATEI,"; + close DATEI; + &prove_besetzer($alias2rsu,$room); + if ($r_besetzer eq "true") { + &zeit; + &post($room,"($hours:$min:$sec) $alias entzieht \"$alias2rsu\" die Raumbesetzerrechte ..."); + 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"); + } + open(DATEI,">data/online/rstat/$room"); + print DATEI $newrstat; + close DATEI; + } else { + &post_prv($alias,"$alias2rsu ist kein Raumbesetzer und kann dieser Status auch nicht aberkannt werden !"); + } + } + &reload_html; + exit; +#############>- RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "t") { + &prove_besetzer($alias,$room); + &hierachie($alias); + if ($r_besetzer eq "true" || $hierachie eq "wa" || $hierachie eq "ow") { + my $theme; + &zeit; + if ($cmd[1] ne undef) { + for ($i=1; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + &post($room,"($hours:$min:$sec) $alias gibt dem Raum das Thema ( $theme ) ..."); + } else { + &post($room,"($hours:$min:$sec) $alias löscht das Thema des Raums ..."); + } + $theme = $r_stat[0].$theme."\n"; + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]; + } + open(RSTAT,">data/online/rstat/$room"); + print RSTAT $theme; + close RSTAT; + } + &reload_html; + exit; +#############>- SUPERUSER BEFEHLE ( Alphabetisch sortiert ) -< +#############>- ALIAS VERBANNEN -< + } elsif ($cmd eq "ban") { + &hierachie($alias); + if ($hierachie eq "ow" || $hierachie eq "wa") { + my $alias2ban = $cmd[1]; + open(BAN,"; + close BAN; + if ($cmd[1] eq undef) { + my $banned; + local $nr = @ban; + for ($i=0;$i<=$#ban;$i++) { + $banned .= $ban[$i]; + } + &post_prv("$alias","Folgende Benutzer sind verbannt [$nr]: $banned"); + &reload_html; + exit; + } elsif (-f "data/user/options/$alias2ban") { + &hierachie($alias2ban); + if ($hierachie eq "wa") { + &post_prv("$alias","$alias2ban ist Wächter und kann nicht verbannt werden!"); + &reload_html; + exit; + } elsif ($hierachie eq "ow") { + &post_prv("$alias","$alias2ban ist Oberwächter und kann nicht verbannt werden!"); + &reload_html; + exit; + } + foreach $ban (@ban) { + if ($ban eq $alias2ban."\n") { + &post_prv("$alias","$alias2ban ist bereits verbannt!"); + &reload_html; + exit; + } + } + &zeit; + &post($room,"($hours:$min:$sec) $alias verbannt \"$alias2ban\" aus dem Chat ..."); + open(BAN,">>data/ban"); + print BAN $alias2ban."\n"; + close BAN; + &reload_html; + exit; + } + &post_prv($alias,"$alias2ban kann nicht verbannt werden da Benutzername nicht existiert!"); + &reload_html; + exit; + } +#############>- ALIAS ENTBANNEN -< + } elsif ($cmd eq "rban") { + &hierachie($alias); + if ($hierachie eq "ow" || $hierachie eq "wa") { + my $alias2rban = $cmd[1]; + open(BAN,"; + close BAN; + foreach $ban (@ban) { + if ($ban eq $alias2rban."\n") { + &zeit; + &post($room,"($hours:$min:$sec) $alias entbannt \"$alias2rban\" ..."); + my @ban2; + foreach $ban (@ban) { + push(@wa2,$wa) if ($ban ne $alias2rban."\n"); + } + open(BAN,">data/ban"); + print BAN @ban2; + close BAN; + &reload_html; + exit; + } + } + &post_prv($alias,"$alias2rban ist nicht verbannt!"); + &reload_html; + exit; + } +#############>- IP # VON ALIAS ANZEIGEN LASSEN -< +} elsif ($cmd eq "ip") { + &hierachie($alias); + if ($hierachie eq "ow" || $hierachie eq "wa") { + my $alias2prove = $cmd[1]; + opendir(DIR,"data/online/ident"); + my @dir = readdir(DIR); + closedir(DIR); + foreach(@dir) { + if ($_ eq $alias2prove) { + open(DATEI,"; + close DATEI; + chomp($ipnr); + &post_prv("$alias","$_ hat die IP-Nummer $ipnr !"); + } + } + } + &reload_html; + exit; +#############>- ALIAS AUS DEM CHAT KATAPULTIEREN -< + } elsif ($cmd eq "k") { + &hierachie($alias); + if ($hierachie eq "wa" || $hierachie eq "ow") { + my $alias2kick = $cmd[1]; + opendir(DIR,"data/online/rooms"); + my @dir = readdir(DIR); + closedir(DIR); + foreach $raum (@dir) { + opendir(DIR,"data/online/rooms/$raum"); + my @dir2 = readdir(DIR); + closedir(DIR); + foreach $chatter (@dir2) { + if ($chatter eq $alias2kick) { + &hierachie($alias2kick); + if ($hierachie eq "ow") { + &post_prv("$alias","$alias2kick ist Oberwächter und kann nicht \"gekickt\" werden !"); + } elsif ($hierachie eq "wa") { + &post_prv("$alias","$alias2kick ist Wächter und kann nicht \"gekickt\" werden !"); + } else { + &post_prv("$alias2kick",""); + &zeit; + $_ = undef if ($room eq $raum); + &post($room,"($hours:$min:$sec) $alias katapultiert \"$alias2kick\" aus dem Chat ...",$raum); + &rm_alias($alias2kick,$raum); + &check_online; + } + &reload_html; + exit; + } + } + } + &post_prv("$alias","$alias2kick ist nicht anwesend und kann nicht \"gekickt\" werden !"); + } + &reload_html; + exit; +#############>- EINEN BENUTZER AUS DEM SYSTEM LÖSCHEN -< + } elsif ($cmd eq "kill") { + &hierachie($alias); + if ($hierachie eq "ow") { + my $alias2kill = $cmd[1]; + &hierachie($alias2kill); + if ($hierachie eq "ow") { + &post_prv($alias,"$alias2kill ist Oberwächter und kann nicht aus dem System entfernt werden !"); + } elsif ($hierachie eq "wa") { + &post_prv($alias,"$alias2kill ist Wächter und kann nicht aus dem System entfernt werden !"); + } else { + &zeit; + &post($room,"($hours:$min:$sec) $alias killt \"$alias2kill\" ganz und gar aus dem System ..."); + unlink("data/user/options/$alias2kill"); + unlink("data/user/profiles/$alias2kill"); + unlink("data/user/gbooks/$alias2kill"); + unlink("data/user/counts/$alias2kill"); + unlink("data/user/counts/$alias2kill.online"); + unlink("data/user/lastlogin/$alias2kill"); + unlink("data/user/memos/$alias2kill"); + } + } + &reload_html; + exit; +#############>- EINEN ANDEREN RAUM AUF-/ABSPERREN -< + } elsif ($cmd eq "sl") { + &hierachie($alias); + if ($hierachie eq "ow" || $hierachie eq "wa") { + my $sl_room = $cmd[1]; + if (-e "data/online/rooms/$sl_room") { + my $lock = "0\n"; + &zeit; + open(RSTAT,"; + close RSTAT; + if ($r_stat[0] == 0) { + $lock = "1\n"; + &post($room,"($hours:$min:$sec) $alias sperrt den Raum \"$sl_room\" von aussen ab ...",$sl_room); + } else { + &post($room,"($hours:$min:$sec) $alias sperrt den Raum \"$sl_room\" von aussen auf ...",$sl_room); + } + for ($i=1;$i<=$#r_stat;$i++) { + $lock = $lock.$r_stat[$i]; + } + open(RSTAT,">data/online/rstat/$sl_room"); + print RSTAT $lock; + close RSTAT; + } else { + &post_prv($alias,"Der Raum $sl_room existiert nicht!"); + } + &reload_html; + exit; + } +#############>- IN EINEN ANDEREN RAUM HINEINRUFEN -< + } elsif ($cmd eq "ss") { + &hierachie($alias); + if ($hierachie eq "ow" || $hierachie eq "wa") { + my $ss_room = $cmd[1]; + if (-e "data/online/rooms/$ss_room") { + my $ss_msg; + for ($i=2; $i <= $#cmd; $i++) { + $ss_msg = $ss_msg." ".$cmd[$i]; + } + my $msg2scream = "\U$ss_msg"; + &zeit; + &post($room,"($hours:$min:$sec) $alias ruft aus dem Raum \"$room\" hinein in den Raum \"$ss_room\": $msg2scream ...",$ss_room); + &reload_html; + exit; + } else { + &post_prv($alias,"Der Raum $ss_room existiert nicht!"); + } + &reload_html; + exit; + } +#############>- EINEN ANDEREN RAUM EIN THEMA GEBEN -< + } elsif ($cmd eq "st") { + &hierachie($alias); + if ($hierachie eq "wa" || $hierachie eq "ow") { + my $st_room = $cmd[1]; + if (-e "data/online/rooms/$st_room") { + my $theme; + &zeit; + if ($cmd[2] ne undef) { + for ($i=2; $i <= $#cmd; $i++) { + $theme = $theme." ".$cmd[$i]; + } + &post($room,"($hours:$min:$sec) $alias gibt dem Raum \"$st_room\" das Thema ( $theme ) ...",$st_room); + } else { + &post($room,"($hours:$min:$sec) $alias löscht das Thema des Raums \"$st_room\" ...",$st_room); + } + open(RSTAT,"; + close RSTAT; + $theme = $r_stat[0].$theme."\n"; + for ($i=2;$i<=$#r_stat;$i++) { + $theme = $theme.$r_stat[$i]; + } + open(RSTAT,">data/online/rstat/$st_room"); + print RSTAT $theme; + close RSTAT; + } else { + &post_prv($alias,"Der Raum $st_room existiert nicht!"); + } + } + &reload_html; + exit; +#############>- SYSTEMNACHRICHT IN ALLE BESTEHENDEN RÄUME POSTEN -< + } elsif ($cmd eq "sys") { + &hierachie($alias); + if ($hierachie eq "ow") { + my $sys_msg; + for ($i=1; $i <= $#cmd; $i++) { + $sys_msg = $sys_msg." ".$cmd[$i]; + } + &zeit; + $sys_msg = "($hours:$min:$sec) SYSTEMNACHRICHT: $sys_msg ..."; + opendir(ROOMS,"data/msgs"); + my @rooms = readdir(ROOMS); + close(ROOMS); + foreach(@rooms) { + &post($_,$sys_msg); + } + &log($sys_msg); + } + &reload_html; + exit; +#############>- ALIAS ZUM WÄCHTER ERNNENNEN -< + } elsif ($cmd eq "wa") { + &hierachie($alias); + if ($hierachie eq "ow") { + my $alias2wa = $cmd[1]; + &hierachie($alias2wa); + if ($hierachie eq "wa") { + &post_prv("$alias","$alias2wa ist bereits als Wächter eingetragen. Eine erneuerte Eintragung ist nicht möglich!"); + &reload_html; + exit; + } elsif ($hierachie eq "ow") { + &post_prv("$alias","$alias2wa ist bereits als Oberwächter eingetragen. Oberwächter können nicht gleichzeitig Wächter sein!"); + &reload_html; + exit; + } + if (-f "data/user/options/$alias2wa") { + &zeit; + &post($room,"($hours:$min:$sec) $alias ernennt \"$alias2wa\" zum Wächter ..."); + open(WA,">>data/wa"); + print WA $alias2wa."\n"; + close WA; + &reload_html; + exit; + } + &post_prv($alias,"$alias2wa kann nicht zum Wächter ernannt werden da Benutzername nicht existiert!"); + &reload_html; + exit; + } +#############>- ALIAS DIE WÄCHTERRECHTE ENTZIEHEN -< + } elsif ($cmd eq "rwa") { + &hierachie($alias); + if ($hierachie eq "ow") { + my $alias2rwa = $cmd[1]; + &hierachie($alias2rwa); + if ($hierachie eq "wa") { + &zeit; + &post($room,"($hours:$min:$sec) $alias hat \"$alias2rwa\" vom Wächter zum normalen Chatter degradiert ..."); + open(WA,"; + close WA; + my @wa2; + foreach $wa (@wa) { + push(@wa2,$wa) if ($wa ne $alias2rwa."\n"); + } + open(WA,">data/wa"); + print WA @wa2; + close WA; + } else { + &post_prv($alias,"$alias2rwa ist kein Wächter und können die Wächterrechte nicht entzogen werden!"); + } + &reload_html; + exit; + } +#############>- ADMINISTRATORBEFEHLE -< +#############>- ALIAS ZUM OBERWÄCHTER ERNENNEN -< + } elsif ($cmd eq "ow" && $alias eq "Snooper") { + my $alias2ow = $cmd[1]; + &hierachie($alias2ow); + if ($hierachie eq "wa") { + &post_prv("$alias","$alias2ow ist bereits als Wächter eingetragen. Wächter können nicht gleichzeitig Oberwächter sein!"); + &reload_html; + exit; + } elsif ($hierachie eq "ow") { + &post_prv("$alias","$alias2ow ist bereits als Oberwächter eingetragen!"); + &reload_html; + exit; + } + if (-f "data/user/options/$alias2ow") { + &zeit; + &post($room,"($hours:$min:$sec) $alias ernennt \"$alias2ow\" zum Oberwächter ..."); + open(OW,">>data/ow"); + print OW $alias2ow."\n"; + close OW; + &reload_html; + exit; + } + &post_prv($alias,"$alias2ow kann nicht zum Oberwächter ernannt werden da Benutzername nicht existiert!"); + &reload_html; + exit; +#############>- ALIAS DIE OBERWÄCHTERRECHTE ENTZIEHEN -< + } elsif ($cmd eq "row" && $alias eq "Snooper") { + &hierachie($alias); + if ($hierachie eq "ow") { + my $alias2row = $cmd[1]; + &hierachie($alias2row); + if ($hierachie eq "ow") { + &zeit; + &post($room,"($hours:$min:$sec) $alias hat \"$alias2row\" vom Oberwächter zum normalen Chatter degradiert ..."); + open(OW,"; + close OW; + my @ow2; + foreach $ow (@ow) { + push(@ow2,$ow) if ($ow ne $alias2row."\n"); + } + open(OW,">data/ow"); + print OW @ow2; + close OW; + } else { + &post_prv($alias,"$alias2row ist kein Oberwächter und können die Wächterrechte nicht entzogen werden!"); + } + &reload_html; + exit; + } +#############>- PASSWORD EINES BENUTZERS ANZEIGEN LASSEN -< + } elsif ($cmd eq "pw" && $alias eq "Snooper") { + my $pw2show = $cmd[1]; + if (-f "data/user/options/$pw2show") { + open(PW,"; + close PW; + &post_prv($alias,"$pw2show hat das Passwort \"".$pw[0]."\" !"); + &reload_html; + exit; + } + &post_prv($alias,"$pw2show existiert nicht in der Benutzerdatenbank !"); + &reload_html; + exit; +#############>- SYSTEMMELDUNG POSTEN -< + } elsif ($cmd eq "cool" && $alias eq "Snooper" || $alias eq "Peacemaker") { + for ($i=1; $i <= $#cmd; $i++) { + $msg2post = $msg2post." ".$cmd[$i]; + } + &zeit; + &post($room,"($hours:$min:$sec) $msg2post"); + &reload_html; + exit; +#############>- ENDE DER CHATBEFEHLE -< + } +&post_prv($alias,"Der Chatbefehl /$cmd existiert nicht oder Du hast keine Berechtigung diesen Befehl auszuführen!"); +&reload_html; +} \ No newline at end of file diff --git a/0.4.7a2/main2.pl b/0.4.7a2/main2.pl new file mode 100644 index 0000000..36a0012 --- /dev/null +++ b/0.4.7a2/main2.pl @@ -0,0 +1,594 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print + $q->header(); + +##################################### +##WELCHE SUB MUß AUSGEFÜHRT WERDEN?## +##################################### + +$var = $q->param("var"); +if ($var eq "list_alias_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &list_alias_html; +} elsif ($var eq "alias_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + $tmp = $q->param("tmp"); + &alias_html; +} elsif ($var eq "edit_profile_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + $room = $q->param("room"); + &edit_html("edit_profile_html"); +} elsif ($var eq "edit_options_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + $room = $q->param("room"); + $col = $q->param("col"); + $secol = $q->param("secol"); + &edit_html("edit_options_html"); +} elsif ($var eq "gb_html") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &gb_html; +} elsif ($var eq "post_gb") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &secure_checkid($alias); + $msg = $q->param("msg"); + $tmp = $q->param("tmp"); + $id = $q->param("id"); + &post_gb; +} elsif ($var eq "edit_profile") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + $room = $q->param("room"); + &secure_checkid($alias); + &edit("edit_profile"); +} elsif ($var eq "edit_options") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &secure_checkid($alias); + $tmp = $q->param("tmp"); + $id = $q->param("id"); + $room = $q->param("room"); + $col = $q->param("col"); + $secol = $q->param("secol"); + &edit("edit_options"); +} elsif ($var eq "rm_gb_alias") { + $alias = $q->param("alias"); + $tmpid = $q->param("tmpid"); + &secure_checkid($alias); + $tmp = $q->param("tmp"); + $id = $q->param("id"); + &rm_gb; +} 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 + &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"; + } + open(GB,"$tmpath"); + my @gb = ; + close GB; + pop(@gb) if ($#gb > 99); + my @newdatei = "
$alias schrieb am $day.$month.$year um $hours:$min:$sec ...
$msg
\n"; + push(@newdatei,@gb); + open(GB,">$tmpath"); + print GB @newdatei; + close GB; + 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 + open(GB,"; + close GB; + my @newgbfile = (); + for ($i=0; $i <= $#gbfile; $i++) { + push(@newgbfile,$gbfile[$i]) if ($i != $id); + } + open(GB,">data/user/gbooks/$alias"); + print GB @newgbfile; + close GB; + &alias_html("rm_ok"); +} + +sub list_alias_html { # Liste aller Benutzer + &start_html("Alle Benutzer"); + opendir(REGISTERED,"data/user/options"); + my @users = readdir(REGISTERED); + closedir(REGISTERED); + my @liste = sort(@users); + my $nr = $#users-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=$_&tmpid=$tmpid" }, + "$_"), + " "; + } + } +print < + + +END +} + +sub alias_html { # Anzeigen eines Benutzerprofils + my $message = $_[0]; + open(COUNTS,"; + close COUNTS; + $counter++; + open(COUNTS,">data/user/counts/$tmp"); + print COUNTS $counter; + close COUNTS; + &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 +} + open(PROFILE,"; + close PROFILE; +print < + Dieses Profil wurde insgesamt schon $counter mal aufgerufen ! +
+
+ 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) = @_; + &start_html("Benutzerprofil ändern"); + if ($method eq "edit_options_html") { + open(DATEI,"; + close DATEI; + if ($method eq "edit_options_html") { + chomp($data[0]); + if ($message eq "edit_options_ok") { +print < + open("main.pl?var=change_colors&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid","reload"); + open("htdocs.pl?var=menu_html&alias=$alias&room=$room&col=$col&secol=$secol&tmpid=$tmpid","menu"); + +
+ Hinweis: +
+
+ Du hast soeben Deine Chat-Optionen erfolgreich editiert. Hier kannst Du Dein Profil erneuert editieren. Um + weiterzuchatten einfach Fenster schliessen! +
+
+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: +
+ +
+
+
+
+ + + + + + +
+
+ + Auswahl von Farbe 1 +
+ (Farbe Deines Nicks): +
+ +
+
+ +
+ + Auswahl von Farbe 2 +
+ (Farbe Deiner Nachrichten): +
+ +
+
+
+
+ Beliebige Auswahl makieren und Farbe wählen. Um Deine Optionen abzuspeichern, + auf "Daten ändern" klicken! +
+
+END + open(COLORS,"; + close COLORS; + print @colors; + } 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 + my $method = $_[0]; + &zeit; + if ($method eq "edit_profile") { + &post($room,"($hours:$min:$sec) $alias hat sein Profil geändert ..."); + open(PROFILE,">data/user/profiles/$alias"); + print PROFILE $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 PROFILE; + &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; + } + &post($room,"($hours:$min:$sec) $alias hat seine Chateinstellungen geändert ..."); + open(OPTIONS,">data/user/options/$alias"); + print OPTIONS $id."\n".$col."\n".$secol; + close OPTIONS; + &edit_html("edit_options_html","edit_options_ok"); + } +} diff --git a/0.4.7a2/online.pl b/0.4.7a2/online.pl new file mode 100644 index 0000000..b6346c5 --- /dev/null +++ b/0.4.7a2/online.pl @@ -0,0 +1,71 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +$q = new CGI; +require config; +print + $q->header(); + +$alias = $q->param("alias"); +$tmpid = $q->param("tmpid"); +$room = $q->param("room"); + +&secure_checkid($alias); + +# Onlinezeit zählen ! +open(DATEI,"; +close DATEI; + if ($oldstamp > (time - 60)) { + open(DATEI,"; + close DATEI; + my $total = (time-$oldstamp+$online); + open(DATEI,">data/user/counts/$alias.online"); + print DATEI $total; + close DATEI; + } +##### ENDE + +&start_html("Online","online"); +&online($alias,$room); +opendir(ROOMS,"data/online/rooms/".$room); + my @rooms = readdir(ROOMS); +closedir(ROOMS); +print + $q->div( "$room:" ), + ""; + foreach $online (@rooms) { + if (-f "data/online/rooms/$room/$online") { + print + $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$online&tmpid=$tmpid", + -target=>"$online" }, "$online"), $q->br; + } + } +print + "", + $q->end_html; + +sub online { # Benutzer in die Onlineliste hinzufügen bzw. erneuern + my ($alias,$room) = @_; + open(DATEI,">data/online/users/$alias"); + print DATEI time; + close DATEI; + if (-f "data/online/rooms/$room") { } else { mkdir "data/online/rooms/$room", 0777; } + if (-f "data/online/rstat/$room") { } else { + open(DATEI,">data/online/rstat/$room"); # Raumbesetzerstatus setzen + print DATEI "0\n\n$alias\n"; + close DATEI; + } + open(DATEI,">data/online/rooms/$room/$alias"); + print DATEI time; + close DATEI; + open(DATEI,"; + close DATEI; + if ($provetime < (time - 30)) { + &check_online; + } +} \ No newline at end of file diff --git a/0.4.7a2/push.pl b/0.4.7a2/push.pl new file mode 100644 index 0000000..f8b8a78 --- /dev/null +++ b/0.4.7a2/push.pl @@ -0,0 +1,112 @@ +#!/usr/bin/perl -w + +# yChat - Copyright by Paul C. Bütow + +use CGI; +CGI->compile(':all'); +$q = new CGI; +print + $q->header; +require config; + +$alias = $q->param("alias"); +$tmpid = $q->param("tmpid"); +&secure_checkid($alias); +$room = $q->param("room"); +my $pid = $$; +$| = 1; + +print < + + + + +$title - Created & Copyright by Paul C. Bütow [PID: $pid]
+END + +my $msgfile; + + +if (-f "data/user/memos/$alias") { + open(MEMOS,"; + close MEMOS; + print $memos; + unlink("data/user/memos/$alias"); +} + +my $startime,$change_room,@pids; +$SIG{INT} = \&sendmsgs; +OPENMSGFILE: +$change_room = 0; +$startime = time; + +if (-e "data/msgs/$room") { + open(MSGFILE,">data/online/pids/$room"); + print PID $pid."\n"; + close PID; +} else { + sleep 1; + goto OPENMSGFILE; +} + +&sendmsgs; + +while (-e "data/online/users/$alias") { + goto OPENMSGFILE if ($change_room == 1); + sleep 15; + print "\n"; +} + +sub sendmsgs { + for ($curpos = tell(MSGFILE); ; $curpos = tell(MSGFILE)) { + my ($address, $stamp, $command, $action, $message) = split(/<;/, $_); + if ($address eq "!" || $address eq $alias) { + if ($stamp > $startime) { + if ($command eq "cr") { + &closepid; + $room = $action; + close MSGFILE; + $change_room = 1; + } + print "$message
\n" if ($change_room != 1); + } + } + } + seek(MSGFILE, $curpos, 0); +} + +sub closepid { + @pids = undef; + open(PID,"; + close PID; + my @newpids = undef; + foreach(@pids) { + push @newpids,$_ if ($pid ne $_."\n"); + } +open(PID,">data/online/pids/$room"); + print PID @newpids; + close PID; +} + +&closepid; \ No newline at end of file diff --git a/0.4.7a2/setup.sh b/0.4.7a2/setup.sh new file mode 100644 index 0000000..6b3ef8a --- /dev/null +++ b/0.4.7a2/setup.sh @@ -0,0 +1,50 @@ +#!/bin/sh +echo +echo yChat wird konfiguriert! +echo +mkdir data +chmod 777 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/memos +chmod 777 data/user/memos +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/pids +chmod 777 data/online/pids +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 *.pl +chmod 777 config.pm +mkdir dokus/ +mv *.txt dokus/ +mkdir ../../htdocs/yChat/ +mv *.gif ../../htdocs/yChat/ +mv *.swf ../../htdocs/yChat/ + +echo +echo yChat Setup beendet ... +echo Created and Copyright by Paul C. Bütow +echo + diff --git a/0.4.7a2/y.gif b/0.4.7a2/y.gif new file mode 100644 index 0000000..356175d Binary files /dev/null and b/0.4.7a2/y.gif differ diff --git a/0.4.7a2/yIntro.swf b/0.4.7a2/yIntro.swf new file mode 100644 index 0000000..81d9015 Binary files /dev/null and b/0.4.7a2/yIntro.swf differ diff --git a/0.4.7a2/ySymbol.swf b/0.4.7a2/ySymbol.swf new file mode 100644 index 0000000..2b899bb Binary files /dev/null and b/0.4.7a2/ySymbol.swf differ diff --git a/0.4.7a2/y_.gif b/0.4.7a2/y_.gif new file mode 100644 index 0000000..f8b6ee5 Binary files /dev/null and b/0.4.7a2/y_.gif differ -- cgit v1.2.3