Skip to content

Commit 0e1d3b5

Browse files
author
Jeremy Snyder
committed
cleanup
1 parent 4ba57b0 commit 0e1d3b5

File tree

1 file changed

+28
-49
lines changed

1 file changed

+28
-49
lines changed

backend/Services/Auth/Adapters/Header.php

Lines changed: 28 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -58,36 +58,38 @@ private function cookieHeaders($headers) {
5858
return $headers;
5959
}
6060

61-
private function headerUser(): array
61+
private function trimQuotes($value): string
62+
{
63+
if (! isset($value)) return $value;
64+
return trim($value, '\'"');
65+
}
66+
67+
private function headerUser(): ?array
6268
{
6369
$headers = array_change_key_case(getallheaders(), CASE_LOWER);
6470
$cookie_headers = array_change_key_case($this->cookieHeaders($headers), CASE_LOWER);
6571
$username_header_key = strtolower($this->username_header_key);
6672
$fullname_header_key = strtolower($this->fullname_header_key);
67-
// $this->logger->log("HEADERS:");
68-
// $this->logger->log(json_encode($headers));
69-
// $this->logger->log("COOKIEHEADERS:");
70-
// $this->logger->log(json_encode($cookie_headers));
7173
$header_username_exists = (array_key_exists($username_header_key, $headers) or array_key_exists($username_header_key, $cookie_headers));
7274
$header_fullname_exists = (array_key_exists($fullname_header_key, $headers) or array_key_exists($fullname_header_key, $cookie_headers));
7375

7476
if (!$header_username_exists) {
7577
$this->logger->log($this->username_header_key." username header is not set");
78+
return null;
7679
}
7780
if (!$header_fullname_exists) {
78-
$this->logger->log($this->fullname_header_key." full name header is not set");
81+
$this->logger->log($this->fullname_header_key." full name header is not set, falling back to username header");
7982
}
80-
if (!$header_username_exists || !$header_fullname_exists) return null;
8183

8284
$username_header = $headers[$username_header_key] ?? $cookie_headers[$username_header_key];
83-
$fullname_header = $headers[$fullname_header_key] ?? $cookie_headers[$fullname_header_key];
85+
$fullname_header = $headers[$fullname_header_key] ?? $cookie_headers[$fullname_header_key] ?? $username_header;
8486

8587
if(!isset($username_header) || empty($username_header)) return null;
8688
if(!isset($fullname_header) || empty($fullname_header)) return null;
8789

8890
return [
89-
"username" => $username_header,
90-
"name" => $fullname_header,
91+
"username" => $this->trimQuotes($username_header),
92+
"name" => $this->trimQuotes($fullname_header),
9193
"role" => $this->user_defaults["role"] ?? "user",
9294
"homedir" => $this->user_defaults["homedir"] ?? "/share",
9395
"permissions" => $this->user_defaults["permissions"] ?? "read",
@@ -99,32 +101,35 @@ private function userHash($user): string
99101
return $user->getHomedir().$user->getRole().$user->getUsername();
100102
}
101103

104+
private function setSessionHash($user) {
105+
$this->session->set(self::SESSION_HASH, $this->userHash($user));
106+
}
107+
102108
public function authenticate($username, $password): bool
103109
{
104110
if ($this->useNormalAuth($username)) {
105-
$this->logger->log("** ".$username." user is configured to use normal authentication, skipping header auth");
106-
return parent::authenticate($username, $password);
111+
$this->logger->log("** [".$username."] user is configured to use normal authentication, skipping header auth");
112+
$authenticated = parent::authenticate($username, $password);
113+
if ($authenticated) {
114+
$authenticated_user = parent::user();
115+
if (isset($authenticated_user)) {
116+
$this->setSessionHash($authenticated_user);
117+
}
118+
}
119+
return $authenticated;
107120
}
108121

109122
$header_user = $this->headerUser();
110123
if (!isset($header_user)) return false;
111124

112-
// $this->logger->log("HEADERUSER:");
113-
// $this->logger->log(json_encode($header_user));
114-
115125
$existing_user = $this->find($header_user["username"]);
116-
// $this->logger->log("EXISTINGUSER:");
117-
// $this->logger->log(json_encode($existing_user));
118126
if (!isset($existing_user)) {
119-
// $this->logger->log("CREATENEWUSER");
120127
$new_user = $this->mapToUserObject($header_user);
121128
$existing_user = $this->add($new_user, ""); // Password isn't used
122129
}
123130

124-
// $this->logger->log("EXISTINGUSER2:");
125-
// $this->logger->log(json_encode($existing_user));
126131
$this->store($existing_user);
127-
$this->session->set(self::SESSION_HASH, $this->userHash($existing_user));
132+
$this->setSessionHash($existing_user);
128133
return true;
129134
}
130135

@@ -134,51 +139,25 @@ protected function sessionUser() {
134139

135140
public function user(): ?User
136141
{
137-
// $this->logger->log("USER:1");
138142
if (! $this->session) return null;
139-
// $this->logger->log("USER:2");
140143

141144
$session_user = $this->sessionUser();
142-
// $this->logger->log("USER:3");
143-
if ($session_user) {
144-
// $this->logger->log("USER:4");
145+
if (isset($session_user)) {
145146
$hash = $this->session->get(self::SESSION_HASH, null);
146147
return ($hash == $this->userHash($session_user)) ? $session_user : null;
147148
}
148149

149-
// $this->logger->log("USER:5");
150150
$header_user = $this->headerUser();
151-
if ($header_user) {
152-
// $this->logger->log("USER:6");
151+
if (isset($header_user)) {
153152
$header_username = $header_user["username"];
154153
$authenticated = $this->authenticate($header_username, "");
155-
// $this->logger->log("USER:7");
156154
if ($authenticated) {
157155
$authenticated_user = $this->sessionUser();
158-
// $this->logger->log("USER:8");
159156
$this->logger->log("Authenticated user [".$authenticated_user->getUsername()."] with ".$this->username_header_key." header");
160157
return $authenticated_user;
161158
}
162159
}
163160

164-
$this->logger->log("USER:7");
165161
return null;
166-
167-
// if ($this->useNormalAuth($user->getUsername())) return parent::user();
168-
// $this->logger->log("USER:3");
169-
// if (! $user) return null;
170-
// $this->logger->log("USER:4");
171-
172-
// if ($this->useNormalAuth($user->getUsername())) return parent::user();
173-
// $this->logger->log("USER:5");
174-
175-
// $existing_user = $this->find($user->getUsername());
176-
// $this->logger->log("USER:6");
177-
// if (! $existing_user) return null;
178-
// $this->logger->log("USER:7");
179-
180-
// $hash = $this->session->get(self::SESSION_HASH, null);
181-
// $this->logger->log("USER:8");
182-
// return ($hash == $this->userHash($existing_user)) ? $user : null;
183162
}
184163
}

0 commit comments

Comments
 (0)