Hulp bij controleren script

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- Rob -

- Rob -

05/01/2017 00:55:55
Quote Anchor link
Houdie!

Ik wou graag hulp bij het controleren van mijn script. Zelf kon ik geen fouten/exploits vinden, misschien jullie wel? :)

index
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<body class="hold-transition login-page">
        <div style="margin-top: 40px;" class="login-box">
            <div class="login-logo">
                <a href="/"><b><?=$_CONFIG['bedrijfsnaam']?></b></a>
            </div>
            <div class="login-box-body">
                <p class="login-box-msg">Login om je sessie te starten</p>
                <?php if (!empty($_SESSION['loginfout'])) { echo '<i><p style="color: red; text-align: center; margin-top: -15px;">'.$_SESSION['loginfout'].'</p></i>'; } ?>
                <?php if (!empty($_SESSION['loginblock'])) { echo '<i><p style="color: red; text-align: center; margin-top: -15px;">'.$_SESSION['loginblock'].'</p></i>';  unset($_SESSION['loginblock']); } ?>
                <?php if (!empty($_SESSION['loginsucces'])) { echo '<i><p style="color: green; text-align: center; margin-top: -15px;">'.$_SESSION['loginsucces'].'</p></i>'; unset($_SESSION['loginsucces']); } ?>
                <form  action="paneel/assets/include/login.php" method="post">
                    <div class="form-group has-feedback">
                        <?php
                        if (!empty($_SESSION['loginfout'])) {
                            if (!empty($_SESSION['postgebruikersnaam'])) {
                            $plaats = "value='".$_SESSION['postgebruikersnaam']."'";
                                unset($_SESSION['postgebruikersnaam']);
                                unset($_SESSION['loginfout']);
                            }
else {
                                $plaats = 'placeholder="Gebruikersnaam"';
                                unset($_SESSION['loginfout']);
                            }
                        }
else {
                            $plaats = 'placeholder="Gebruikersnaam"';
                        }

                        ?>

                        <input type="text" name="gebruikersnaam" maxlength="50" class="form-control" <?=$plaats;?> autofocus>
                        <span class="glyphicon glyphicon-user form-control-feedback"></span>
                    </div>
                    <div class="form-group has-feedback">
                        <input type="password" id="pwd" name="wachtwoord" maxlength="50" class="form-control" placeholder="Wachtwoord">
                        <span class="glyphicon glyphicon-lock form-control-feedback"></span>
                    </div>
                    <div class="row">
                        <div class="col-xs-8">
                            <div class="checkbox icheck">
                                <label id="eye" onclick="showHide()">
                                    <div class="icheckbox_square-blue" aria-checked="false" aria-disabled="false" style="position: relative;">
                                        <input type="checkbox" style="position: absolute; top: -20%; left: -20%; display: block; width: 140%; height: 140%; margin: 0px; padding: 0px; background: rgb(255, 255, 255); border: 0px; opacity: 0;">
                                        <ins class="iCheck-helper" style="position: absolute; top: -20%; left: -20%; display: block; width: 140%; height: 140%; margin: 0px; padding: 0px; background: rgb(255, 255, 255); border: 0px; opacity: 0;">
                                        </ins>
                                    </div> Laat wachtwoord zien
                                </label>
                                <script>
                                function show() {
                                    var p = document.getElementById('pwd');
                                    p.setAttribute('type', 'text');
                                }

                                function hide() {
                                    var p = document.getElementById('pwd');
                                    p.setAttribute('type', 'password');
                                }

                                var pwShown = 0;

                                document.getElementById("eye").addEventListener("click", function () {
                                    if (pwShown == 0) {
                                       pwShown = 1;
                                       show();
                                    } else {
                                       pwShown = 0;
                                       hide();
                                    }
                                }, false);
                                </script>
                            </div>
                        </div>
                        <div class="col-xs-4">
                            <button style="padding-left: 5px;" name="inloggen" type="submit" class="btn btn-primary btn-block btn-flat">Inloggen</button>
                        </div>
                    </div>
                </form>    
                <div class="social-auth-links text-center">
                    <p>- OF -</p>
                    <a href="/registreer" class="btn btn-block btn-social btn-facebook btn-flat"> Maak een nieuw account aan!</a>
                    <a href="/wachtwoord_vergeten" class="btn btn-block btn-social btn-google btn-flat"> Ik ben mijn wachtwoord vergeten!</a>
                </div>
            </div>
            <p style="text-align: center; margin-top: 10px; font-size: 13pt;">Copyright  <?=date('Y');?> <b><?=$_CONFIG['bedrijfsnaam']?></b></p>
            <p style="text-align: center; margin-top: -5px;"><i>Alle rechten voorbehouden aan de rechtmatige eigenaar.</i></p>
        </div>
        <script src="/paneel/assets/plugins/jQuery/jquery-2.2.3.min.js"></script>
        <script src="/paneel/assets/bootstrap/js/bootstrap.min.js"></script>
        <script src="/paneel/assets/plugins/iCheck/icheck.min.js"></script>
        <script>
            $(function () {
                $('input').iCheck({
                    checkboxClass: 'icheckbox_square-blue',
                    radioClass: 'iradio_square-blue',
                    increaseArea: '20%'
                });
            });
        </script>
    </body>


login script
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
session_start(); // START UNIEKE SESSIE \\

// IMPORTEER DE BENODIGE CODE \\

include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/init.php';
include $_SERVER["DOCUMENT_ROOT"] . '/paneel/assets/include/functions.php';

// KIJK OF DE BEZOEKER IS INGELOGD \\
if (ingelogd() == true) {
    header('Location: /paneel/dashboard');
    exit();
}


$datum = strtotime('UTC'); // KRIJG DE TIJD EN DATUM \\
$eind_datum = strtotime('UTC +600seconds'); // KRIJG DE TIJD EN DATUM + 10 MINUTEN \\
$prefix = $mysqli->real_escape_string($_CONFIG['prefix']); // DEFINITEER DE TABEL PREFIX \\

// CONTROLEER OF JE MEERDERE FOUTE LOGIN POGINGEN HEBT (NA 3 KEER IN 10 MIN. = BLOCK VOOR 10 MIN. OFTEWEL: BRUTEFROCE PROTECTION)\\

$table = $prefix.'foute_pogingen';
$result = $mysqli->query("SELECT * FROM `$table` WHERE `ipadres`='$ipadres'");
if(FALSE === $result) {
    $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 101).';
    header('Location: /');
    exit();
}
else {
    $rows = $result->num_rows;
    if ($rows >= 3) {
        $result = $mysqli->query("SELECT * FROM `$table` WHERE `ipadres`='$ipadres' ORDER BY id DESC LIMIT 1");
        if (FALSE === $result) {
            $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 102).';
            header('Location: /');
            exit();
        }
else {
            $row = $result->fetch_assoc();
            if ($row['datum'] <= $row['eind_datum']) {
                $table = $prefix.'logs';
                $result = $mysqli->query("INSERT INTO `$table` (`gebruikersnaam/ipadres`, `log_nummer`, `log_bericht`, `datum`) VALUES ('$ipadres', '1', 'Het ip $ipadres heeft meerdere keren met pogingen gedaan om in te loggen binnen 10 minuten.', '$datum')");
                if (FALSE === $result) {
                    $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 103).';
                    header('Location: /');
                    exit();
                }
else {
                    $row['eind_datum'] = gmdate('H:i', $row['eind_datum']);
                    $_SESSION['loginfout'] = 'U heeft teveel login pogingen achter elkaar.<br>U moet tot '.$row['eind_datum'].' wachen.';
                    header('Location: /');
                    exit();
                }
            }
else {
                $table = $prefix.'foute_pogingen';
                $result = $mysqli->query("DELETE FROM `$table` WHERE `ipadres`='$ipadres'");
                if (FALSE === $result) {
                    $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 103).';
                    header('Location: /');
                    exit();
                }
            }
        }
    }
}


// LOGIN SCRIPT \\
if (isset($_POST['inloggen'])) {
    $gebruikersnaam = $mysqli->real_escape_string($_POST['gebruikersnaam']);
    $gebruikersnaam = htmlspecialchars($gebruikersnaam, ENT_QUOTES);
    $_SESSION['postgebruikersnaam'] = $gebruikersnaam;
    $gebruikersnaam = strtolower($gebruikersnaam);
    $wachtwoord = $_POST['wachtwoord'];

    if (empty($gebruikersnaam) || empty($wachtwoord)) {
        $tabel = $prefix.'foute_pogingen';
        $result = $mysqli->query("INSERT INTO `$tabel` (`ipadres`, `datum`, `eind_datum`) VALUES('$ipadres', '$datum', '$eind_datum')");
        if (FALSE === $result) {
            $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 104).';
            header('Location: /');
            exit();
        }
else {
            $_SESSION['loginfout'] = 'U heeft niet alle velden ingevuld.';
            header('Location: /');
            exit();
        }
    }
else {
        $tabel = $prefix.'leden';
        $result = $mysqli->query("SELECT * FROM `$tabel` WHERE `gebruikersnaam`='$gebruikersnaam'");
        if (FALSE === $result) {
            $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 105).';
            header('Location: /');
            exit();
        }

        $row = $result->fetch_assoc();
        if ($gebruikersnaam == strtolower($row['gebruikersnaam'])) {
            if (password_verify($wachtwoord, $row['wachtwoord'])) {
                $result = $mysqli->query("UPDATE `$tabel` SET `status`='1' WHERE `gebruikersnaam`='$gebruikersnaam'");
                if (FALSE === $result) {
                    $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 106).';
                    header('Location: /');
                    exit();
                }
else {
                    $_SESSION['loginsuccesnl'] = 'U bent met succes ingelogd.';
                    $_SESSION['id'] = $row['id'];
                    header('Location: /paneel/dashboard');
                    exit();
                }
            }
else {
                $tabel = $prefix.'foute_pogingen';
                $result = $mysqli->query("INSERT INTO `$tabel` (`ipadres`, `datum`, `eind_datum`) VALUES('$ipadres', '$datum', '$eind_datum')");
                if (FALSE === $result) {
                    $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 107).';
                    header('Location: /');
                    exit();
                }
else {
                    $_SESSION['loginfout'] = 'U heeft foute login gegevens ingevoerd.';
                    header('Location: /');
                    exit();
                }
            }
        }
else {
            $tabel = $prefix.'foute_pogingen';
            $result = $mysqli->query("INSERT INTO `$tabel` (`ipadres`, `datum`, `eind_datum`) VALUES('$ipadres', '$datum', '$eind_datum')");
            if(FALSE === $result) {
                $_SESSION['loginfout'] = 'Er is een fout opgetreden (Error: 108).';
                header('Location: /');
                exit();
            }

            $_SESSION['loginfout'] = 'U heeft foute login gegevens ingevoerd.';
            header('Location: /');
            exit();
        }
    }
}
else {
    $_SESSION['loginfout'] = 'U kunt deze pagina niet bezoeken.';
    header('Location: /');
    exit();
}

?>


Toevoeging op 05/01/2017 00:59:12:

EDIT:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
// Voor de login succesvol tekst te laten zien \\
header('Refresh: 3; url=/paneel/dashboard');
// IPV \\
header('Location: /paneel/dashboard');
Gewijzigd op 05/01/2017 01:00:08 door - Rob -
 
PHP hulp

PHP hulp

29/04/2024 10:30:23
 
- Ariën  -
Beheerder

- Ariën -

05/01/2017 01:02:17
Quote Anchor link
Het ziet er wel veilig uit, ik snap alleen niet waarom je de foutmeldingen in een sessie opslaat?
Die meldingen zijn toch van belang voor deze pagina, en niet voor andere pagina's? Ikzelf zou liever voor een array gaan.
Gewijzigd op 05/01/2017 01:03:26 door - Ariën -
 
- Rob -

- Rob -

05/01/2017 01:03:53
Quote Anchor link
Ik plaats ze in een session zodat ze na reload weg zijn, hier had ik een topic voor aangemaakt. Maar ziet u nog exploits/lekken of andere buggs?

Toevoeging op 05/01/2017 01:05:29:

Of kan ik nog iets optimaliseren?

Toevoeging op 05/01/2017 01:10:46:

O sorry, ik had dit niet gelezen:
Quote:
Ikzelf zou liever voor een array gaan.
Ik vind zelf een session handiger maar dat is mijn mening.
 
- Ariën  -
Beheerder

- Ariën -

05/01/2017 01:14:48
Quote Anchor link
Als je ze in een array zet, zijn ze ook na een reload weg, mits je aan de juiste validatie voldoet.
In een sessie vind ik iets wat overkill.

Opsich zie ik niet veel algemene verbeterpunten, maar het is net wat je wilt verbeteren, welke kennis je hebt en of je er voor open staat. Altijd valt er wat aan te verbeteren tot het naar je zin is, en ik geloof dat de meeste ontwikkelaars het wel roerend met mij eens zijn.

Ik kan wel bijvoorbeeld opnoemen om bijv. een extended MySQLi-class te gebruiken voor overloading van de query-functie met ingebouwde foutafhandeling, en een structuur in OOP. Maar zoals ik al zei: Het ligt eraan waar je kennis ligt, en tot hoever je wilt gaan.... ;-)

- Rob - op 05/01/2017 01:03:53:
Ik vind zelf een session handiger maar dat is mijn mening.

Euh... wat is er handiger aan een session dan een array? Het is toch data (foutmeldingen) die je niet nog een keer gebruikt na een refresh. Je POST-wordt opnieuw geladen, en dan wordt er gekeken of de validatie nu wel eens klopt. EN ind at geval ben je ingelogd.
Gewijzigd op 05/01/2017 01:16:45 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

05/01/2017 01:17:55
Quote Anchor link
Waar komt $ipadres vandaan en deze wordt nergens (of te vroeg?) ge-escaped.

Wat ben je in hemelsnaam met je gebruikersnaam aan het doen? Meerdere keren ge-escaped (zowel voor gebruik in database alsook in HTML, waarom?).

Waarom sla je een gebruikersnaam op in je sessie? Het enige wat je hier in op zou hoeven slaan is een user id ofzo. Voor de goede orde zou je toch elke page-access moeten controleren wat iemand zijn rechten zijn anders blijven er misschien instellingen hangen totdat iemand opnieuw inlogt.

En wellicht loont het de moeite om met objecten te gaan werken: een config-object, een database-object, een user-object, een sessie-object et cetera.

Daarnaast is het bovenstaande script te lang :p. Als je een user class maakt zou je "het proces van een gebruiker inloggen" hierin onder kunnen brengen. Dit hoef je dan niet uit te schrijven in bovenstaande code. Het voordeel hiervan is dat je taken delegeert naar specifieke objecten die de leesbaarheid van wat je aan het doet vergroot.
Gewijzigd op 05/01/2017 01:19:14 door Thomas van den Heuvel
 
- Rob -

- Rob -

05/01/2017 01:18:31
Quote Anchor link
Ik dacht dat ik een structuur had in OOP? :P Ik denk dat ik mij hierin: extended MySQLi-class is ga inverdiepen, is wel handig voor groot schalig gebruik. En zelf wil ik mijn systemen zo gebruiksvriendelijk maken.

Toevoeging op 05/01/2017 01:26:34:

$ipadress komt van de functions.php en die wordt daar ge-escaped.

Gebruikersnaam heb ik zo gedaan zodat de input van de gebruikersnaam niet verloren gaat, en als je terug komt op de pagina dat je gebruikersnaam er nog staat. En hoe moet ik htmlspecialchars in html gebruiken, want dat heb ik niet?

page-acces is er toch? Als er geen POST request is -> terug naar index, als gebruiker al is ingelogd -> terug naar index. Wat moet er dan nog meer bij?

Quote:
Daarnaast is het bovenstaande script te lang :p. Als je een user class maakt zou je "het proces van een gebruiker inloggen" hierin onder kunnen brengen. Dit hoef je dan niet uit te schrijven in bovenstaande code. Het voordeel hiervan is dat je taken delegeert naar specifieke objecten die de leesbaarheid van wat je aan het doet vergroot.

Ik zal hier naar kijken
 
- Ariën  -
Beheerder

- Ariën -

05/01/2017 01:30:15
Quote Anchor link
Dit is geen structuur in OOP/OO maar een procedurele opbouw van je code, waarin veel elementen zich herhalen, en waarvan de werking is ingeweefd in je code.

Als je meer wilt weten over OO, dan staat er op deze pagina een hoop leesvoer voor de beginner: http://www.phptuts.nl/view/45/
Maar OO-design is zeer uitgebreid en beperkt zich niet tot alleen classes en functies.
Gewijzigd op 05/01/2017 01:31:53 door - Ariën -
 
- Rob -

- Rob -

05/01/2017 01:47:10
Quote Anchor link
Dus ongeveer zoiets?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/paneel/include/init.php");

class User extends Object
{
    public function __construct()
    {

        parent::__construct();
    }

    
    public function loggedIn()
    {

        if (isset($_SESSION["habbonaam"]) && $_SESSION["habbonaam"] != "")
        {

            return true;
        }

        else
        {
            return false;
        }
    }

    
    public function idToUsername($user_id)
    {

        $query = sprintf(
            "    SELECT    `leden`.`habbonaam`
                FROM    `leden`
                WHERE    `leden`.`id` = %d
                LIMIT    1;"
,
            $user_id
        );
        $result = $this->getConnection()->query($query);
        
        list($habbonaam) = $this->getConnection()->fetch_row($result);
        
        return $habbonaam;
    }

    
    public function usernameToId($username)
    {

        $query = sprintf(
            "    SELECT    `leden`.`id`
                FROM    `leden`
                WHERE    `leden`.`habbonaam` = '%s'
                LIMIT    1;"
,
            $username
        );
        $result = $this->getConnection()->query($query);
        
        list($id) = $this->getConnection()->fetch_row($result);
        
        return $id;
    }

    
    public function createUser($username, $hashedPassword)
    {

        $query = sprintf(
            "    INSERT INTO `leden` (`habbonaam`, `wachtwoord`, `ip`, `regdatum`, `lastonline`)
                VALUES        ('%s', '%s', '%s', NOW(), NOW())"
,
            $this->getConnection()->escape($username),
            $this->getConnection()->escape($hashedPassword),
            $_SERVER['REMOTE_ADDR']
        );

        echo $query;
        $this->getConnection()->query($query);
    }

    
    public function getUserVar($username, $var)
    {

        $query = sprintf(
            "    SELECT    `leden`.`%s`
                FROM    `leden`
                WHERE    `leden`.`habbonaam` = '%s'
                LIMIT    1;"
,
            $this->getConnection()->escape($var),
            $this->getConnection()->escape($username)
        );

        $result = $this->getConnection()->query($query);
        
        list($response) = $this->getConnection()->fetch_row($result);
        
        return $response;
    }

    
    public function setUserVar($var, $value, $username)
    {

        $query = sprintf(
            "    UPDATE    `leden`
                SET        `leden`.`%s` = '%s'
                WHERE    `leden`.`habbonaam` = '%s'"
,
            $this->getConnection()->escape($var),
            $this->getConnection()->escape($value),
            $this->getConnection()->escape($username)
        );

        $result = $this->getConnection()->query($query);
    }

    
    public function getRankLevelVar($rankName, $var)
    {

        $query = sprintf(
            "    SELECT    `paneel_rangniveau`.`%s`
                FROM    `paneel_rangniveau`
                WHERE    `paneel_rangniveau`.`rang_naam` = '%s'
                LIMIT    1;"
,
            $this->getConnection()->escape($var),
            $this->getConnection()->escape($rankName)
        );

        $result = $this->getConnection()->query($query);
        
        list($response) = $this->getConnection()->fetch_row($result);
        
        return $response;
    }

    
    public function sanitizeName($name)
    {

        return htmlspecialchars($name);
    }

    
    public function checkPermission($username, $permissie)
    {

        $query = sprintf(
            "    SELECT    `paneel_personeel`.`%s`
                FROM    `paneel_personeel`
                WHERE    `paneel_personeel`.`habbonaam` = '%s'
                LIMIT    1;"
,
            $this->getConnection()->escape($permissie),
            $this->getConnection()->escape($username)
        );

        $result = $this->getConnection()->query($query);
        
        list($response) = $this->getConnection()->fetch_row($result);
        
        if ($response == 1)
        {

            return true;
        }

        else
        {
            return false;
        }

        
        return $response;
    }

    
    public function getUserLevel($username)
    {

        $query = sprintf(
            "    SELECT        `paneel_admins`.`access_level`
                FROM        `paneel_admins`
                WHERE        `paneel_admins`.`habbonaam` = '%s'
                ORDER BY     `paneel_admins`.`id` DESC
                LIMIT    1"
,
            $username
        );
        
        $result = $this->getConnection()->query($query);
        $count    = $this->getConnection()->num_rows($result);

        if ($count > 0)
        {

            list($level) = $this->getConnection()->fetch_row($result);
            
            return $level;
        }

        else
        {
            return 0;
        }
    }

    
    public function isAdmin($username)
    {

        if ($this->getUserLevel($username) > 0)
        {

            return true;
        }

        else
        {
            return false;
        }
    }

    
    public function isForumAdmin($username)
    {

        $userLevel = $this->getUserLevel($username);
        
        return $userLevel > 1;
    }

    
    public function getFunction($username, $tag = null)
    {

        $query = sprintf(
            "    SELECT        `paneel_rangverandering`.`rang_nieuw`
                FROM        `paneel_rangverandering`
                WHERE        `paneel_rangverandering`.`habbonaam` = '%s'
                ORDER BY     `paneel_rangverandering`.`id` DESC
                LIMIT    1"
,
            $username
        );
        $result = $this->getConnection()->query($query);
        $count    = $this->getConnection()->num_rows($result);

        if ($count > 0)
        {

            list($rank_new) = $this->getConnection()->fetch_row($result);
            
            $query = sprintf(
                "    SELECT    `paneel_rangniveau`.`rang_naam`
                    FROM    `paneel_rangniveau`
                    WHERE    `paneel_rangniveau`.`rang_level` = %d
                    LIMIT    1"
,
                $rank_new
            );

            $result = $this->getConnection()->query($query);
            list($rank) = $this->getConnection()->fetch_row($result);
        }

        else
        {
            $rank = "Geen rank bekend.";
        }

        
        return $rank;
    }

    
    public function inPromotionLimit($targetUser, $currentUser)
    {

        $cuRankName = $this->getFunction($currentUser);
        $tuRankName = $this->getFunction($targetUser);
        
        $cuRankLevel = $this->getRankLevelVar($cuRankName, "rang_level");
        $tuRankLevel = $this->getRankLevelVar($tuRankName, "rang_level");
        
        $cuMaxPromotionLevel = $this->getRankLevelVar($cuRankName, "promoveren_tot");
        
        if ($cuMaxPromotionLevel > $tuRankLevel)
        {

            return true;
        }

        else
        {
            return false;
        }
    }

    
    public function inDemotionLimit($targetUser, $currentUser)
    {

        $cuRankName = $this->getFunction($currentUser);
        $tuRankName = $this->getFunction($targetUser);
        
        $cuRankLevel = $this->getRankLevelVar($cuRankName, "rang_level");
        $tuRankLevel = $this->getRankLevelVar($tuRankName, "rang_level");
        
        $cuMaxDemotionLevel = $this->getRankLevelVar($cuRankName, "degraderen_tot");
        
        if ($cuMaxDemotionLevel >= $tuRankLevel)
        {

            return true;
        }

        else
        {
            return false;
        }
    }

    
    public function logAction($user, $tag, $action, $target_user = null, $extra_data = null)
    {

        $username = $this->idToUsername($user);
        $target_username = $this->idToUsername($target_user);
        
        switch ($action)
        {
            case
"convo-adduser":
                $message = "heeft de gebruiker " . $target_username . " toegevoegd aan de conversatie (ID): ". $extra_data .".";
                break;
            case
"convo-new":
                $message = "heeft een nieuwe conversatie gemaakt met ID: ". $extra_data .".";
                break;
            case
"convo-removeuser":
                $message = "heeft de gebruiker " . $target_username . " verwijderd uit de conversatie (ID): ". $extra_data .".";
                break;
            case
"convo-reply":
                $message = "heeft een nieuwe reactie geplaatst in convo (ID): ". $extra_data .".";
                break;
            case
"convo-leave":
                $message = "heeft het gesprek (ID): ". $extra_data ." verlaten.";
                break;
            case
"ban-username":
                $message = "heeft de gebruiker ". $extra_data ." verbannen.";
                break;
            case
"ban-ip":
                $message = "heeft het IP ". $extra_data ." verbannen.";
                break;
            case
"granted-pw-change":
                $message = "heeft voor gebruiker ". $extra_data ." toegestaan zijn wachtwoord te veranderen.";
                break;
            case
"created-hipchat-account":
                $message = "heeft voor gebruiker ". $extra_data ." een HipChat account gemaakt.";
                break;
            case
"hipchat-pw-change":
                $message = "heeft voor gebruiker ". $extra_data ." zijn HipChat wachtwoord veranderd.";
                break;
            case
"wrong-login":
                $message = "heeft proberen in te loggen met een fout wachtwoord.";
                break;
            case
"succesfull-login":
                $message = "heeft zichzelf ingelogd.";
                break;
            case
"registered":
                $message = "heeft zichzelf geregistreerd.";
                break;
            case
"user-pass-reset-succes":
                $message = "heeft zijn/haar wachtwoord aangepast.";
                break;
            case
"user-pass-reset-wrong":
                $message = "heeft een foutieve poging gedaan het wachtwoord aan te passen van " . $target_user;
                break;
        }

        
        $query = sprintf(
            "    INSERT INTO `paneel_logs` (`habbonaam`, `actie`, `ip`, `UA`, `datum`)
                VALUES        ('%s', '%s', '%s', '%s', NOW())"
,
            $this->getConnection()->escape($username),
            $this->getConnection()->escape($message),
            $_SERVER['REMOTE_ADDR'],
            $_SERVER['HTTP_USER_AGENT']
        );

        $this->getConnection()->query($query);
    }

    
    public function getDataFromHabboAPI($username, $var)
    {

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, "https://www.habbo.nl/api/public/users?name=" . $username . "");
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0 );
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);
        $output = json_decode(curl_exec($ch));
        curl_close($ch);
        
        return $output->{$var};
    }

    
    public function getDataFromHipChatAPI($username)
    {

        require_once($_SERVER["DOCUMENT_ROOT"] . "/_paneel/classes/hipchat/user.hc.class.php");
        
        $HipChatUser = new HipChatAPIUser();
        $HipChatUserID = $this->getUserVar($username, "hipchat_user_id");
        
        return $HipChatUser->getData($HipChatUserID);
    }

    
    public function checkMotto($username, $code)
    {
    
        if ($this->getDataFromHabboAPI($username, "motto") == $code) {
            return true;
        }
else {
            return false;
        }
    }
}

?>
 
- Ariën  -
Beheerder

- Ariën -

05/01/2017 01:57:05
Quote Anchor link
Gezien de manier van praktische opbouw wel, alleen qua theoretische opzet niet. Een LogAction() en een isForumAdmin() hebben niks met een User te maken, maar met een logging-class en een permissions class.

Dit staat heel mooi uitgelegd in het aangegeven artikel.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.