Passed
Push — wip_sessions ( b55e55...384f5b )
by Nils
05:05
created

index.php (2 issues)

1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * Teampass - a collaborative passwords manager.
7
 * ---
8
 * This library is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 * ---
12
 *
13
 * @project   Teampass
14
 * @file      index.php
15
 * ---
16
 *
17
 * @author    Nils Laumaillé ([email protected])
18
 *
19
 * @copyright 2009-2023 Teampass.net
20
 *
21
 * @license   https://spdx.org/licenses/GPL-3.0-only.html#licenseText GPL-3.0
22
 * ---
23
 *
24
 * @see       https://www.teampass.net
25
 */
26
27
use TeampassClasses\SessionManager\SessionManager;
28
use Symfony\Component\HttpFoundation\Request;
0 ignored issues
show
This use statement conflicts with another class in this namespace, Request. Consider defining an alias.

Let?s assume that you have a directory layout like this:

.
|-- OtherDir
|   |-- Bar.php
|   `-- Foo.php
`-- SomeDir
    `-- Foo.php

and let?s assume the following content of Bar.php:

// Bar.php
namespace OtherDir;

use SomeDir\Foo; // This now conflicts the class OtherDir\Foo

If both files OtherDir/Foo.php and SomeDir/Foo.php are loaded in the same runtime, you will see a PHP error such as the following:

PHP Fatal error:  Cannot use SomeDir\Foo as Foo because the name is already in use in OtherDir/Foo.php

However, as OtherDir/Foo.php does not necessarily have to be loaded and the error is only triggered if it is loaded before OtherDir/Bar.php, this problem might go unnoticed for a while. In order to prevent this error from surfacing, you must import the namespace with a different alias:

// Bar.php
namespace OtherDir;

use SomeDir\Foo as SomeDirFoo; // There is no conflict anymore.
Loading history...
29
use TeampassClasses\Language\Language;
30
31
header('X-XSS-Protection: 1; mode=block');
32
header('X-Frame-Options: SameOrigin');
33
header("Cache-Control: no-cache, no-store, must-revalidate");
34
header("Pragma: no-cache");
35
header("Expires: 0");
36
// **PREVENTING SESSION HIJACKING**
37
// Prevents javascript XSS attacks aimed to steal the session ID
38
//ini_set('session.cookie_httponly', 1);
39
// **PREVENTING SESSION FIXATION**
40
// Session ID cannot be passed through URLs
41
//ini_set('session.use_only_cookies', 1);
42
// Uses a secure connection (HTTPS) if possible
43
//ini_set('session.cookie_secure', 0);
44
//ini_set('session.cookie_samesite', 'Lax');
45
// Before we start processing, we should abort no install is present
46
if (file_exists(__DIR__.'/includes/config/settings.php') === false) {
47
    // This should never happen, but in case it does
48
    // this means if headers are sent, redirect will fallback to JS
49
    if (headers_sent()) {
50
        echo '<script language="javascript" type="text/javascript">document.location.replace("install/install.php");</script>';
51
    } else {
52
        header('Location: install/install.php');
53
    }
54
    // Now either way, we should stop processing further
55
    exit;
56
}
57
58
59
// initialise CSRFGuard library
60
require_once __DIR__.'/includes/libraries/csrfp/libs/csrf/csrfprotector.php';
61
csrfProtector::init();
62
//session_id();
63
64
// Load config
65
try {
66
    include_once __DIR__.'/includes/config/tp.config.php';
67
} catch (Exception $e) {
68
    throw new Exception("Error file '/includes/config/tp.config.php' not exists", 1);
69
}
70
71
// initialize session
72
if (isset($SETTINGS['cpassman_dir']) === false || $SETTINGS['cpassman_dir'] === '') {
73
    if (isset($SETTINGS['cpassman_dir']) === false) {
74
        $SETTINGS = [];
75
    }
76
    $SETTINGS['cpassman_dir'] = __DIR__;
77
}
78
79
// Load functions
80
require_once __DIR__. '/includes/config/include.php';
81
require_once __DIR__.'/sources/main.functions.php';
82
//error_log('>>>>> '.SessionManager::getCookieValue('PHPSESSID'));
83
// init
84
loadClasses();
85
error_log('Index.php - init de la session');
86
$session = SessionManager::getSession();
87
$request = Request::createFromGlobals();
88
89
$session->set('key', SessionManager::getCookieValue('PHPSESSID'));
90
error_log('DEBUG : KEY sur index.php ' . $session->get('key')." -- ".SessionManager::getCookieValue('PHPSESSID'));
91
92
// Quick major version check -> upgrade needed?
93
if (isset($SETTINGS['teampass_version']) === true && version_compare(TP_VERSION, $SETTINGS['teampass_version']) > 0) {
94
    // Perform redirection
95
    if (headers_sent()) {
96
        echo '<script language="javascript" type="text/javascript">document.location.replace("install/install.php");</script>';
97
    } else {
98
        header('Location: install/upgrade.php');
99
    }
100
    // No other way, we should stop processing further
101
    exit;
102
}
103
104
if (isset($SETTINGS['cpassman_url']) === false || $SETTINGS['cpassman_url'] === '') {
105
    $SETTINGS['cpassman_url'] = $request->server->get('REQUEST_URI');
106
}
107
108
// Load Core library
109
require_once $SETTINGS['cpassman_dir'] . '/sources/core.php';
110
// Prepare POST variables
111
$post_language = filter_input(INPUT_POST, 'language', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
112
$session_user_language = $session->get('user-language');
113
$session_user_admin = $session->get('user-admin');
114
$session_user_human_resources = (int) $session->get('user-can_manage_all_users');
115
$session_name = $session->get('user-name');
116
$session_lastname = $session->get('user-lastname');
117
$session_user_manager = $session->get('user-manager');
118
$session_initial_url = $session->get('user-initial_url');
119
$session_nb_users_online = $session->get('nb_users_online');
120
$session_auth_type = $session->get('user-auth_type');
121
122
$server = [];
123
$server['request_uri'] = (string) $request->server->get('REQUEST_URI');
124
$server['request_time'] = (int) $request->server->get('REQUEST_TIME');
125
126
$get = [];
127
$get['page'] = $request->query->get('page') === null ? '' : $request->query->get('page');
128
$get['otv'] = $request->query->get('otv') === null ? '' : $request->query->get('otv');
129
130
/* DEFINE WHAT LANGUAGE TO USE */
131
if (null === $session->get('user-validite_pw') && $post_language === null && $session_user_language === null) {
132
    //get default language
133
    $dataLanguage = DB::queryFirstRow(
134
        'SELECT m.valeur AS valeur, l.flag AS flag
135
        FROM ' . prefixTable('misc') . ' AS m
136
        INNER JOIN ' . prefixTable('languages') . ' AS l ON (m.valeur = l.name)
137
        WHERE m.type=%s_type AND m.intitule=%s_intitule',
138
        [
139
            'type' => 'admin',
140
            'intitule' => 'default_language',
141
        ]
142
    );
143
    if (empty($dataLanguage['valeur'])) {
144
        $session->set('user-language', 'english');
145
        $session->set('user-language_flag', 'us.png');
146
        $session_user_language = 'english';
147
    } else {
148
        $session->set('user-language', $dataLanguage['valeur']);
149
        $session->set('user-language_flag', $dataLanguage['flag']);
150
        $session_user_language = $dataLanguage['valeur'];
151
    }
152
} elseif (isset($SETTINGS['default_language']) === true && $session_user_language === null) {
153
    $session->set('user-language', $SETTINGS['default_language']);
154
    $session_user_language = $SETTINGS['default_language'];
155
} elseif ($post_language !== null) {
156
    $session->set('user-language', $post_language);
157
    $session_user_language = $post_language;
158
} elseif ($session_user_language === null || empty($session_user_language) === true) {
159
    if ($post_language !== null) {
160
        $session->set('user-language', $post_language);
161
        $session_user_language = $post_language;
162
    } elseif ($session_user_language !== null) {
163
        $session->set('user-language', $SETTINGS['default_language']);
164
        $session_user_language = $SETTINGS['default_language'];
165
    }
166
}
167
$lang = new Language($session_user_language, __DIR__. '/includes/language/'); 
168
169
if (isset($SETTINGS['cpassman_dir']) === false || $SETTINGS['cpassman_dir'] === '') {
170
    $SETTINGS['cpassman_dir'] = __DIR__;
171
    $SETTINGS['cpassman_url'] = (string) $server['request_uri'];
172
}
173
174
// Some template adjust
175
if (array_key_exists($get['page'], $mngPages) === true) {
176
    $menuAdmin = true;
177
} else {
178
    $menuAdmin = false;
179
}
180
181
// Some template adjust
182
if (array_key_exists($get['page'], $utilitiesPages) === true) {
183
    $menuUtilities = true;
184
} else {
185
    $menuUtilities = false;
186
}
187
188
?>
189
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
190
191
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
192
193
<head>
194
    <meta http-equiv='Content-Type' content='text/html;charset=utf-8' />
195
    <meta name="viewport" content="width=device-width, initial-scale=1" />
196
    <meta http-equiv="x-ua-compatible" content="ie=edge" />
197
    <title>Teampass</title>
198
    <script type='text/javascript'>
199
        //<![CDATA[
200
        if (window.location.href.indexOf('page=') === -1 &&
201
            (window.location.href.indexOf('otv=') === -1 &&
202
                window.location.href.indexOf('action=') === -1)
203
        ) {
204
            if (window.location.href.indexOf('session_over=true') !== -1) {
205
                location.replace('./includes/core/logout.php');
206
            }
207
        }
208
        //]]>
209
    </script>
210
211
    <!-- IonIcons -->
212
    <link rel="stylesheet" href="includes/css/ionicons.min.css">
213
    <!-- Theme style -->
214
    <link rel="stylesheet" href="plugins/adminlte/css/adminlte.min.css">
215
    <link rel="stylesheet" href="plugins/pace-progress/themes/corner-indicator.css" type="text/css" />
216
    <link rel="stylesheet" href="plugins/select2/css/select2.min.css" type="text/css" />
217
    <!--<link rel="stylesheet" href="plugins/select2/css/select2-bootstrap.min.css" type="text/css" />-->
218
    <link rel="stylesheet" href="plugins/select2/theme/select2-bootstrap4.min.css" type="text/css" />
219
    <!-- Theme style -->
220
    <link rel="stylesheet" href="includes/css/teampass.css">
221
    <!-- Google Font: Source Sans Pro -->
222
    <link rel="stylesheet" type="text/css" href="includes/fonts/fonts.css">
223
    <!-- Altertify -->
224
    <link rel="stylesheet" href="plugins/alertifyjs/css/alertify.min.css" />
225
    <link rel="stylesheet" href="plugins/alertifyjs/css/themes/bootstrap.min.css" />
226
    <!-- Toastr -->
227
    <link rel="stylesheet" href="plugins/toastr/toastr.min.css" />
228
    <!-- favicon -->
229
    <link rel="shortcut icon" type="image/png" href="<?php echo $SETTINGS['favicon'];?>"/>
230
    <!-- Custom style -->
231
    <?php
232
    if (file_exists(__DIR__ . '/includes/css/custom.css') === true) {?>
233
        <link rel="stylesheet" href="includes/css/custom.css">
234
    <?php
235
    } ?>
236
</head>
237
238
239
240
241
<?php
242
error_log(print_r($session->all(), true));
0 ignored issues
show
It seems like print_r($session->all(), true) can also be of type true; however, parameter $message of error_log() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

242
error_log(/** @scrutinizer ignore-type */ print_r($session->all(), true));
Loading history...
243
// display an item in the context of OTV link
244
if ((null === $session->get('user-validite_pw') || empty($session->get('user-validite_pw')) === true || empty($session->get('user-id')) === true)
245
    && empty($get['otv']) === false)
246
{
247
    include './includes/core/otv.php';
248
    exit;
249
} elseif ($session->has('user-validite_pw') && $session->get('user-validite_pw') && null !== $session->get('user-validite_pw') && $session->get('user-validite_pw') === 1 && 
250
    empty($get['page']) === false && empty($session->get('user-id')) === false
251
) {
252
    ?>
253
    <body class="hold-transition sidebar-mini layout-navbar-fixed layout-fixed">
254
        <div class="wrapper">
255
256
            <!-- Navbar -->
257
            <nav class="main-header navbar navbar-expand navbar-white navbar-light border-bottom">
258
                <!-- User encryption still ongoing -->
259
                <div id="user_not_ready" class="alert alert-warning hidden pointer p-2 mt-2" style="position:absolute; left:200px;">
260
                    <span class="align-middle infotip ml-2" title="<?php echo $lang->get('keys_encryption_not_ready'); ?>"><?php echo $lang->get('account_not_ready'); ?><span id="user_not_ready_progress"></span><i class="fa-solid fa-hourglass-half fa-beat-fade mr-2 ml-2"></i></span>
261
                </div>
262
263
                <!-- Left navbar links -->
264
                <ul class="navbar-nav">
265
                    <li class="nav-item">
266
                        <a class="nav-link" data-widget="pushmenu" href="#"><i class="fa-solid fa-bars"></i></a>
267
                    </li>
268
                    <?php
269
                        if ($get['page'] === 'items') {
270
                            ?>
271
                        <li class="nav-item d-none d-sm-inline-block">
272
                            <a class="nav-link" href="#">
273
                                <i class="far fa-arrow-alt-circle-right columns-position tree-increase infotip" title="<?php echo $lang->get('move_right_columns_separator'); ?>"></i>
274
                            </a>
275
                        </li>
276
                        <li class="nav-item d-none d-sm-inline-block">
277
                            <a class="nav-link" href="#">
278
                                <i class="far fa-arrow-alt-circle-left columns-position tree-decrease infotip" title="<?php echo $lang->get('move_left_columns_separator'); ?>"></i>
279
                            </a>
280
                        </li>
281
                    <?php
282
                        } ?>
283
                </ul>
284
285
                <!-- Right navbar links -->
286
                <ul class="navbar-nav ml-auto">
287
                    <span class="fa-stack infotip pointer hidden mr-2" title="<?php echo $lang->get('get_your_recovery_keys'); ?>" id="open_user_keys_management" style="vertical-align: top;">
288
                        <i class="fa-solid fa-circle text-danger fa-stack-2x"></i>
289
                        <i class="fa-solid fa-bell fa-shake fa-stack-1x fa-inverse"></i>
290
                    </span>
291
                    <!-- Messages Dropdown Menu -->
292
                    <li class="nav-item dropdown">
293
                        <div class="dropdown show">
294
                            <a class="btn btn-primary dropdown-toggle" href="#" data-toggle="dropdown">
295
                                <?php
296
                                    echo $session_name . '&nbsp;' . $session_lastname; ?>
297
                            </a>
298
299
                            <div class="dropdown-menu dropdown-menu-right">
300
                                <a class="dropdown-item user-menu" href="#" data-name="increase_session">
301
                                    <i class="far fa-clock fa-fw mr-2"></i><?php echo $lang->get('index_add_one_hour'); ?></a>
302
                                <div class="dropdown-divider"></div>
303
                                <a class="dropdown-item user-menu" href="#" data-name="profile">
304
                                    <i class="fa-solid fa-user-circle fa-fw mr-2"></i><?php echo $lang->get('my_profile'); ?>
305
                                </a>
306
                                <?php
307
                                    if (empty($session_auth_type) === false && $session_auth_type !== 'ldap') {
308
                                        ?>
309
                                    <a class="dropdown-item user-menu" href="#" data-name="password-change">
310
                                        <i class="fa-solid fa-lock fa-fw mr-2"></i><?php echo $lang->get('index_change_pw'); ?>
311
                                    </a>
312
                                <?php
313
                                    } elseif ($session_auth_type === 'ldap') {
314
                                        ?>
315
                                    <a class="dropdown-item user-menu" href="#" data-name="sync-new-ldap-password">
316
                                        <i class="fa-solid fa-key fa-fw mr-2"></i><?php echo $lang->get('sync_new_ldap_password'); ?>
317
                                    </a>
318
                                <?php
319
                                    } ?>
320
                                <a class="dropdown-item user-menu<?php echo (int) $session_user_admin === 1 ? ' hidden' : '';?>" href="#" data-name="generate-new_keys">
321
                                    <i class="fa-solid fa-spray-can-sparkles fa-fw mr-2"></i><?php echo $lang->get('generate_new_keys'); ?>
322
                                </a>
323
324
                                <div class="dropdown-divider"></div>
325
                                <a class="dropdown-item user-menu" href="#" data-name="generate-an-otp">
326
                                    <i class="fa-solid fa-qrcode fa-fw mr-2"></i><?php echo $lang->get('generate_an_otp'); ?>
327
                                </a>
328
329
                                <div class="dropdown-divider"></div>
330
                                <a class="dropdown-item user-menu" href="#" data-name="logout">
331
                                    <i class="fa-solid fa-sign-out-alt fa-fw mr-2"></i><?php echo $lang->get('disconnect'); ?>
332
                                </a>
333
                            </div>
334
                        </div>
335
                    </li>
336
                    <li>
337
                        <span class="align-middle infotip ml-2 text-info" title="<?php echo $lang->get('index_expiration_in'); ?>" id="countdown"></span>
338
                    </li>
339
                    <li class="nav-item">
340
                        <a class="nav-link" data-widget="control-sidebar" data-slide="true" href="#" id="controlsidebar"><i class="fa-solid fa-th-large"></i></a>
341
                    </li>
342
                </ul>
343
            </nav>
344
            <!-- /.navbar -->
345
346
            <!-- Main Sidebar Container -->
347
            <aside class="main-sidebar sidebar-dark-primary elevation-4">
348
                <!-- Brand Logo -->
349
                <a href="<?php echo $SETTINGS['cpassman_url'] . '/index.php?page=' . ((int) $session_user_admin === 1 ? 'admin' : 'items'); ?>" class="brand-link">
350
                    <img src="includes/images/teampass-logo2-home.png" alt="Teampass Logo" class="brand-image">
351
                    <span class="brand-text font-weight-light"><?php echo TP_TOOL_NAME; ?></span>
352
                </a>
353
354
                <!-- Sidebar -->
355
                <div class="sidebar">
356
                    <!-- Sidebar Menu -->
357
                    <nav class="mt-2" style="margin-bottom:40px;">
358
                        <ul class="nav nav-pills nav-sidebar flex-column" data-widget="treeview" role="menu" data-accordion="false">
359
                            <?php
360
                                if ($session_user_admin === 0) {
361
                                    // ITEMS & SEARCH
362
                                    echo '
363
                    <li class="nav-item">
364
                        <a href="#" data-name="items" class="nav-link', $get['page'] === 'items' ? ' active' : '', '">
365
                        <i class="nav-icon fa-solid fa-key"></i>
366
                        <p>
367
                            ' . $lang->get('pw') . '
368
                        </p>
369
                        </a>
370
                    </li>';
371
                                }
372
373
    // IMPORT menu
374
    if (isset($SETTINGS['allow_import']) === true && (int) $SETTINGS['allow_import'] === 1&& $session_user_admin === 0) {
375
        echo '
376
                    <li class="nav-item">
377
                        <a href="#" data-name="import" class="nav-link', $get['page'] === 'import' ? ' active' : '', '">
378
                        <i class="nav-icon fa-solid fa-file-import"></i>
379
                        <p>
380
                            ' . $lang->get('import') . '
381
                        </p>
382
                        </a>
383
                    </li>';
384
    }
385
    // EXPORT menu
386
    if (
387
                                    isset($SETTINGS['allow_print']) === true && (int) $SETTINGS['allow_print'] === 1
388
                                    && isset($SETTINGS['roles_allowed_to_print_select']) === true
389
                                    && empty($SETTINGS['roles_allowed_to_print_select']) === false
390
                                    && count(array_intersect(
391
                                        explode(';', $session->get('user-roles')),
392
                                        explode(',', str_replace(['"', '[', ']'], '', $SETTINGS['roles_allowed_to_print_select']))
393
                                    )) > 0
394
                                    && (int) $session_user_admin === 0
395
                                ) {
396
        echo '
397
                    <li class="nav-item">
398
                        <a href="#" data-name="export" class="nav-link', $get['page'] === 'export' ? ' active' : '', '">
399
                        <i class="nav-icon fa-solid fa-file-export"></i>
400
                        <p>
401
                            ' . $lang->get('export') . '
402
                        </p>
403
                        </a>
404
                    </li>';
405
    }
406
407
    /*
408
    // OFFLINE MODE menu
409
    if (isset($SETTINGS['settings_offline_mode']) === true && (int) $SETTINGS['settings_offline_mode'] === 1) {
410
        echo '
411
                    <li class="nav-item">
412
                        <a href="#" data-name="offline" class="nav-link', $get['page'] === 'offline' ? ' active' : '' ,'">
413
                        <i class="nav-icon fa-solid fa-plug"></i>
414
                        <p>
415
                            '.$lang->get('offline').'
416
                        </p>
417
                        </a>
418
                    </li>';
419
    }
420
    */
421
422
    if ($session_user_admin === 0) {
423
        echo '
424
                    <li class="nav-item">
425
                        <a href="#" data-name="search" class="nav-link', $get['page'] === 'search' ? ' active' : '', '">
426
                        <i class="nav-icon fa-solid fa-search"></i>
427
                        <p>
428
                            ' . $lang->get('find') . '
429
                        </p>
430
                        </a>
431
                    </li>';
432
    }
433
434
    // Favourites menu
435
    if (
436
                                    isset($SETTINGS['enable_favourites']) === true && (int) $SETTINGS['enable_favourites'] === 1
437
                                    && (int) $session_user_admin === 0
438
                                ) {
439
        echo '
440
                    <li class="nav-item">
441
                        <a href="#" data-name="favourites" class="nav-link', $get['page'] === 'admin' ? ' favourites' : '', '">
442
                        <i class="nav-icon fa-solid fa-star"></i>
443
                        <p>
444
                            ' . $lang->get('favorites') . '
445
                        </p>
446
                        </a>
447
                    </li>';
448
    }
449
    /*
450
        // KB menu
451
        if (isset($SETTINGS['enable_kb']) === true && $SETTINGS['enable_kb'] === '1'
452
        ) {
453
            echo '
454
                        <li class="nav-item">
455
                            <a href="#" data-name="kb" class="nav-link', $get['page'] === 'kb' ? ' active' : '' ,'">
456
                            <i class="nav-icon fa-solid fa-map-signs"></i>
457
                            <p>
458
    '.$lang->get('kb_menu').'
459
                            </p>
460
                            </a>
461
                        </li>';
462
        }
463
    */
464
    // SUGGESTION menu
465
    if (
466
                                    isset($SETTINGS['enable_suggestion']) && (int) $SETTINGS['enable_suggestion'] === 1
467
                                    && $session_user_manager === 1
468
                                ) {
469
        echo '
470
                    <li class="nav-item">
471
                        <a href="#" data-name="suggestion" class="nav-link', $get['page'] === 'suggestion' ? ' active' : '', '">
472
                        <i class="nav-icon fa-solid fa-lightbulb"></i>
473
                        <p>
474
                            ' . $lang->get('suggestion_menu') . '
475
                        </p>
476
                        </a>
477
                    </li>';
478
    }
479
480
    // Admin menu
481
    if ($session_user_admin === 1) {
482
        echo '
483
                    <li class="nav-item">
484
                        <a href="#" data-name="admin" class="nav-link', $get['page'] === 'admin' ? ' active' : '', '">
485
                        <i class="nav-icon fa-solid fa-info"></i>
486
                        <p>
487
                            ' . $lang->get('admin_main') . '
488
                        </p>
489
                        </a>
490
                    </li>
491
                    <li class="nav-item has-treeview', $menuAdmin === true ? ' menu-open' : '', '">
492
                        <a href="#" class="nav-link">
493
                            <i class="nav-icon fa-solid fa-wrench"></i>
494
                            <p>
495
                                ' . $lang->get('admin_settings') . '
496
                                <i class="fa-solid fa-angle-left right"></i>
497
                            </p>
498
                        </a>
499
                        <ul class="nav-item nav-treeview">
500
                            <li class="nav-item">
501
                                <a href="#" data-name="options" class="nav-link', $get['page'] === 'options' ? ' active' : '', '">
502
                                    <i class="fa-solid fa-check-double nav-icon"></i>
503
                                    <p>' . $lang->get('options') . '</p>
504
                                </a>
505
                            </li>
506
                            <li class="nav-item">
507
                                <a href="#" data-name="2fa" class="nav-link', $get['page'] === '2fa' ? ' active' : '', '">
508
                                    <i class="fa-solid fa-qrcode nav-icon"></i>
509
                                    <p>' . $lang->get('mfa_short') . '</p>
510
                                </a>
511
                            </li>
512
                            <li class="nav-item">
513
                                <a href="#" data-name="api" class="nav-link', $get['page'] === 'api' ? ' active' : '', '">
514
                                    <i class="fa-solid fa-cubes nav-icon"></i>
515
                                    <p>' . $lang->get('api') . '</p>
516
                                </a>
517
                            </li>
518
                            <li class="nav-item">
519
                                <a href="#" data-name="backups" class="nav-link', $get['page'] === 'backups' ? ' active' : '', '">
520
                                    <i class="fa-solid fa-database nav-icon"></i>
521
                                    <p>' . $lang->get('backups') . '</p>
522
                                </a>
523
                            </li>
524
                            <li class="nav-item">
525
                                <a href="#" data-name="emails" class="nav-link', $get['page'] === 'emails' ? ' active' : '', '">
526
                                    <i class="fa-solid fa-envelope nav-icon"></i>
527
                                    <p>' . $lang->get('emails') . '</p>
528
                                </a>
529
                            </li>
530
                            <li class="nav-item">
531
                                <a href="#" data-name="fields" class="nav-link', $get['page'] === 'fields' ? ' active' : '', '">
532
                                    <i class="fa-solid fa-keyboard nav-icon"></i>
533
                                    <p>' . $lang->get('fields') . '</p>
534
                                </a>
535
                            </li>
536
                            <li class="nav-item">
537
                                <a href="#" data-name="ldap" class="nav-link', $get['page'] === 'ldap' ? ' active' : '', '">
538
                                    <i class="fa-solid fa-id-card nav-icon"></i>
539
                                    <p>' . $lang->get('ldap') . '</p>
540
                                </a>
541
                            </li>
542
                            <li class="nav-item">
543
                                <a href="#" data-name="uploads" class="nav-link', $get['page'] === 'uploads' ? ' active' : '', '">
544
                                    <i class="fa-solid fa-file-upload nav-icon"></i>
545
                                    <p>' . $lang->get('uploads') . '</p>
546
                                </a>
547
                            </li>
548
                            <li class="nav-item">
549
                                <a href="#" data-name="statistics" class="nav-link', $get['page'] === 'statistics' ? ' active' : '', '">
550
                                    <i class="fa-solid fa-chart-bar nav-icon"></i>
551
                                    <p>' . $lang->get('statistics') . '</p>
552
                                </a>
553
                            </li>
554
                        </ul>
555
                    </li>';
556
557
                    if (isset($SETTINGS['enable_tasks_manager']) && (int) $SETTINGS['enable_tasks_manager'] === 1) {
558
                        echo '
559
                    <li class="nav-item">
560
                        <a href="#" data-name="tasks" class="nav-link', $get['page'] === 'tasks' ? ' active' : '', '">
561
                        <i class="fa-solid fa-tasks nav-icon"></i>
562
                        <p>' . $lang->get('tasks') . '</p>
563
                        </a>
564
                    </li>';
565
                    }
566
    }
567
568
    if (
569
                                    $session_user_admin === 1
570
                                    || $session_user_manager === 1
571
                                    || $session_user_human_resources === 1
572
                                ) {
573
        echo '
574
                    <li class="nav-item">
575
                        <a href="#" data-name="folders" class="nav-link', $get['page'] === 'folders' ? ' active' : '', '">
576
                        <i class="nav-icon fa-solid fa-folder-open"></i>
577
                        <p>
578
                            ' . $lang->get('folders') . '
579
                        </p>
580
                        </a>
581
                    </li>
582
                    <li class="nav-item">
583
                        <a href="#" data-name="roles" class="nav-link', $get['page'] === 'roles' ? ' active' : '', '">
584
                        <i class="nav-icon fa-solid fa-graduation-cap"></i>
585
                        <p>
586
                            ' . $lang->get('roles') . '
587
                        </p>
588
                        </a>
589
                    </li>
590
                    <li class="nav-item">
591
                        <a href="#" data-name="users" class="nav-link', $get['page'] === 'users' ? ' active' : '', '">
592
                        <i class="nav-icon fa-solid fa-users"></i>
593
                        <p>
594
                            ' . $lang->get('users') . '
595
                        </p>
596
                        </a>
597
                    </li>
598
                    <li class="nav-item has-treeview', $menuUtilities === true ? ' menu-open' : '', '">
599
                        <a href="#" class="nav-link">
600
                        <i class="nav-icon fa-solid fa-cubes"></i>
601
                        <p>' . $lang->get('admin_views') . '<i class="fa-solid fa-angle-left right"></i></p>
602
                        </a>
603
                        <ul class="nav nav-treeview">
604
                            <li class="nav-item">
605
                                <a href="#" data-name="utilities.renewal" class="nav-link', $get['page'] === 'utilities.renewal' ? ' active' : '', '">
606
                                <i class="far fa-calendar-alt nav-icon"></i>
607
                                <p>' . $lang->get('renewal') . '</p>
608
                                </a>
609
                            </li>
610
                            <li class="nav-item">
611
                                <a href="#" data-name="utilities.deletion" class="nav-link', $get['page'] === 'utilities.deletion' ? ' active' : '', '">
612
                                <i class="fa-solid fa-trash-alt nav-icon"></i>
613
                                <p>' . $lang->get('deletion') . '</p>
614
                                </a>
615
                            </li>
616
                            <li class="nav-item">
617
                                <a href="#" data-name="utilities.logs" class="nav-link', $get['page'] === 'utilities.logs' ? ' active' : '', '">
618
                                <i class="fa-solid fa-history nav-icon"></i>
619
                                <p>' . $lang->get('logs') . '</p>
620
                                </a>
621
                            </li>
622
                            <li class="nav-item">
623
                                <a href="#" data-name="utilities.database" class="nav-link', $get['page'] === 'utilities.database' ? ' active' : '', '">
624
                                <i class="fa-solid fa-database nav-icon"></i>
625
                                <p>' . $lang->get('database') . '</p>
626
                                </a>
627
                            </li>
628
                        </ul>
629
                    </li>';
630
    } ?>
631
                        </ul>
632
                    </nav>
633
                    <!-- /.sidebar-menu -->
634
                <div class="menu-footer">
635
                    <div class="" id="sidebar-footer">
636
                        <i class="fa-solid fa-clock-o mr-2 infotip text-info pointer" title="<?php echo $lang->get('server_time') . ' ' .
637
                            date($SETTINGS['date_format'], (int) $server['request_time']) . ' - ' .
638
                            date($SETTINGS['time_format'], (int) $server['request_time']); ?>"></i>
639
                        <i class="fa-solid fa-users mr-2 infotip text-info pointer" title="<?php echo $session_nb_users_online . ' ' . $lang->get('users_online'); ?>"></i>
640
                        <a href="<?php echo DOCUMENTATION_URL; ?>" target="_blank" class="text-info"><i class="fa-solid fa-book mr-2 infotip" title="<?php echo $lang->get('documentation_canal'); ?>"></i></a>
641
                        <a href="<?php echo HELP_URL; ?>" target="_blank" class="text-info"><i class="fa-solid fa-life-ring mr-2 infotip" title="<?php echo $lang->get('admin_help'); ?>"></i></a>
642
                        <i class="fa-solid fa-bug infotip pointer text-info" title="<?php echo $lang->get('bugs_page'); ?>" onclick="generateBugReport()"></i>
643
                    </div>
644
                    <?php
645
    ?>
646
                </div>
647
                </div>
648
                <!-- /.sidebar -->
649
            </aside>
650
651
            <!-- Content Wrapper. Contains page content -->
652
            <div class="content-wrapper">
653
654
                <!-- DEFECT REPORT -->
655
                <div class="card card-danger m-2 hidden" id="dialog-bug-report">
656
                    <div class="card-header">
657
                        <h3 class="card-title">
658
                            <i class="fa-solid fa-bug mr-2"></i>
659
                            <?php echo $lang->get('defect_report'); ?>
660
                        </h3>
661
                    </div>
662
                    <div class="card-body">
663
                        <div class="row">
664
                            <div class="col-sm-12 col-md-12">
665
                                <div class="mb-2 alert alert-info">
666
                                    <i class="icon fa-solid fa-info mr-2"></i>
667
                                    <?php echo $lang->get('bug_report_to_github'); ?>
668
                                </div>
669
                                <textarea class="form-control" style="min-height:300px;" id="dialog-bug-report-text" placeholder="<?php echo $lang->get('please_wait_while_loading'); ?>"></textarea>
670
                            </div>
671
                        </div>
672
                    </div>
673
                    <div class="card-footer">
674
                        <button class="btn btn-primary mr-2 clipboard-copy" data-clipboard-text="dialog-bug-report-text" id="dialog-bug-report-select-button"><?php echo $lang->get('copy_to_clipboard'); ?></button>
675
                        <button class="btn btn-primary" id="dialog-bug-report-github-button"><?php echo $lang->get('open_bug_report_in_github'); ?></button>
676
                        <button class="btn btn-default float-right close-element"><?php echo $lang->get('close'); ?></button>
677
                    </div>
678
                </div>
679
                <!-- /.DEFECT REPORT -->
680
681
682
                <!-- USER CHANGE AUTH PASSWORD -->
683
                <div class="card card-warning m-3 hidden" id="dialog-user-change-password">
684
                    <div class="card-header">
685
                        <h3 class="card-title">
686
                            <i class="fa-solid fa-bullhorn mr-2"></i>
687
                            <?php echo $lang->get('your_attention_is_required'); ?>
688
                        </h3>
689
                    </div>
690
                    <div class="card-body">
691
                        <div class="row">
692
                            <div class="col-sm-12 col-md-12">
693
                                <div class="mb-5 alert alert-info hidden" id="dialog-user-change-password-info">
694
                                </div>
695
                                <div class="input-group mb-3">
696
                                    <div class="input-group-prepend">
697
                                        <span class="input-group-text"><?php echo $lang->get('provide_your_current_password'); ?></span>
698
                                    </div>
699
                                    <input type="password" class="form-control" id="profile-current-password">
700
                                </div>
701
                                <div class="input-group mb-3">
702
                                    <div class="input-group-prepend">
703
                                        <span class="input-group-text"><?php echo $lang->get('index_new_pw'); ?></span>
704
                                    </div>
705
                                    <input type="password" class="form-control" id="profile-password">
706
                                    <div class="input-group-append" style="margin: 0px;">
707
                                        <span class="input-group-text" id="profile-password-strength"></span>
708
                                        <input type="hidden" id="profile-password-complex" />
709
                                    </div>
710
                                </div>
711
                                <div class="input-group mb-3">
712
                                    <div class="input-group-prepend">
713
                                        <span class="input-group-text"><?php echo $lang->get('index_change_pw_confirmation'); ?></span>
714
                                    </div>
715
                                    <input type="password" class="form-control" id="profile-password-confirm">
716
                                </div>
717
                                <div class="form-control mt-3 font-weight-light grey" id="dialog-user-change-password-progress">
718
                                    <?php echo $lang->get('provide_current_psk_and_click_launch'); ?>
719
                                </div>
720
                            </div>
721
                        </div>
722
                    </div>
723
                    <div class="card-footer">
724
                        <button class="btn btn-primary" id="dialog-user-change-password-do"><?php echo $lang->get('launch'); ?></button>
725
                        <button class="btn btn-default float-right" id="dialog-user-change-password-close"><?php echo $lang->get('close'); ?></button>
726
                    </div>
727
                </div>
728
                <!-- /.USER CHANGE AUTH PASSWORD -->
729
730
731
                <!-- LDAP USER HAS CHANGED AUTH PASSWORD -->
732
                <div class="card card-warning m-3 hidden" id="dialog-ldap-user-change-password">
733
                    <div class="card-header">
734
                        <h3 class="card-title">
735
                            <i class="fa-solid fa-bullhorn mr-2"></i>
736
                            <?php echo $lang->get('your_attention_is_required'); ?>
737
                        </h3>
738
                    </div>
739
                    <div class="card-body">
740
                        <div class="row">
741
                            <div class="col-sm-12 col-md-12">
742
                                <div class="mb-5 alert alert-info hidden" id="dialog-ldap-user-change-password-info">
743
                                </div>
744
                                <div class="input-group mb-3">
745
                                    <div class="input-group-prepend">
746
                                        <span class="input-group-text"><?php echo $lang->get('provide_your_previous_password'); ?></span>
747
                                    </div>
748
                                    <input type="password" class="form-control" id="dialog-ldap-user-change-password-old">
749
                                </div>
750
                                <div class="input-group mb-3">
751
                                    <div class="input-group-prepend">
752
                                        <span class="input-group-text"><?php echo $lang->get('provide_your_current_password'); ?></span>
753
                                    </div>
754
                                    <input type="password" class="form-control" id="dialog-ldap-user-change-password-current">
755
                                </div>
756
                                <div class="form-control mt-3 font-weight-light grey" id="dialog-ldap-user-change-password-progress">
757
                                    <?php echo $lang->get('provide_current_psk_and_click_launch'); ?>
758
                                </div>
759
                            </div>
760
                        </div>
761
                    </div>
762
                    <div class="card-footer">
763
                        <button class="btn btn-primary" id="dialog-ldap-user-change-password-do"><?php echo $lang->get('launch'); ?></button>
764
                        <button class="btn btn-default float-right" id="dialog-ldap-user-change-password-close"><?php echo $lang->get('close'); ?></button>
765
                    </div>
766
                </div>
767
                <!-- /.LDAP USER HAS CHANGED AUTH PASSWORD -->
768
769
770
                <!-- ADMIN ASKS FOR USER PASSWORD CHANGE -->
771
                <div class="card card-warning m-3 hidden" id="dialog-admin-change-user-password">
772
                    <div class="card-header">
773
                        <h3 class="card-title">
774
                            <i class="fa-solid fa-bullhorn mr-2"></i>
775
                            <?php echo $lang->get('your_attention_is_required'); ?>
776
                        </h3>
777
                    </div>
778
                    <div class="card-body">
779
                        <div class="row">
780
                            <div class="col-sm-12 col-md-12">
781
                                <div class="mb-2 alert alert-info" id="dialog-admin-change-user-password-info">
782
                                </div>
783
                                <div class="form-control mt-3 font-weight-light grey" id="dialog-admin-change-user-password-progress">
784
                                    <?php echo $lang->get('provide_current_psk_and_click_launch'); ?>
785
                                </div>
786
                            </div>
787
                        </div>
788
                        <input type="hidden" id="admin_change_user_password_target_user" value="">
789
                        <input type="hidden" id="admin_change_user_encryption_code_target_user" value="">
790
                    </div>
791
                    <div class="card-footer">
792
                        <button class="btn btn-primary" id="dialog-admin-change-user-password-do"><?php echo $lang->get('launch'); ?></button>
793
                        <button class="btn btn-default float-right" id="dialog-admin-change-user-password-close"><?php echo $lang->get('close'); ?></button>
794
                    </div>
795
                </div>
796
                <!-- /.ADMIN ASKS FOR USER PASSWORD CHANGE -->
797
798
799
                <!-- USER PROVIDES TEMPORARY CODE -->
800
                <div class="card card-warning m-3 hidden" id="dialog-user-temporary-code">
801
                    <div class="card-header">
802
                        <h3 class="card-title">
803
                            <i class="fa-solid fa-bullhorn mr-2"></i>
804
                            <?php echo $lang->get('your_attention_is_required'); ?>
805
                        </h3>
806
                    </div>
807
                    <div class="card-body">
808
                        <div class="row">
809
                            <div class="col-sm-12 col-md-12">
810
                                <div class="mb-5 alert alert-info" id="dialog-user-temporary-code-info">
811
                                </div>
812
                                <div class="input-group mb-3">
813
                                    <div class="input-group-prepend">
814
                                        <span class="input-group-text"><?php echo $lang->get('provide_your_current_password'); ?></span>
815
                                    </div>
816
                                    <input type="password" class="form-control" id="dialog-user-temporary-code-current-password">
817
                                </div>
818
                                <div class="input-group mb-3">
819
                                    <div class="input-group-prepend">
820
                                        <span class="input-group-text"><?php echo $lang->get('temporary_encryption_code'); ?></span>
821
                                    </div>
822
                                    <input type="password" class="form-control" id="dialog-user-temporary-code-value">
823
                                </div>
824
                                <div class="form-control mt-3 font-weight-light grey" id="dialog-user-temporary-code-progress">
825
                                    <?php echo $lang->get('provide_current_psk_and_click_launch'); ?>
826
                                </div>
827
                            </div>
828
                        </div>
829
                    </div>
830
                    <div class="card-footer">
831
                        <button class="btn btn-primary" id="dialog-user-temporary-code-do"><?php echo $lang->get('launch'); ?></button>
832
                        <button class="btn btn-default float-right" id="dialog-user-temporary-code-close"><?php echo $lang->get('close'); ?></button>
833
                    </div>
834
                </div>
835
                <!-- /.USER PROVIDES TEMPORARY CODE -->
836
837
838
                <!-- ENCRYPTION KEYS GENERATION -->
839
                <div class="card card-warning m-3 mt-3 hidden" id="dialog-encryption-keys">
840
                    <div class="card-header">
841
                        <h3 class="card-title">
842
                            <i class="fa-solid fa-bullhorn mr-2"></i>
843
                            <?php echo $lang->get('your_attention_is_required'); ?>
844
                        </h3>
845
                    </div>
846
                    <div class="card-body">
847
                        <div class="row">
848
                            <div class="col-sm-12 col-md-12">
849
                                <div class="mb-2 alert alert-info" id="warning-text-reencryption">
850
                                    <i class="icon fa-solid fa-info mr-2"></i>
851
                                    <?php echo $lang->get('objects_encryption_explanation'); ?>
852
                                </div>
853
                            </div>
854
                        </div>
855
                        <input type="hidden" id="sharekeys_reencryption_target_user" value="">
856
                    </div>
857
                    <div class="card-footer">
858
                        <button class="btn btn-primary" id="button_do_sharekeys_reencryption"><?php echo $lang->get('launch'); ?></button>
859
                        <button class="btn btn-default float-right" id="button_close_sharekeys_reencryption"><?php echo $lang->get('close'); ?></button>
860
                    </div>
861
                </div>
862
                <!-- /.ENCRYPTION KEYS GENERATION -->
863
864
865
                <!-- ENCRYPTION KEYS GENERATION FOR LDAP NEW USER -->
866
                <div class="card card-warning m-3 mt-3 hidden" id="dialog-ldap-user-build-keys-database">
867
                    <div class="card-header">
868
                        <h3 class="card-title">
869
                            <i class="fa-solid fa-bullhorn mr-2"></i>
870
                            <?php echo $lang->get('your_attention_is_required'); ?>
871
                        </h3>
872
                    </div>
873
                    <div class="card-body">
874
                        <div class="row">
875
                            <div class="col-sm-12 col-md-12">
876
                                <div class="mb-2 alert alert-info" id="warning-text-reencryption">
877
                                    <i class="icon fa-solid fa-info mr-2"></i>
878
                                    <?php echo $lang->get('help_for_launching_items_encryption'); ?>
879
                                </div>
880
881
                                <div class="input-group mb-3">
882
                                    <div class="input-group-prepend">
883
                                        <span class="input-group-text"><?php echo $lang->get('temporary_encryption_code'); ?></span>
884
                                    </div>
885
                                    <input type="password" class="form-control" id="dialog-ldap-user-build-keys-database-code">
886
                                </div>
887
                                
888
                                <div class="form-control mt-3 font-weight-light grey" id="dialog-ldap-user-build-keys-database-progress">
889
                                    <?php echo $lang->get('provide_current_psk_and_click_launch'); ?>
890
                                </div>
891
                            </div>
892
                        </div>
893
                        <input type="hidden" id="sharekeys_reencryption_target_user" value="">
894
                    </div>
895
                    <div class="card-footer">
896
                        <button class="btn btn-primary" id="dialog-ldap-user-build-keys-database-do"><?php echo $lang->get('launch'); ?></button>
897
                        <button class="btn btn-default float-right" id="dialog-ldap-user-build-keys-database-close"><?php echo $lang->get('close'); ?></button>
898
                    </div>
899
                </div>
900
                <!-- /.ENCRYPTION KEYS GENERATION -->
901
902
                <!-- ENCRYPTION PERSONAL ITEMS GENERATION -->
903
                <div class="card card-warning m-3 hidden" id="dialog-encryption-personal-items-after-upgrade">
904
                    <div class="card-header">
905
                        <h3 class="card-title">
906
                            <i class="fa-solid fa-bullhorn mr-2"></i>
907
                            <?php echo $lang->get('your_attention_is_required'); ?>
908
                        </h3>
909
                    </div>
910
                    <div class="card-body">
911
                        <div class="row">
912
                            <div class="col-sm-12 col-md-12">
913
                                <div class="mb-2 alert alert-info" id="warning-text-changing-password">
914
                                    <i class="icon fa-solid fa-info mr-2"></i>
915
                                    <?php echo $lang->get('objects_encryption_explanation'); ?>
916
                                </div>
917
                                <div class="input-group mb-3">
918
                                    <div class="input-group-prepend">
919
                                        <span class="input-group-text"><?php echo $lang->get('personal_salt_key'); ?></span>
920
                                    </div>
921
                                    <input type="password" class="form-control" id="user-current-defuse-psk">
922
                                </div>
923
                                <div class="form-control mt-3 font-weight-light grey" id="user-current-defuse-psk-progress">
924
                                    <?php echo $lang->get('provide_current_psk_and_click_launch'); ?>
925
                                </div>
926
                            </div>
927
                        </div>
928
                    </div>
929
                    <div class="card-footer">
930
                        <button class="btn btn-primary" id="button_do_personal_items_reencryption"><?php echo $lang->get('launch'); ?></button>
931
                        <button class="btn btn-default float-right" id="button_close_personal_items_reencryption"><?php echo $lang->get('close'); ?></button>
932
                    </div>
933
                </div>
934
                <!-- /.ENCRYPTION PERSONAL ITEMS GENERATION -->
935
                
936
937
                <?php
938
                    if ($session_initial_url !== null && empty($session_initial_url) === false) {
939
                        include $session_initial_url;
940
                    } elseif ($get['page'] === 'items') {
941
                        // SHow page with Items
942
                        if ((int) $session_user_admin !== 1) {
943
                            include $SETTINGS['cpassman_dir'] . '/pages/items.php';
944
                        } elseif ((int) $session_user_admin === 1) {
945
                            include $SETTINGS['cpassman_dir'] . '/pages/admin.php';
946
                        } else {
947
                            $session->set('system-error_code', ERR_NOT_ALLOWED);
948
                            //not allowed page
949
                            include $SETTINGS['cpassman_dir'] . '/error.php';
950
                        }
951
                    } elseif (in_array($get['page'], array_keys($mngPages)) === true) {
952
                        // Define if user is allowed to see management pages
953
                        if ($session_user_admin === 1) {
954
                            include $SETTINGS['cpassman_dir'] . '/pages/' . $mngPages[$get['page']];
955
                        } elseif ($session_user_manager === 1 || $session_user_human_resources === 1) {
956
                            if ($get['page'] !== 'manage_main'
957
                                && $get['page'] !== 'manage_settings'
958
                            ) {
959
                                //include $SETTINGS['cpassman_dir'] . '/pages/' . $mngPages[$_GET['page']];
960
                            } else {
961
                                $session->set('system-error_code', ERR_NOT_ALLOWED);
962
                                //not allowed page
963
                                include $SETTINGS['cpassman_dir'] . '/error.php';
964
                            }
965
                        } else {
966
                            $session->set('system-error_code', ERR_NOT_ALLOWED);
967
                            //not allowed page
968
                            include $SETTINGS['cpassman_dir'] . '/error.php';
969
                        }
970
                    } elseif (empty($get['page']) === false) {
971
                        include $SETTINGS['cpassman_dir'] . '/pages/' . $get['page'] . '.php';
972
                    } else {
973
                        $session->set('system-array_roles', ERR_NOT_EXIST);
974
                        //page doesn't exist
975
                        include $SETTINGS['cpassman_dir'].'/error.php';
976
                    }
977
978
    // Case where login attempts have been identified
979
    if ((int) $session->get('user-unsuccessfull_login_attempts_nb') !== 0
980
        && (bool) $session->get('user-unsuccessfull_login_attempts_shown') === false
981
    ) {
982
        ?>
983
                    <input type="hidden" id="user-login-attempts" value="1">
984
                <?php
985
    } ?>
986
987
            </div>
988
            <!-- /.content-wrapper -->
989
990
            <!-- Control Sidebar -->
991
            <aside class="control-sidebar control-sidebar-dark">
992
                <!-- Control sidebar content goes here -->
993
                <div class="p-3">
994
                    <h5><?php echo $lang->get('last_items_title'); ?></h5>
995
                    <div>
996
                        <ul class="list-unstyled" id="index-last-pwds">
997
                        </ul>
998
                    </div>
999
                </div>
1000
            </aside>
1001
            <!-- /.control-sidebar -->
1002
1003
            <!-- Main Footer -->
1004
            <footer class="main-footer">
1005
                <!-- To the right -->
1006
                <div class="float-right d-none d-sm-inline">
1007
                    <?php echo $lang->get('version_alone'); ?>&nbsp;<?php echo TP_VERSION; ?>
1008
                </div>
1009
                <!-- Default to the left -->
1010
                <strong>Copyright &copy; <?php echo TP_COPYRIGHT; ?> <a href="<?php echo TEAMPASS_URL; ?>"><?php echo TP_TOOL_NAME; ?></a>.</strong> All rights reserved.
1011
            </footer>
1012
        </div>
1013
        <!-- ./wrapper -->
1014
1015
    <?php
1016
        /* MAIN PAGE */
1017
        echo '
1018
<input type="hidden" id="temps_restant" value="', $session->get('user-session_duration') ?? '', '" />';
1019
// display an item in the context of OTV link
1020
} elseif ((null === $session->get('user-validite_pw')|| empty($session->get('user-validite_pw')) === true || empty($session->get('user-id')) === true)
1021
    && empty($get['otv']) === false
1022
) {
1023
    // case where one-shot viewer
1024
    if (empty($request->query->get('code')) === false && empty($request->query->get('stamp')) === false
1025
    ) {
1026
        include './includes/core/otv.php';
1027
    } else {
1028
        $session->set('system-error_code', ERR_VALID_SESSION);
1029
        $session->set(
1030
            'user-initial_url',
1031
            filter_var(
1032
                substr(
1033
                    $server['request_uri'],
1034
                    strpos($server['request_uri'], 'index.php?')
1035
                ),
1036
                FILTER_SANITIZE_URL
1037
            )
1038
        );
1039
        include $SETTINGS['cpassman_dir'] . '/error.php';
1040
    }
1041
} elseif (//(empty($session->get('user-id')) === false && $session->get('user-id') !== null) ||
1042
        empty($session->get('user-id')) === true
1043
        || null === $session->get('user-validite_pw')
1044
        || $session->get('user-validite_pw') === 0
1045
    ) {
1046
    // case where user not logged and can't access a direct link
1047
    if (empty($get['page']) === false) {
1048
        $session->set(
1049
            'user-initial_url',
1050
            filter_var(
1051
                substr($server['request_uri'], strpos($server['request_uri'], 'index.php?')),
1052
                FILTER_SANITIZE_URL
1053
            )
1054
        );
1055
        // REDIRECTION PAGE ERREUR
1056
        echo '
1057
            <script language="javascript" type="text/javascript">
1058
            <!--
1059
                sessionStorage.clear();
1060
                store.set(
1061
                    "teampassSettings", {},
1062
                    function(teampassSettings) {}
1063
                );
1064
                window.location.href = "index.php";
1065
            -->
1066
            </script>';
1067
        exit;
1068
    }
1069
    $session->set('user-initial_url', '');
1070
    //$session->invalidate();
1071
    //session_regenerate_id(true);
1072
    error_log('index.php L1069');
1073
    // LOGIN form
1074
    include $SETTINGS['cpassman_dir'] . '/includes/core/login.php';
1075
} else {
1076
    // Clear session
1077
    error_log('index.php L1074');
1078
    $session->invalidate();
1079
    //session_regenerate_id(true);
1080
}
1081
    ?>
1082
1083
    <!-- Modal -->
1084
    <div class="modal fade" id="warningModal" tabindex="-1" role="dialog" aria-labelledby="Caution" aria-hidden="true">
1085
        <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
1086
            <div class="modal-content">
1087
                <div class="modal-header">
1088
                    <h5 class="modal-title" id="warningModalTitle"></h5>
1089
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close" id="warningModalCrossClose">
1090
                        <span aria-hidden="true">&times;</span>
1091
                    </button>
1092
                </div>
1093
                <div class="modal-body" id="warningModalBody">
1094
                </div>
1095
                <div class="modal-footer">
1096
                    <button type="button" class="btn btn-secondary" data-dismiss="modal" id="warningModalButtonClose"></button>
1097
                    <button type="button" class="btn btn-primary" id="warningModalButtonAction"></button>
1098
                </div>
1099
            </div>
1100
        </div>
1101
    </div>
1102
1103
1104
1105
    <!-- REQUIRED SCRIPTS -->
1106
1107
    <!-- Font Awesome Icons -->
1108
    <link href="plugins/fontawesome-free-6/css/fontawesome.min.css" rel="stylesheet">
1109
    <link href="plugins/fontawesome-free-6/css/solid.min.css" rel="stylesheet">
1110
    <link href="plugins/fontawesome-free-6/css/regular.min.css" rel="stylesheet">
1111
    <link href="plugins/fontawesome-free-6/css/brands.min.css" rel="stylesheet">
1112
    <link href="plugins/fontawesome-free-6/css/v5-font-face.min.css" rel="stylesheet" /> 
1113
    <!-- jQuery -->
1114
    <script src="plugins/jquery/jquery.min.js"></script>
1115
    <!-- jQuery UI -->
1116
    <script src="plugins/jqueryUI/jquery-ui.min.js"></script>
1117
    <link rel="stylesheet" href="plugins/jqueryUI/jquery-ui.min.css">
1118
    <!-- Popper -->
1119
    <script src="plugins/popper/umd/popper.min.js"></script>
1120
    <!-- Bootstrap -->
1121
    <script src="plugins/bootstrap/js/bootstrap.bundle.min.js"></script>
1122
    <!-- AdminLTE -->
1123
    <script src="plugins/adminlte/js/adminlte.min.js"></script>
1124
    <!-- Altertify -->
1125
    <!--<script type="text/javascript" src="plugins/alertifyjs/alertify.min.js"></script>-->
1126
    <!-- Toastr -->
1127
    <script type="text/javascript" src="plugins/toastr/toastr.min.js"></script>
1128
    <!-- STORE.JS -->
1129
    <script type="text/javascript" src="plugins/store.js/dist/store.everything.min.js"></script>
1130
    <!-- cryptojs-aesphp -->
1131
    <script type="text/javascript" src="includes/libraries/cryptojs/crypto-js.js"></script>
1132
    <script type="text/javascript" src="includes/libraries/cryptojs/encryption.js"></script>
1133
    <!-- pace -->
1134
    <script type="text/javascript" data-pace-options='{ "ajax": true, "eventLag": false }' src="plugins/pace-progress/pace.min.js"></script>
1135
    <!-- clipboardjs -->
1136
    <script type="text/javascript" src="plugins/clipboard/clipboard.min.js"></script>
1137
    <!-- select2 -->
1138
    <script type="text/javascript" src="plugins/select2/js/select2.full.min.js"></script>
1139
    <!-- simplePassMeter -->
1140
    <link rel="stylesheet" href="plugins/simplePassMeter/simplePassMeter.css" type="text/css" />
1141
    <script type="text/javascript" src="plugins/simplePassMeter/simplePassMeter.js"></script>
1142
    <!-- platform -->
1143
    <script type="text/javascript" src="plugins/platform/platform.js"></script>
1144
    <!-- radiobuttons -->
1145
    <link rel="stylesheet" href="plugins/radioforbuttons/bootstrap-buttons.min.css" type="text/css" />
1146
    <script type="text/javascript" src="plugins/radioforbuttons/jquery.radiosforbuttons.min.js"></script>
1147
    <!-- ICHECK -->
1148
    <!--<link rel="stylesheet" href="./plugins/icheck-material/icheck-material.min.css">-->
1149
    <link rel="stylesheet" href="./plugins/icheck/skins/all.css">
1150
    <script type="text/javascript" src="./plugins/icheck/icheck.min.js"></script>
1151
    <!-- bootstrap-add-clear -->
1152
    <script type="text/javascript" src="plugins/bootstrap-add-clear/bootstrap-add-clear.min.js"></script>
1153
    <!-- DOMPurify -->
1154
    <script type="text/javascript" src="plugins/DOMPurify/purify.min.js"></script>
1155
1156
    <?php
1157
    $get = [];
1158
    $get['page'] = $request->query->get('page') === null ? '' : $request->query->get('page');
1159
    if ($menuAdmin === true) {
1160
        ?>
1161
        <link rel="stylesheet" href="./plugins/toggles/css/toggles.css" />
1162
        <link rel="stylesheet" href="./plugins/toggles/css/toggles-modern.css" />
1163
        <script src="./plugins/toggles/toggles.min.js" type="text/javascript"></script>
1164
        <!-- InputMask -->
1165
        <script src="./plugins/inputmask/jquery.inputmask.min.js"></script>
1166
        <!-- Sortable -->
1167
        <!--<script src="./plugins/sortable/jquery.sortable.js"></script>-->
1168
        <!-- PLUPLOAD -->
1169
        <script type="text/javascript" src="includes/libraries/plupload/js/plupload.full.min.js"></script>
1170
        <!-- DataTables -->
1171
        <link rel="stylesheet" src="./plugins/datatables/css/jquery.dataTables.min.css">
1172
        <link rel="stylesheet" src="./plugins/datatables/css/dataTables.bootstrap4.min.css">
1173
        <script type="text/javascript" src="./plugins/datatables/js/jquery.dataTables.min.js"></script>
1174
        <script type="text/javascript" src="./plugins/datatables/js/dataTables.bootstrap4.min.js"></script>
1175
        <link rel="stylesheet" src="./plugins/datatables/extensions/Responsive-2.2.2/css/responsive.bootstrap4.min.css">
1176
        <script type="text/javascript" src="./plugins/datatables/extensions/Responsive-2.2.2/js/dataTables.responsive.min.js"></script>
1177
        <script type="text/javascript" src="./plugins/datatables/extensions/Responsive-2.2.2/js/responsive.bootstrap4.min.js"></script>
1178
        <script type="text/javascript" src="./plugins/datatables/plugins/select.js"></script>
1179
        <link rel="stylesheet" src="./plugins/datatables/extensions/Scroller-1.5.0/css/scroller.bootstrap4.min.css">
1180
        <script type="text/javascript" src="./plugins/datatables/extensions/Scroller-1.5.0/js/dataTables.scroller.min.js"></script>
1181
    <?php
1182
    } elseif (isset($get['page']) === true) {
1183
        if (in_array($get['page'], ['items', 'import']) === true) {
1184
            ?>
1185
            <link rel="stylesheet" href="./plugins/jstree/themes/default/style.min.css" />
1186
            <script src="./plugins/jstree/jstree.min.js" type="text/javascript"></script>
1187
            <!-- countdownTimer -->
1188
            <script src="./plugins/jquery.countdown360/jquery.countdown360.js"></script>
1189
            <!-- SUMMERNOTE -->
1190
            <link rel="stylesheet" href="./plugins/summernote/summernote-bs4.css">
1191
            <script src="./plugins/summernote/summernote-bs4.min.js"></script>
1192
            <!-- date-picker -->
1193
            <link rel="stylesheet" href="./plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css">
1194
            <script src="./plugins/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script>
1195
            <!-- time-picker -->
1196
            <link rel="stylesheet" href="./plugins/timepicker/bootstrap-timepicker.min.css">
1197
            <script src="./plugins/timepicker/bootstrap-timepicker.min.js"></script>
1198
            <!-- PLUPLOAD -->
1199
            <script type="text/javascript" src="includes/libraries/plupload/js/plupload.full.min.js"></script>
1200
            <!-- VALIDATE -->
1201
            <script type="text/javascript" src="plugins/jquery-validation/jquery.validate.js"></script>
1202
            <!-- PWSTRENGHT -->
1203
            <script type="text/javascript" src="plugins/zxcvbn/zxcvbn.js"></script>
1204
            <script type="text/javascript" src="plugins/jquery.pwstrength/pwstrength-bootstrap.min.js"></script>
1205
            <!-- TOGGLE -->
1206
            <link rel="stylesheet" href="./plugins/toggles/css/toggles.css" />
1207
            <link rel="stylesheet" href="./plugins/toggles/css/toggles-modern.css" />
1208
            <script src="./plugins/toggles/toggles.min.js" type="text/javascript"></script>
1209
        <?php
1210
        } elseif (in_array($get['page'], ['search', 'folders', 'users', 'roles', 'utilities.deletion', 'utilities.logs', 'utilities.database', 'utilities.renewal', 'tasks']) === true) {
1211
            ?>
1212
            <!-- DataTables -->
1213
            <link rel="stylesheet" src="./plugins/datatables/css/jquery.dataTables.min.css">
1214
            <link rel="stylesheet" src="./plugins/datatables/css/dataTables.bootstrap4.min.css">
1215
            <script type="text/javascript" src="./plugins/datatables/js/jquery.dataTables.min.js"></script>
1216
            <script type="text/javascript" src="./plugins/datatables/js/dataTables.bootstrap4.min.js"></script>
1217
            <link rel="stylesheet" src="./plugins/datatables/extensions/Responsive-2.2.2/css/responsive.bootstrap4.min.css">
1218
            <script type="text/javascript" src="./plugins/datatables/extensions/Responsive-2.2.2/js/dataTables.responsive.min.js"></script>
1219
            <script type="text/javascript" src="./plugins/datatables/extensions/Responsive-2.2.2/js/responsive.bootstrap4.min.js"></script>
1220
            <script type="text/javascript" src="./plugins/datatables/plugins/select.js"></script>
1221
            <link rel="stylesheet" src="./plugins/datatables/extensions/Scroller-1.5.0/css/scroller.bootstrap4.min.css">
1222
            <script type="text/javascript" src="./plugins/datatables/extensions/Scroller-1.5.0/js/dataTables.scroller.min.js"></script>
1223
            <!-- dater picker -->
1224
            <link rel="stylesheet" href="./plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css">
1225
            <script src="./plugins/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script>
1226
            <!-- daterange picker -->
1227
            <link rel="stylesheet" href="./plugins/daterangepicker/daterangepicker.css">
1228
            <script src="./plugins/moment/moment.min.js"></script>
1229
            <script src="./plugins/daterangepicker/daterangepicker.js"></script>
1230
            <!-- SlimScroll -->
1231
            <script src="./plugins/slimScroll/jquery.slimscroll.min.js"></script>
1232
            <!-- FastClick -->
1233
            <script src="./plugins/fastclick/fastclick.min.js"></script>
1234
        <?php
1235
        } elseif ($get['page'] === 'profile') {
1236
            ?>
1237
            <!-- FILESAVER -->
1238
            <script type="text/javascript" src="plugins/downloadjs/download.js"></script>
1239
            <!-- PLUPLOAD -->
1240
            <script type="text/javascript" src="includes/libraries/plupload/js/plupload.full.min.js"></script>
1241
        <?php
1242
        } elseif ($get['page'] === 'export') {
1243
            ?>
1244
            <!-- FILESAVER -->
1245
            <script type="text/javascript" src="plugins/downloadjs/download.js"></script>
1246
            <!-- PWSTRENGHT -->
1247
            <script type="text/javascript" src="plugins/zxcvbn/zxcvbn.js"></script>
1248
            <script type="text/javascript" src="plugins/jquery.pwstrength/pwstrength-bootstrap.min.js"></script>
1249
        <?php
1250
        }
1251
    }
1252
    ?>
1253
    <!-- functions -->
1254
    <script type="text/javascript" src="includes/js/functions.js"></script>
1255
    <script type="text/javascript" src="includes/js/CreateRandomString.js"></script>
1256
1257
    </body>
1258
1259
</html>
1260
1261
<script type="text/javascript">
1262
    //override defaults
1263
    /*alertify.defaults.transition = "slide";
1264
    alertify.defaults.theme.ok = "btn btn-primary";
1265
    alertify.defaults.theme.cancel = "btn btn-danger";
1266
    alertify.defaults.theme.input = "form-control";*/
1267
1268
    toastr.options = {
1269
        "closeButton": false,
1270
        "debug": false,
1271
        "newestOnTop": false,
1272
        "progressBar": false,
1273
        "positionClass": "toast-bottom-right",
1274
        "preventDuplicates": true,
1275
        "onClick": "close",
1276
        "showDuration": "300",
1277
        "hideDuration": "1000",
1278
        "timeOut": "0",
1279
        "extendedTimeOut": "0",
1280
        "showEasing": "swing",
1281
        "hideEasing": "linear",
1282
        "showMethod": "fadeIn",
1283
        "hideMethod": "fadeOut"
1284
    }
1285
</script>
1286
1287
1288
<?php
1289
$get = [];
1290
$get['page'] = $request->query->get('page') === null ? '' : $request->query->get('page');
1291
1292
// Load links, css and javascripts
1293
if (isset($SETTINGS['cpassman_dir']) === true) {
1294
    include_once $SETTINGS['cpassman_dir'] . '/includes/core/load.js.php';
1295
    if ($menuAdmin === true) {
1296
        include_once $SETTINGS['cpassman_dir'] . '/pages/admin.js.php';
1297
        if ($get['page'] === '2fa') {
1298
            include_once $SETTINGS['cpassman_dir'] . '/pages/2fa.js.php';
1299
        } elseif ($get['page'] === 'api') {
1300
            include_once $SETTINGS['cpassman_dir'] . '/pages/api.js.php';
1301
        } elseif ($get['page'] === 'backups') {
1302
            include_once $SETTINGS['cpassman_dir'] . '/pages/backups.js.php';
1303
        } elseif ($get['page'] === 'emails') {
1304
            include_once $SETTINGS['cpassman_dir'] . '/pages/emails.js.php';
1305
        } elseif ($get['page'] === 'ldap') {
1306
            include_once $SETTINGS['cpassman_dir'] . '/pages/ldap.js.php';
1307
        } elseif ($get['page'] === 'uploads') {
1308
            include_once $SETTINGS['cpassman_dir'] . '/pages/uploads.js.php';
1309
        } elseif ($get['page'] === 'fields') {
1310
            include_once $SETTINGS['cpassman_dir'] . '/pages/fields.js.php';
1311
        } elseif ($get['page'] === 'options') {
1312
            include_once $SETTINGS['cpassman_dir'] . '/pages/options.js.php';
1313
        } elseif ($get['page'] === 'statistics') {
1314
            include_once $SETTINGS['cpassman_dir'] . '/pages/statistics.js.php';
1315
        } elseif ($get['page'] === 'tasks') {
1316
            include_once $SETTINGS['cpassman_dir'] . '/pages/tasks.js.php';
1317
        }
1318
    } elseif (isset($get['page']) === true && $get['page'] !== '') {
1319
        if ($get['page'] === 'items') {
1320
            include_once $SETTINGS['cpassman_dir'] . '/pages/items.js.php';
1321
        } elseif ($get['page'] === 'import') {
1322
            include_once $SETTINGS['cpassman_dir'] . '/pages/import.js.php';
1323
        } elseif ($get['page'] === 'export') {
1324
            include_once $SETTINGS['cpassman_dir'] . '/pages/export.js.php';
1325
        } elseif ($get['page'] === 'offline') {
1326
            include_once $SETTINGS['cpassman_dir'] . '/pages/offline.js.php';
1327
        } elseif ($get['page'] === 'search') {
1328
            include_once $SETTINGS['cpassman_dir'] . '/pages/search.js.php';
1329
        } elseif ($get['page'] === 'profile') {
1330
            include_once $SETTINGS['cpassman_dir'] . '/pages/profile.js.php';
1331
        } elseif ($get['page'] === 'favourites') {
1332
            include_once $SETTINGS['cpassman_dir'] . '/pages/favorites.js.php';
1333
        } elseif ($get['page'] === 'folders') {
1334
            include_once $SETTINGS['cpassman_dir'] . '/pages/folders.js.php';
1335
        } elseif ($get['page'] === 'users') {
1336
            include_once $SETTINGS['cpassman_dir'] . '/pages/users.js.php';
1337
        } elseif ($get['page'] === 'roles') {
1338
            include_once $SETTINGS['cpassman_dir'] . '/pages/roles.js.php';
1339
        } elseif ($get['page'] === 'utilities.deletion') {
1340
            include_once $SETTINGS['cpassman_dir'] . '/pages/utilities.deletion.js.php';
1341
        } elseif ($get['page'] === 'utilities.logs') {
1342
            include_once $SETTINGS['cpassman_dir'] . '/pages/utilities.logs.js.php';
1343
        } elseif ($get['page'] === 'utilities.database') {
1344
            include_once $SETTINGS['cpassman_dir'] . '/pages/utilities.database.js.php';
1345
        } elseif ($get['page'] === 'utilities.renewal') {
1346
            include_once $SETTINGS['cpassman_dir'] . '/pages/utilities.renewal.js.php';
1347
        }
1348
    } else {
1349
        include_once $SETTINGS['cpassman_dir'] . '/includes/core/login.js.php';
1350
    }
1351
}
1352