1 | <?php |
||
2 | /** |
||
3 | * @package otv.php |
||
4 | * @author Nils Laumaillé <[email protected]> |
||
5 | * @version 2.1.27 |
||
6 | * @copyright 2009-2018 Nils Laumaillé |
||
7 | * @license GNU GPL-3.0 |
||
8 | * @link https://www.teampass.net |
||
9 | * |
||
10 | * This library is distributed in the hope that it will be useful, |
||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
13 | */ |
||
14 | |||
15 | require_once('sources/SecureHandler.php'); |
||
16 | if (!isset($_SESSION['CPM']) || $_SESSION['CPM'] != 1) { |
||
17 | die('Hacking attempt...'); |
||
18 | } |
||
19 | |||
20 | // Load config |
||
21 | if (file_exists('../includes/config/tp.config.php')) { |
||
22 | include_once '../includes/config/tp.config.php'; |
||
23 | } elseif (file_exists('./includes/config/tp.config.php')) { |
||
24 | include_once './includes/config/tp.config.php'; |
||
25 | } else { |
||
26 | throw new Exception("Error file '/includes/config/tp.config.php' not exists", 1); |
||
27 | } |
||
28 | |||
29 | $html = ""; |
||
30 | if (filter_var($_GET['code'], FILTER_SANITIZE_STRING) !== false |
||
31 | && filter_var($_GET['stamp'], FILTER_VALIDATE_INT) !== false |
||
32 | ) { |
||
33 | //Include files |
||
34 | require_once $SETTINGS['cpassman_dir'].'/includes/config/settings.php'; |
||
35 | require_once $SETTINGS['cpassman_dir'].'/includes/config/include.php'; |
||
36 | require_once $SETTINGS['cpassman_dir'].'/sources/SplClassLoader.php'; |
||
37 | require_once $SETTINGS['cpassman_dir'].'/sources/main.functions.php'; |
||
38 | |||
39 | // connect to DB |
||
40 | require_once $SETTINGS['cpassman_dir'].'/includes/libraries/Database/Meekrodb/db.class.php'; |
||
41 | $pass = defuse_return_decrypted($pass); |
||
42 | DB::$host = $server; |
||
43 | DB::$user = $user; |
||
44 | DB::$password = $pass; |
||
45 | DB::$dbName = $database; |
||
46 | DB::$port = $port; |
||
47 | DB::$encoding = $encoding; |
||
48 | DB::$error_handler = true; |
||
49 | $link = mysqli_connect($server, $user, $pass, $database, $port); |
||
50 | $link->set_charset($encoding); |
||
51 | |||
52 | if (!isset($SETTINGS['otv_is_enabled']) || $SETTINGS['otv_is_enabled'] === "0") { |
||
53 | echo '<div style="padding:10px; margin:90px 30px 30px 30px; text-align:center;" class="ui-widget-content ui-state-error ui-corner-all"><i class="fa fa-warning fa-2x"></i> One-Time-View is not allowed!</div>'; |
||
54 | } |
||
55 | |||
56 | // check session validity |
||
57 | $data = DB::queryfirstrow( |
||
58 | "SELECT id, timestamp, code, item_id FROM ".prefix_table("otv")." |
||
59 | WHERE code = %s", |
||
60 | $_GET['code'] |
||
61 | ); |
||
62 | if ($data['timestamp'] == intval($_GET['stamp'])) { |
||
63 | // otv is too old |
||
64 | if ($data['timestamp'] < (time() - ($SETTINGS['otv_expiration_period'] * 86400))) { |
||
65 | $html = "Link is too old!"; |
||
66 | } else { |
||
67 | // get from DB |
||
68 | $dataItem = DB::queryfirstrow( |
||
69 | "SELECT * |
||
70 | FROM ".prefix_table("items")." as i |
||
71 | INNER JOIN ".prefix_table("log_items")." as l ON (l.id_item = i.id) |
||
72 | WHERE i.id = %i AND l.action = %s", |
||
73 | intval($data['item_id']), |
||
74 | 'at_creation' |
||
75 | ); |
||
76 | |||
77 | // is Item still valid regarding number of times being seen |
||
78 | // Decrement the number before being deleted |
||
79 | $dataDelete = DB::queryfirstrow( |
||
80 | "SELECT * FROM ".prefix_table("automatic_del")." WHERE item_id=%i", |
||
81 | $data['item_id'] |
||
82 | ); |
||
83 | if (isset($SETTINGS['enable_delete_after_consultation']) && $SETTINGS['enable_delete_after_consultation'] == 1) { |
||
84 | if ($dataDelete['del_enabled'] == 1) { |
||
85 | if ($dataDelete['del_type'] == 1 && $dataDelete['del_value'] >= 1) { |
||
86 | // decrease counter |
||
87 | DB::update( |
||
88 | $pre."automatic_del", |
||
89 | array( |
||
90 | 'del_value' => $dataDelete['del_value'] - 1 |
||
91 | ), |
||
92 | "item_id = %i", |
||
93 | $data['item_id'] |
||
94 | ); |
||
95 | } elseif ($dataDelete['del_type'] == 1 && $dataDelete['del_value'] <= 1 |
||
0 ignored issues
–
show
introduced
by
![]() |
|||
96 | || $dataDelete['del_type'] == 2 && $dataDelete['del_value'] < time() |
||
97 | ) { |
||
98 | // delete item |
||
99 | DB::delete($pre."automatic_del", "item_id = %i", $data['item_id']); |
||
100 | // make inactive object |
||
101 | DB::update( |
||
102 | prefix_table("items"), |
||
103 | array( |
||
104 | 'inactif' => '1', |
||
105 | ), |
||
106 | "id = %i", |
||
107 | $data['item_id'] |
||
108 | ); |
||
109 | // log |
||
110 | logItems( |
||
111 | $data['item_id'], |
||
112 | $dataItem['label'], |
||
113 | OTV_USER_ID, |
||
114 | 'at_delete', |
||
115 | 'otv', |
||
116 | 'at_automatically_deleted' |
||
117 | ); |
||
118 | |||
119 | echo '<div style="padding:10px; margin:90px 30px 30px 30px; text-align:center;" class="ui-widget-content ui-state-error ui-corner-all"><i class="fa fa-warning fa-2x"></i> '. |
||
120 | addslashes($LANG['not_allowed_to_see_pw_is_expired']).'</div>'; |
||
121 | return false; |
||
122 | } |
||
123 | } |
||
124 | } |
||
125 | |||
126 | // get data |
||
127 | $pw = cryption($dataItem['pw'], "", "decrypt"); |
||
128 | $label = $dataItem['label']; |
||
129 | $email = $dataItem['email']; |
||
130 | $url = $dataItem['url']; |
||
131 | $description = preg_replace('/(?<!\\r)\\n+(?!\\r)/', '', strip_tags($dataItem['description'], $SETTINGS_EXT['allowedTags'])); |
||
132 | $login = str_replace('"', '"', $dataItem['login']); |
||
133 | |||
134 | // display data |
||
135 | $html = "<div style='margin:30px;'>". |
||
136 | "<div style='font-size:20px;font-weight:bold;'>Welcome to One-Time item view page.</div>". |
||
137 | "<div style='font-style:italic;'>Here are the details of the Item that has been shared to you</div>". |
||
138 | "<div style='margin-top:10px;'><table>". |
||
139 | "<tr><td>Label:</td><td>".$label."</td></tr>". |
||
140 | "<tr><td>Password:</td><td>".htmlspecialchars($pw['string'])."</td></tr>". |
||
141 | "<tr><td>Description:</td><td>".$description."</td></tr>". |
||
142 | "<tr><td>login:</td><td>".$login."</td></tr>". |
||
143 | "<tr><td>URL:</td><td>".$url."</td></tr>". |
||
144 | "</table></div>". |
||
145 | "<div style='margin-top:30px;'>Copy carefully the data you need. This page is only visible once.</div>". |
||
146 | "</div>"; |
||
147 | |||
148 | // log |
||
149 | logItems( |
||
150 | $data['item_id'], |
||
151 | $dataItem['label'], |
||
152 | OTV_USER_ID, |
||
153 | 'at_shown', |
||
154 | 'otv' |
||
155 | ); |
||
156 | |||
157 | // delete entry |
||
158 | DB::delete(prefix_table("otv"), "id = %i", $data['id']); |
||
159 | |||
160 | // display |
||
161 | echo $html; |
||
162 | } |
||
163 | } else { |
||
164 | echo '<div style="padding:10px; margin:90px 30px 30px 30px; text-align:center;" class="ui-widget-content ui-state-error ui-corner-all"><i class="fa fa-warning fa-2x"></i> Not a valid page!</div>'; |
||
165 | } |
||
166 | } else { |
||
167 | echo '<div style="padding:10px; margin:90px 30px 30px 30px; text-align:center;" class="ui-widget-content ui-state-error ui-corner-all"><i class="fa fa-warning fa-2x"></i> No valid OTV inputs!</div>'; |
||
168 | } |
||
169 |