|
16 | 16 | from ..multiauthenticator import MultiAuthenticator
|
17 | 17 |
|
18 | 18 |
|
| 19 | +class CustomDummyAuthenticator(DummyAuthenticator): |
| 20 | + def normalize_username(self, username): |
| 21 | + return username.upper() |
| 22 | + |
| 23 | + |
19 | 24 | def test_different_authenticators():
|
20 | 25 | MultiAuthenticator.authenticators = [
|
21 | 26 | (
|
@@ -200,62 +205,108 @@ def test_username_prefix():
|
200 | 205 | },
|
201 | 206 | ),
|
202 | 207 | (PAMAuthenticator, "/pam", {"service_name": "PAM"}),
|
| 208 | + (CustomDummyAuthenticator, "/dummy", {"service_name": "Dummy"}), |
203 | 209 | ]
|
204 | 210 |
|
205 | 211 | multi_authenticator = MultiAuthenticator()
|
206 |
| - assert len(multi_authenticator._authenticators) == 2 |
| 212 | + assert len(multi_authenticator._authenticators) == 3 |
207 | 213 | assert (
|
208 | 214 | multi_authenticator._authenticators[0].username_prefix
|
209 |
| - == f"GitLab{PREFIX_SEPARATOR}" |
| 215 | + == f"gitlab{PREFIX_SEPARATOR}" |
210 | 216 | )
|
211 | 217 | assert (
|
212 | 218 | multi_authenticator._authenticators[1].username_prefix
|
213 |
| - == f"PAM{PREFIX_SEPARATOR}" |
| 219 | + == f"pam{PREFIX_SEPARATOR}" |
| 220 | + ) |
| 221 | + assert ( |
| 222 | + multi_authenticator._authenticators[2].username_prefix |
| 223 | + == f"DUMMY{PREFIX_SEPARATOR}" |
214 | 224 | )
|
215 | 225 |
|
216 | 226 |
|
217 | 227 | @pytest.mark.asyncio
|
218 | 228 | async def test_authenticated_username_prefix():
|
219 | 229 | MultiAuthenticator.authenticators = [
|
220 |
| - (DummyAuthenticator, "/pam", {"service_name": "Dummy"}), |
| 230 | + (CustomDummyAuthenticator, "/dummy", {"service_name": "Dummy"}), |
221 | 231 | ]
|
222 | 232 |
|
223 | 233 | multi_authenticator = MultiAuthenticator()
|
224 | 234 | assert len(multi_authenticator._authenticators) == 1
|
225 |
| - username = await multi_authenticator._authenticators[0].authenticate( |
| 235 | + user = await multi_authenticator._authenticators[0].get_authenticated_user( |
226 | 236 | None, {"username": "test"}
|
227 | 237 | )
|
228 |
| - assert username == f"Dummy{PREFIX_SEPARATOR}test" |
| 238 | + assert user["name"] == f"DUMMY{PREFIX_SEPARATOR}TEST" |
229 | 239 |
|
230 | 240 |
|
231 | 241 | def test_username_prefix_checks():
|
232 | 242 | MultiAuthenticator.authenticators = [
|
233 | 243 | (PAMAuthenticator, "/pam", {"service_name": "PAM", "allowed_users": {"test"}}),
|
234 | 244 | (
|
235 | 245 | PAMAuthenticator,
|
236 |
| - "/pam", |
| 246 | + "/pam2", |
237 | 247 | {"service_name": "PAM2", "blocked_users": {"test2"}},
|
238 | 248 | ),
|
| 249 | + ( |
| 250 | + CustomDummyAuthenticator, |
| 251 | + "/dummy", |
| 252 | + {"service_name": "Dummy", "allowed_users": {"TEST3"}}, |
| 253 | + ), |
| 254 | + ( |
| 255 | + CustomDummyAuthenticator, |
| 256 | + "/dummy2", |
| 257 | + { |
| 258 | + "service_name": "Dummy", |
| 259 | + "allowed_users": {"TEST3"}, |
| 260 | + "blocked_users": {"TEST4"}, |
| 261 | + }, |
| 262 | + ), |
239 | 263 | ]
|
240 | 264 |
|
241 | 265 | multi_authenticator = MultiAuthenticator()
|
242 |
| - assert len(multi_authenticator._authenticators) == 2 |
| 266 | + assert len(multi_authenticator._authenticators) == 4 |
243 | 267 | authenticator = multi_authenticator._authenticators[0]
|
244 | 268 |
|
245 | 269 | assert authenticator.check_allowed("test") == False
|
246 |
| - assert authenticator.check_allowed("PAM:test") == True |
| 270 | + assert authenticator.check_allowed("pam:test") == True |
247 | 271 | assert (
|
248 | 272 | authenticator.check_blocked_users("test") == False
|
249 | 273 | ) # Even if no block list, it does not have the correct prefix
|
250 |
| - assert authenticator.check_blocked_users("PAM:test") == True |
| 274 | + assert authenticator.check_blocked_users("pam:test") == True |
251 | 275 |
|
252 | 276 | authenticator = multi_authenticator._authenticators[1]
|
253 | 277 | assert authenticator.check_allowed("test2") == False
|
254 | 278 | assert (
|
255 |
| - authenticator.check_allowed("PAM2:test2") == True |
| 279 | + authenticator.check_allowed("pam2:test2") == True |
256 | 280 | ) # Because allowed_users is empty
|
257 |
| - assert authenticator.check_blocked_users("test2") == False |
258 |
| - assert authenticator.check_blocked_users("PAM2:test2") == False |
| 281 | + assert ( |
| 282 | + authenticator.check_blocked_users("test2") == False |
| 283 | + ) # Because of missing prefix |
| 284 | + assert ( |
| 285 | + authenticator.check_blocked_users("pam2:test2") == False |
| 286 | + ) # Because user is in blocked list |
| 287 | + |
| 288 | + authenticator = multi_authenticator._authenticators[2] |
| 289 | + assert authenticator.check_allowed("TEST3") == False |
| 290 | + assert authenticator.check_allowed("DUMMY:TEST3") == True |
| 291 | + assert ( |
| 292 | + authenticator.check_blocked_users("TEST3") == False |
| 293 | + ) # Because of missing prefix |
| 294 | + assert ( |
| 295 | + authenticator.check_blocked_users("DUMMY:TEST3") == True |
| 296 | + ) # Because blocked_users is empty thus allowed |
| 297 | + |
| 298 | + authenticator = multi_authenticator._authenticators[3] |
| 299 | + assert authenticator.check_allowed("TEST3") == False |
| 300 | + assert authenticator.check_allowed("DUMMY:TEST3") == True |
| 301 | + assert ( |
| 302 | + authenticator.check_blocked_users("TEST3") == False |
| 303 | + ) # Because of missing prefix |
| 304 | + assert ( |
| 305 | + authenticator.check_blocked_users("DUMMY:TEST3") == True |
| 306 | + ) # Because user is not in blocked list |
| 307 | + assert ( |
| 308 | + authenticator.check_blocked_users("DUMMY:TEST4") == False |
| 309 | + ) # Because user is in blocked list |
259 | 310 |
|
260 | 311 |
|
261 | 312 | @pytest.fixture(params=[f"test me{PREFIX_SEPARATOR}", f"second{PREFIX_SEPARATOR} test"])
|
|
0 commit comments