Skip to content

Commit 0d36aad

Browse files
authored
Fix: PMA SSO for cp panel template (hestiacp#3493)
1 parent 552c103 commit 0d36aad

File tree

1 file changed

+35
-25
lines changed

1 file changed

+35
-25
lines changed

install/deb/phpmyadmin/hestia-sso.php

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,23 @@ public function get_user_ip() {
117117
}
118118
}
119119

120+
function verify_token($database, $user, $ip, $time, $token) {
121+
if (!password_verify($database . $user . $ip . $time . PHPMYADMIN_KEY, $token)) {
122+
if (
123+
!password_verify(
124+
$database . $user . $_SERVER["SERVER_ADDR"] . "|" . $ip . $time . PHPMYADMIN_KEY,
125+
$token,
126+
)
127+
) {
128+
trigger_error(
129+
"Access denied: There is a security token mismatch " . $time,
130+
E_USER_WARNING,
131+
);
132+
session_invalid();
133+
}
134+
}
135+
return;
136+
}
120137
/* Need to have cookie visible from parent directory */
121138
session_set_cookie_params(0, "/", "", true, true);
122139
/* Create signon session */
@@ -159,32 +176,25 @@ function session_invalid() {
159176
if ($time + 60 > time()) {
160177
//note: Possible issues with cloudflare due to ip obfuscation
161178
$ip = $api->get_user_ip();
162-
if (!password_verify($database . $user . $ip . $time . PHPMYADMIN_KEY, $token)) {
163-
trigger_error(
164-
"Access denied: There is a security token mismatch " . $time,
165-
E_USER_WARNING,
166-
);
167-
session_invalid();
168-
} else {
169-
$id = session_id();
170-
//create a new temp user
171-
$data = $api->create_temp_user($database, $user, $host);
172-
if ($data) {
173-
$_SESSION["PMA_single_signon_user"] = $data->login->user;
174-
$_SESSION["PMA_single_signon_password"] = $data->login->password;
175-
$_SESSION["PMA_single_signon_host"] = $host;
176-
//save database / username to be used for sending logout notification.
177-
$_SESSION["HESTIA_sso_user"] = $user;
178-
$_SESSION["HESTIA_sso_database"] = $database;
179-
$_SESSION["HESTIA_sso_host"] = $host;
179+
verify_token($database, $user, $ip, $time, $token);
180+
$id = session_id();
181+
//create a new temp user
182+
$data = $api->create_temp_user($database, $user, $host);
183+
if ($data) {
184+
$_SESSION["PMA_single_signon_user"] = $data->login->user;
185+
$_SESSION["PMA_single_signon_password"] = $data->login->password;
186+
$_SESSION["PMA_single_signon_host"] = $host;
187+
//save database / username to be used for sending logout notification.
188+
$_SESSION["HESTIA_sso_user"] = $user;
189+
$_SESSION["HESTIA_sso_database"] = $database;
190+
$_SESSION["HESTIA_sso_host"] = $host;
180191

181-
@session_write_close();
182-
setcookie($session_name, $id, 0, "/");
183-
header("Location: " . dirname($_SERVER["PHP_SELF"]) . "/index.php");
184-
die();
185-
} else {
186-
session_invalid();
187-
}
192+
@session_write_close();
193+
setcookie($session_name, $id, 0, "/");
194+
header("Location: " . dirname($_SERVER["PHP_SELF"]) . "/index.php");
195+
die();
196+
} else {
197+
session_invalid();
188198
}
189199
} else {
190200
trigger_error(

0 commit comments

Comments
 (0)