summaryrefslogtreecommitdiff
path: root/0.7.2/modules/start.pm
blob: 6b1ce0f836a828cfe5d76a807146a09385525ff3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
sub start {
    if ($var eq 'create_alias_html') {
        &create_alias_html;
    }
    elsif ($var eq 'create_alias') {
        &create_alias;
    }
    elsif ($var eq 'login_html') {
        &login_html;
    }
    elsif ($var eq 'chatiquette_html') {
        &chatiquette_html;
    }
    elsif ($alias eq '') {
        &login_html;
    }
    else {
        &checklogin;
    }
}
sub login_html {
    &check_online;
    local $counter = undef;
    open COUNT, '<data/count';
    $counter = <COUNT>;
    close COUNT;
    ++$counter;
    open COUNT, '>data/count';
    flock COUNT, 2;
    print COUNT $counter;
    close COUNT;
    opendir USERS, 'data/online/users';
    my(@users) = readdir USERS;
    closedir USERS;
    opendir REGISTRED, 'data/user/options';
    local(@registred) = readdir REGISTRED;
    closedir REGISTRED;
    my($logtin, $users) = ($#users - 1, $#registred - 1);
    &start_html("Created & Copyright by Paul C. B\374tow", 'start');
    print qq[ <center>\n  <table width=500>\n   <tr>\n    <td>\n     <center>\n      <table>\n       <tr>\n        <td>\n         <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" WIDTH=240 HEIGHT=240>\n          <param name=movie value="$gfxpath/yIntro.swf">\n          <param name=loop value=false>\n          <param name=menu value=false>\n          <param name=quality value=high>\n          <param name=scale value=noborder>\n          <param name=wmode value=opaque>\n          <param name=bgcolor value=$bgcolor>\n          <embed src="$gfxpath/yIntro.swf" loop=false menu=false quality=high scale=noborder wmode=opaque bgcolor=$bgcolor WIDTH=240 HEIGHT=240 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></EMBED>\n         </object>\n        </td>\n        <td>\n         <div>\n          yChat: Version $version\n          <br><br>\n          Letztes Update: $datum\n          <br><br>\n          Seitenaufrufe: $counter\n          <br><br>\n          Benutzer registriert: $users\n          <br><br>\n          Benutzer online: $logtin\n          <br><br>\n          Benutzerlimit: $limit\n          <br><br>\n          Server: $localhost:$localport\n          <br><br>\n          Page: <a href="http://www.yChat.org">www.yChat.org</a>\n         </div>\n        </td>\n       </tr>\n      </table>\n     </center>\n    </div>\n    <br>\n    <br>\n];
    if ($tmp eq 'true') {
        print qq[     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Wahrscheinlich existiert Dein Alias "$alias" nicht,\n      <br>\n      Du hast Dich verschrieben oder das Passwort ist falsch.\n      <br>\n      Versuch es erneuert !\n     </div>\n];
    }
    elsif ($tmp eq 'quit') {
        print qq[     <div>\n      Du hast soeben den Chat verlassen.\n      <br>\n      Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n     </div>\n];
    }
    elsif ($tmp eq 'autologout') {
        print qq[     <div>\n      Du wurdest automatisch aus dem Chat ausgeloggt. Grund: Du warst 20 Minuten inaktiv.\n      <br>\n      Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n     </div>\n];
    }
    elsif ($tmp eq 'autokick') {
        print qq[     <div>\n      Du wurdest automatisch aus dem Chat katapultiert. Grund: Du hast den Chat geflutet!\n      <br>\n      Um den Chat erneuert zu betreten, einfach Daten eingeben und auf "Los Geht's" klicken :-)\n     </div>\n];
    }
    elsif ($tmp eq 'banned') {
        print "     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Du wurdest aus dem Chat verbannt!!!\n      <br>\n      Z.z. kannst Du Dich leider nicht in den Chat einloggen.\n      <br>\n      Sorry!\n     </div>\n";
    }
    elsif ($tmp eq 'kick') {
        print "     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Du wurdest soeben aus dem Chat katapultiert!\n      <br>\n      Schlechtes Verhalten mag die Ursache hierf\374r sein.\n      <br>\n      Sorry!\n     </div>\n";
    }
    elsif ($tmp eq 'selfkill') {
        print qq[     <div>\n      Du hast dich soeben ganz und gar aus dem System gel\366scht!\n      <br>\n      Wenn du dir einen neuen Nick angelen willst, dann einfach auf "Registrieren" klicken! :-)\n     </div>\n];
    }
    elsif ($tmp eq 'selfkill') {
        print "     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Du wurdest soeben aus dem Chat ausgeloggt!\n      <br>\n      Ursache hierf\374r mag sein, da\337 der Chat voll war und Du Dich nicht am\n      Geschehen beteiligt- und unn\366tige Chatkapazit\344ten in Anspruch\n      genommen hast.\n      <br>\n      Sorry!\n     </div>\n";
    }
    elsif ($tmp eq 'full') {
        print "<div class=b>ACHTUNG!</div><div>Der Chat ist leider voll! Bitte versuch Dich sp\344ter noch mal einzuloggen!</div>";
    }
    elsif ($var eq 'create_alias') {
        print q[<div>Du hast sich soeben in die Datenbank eingetragen. Einfach auf  "Los Geht's" klicken :-)</div>];
    }
    else {
        print qq[     <div>\n      Herzlich willkommen!\n      <br>\n      Einfach Daten eingeben und auf "Los Geht's" klicken :-)\n     </div>\n];
    }
    print qq[ <hr>\n <form name="login" action="chat" method="GET">\n <input type="hidden" name="request" value="start">\n <input type="hidden" name="tmp" value="true">\n <table>\n  <tr>\n   <td>\n    <div>\n     Dein Alias:\n     <br>\n     <input name="alias" value="$alias">\n    </div>\n   </td>\n   <td>\n    <div>\n     Dein Passwort:\n     <br>\n     <input type="password" name="pw" value="$pw">\n    </div>\n   </td>\n  </tr>\n </table>\n <br>\n <br>\n <div>\n  Solltest Du noch keinen Nick besitzen, dann auf "Registrieren" klicken!\n </div>\n <br>\n <table>\n  <tr>\n   <td>\n    <font color="ffffff">\n     <input type="submit" value="Los geht's!">\n    </font>\n </form>\n   </td>\n   <td>\n <form action="chat">\n    <input type="hidden" name="request" value="start">\n    <input type="hidden" name="var" value="create_alias_html">\n     <font color="ffffff">\n      <input type="submit" value="Registrieren">\n     </font>\n </form>\n    </td>\n   </tr>\n </table>\n <hr>\n];
    if ($logtin > 0) {
        print q[<div>Folgende Personen sind eingeloggt:<br><font size='1'>];
        foreach $_ (@users) {
            print "$_ " if -f "data/online/users/$_";
        }
        print '</font></div>';
    }
    print "    </td>\n   </tr>\n  </table>\n </center>\n</body>\n</html>\n";
    if (-d 'data/online/rooms') {
        ();
    }
    else {
        mkdir 'data/online/rooms', 511;
    }
}
sub create_alias_html {
    open BAN, '<data/ban';
    my(@ban) = <BAN>;
    close BAN;
    foreach $_ (@ban) {
        chomp $_;
        if ($_ eq 'ip://' . $client->peerhost) {
            $tmp = 'banned';
            &login_html;
            $client->shutdown(2);
            exit 0;
        }
    }
    my $reload = $_[0];
    &start_html('Registration');
    print " <center>\n  <table width=500>\n   <tr>\n    <td>\n";
    if ($reload eq 'alias_exists') {
        print qq[     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Der von Dir gew\344hlte Benutzername "$alias" existiert in unserer Datenbank bereits. Bitte versuch es erneuert mit\n      einem anderen Benutzernamen !\n     </div>\n     <hr>\n];
    }
    elsif ($reload eq 'pw_wrong') {
        print "     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Deine beiden Passworteingaben stimmen nicht \374berein. Bitte geb das Passwort erneuert an um sicherzugehen, da\337\n      kein falsches Passwort abgespeichert wird !\n     </div>\n     <hr>\n";
    }
    elsif ($reload eq 'alias_prohibited') {
        print qq[     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Dein gew\344hlter Benutername "$alias" enth\344lt illegale Zeichen. Bitte versuch einen anderen Benutzernamen!\n     </div>\n     <hr>\n];
    }
    elsif ($reload eq 'alias_length') {
        print qq[     <div class=b>\n      ACHTUNG!\n     </div>\n     <div>\n      Dein gew\344hlter Benutername "$alias" enth\344lt zu viele Zeichen. Es sind maximal 15 Zeichen erlaubt!!\n     </div>\n     <hr>\n];
    }
    else {
        print "     <div>\n      Hier kannst Du Dich registrieren. Bitte beachte, da\337 die Passworteingabefelder \374bereinstimmen!\n     </div>\n     <hr>\n";
    }
    print qq[     <form action="chat">\n      <input type="hidden" name="request" value="start">\n      <input type="hidden" name="var" value="create_alias">\n      <div>\n       Dein Alias:\n       <font color="ffa500">\n        (Mu\337 angegeben werden)\n       </font>\n       <br>\n       <input name="alias" VALUE="$alias">\n      </div>\n      <br>\n      <div>\n       Dein gew\374nschtes Passwort:\n       <br>\n       <input type="password" name="pw" value="$pw">\n      </div>\n      <br>\n      <div>\n       Geb hier Dein Passwort erneuert ein:\n       <br>\n       <input type="password" name="tmp">\n      </div>\n      <br>\n      <font color=ffffff>\n       <input type="submit" value="Registrieren">\n      </font>\n      <br>\n    </form>\n    <hr>\n    <div>\n     Um den Chat zu betreten m\374ssen die Daten nach der Registration auf der Startseite erneuert best\344tigt werden !\n    </div>\n   </td>\n  </tr>\n </table>\n</center>\n</body>\n</html>\n];
}
sub checklogin {
    opendir USERS, 'data/online/users';
    my(@users) = readdir USERS;
    closedir USERS;
    my $users = $#users;
    if ($users > $limit && 3 > &hierachie($alias)) {
        $tmp = 'full';
        &login_html;
        $client->shutdown(2);
        exit 0;
    }
    my $lognotexists = 'true';
    opendir USERDIR, 'data/user/options';
    my(@userdir) = readdir USERDIR;
    closedir USERDIR;
    foreach $user (@userdir) {
        if ($user eq $alias) {
            open OPTIONS, "<data/user/options/$alias";
            my(@options) = <OPTIONS>;
            close OPTIONS;
            foreach $_ (@options) {
                chomp $_;
            }
            if ($options[0] eq $pw) {
                open BAN, '<data/ban';
                my(@ban) = <BAN>;
                close BAN;
                foreach $_ (@ban) {
                    chomp $_;
                    if ($_ eq $alias or $_ eq 'ip://' . $client->peerhost) {
                        if (-f "data/online/users/$admin") {
                            &post_prv($admin, "<font color=ffffff><font color=ffa500>$_</font> kann sich nicht einloggen (Ist verbannt)!!</font>");
                        }
                        $tmp = 'banned';
                        &login_html;
		        $client->shutdown(2);
                        exit 0;
                    }
                }
                if ($options[1] eq undef) {
                    $col = &random_color;
                }
                else {
                    $col = $options[1];
                }
                if ($options[2] eq undef) {
                    $secol = &random_color;
                }
                else {
                    $secol = $options[2];
                }
                if ($options[3] eq undef) {
                    $maxVerlauf = '10';
                }
                else {
                    $maxVerlauf = $options[3];
                }
                if ($options[4] eq undef) {
                    $verlaufOrder = '1';
                }
                else {
                    $verlaufOrder = $options[4];
                }
                &rm_if_loggedin($alias);
		my(@digit) = (('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'), ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'), (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), '-', '.');
                my $num1 = rand @digit;
                my $num2 = rand @digit;
                my $num3 = rand @digit;
                my $num4 = rand @digit;
                my $num5 = rand @digit;
                my $num6 = rand @digit;
                my $num7 = rand @digit;
                my $num8 = rand @digit;
                my $num9 = rand @digit;
                my $num10 = rand @digit;
                $tmpid = $digit[$num1] . $digit[$num2] . $digit[$num3] . $digit[$num4] . $digit[$num5] . $digit[$num6] . $digit[$num7] . $digit[$num8] . $digit[$num9] . $digit[$num10];
                open TMPID, ">data/online/tmpid/$alias.$tmpid";
                print TMPID $alias;
                close TMPID;
                open IDENT, ">data/online/ident/$alias";
                print IDENT $client->peerhost . "\n$tmpid\n" . $client->peerhost . ':' . $client->peerport;
                close IDENT;
                open LASTLOGIN, ">data/user/lastlogin/$alias";
                print LASTLOGIN time;
                close LASTLOGIN;
                &frameset_html;
                $client->shutdown(2);
                exit 0;
            }
            else {
                $lognotexists = 'false';
            }
        }
    }
    &login_html;
}
sub create_alias {
    if ($alias =~ /\W/ or $alias eq '') {
        goto CREATE if $alias =~ /[-]/ and not $alias =~ /\W/;
        &create_alias_html('alias_prohibited');
        $client->shutdown(2);
        exit 0;
    }
    elsif ($pw ne $tmp) {
        &create_alias_html('pw_wrong');
        $client->shutdown(2);
        exit 0;
    }
    elsif (length $alias >= 15) {
        &create_alias_html('alias_length');
        $client->shutdown(2);
        exit 0;
    }
    CREATE: opendir USERDIR, 'data/user/options';
    my(@user) = readdir USERDIR;
    close USERDIR;
    foreach $user (@user) {
        if ($user eq $alias) {
            &create_alias_html('alias_exists');
            $client->shutdown(2);
            exit 0;
        }
    }
    open OPTIONS, ">data/user/options/$alias";
    print OPTIONS $pw . "\n";
    close OPTIONS;
    &login_html;
}
sub frameset_html {
    print qq[<html>\n <head>\n  <title>\n   $title\n  </title>\n </head>\n<frameset border=0 frameborder=0 framespacing=0 cols="130,*">\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n  <frame name="online" src="chat?request=online&room=$loginplace&alias=$alias&tmpid=$tmpid">\n  <frameset border=0 frameborder=0 framespacing=0 cols="70,*">\n   <frame name="logo" src="chat?request=htdocs&var=logo_html" scrolling="no">\n   <frame name="reload" src="chat?request=htdocs" scrolling="no">\n  </frameset>\n </frameset>\n <frameset border=0 frameborder=0 framespacing=0 rows="*,55">\n  <frame name='main' src='chat?request=loggedin&alias=$alias&col=$col&secol=$secol&tmpid=$tmpid&maxVerlauf=$maxVerlauf&verlaufOrder=$verlaufOrder'>\n  <frame name="input" src="chat?request=htdocs" scrolling="no">\n </frameset>\n</frameset>\n</html>\n];
}
'???';