fix redirect

This commit is contained in:
Murphy 2024-11-26 12:41:10 -05:00
parent 499a9ea2c6
commit 8041ff0cec
Signed by: freya
GPG key ID: 9FBC6FFD6D2DBF17
2 changed files with 20 additions and 7 deletions

View file

@ -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);

View file

@ -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();