@@ -58,36 +58,38 @@ private function cookieHeaders($headers) {
58
58
return $ headers ;
59
59
}
60
60
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
62
68
{
63
69
$ headers = array_change_key_case (getallheaders (), CASE_LOWER );
64
70
$ cookie_headers = array_change_key_case ($ this ->cookieHeaders ($ headers ), CASE_LOWER );
65
71
$ username_header_key = strtolower ($ this ->username_header_key );
66
72
$ 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));
71
73
$ header_username_exists = (array_key_exists ($ username_header_key , $ headers ) or array_key_exists ($ username_header_key , $ cookie_headers ));
72
74
$ header_fullname_exists = (array_key_exists ($ fullname_header_key , $ headers ) or array_key_exists ($ fullname_header_key , $ cookie_headers ));
73
75
74
76
if (!$ header_username_exists ) {
75
77
$ this ->logger ->log ($ this ->username_header_key ." username header is not set " );
78
+ return null ;
76
79
}
77
80
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 " );
79
82
}
80
- if (!$ header_username_exists || !$ header_fullname_exists ) return null ;
81
83
82
84
$ 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 ;
84
86
85
87
if (!isset ($ username_header ) || empty ($ username_header )) return null ;
86
88
if (!isset ($ fullname_header ) || empty ($ fullname_header )) return null ;
87
89
88
90
return [
89
- "username " => $ username_header ,
90
- "name " => $ fullname_header ,
91
+ "username " => $ this -> trimQuotes ( $ username_header) ,
92
+ "name " => $ this -> trimQuotes ( $ fullname_header) ,
91
93
"role " => $ this ->user_defaults ["role " ] ?? "user " ,
92
94
"homedir " => $ this ->user_defaults ["homedir " ] ?? "/share " ,
93
95
"permissions " => $ this ->user_defaults ["permissions " ] ?? "read " ,
@@ -99,32 +101,35 @@ private function userHash($user): string
99
101
return $ user ->getHomedir ().$ user ->getRole ().$ user ->getUsername ();
100
102
}
101
103
104
+ private function setSessionHash ($ user ) {
105
+ $ this ->session ->set (self ::SESSION_HASH , $ this ->userHash ($ user ));
106
+ }
107
+
102
108
public function authenticate ($ username , $ password ): bool
103
109
{
104
110
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 ;
107
120
}
108
121
109
122
$ header_user = $ this ->headerUser ();
110
123
if (!isset ($ header_user )) return false ;
111
124
112
- // $this->logger->log("HEADERUSER:");
113
- // $this->logger->log(json_encode($header_user));
114
-
115
125
$ existing_user = $ this ->find ($ header_user ["username " ]);
116
- // $this->logger->log("EXISTINGUSER:");
117
- // $this->logger->log(json_encode($existing_user));
118
126
if (!isset ($ existing_user )) {
119
- // $this->logger->log("CREATENEWUSER");
120
127
$ new_user = $ this ->mapToUserObject ($ header_user );
121
128
$ existing_user = $ this ->add ($ new_user , "" ); // Password isn't used
122
129
}
123
130
124
- // $this->logger->log("EXISTINGUSER2:");
125
- // $this->logger->log(json_encode($existing_user));
126
131
$ this ->store ($ existing_user );
127
- $ this ->session -> set ( self :: SESSION_HASH , $ this -> userHash ( $ existing_user) );
132
+ $ this ->setSessionHash ( $ existing_user );
128
133
return true ;
129
134
}
130
135
@@ -134,51 +139,25 @@ protected function sessionUser() {
134
139
135
140
public function user (): ?User
136
141
{
137
- // $this->logger->log("USER:1");
138
142
if (! $ this ->session ) return null ;
139
- // $this->logger->log("USER:2");
140
143
141
144
$ 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 )) {
145
146
$ hash = $ this ->session ->get (self ::SESSION_HASH , null );
146
147
return ($ hash == $ this ->userHash ($ session_user )) ? $ session_user : null ;
147
148
}
148
149
149
- // $this->logger->log("USER:5");
150
150
$ header_user = $ this ->headerUser ();
151
- if ($ header_user ) {
152
- // $this->logger->log("USER:6");
151
+ if (isset ($ header_user )) {
153
152
$ header_username = $ header_user ["username " ];
154
153
$ authenticated = $ this ->authenticate ($ header_username , "" );
155
- // $this->logger->log("USER:7");
156
154
if ($ authenticated ) {
157
155
$ authenticated_user = $ this ->sessionUser ();
158
- // $this->logger->log("USER:8");
159
156
$ this ->logger ->log ("Authenticated user [ " .$ authenticated_user ->getUsername ()."] with " .$ this ->username_header_key ." header " );
160
157
return $ authenticated_user ;
161
158
}
162
159
}
163
160
164
- $ this ->logger ->log ("USER:7 " );
165
161
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;
183
162
}
184
163
}
0 commit comments