Du bist nicht angemeldet.

1

Sonntag, 10. Juli 2011, 08:53

Ban-System

Dies ist nur das Ban-System selbst, die Funktion zum (Ent-)Sperren ist nicht enthalten!

Wir haben zwei neue Tabellen: bans und ipbans.

MySQL-Abfrage(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE `bans` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `type` enum('ban','unban') NOT NULL,
  `user` int(10) unsigned NOT NULL,
  `mod` varchar(25) DEFAULT NULL,
  `reason` text NOT NULL,
  `lift` bigint(20) unsigned NOT NULL DEFAULT '0',
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `ipbans` (
  `ip` varchar(39) NOT NULL,
  PRIMARY KEY (`ip`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Die Tabelle bans speichert zum Einen Informationen über eine Sperre und dient uns zum Anderen als Log, daher die Spalten type, user und timestamp. In der Tabelle ipbans werden nur IP-Adressen gespeichert, jeder dort vorhandenen IP-Adresse wird der Login verwehrt.

Dann muss die Tabelle accounts noch um die Spalte ban erweitert werden.

MySQL-Abfrage(n)

1
ALTER TABLE `accounts` ADD COLUMN `ban` INTEGER UNSIGNED NOT NULL DEFAULT 0;

Diese Spalte speichert als Wert entweder 0 wenn der Chatter nicht gesperrt ist oder die Id der Sperre, um so später an die nötigen Informationen zu kommen.

Nachdem wir die MySQL-Abfragen ausgeführt haben öffnen wir Client.java und fügen

Quellcode

1
    private int ban;

unter

Quellcode

1
    private String ipAddress;

ein,

Quellcode

1
                ban = rs.getInt("ban");

über

Quellcode

1
                away = false;

und

Quellcode

1
2
3
    public int getBan() {
        return ban;
    }

unter

Quellcode

1
2
3
    public String getIPAddress() {
        return ipAddress;
    }

Zunächst öffnen wir JoinChannelHandler.java und ersetzen

Quellcode

1
            client.login(nickname);

durch

Quellcode

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
            client.login(nickname);

            if (client.getBan() != 0) {
                ps.close();
                ps = con.prepareStatement("SELECT `mod`, `reason`, `lift` FROM `bans` WHERE `id` = ?");
                ps.setInt(1, client.getBan());
                rs = ps.executeQuery();
                rs.next();
                long lift = rs.getLong("lift");

                if (lift != 0 && System.currentTimeMillis() > lift) {
                    // Hier die temporäre Sperre aufheben.
                } else {
                    StringBuilder msg = new StringBuilder();
                    msg.append("_");
                    msg.append(rs.getString("mod"));
                    msg.append("_ hat dich aus folgenden Gründen gesperrt:##");
                    msg.append(rs.getString("reason"));
                    msg.append("##");

                    if (lift == 0) {
                        msg.append("Dies ist eine permanente Sperre.");
                    } else {
                        msg.append("Die Sperre wird am#_");
                        msg.append(new Date(lift).toString());
                        msg.append("_#aufgehoben.");
                    }

                    client.send(Popup.create("Problem", "Gesperrt", msg.toString(), 400, 300));
                    return;
                }
            } else {
                ps.close();
                ps = con.prepareStatement("SELECT * FROM `ipbans` WHERE `ip` = ?");
                ps.setString(1, client.getIPAddress());
                rs = ps.executeQuery();

                if (rs.next()) {
                    client.send(Popup.create("Problem", "Gesperrt", "Ihrer IP-Adresse wurde der Zugang zum Chat verwehrt.", 400, 300));
                    return;
                }
            }


Und das war's dann auch schon.
Tschüß.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Flav« (10. Juli 2011, 09:10)