fix redirect
This commit is contained in:
parent
499a9ea2c6
commit
8041ff0cec
2 changed files with 20 additions and 7 deletions
|
@ -12,6 +12,14 @@ function maybe_base64_encode(string $data): string {
|
|||
}
|
||||
}
|
||||
|
||||
function maybe_base64_decode(string $data): string {
|
||||
if (is_base64($data)) {
|
||||
return base64_decode($data);
|
||||
} else {
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
||||
function esc(string $data): string {
|
||||
$data = trim(preg_replace('/\s\s+/', ' ', $data));
|
||||
$data = str_replace('&', '&', $data);
|
||||
|
|
|
@ -82,6 +82,15 @@ class Router {
|
|||
return $values;
|
||||
}
|
||||
|
||||
private function get_redirect(): string {
|
||||
$redirect = $_GET['redirect'] ?? $this->get_post_info('redirect') ?? '';
|
||||
if (is_array($redirect)) {
|
||||
$redirect = $redirect['redirect'];
|
||||
}
|
||||
$redirect = maybe_base64_decode($redirect);
|
||||
return $redirect;
|
||||
}
|
||||
|
||||
private function handle_login(): void {
|
||||
$info = $this->get_post_info('username', 'password');
|
||||
if ($info == NULL) {
|
||||
|
@ -90,12 +99,7 @@ class Router {
|
|||
return;
|
||||
}
|
||||
|
||||
$redirect = $this->get_post_info('redirect') ?? '';
|
||||
if (is_array($redirect)) {
|
||||
$redirect = $redirect['redirect'];
|
||||
$redirect = base64_decode($redirect);
|
||||
}
|
||||
|
||||
$redirect = $this->get_redirect();
|
||||
$user = $this->ldap->search($info['username']);
|
||||
if ($user == NULL || !count($user)) {
|
||||
http_response_code(400);
|
||||
|
@ -155,7 +159,8 @@ class Router {
|
|||
if ($session == NULL) {
|
||||
// redirect them to login
|
||||
http_response_code(303);
|
||||
header("Location: http://{$this->domain}/login");
|
||||
$redirect = maybe_base64_encode($this->get_redirect());
|
||||
header("Location: http://{$this->domain}/login?redirect={$redirect}");
|
||||
} else {
|
||||
// update session expiry
|
||||
$session->reset_expiry();
|
||||
|
|
Loading…
Reference in a new issue