@hitchy/plugin-auth 0.3.0 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/api/policy/authentication.js +81 -27
  2. package/api/service/auth/manager.js +36 -4
  3. package/api/service/authentication/passport.js +6 -5
  4. package/api/service/authentication/strategies.js +57 -34
  5. package/api/service/authorization/tree.js +8 -8
  6. package/coverage/index.html +45 -45
  7. package/coverage/plugin-auth/api/controller/index.html +1 -1
  8. package/coverage/plugin-auth/api/controller/user.js.html +53 -53
  9. package/coverage/plugin-auth/api/model/authorization/index.html +1 -1
  10. package/coverage/plugin-auth/api/model/authorization/rule.js.html +31 -31
  11. package/coverage/plugin-auth/api/model/index.html +1 -1
  12. package/coverage/plugin-auth/api/model/role.js.html +29 -29
  13. package/coverage/plugin-auth/api/model/user-to-role.js.html +21 -21
  14. package/coverage/plugin-auth/api/model/user.js.html +192 -192
  15. package/coverage/plugin-auth/api/policy/authentication.js.html +281 -119
  16. package/coverage/plugin-auth/api/policy/authorization.js.html +25 -25
  17. package/coverage/plugin-auth/api/policy/index.html +18 -18
  18. package/coverage/plugin-auth/api/policy/user.js.html +37 -37
  19. package/coverage/plugin-auth/api/service/auth/index.html +16 -16
  20. package/coverage/plugin-auth/api/service/auth/manager.js.html +293 -197
  21. package/coverage/plugin-auth/api/service/authentication/index.html +25 -25
  22. package/coverage/plugin-auth/api/service/authentication/passport.js.html +55 -52
  23. package/coverage/plugin-auth/api/service/authentication/strategies.js.html +204 -135
  24. package/coverage/plugin-auth/api/service/authorization/index.html +1 -1
  25. package/coverage/plugin-auth/api/service/authorization/node.js.html +136 -136
  26. package/coverage/plugin-auth/api/service/authorization/policy-generator.js.html +29 -29
  27. package/coverage/plugin-auth/api/service/authorization/tree.js.html +140 -140
  28. package/coverage/plugin-auth/config/auth.js.html +17 -17
  29. package/coverage/plugin-auth/config/index.html +1 -1
  30. package/coverage/plugin-auth/index.html +15 -15
  31. package/coverage/plugin-auth/index.js.html +94 -55
  32. package/coverage/tmp/coverage-16252-1648499208727-0.json +1 -0
  33. package/index.js +17 -4
  34. package/package.json +2 -2
  35. package/coverage/tmp/coverage-6744-1648396809135-0.json +0 -1
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">89.88% </span>
26
+ <span class="strong">91.37% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>160/178</span>
28
+ <span class='fraction'>212/232</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">84% </span>
33
+ <span class="strong">83.33% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>21/25</span>
35
+ <span class='fraction'>30/36</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>5/5</span>
42
+ <span class='fraction'>7/7</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">89.88% </span>
47
+ <span class="strong">91.37% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>160/178</span>
49
+ <span class='fraction'>212/232</span>
50
50
  </div>
51
51
 
52
52
 
@@ -236,66 +236,109 @@
236
236
  <a name='L177'></a><a href='#L177'>177</a>
237
237
  <a name='L178'></a><a href='#L178'>178</a>
238
238
  <a name='L179'></a><a href='#L179'>179</a>
239
- <a name='L180'></a><a href='#L180'>180</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
239
+ <a name='L180'></a><a href='#L180'>180</a>
240
+ <a name='L181'></a><a href='#L181'>181</a>
241
+ <a name='L182'></a><a href='#L182'>182</a>
242
+ <a name='L183'></a><a href='#L183'>183</a>
243
+ <a name='L184'></a><a href='#L184'>184</a>
244
+ <a name='L185'></a><a href='#L185'>185</a>
245
+ <a name='L186'></a><a href='#L186'>186</a>
246
+ <a name='L187'></a><a href='#L187'>187</a>
247
+ <a name='L188'></a><a href='#L188'>188</a>
248
+ <a name='L189'></a><a href='#L189'>189</a>
249
+ <a name='L190'></a><a href='#L190'>190</a>
250
+ <a name='L191'></a><a href='#L191'>191</a>
251
+ <a name='L192'></a><a href='#L192'>192</a>
252
+ <a name='L193'></a><a href='#L193'>193</a>
253
+ <a name='L194'></a><a href='#L194'>194</a>
254
+ <a name='L195'></a><a href='#L195'>195</a>
255
+ <a name='L196'></a><a href='#L196'>196</a>
256
+ <a name='L197'></a><a href='#L197'>197</a>
257
+ <a name='L198'></a><a href='#L198'>198</a>
258
+ <a name='L199'></a><a href='#L199'>199</a>
259
+ <a name='L200'></a><a href='#L200'>200</a>
260
+ <a name='L201'></a><a href='#L201'>201</a>
261
+ <a name='L202'></a><a href='#L202'>202</a>
262
+ <a name='L203'></a><a href='#L203'>203</a>
263
+ <a name='L204'></a><a href='#L204'>204</a>
264
+ <a name='L205'></a><a href='#L205'>205</a>
265
+ <a name='L206'></a><a href='#L206'>206</a>
266
+ <a name='L207'></a><a href='#L207'>207</a>
267
+ <a name='L208'></a><a href='#L208'>208</a>
268
+ <a name='L209'></a><a href='#L209'>209</a>
269
+ <a name='L210'></a><a href='#L210'>210</a>
270
+ <a name='L211'></a><a href='#L211'>211</a>
271
+ <a name='L212'></a><a href='#L212'>212</a>
272
+ <a name='L213'></a><a href='#L213'>213</a>
273
+ <a name='L214'></a><a href='#L214'>214</a>
274
+ <a name='L215'></a><a href='#L215'>215</a>
275
+ <a name='L216'></a><a href='#L216'>216</a>
276
+ <a name='L217'></a><a href='#L217'>217</a>
277
+ <a name='L218'></a><a href='#L218'>218</a>
278
+ <a name='L219'></a><a href='#L219'>219</a>
279
+ <a name='L220'></a><a href='#L220'>220</a>
280
+ <a name='L221'></a><a href='#L221'>221</a>
281
+ <a name='L222'></a><a href='#L222'>222</a>
282
+ <a name='L223'></a><a href='#L223'>223</a>
283
+ <a name='L224'></a><a href='#L224'>224</a>
284
+ <a name='L225'></a><a href='#L225'>225</a>
285
+ <a name='L226'></a><a href='#L226'>226</a>
286
+ <a name='L227'></a><a href='#L227'>227</a>
287
+ <a name='L228'></a><a href='#L228'>228</a>
288
+ <a name='L229'></a><a href='#L229'>229</a>
289
+ <a name='L230'></a><a href='#L230'>230</a>
290
+ <a name='L231'></a><a href='#L231'>231</a>
291
+ <a name='L232'></a><a href='#L232'>232</a>
292
+ <a name='L233'></a><a href='#L233'>233</a>
293
+ <a name='L234'></a><a href='#L234'>234</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
240
294
  <span class="cline-any cline-yes">1x</span>
241
295
  <span class="cline-any cline-yes">1x</span>
242
- <span class="cline-any cline-yes">18x</span>
243
- <span class="cline-any cline-yes">18x</span>
244
- <span class="cline-any cline-yes">18x</span>
245
- <span class="cline-any cline-yes">18x</span>
246
- <span class="cline-any cline-yes">18x</span>
247
- <span class="cline-any cline-yes">18x</span>
248
- <span class="cline-any cline-yes">18x</span>
249
- <span class="cline-any cline-yes">18x</span>
250
- <span class="cline-any cline-yes">18x</span>
251
- <span class="cline-any cline-yes">18x</span>
252
- <span class="cline-any cline-yes">18x</span>
253
- <span class="cline-any cline-yes">18x</span>
254
- <span class="cline-any cline-yes">18x</span>
255
- <span class="cline-any cline-yes">18x</span>
256
- <span class="cline-any cline-yes">18x</span>
257
- <span class="cline-any cline-yes">18x</span>
258
- <span class="cline-any cline-yes">18x</span>
259
- <span class="cline-any cline-yes">18x</span>
260
- <span class="cline-any cline-yes">18x</span>
261
- <span class="cline-any cline-yes">18x</span>
262
- <span class="cline-any cline-yes">90x</span>
296
+ <span class="cline-any cline-yes">19x</span>
297
+ <span class="cline-any cline-yes">19x</span>
298
+ <span class="cline-any cline-yes">19x</span>
299
+ <span class="cline-any cline-yes">19x</span>
300
+ <span class="cline-any cline-yes">19x</span>
301
+ <span class="cline-any cline-yes">19x</span>
302
+ <span class="cline-any cline-yes">19x</span>
303
+ <span class="cline-any cline-yes">19x</span>
304
+ <span class="cline-any cline-yes">19x</span>
305
+ <span class="cline-any cline-yes">19x</span>
306
+ <span class="cline-any cline-yes">19x</span>
307
+ <span class="cline-any cline-yes">19x</span>
308
+ <span class="cline-any cline-yes">19x</span>
309
+ <span class="cline-any cline-yes">19x</span>
310
+ <span class="cline-any cline-yes">19x</span>
311
+ <span class="cline-any cline-yes">19x</span>
312
+ <span class="cline-any cline-yes">19x</span>
313
+ <span class="cline-any cline-yes">19x</span>
314
+ <span class="cline-any cline-yes">19x</span>
315
+ <span class="cline-any cline-yes">19x</span>
316
+ <span class="cline-any cline-yes">96x</span>
263
317
  <span class="cline-any cline-no">&nbsp;</span>
264
318
  <span class="cline-any cline-no">&nbsp;</span>
265
319
  <span class="cline-any cline-no">&nbsp;</span>
266
- <span class="cline-any cline-yes">90x</span>
267
- <span class="cline-any cline-yes">90x</span>
268
- <span class="cline-any cline-yes">90x</span>
269
- <span class="cline-any cline-yes">90x</span>
270
- <span class="cline-any cline-yes">90x</span>
271
- <span class="cline-any cline-yes">90x</span>
272
- <span class="cline-any cline-yes">90x</span>
320
+ <span class="cline-any cline-yes">96x</span>
321
+ <span class="cline-any cline-yes">96x</span>
322
+ <span class="cline-any cline-yes">96x</span>
323
+ <span class="cline-any cline-yes">96x</span>
324
+ <span class="cline-any cline-yes">96x</span>
325
+ <span class="cline-any cline-yes">96x</span>
326
+ <span class="cline-any cline-yes">96x</span>
273
327
  <span class="cline-any cline-no">&nbsp;</span>
274
- <span class="cline-any cline-yes">90x</span>
275
- <span class="cline-any cline-yes">90x</span>
276
- <span class="cline-any cline-yes">90x</span>
328
+ <span class="cline-any cline-yes">96x</span>
329
+ <span class="cline-any cline-yes">96x</span>
330
+ <span class="cline-any cline-yes">96x</span>
277
331
  <span class="cline-any cline-yes">35x</span>
278
332
  <span class="cline-any cline-yes">35x</span>
279
333
  <span class="cline-any cline-yes">35x</span>
280
334
  <span class="cline-any cline-yes">35x</span>
281
335
  <span class="cline-any cline-yes">35x</span>
282
- <span class="cline-any cline-yes">90x</span>
283
- <span class="cline-any cline-yes">90x</span>
284
- <span class="cline-any cline-yes">90x</span>
285
- <span class="cline-any cline-yes">90x</span>
286
- <span class="cline-any cline-yes">90x</span>
287
- <span class="cline-any cline-yes">90x</span>
288
- <span class="cline-any cline-yes">18x</span>
289
- <span class="cline-any cline-yes">18x</span>
290
- <span class="cline-any cline-yes">18x</span>
291
- <span class="cline-any cline-yes">18x</span>
292
- <span class="cline-any cline-yes">18x</span>
293
- <span class="cline-any cline-yes">18x</span>
294
- <span class="cline-any cline-yes">18x</span>
295
- <span class="cline-any cline-yes">18x</span>
296
- <span class="cline-any cline-yes">18x</span>
297
- <span class="cline-any cline-yes">18x</span>
298
- <span class="cline-any cline-yes">18x</span>
336
+ <span class="cline-any cline-yes">96x</span>
337
+ <span class="cline-any cline-yes">96x</span>
338
+ <span class="cline-any cline-yes">96x</span>
339
+ <span class="cline-any cline-yes">96x</span>
340
+ <span class="cline-any cline-yes">96x</span>
341
+ <span class="cline-any cline-yes">96x</span>
299
342
  <span class="cline-any cline-yes">19x</span>
300
343
  <span class="cline-any cline-yes">19x</span>
301
344
  <span class="cline-any cline-yes">19x</span>
@@ -307,29 +350,64 @@
307
350
  <span class="cline-any cline-yes">19x</span>
308
351
  <span class="cline-any cline-yes">19x</span>
309
352
  <span class="cline-any cline-yes">19x</span>
310
- <span class="cline-any cline-yes">11x</span>
353
+ <span class="cline-any cline-yes">96x</span>
354
+ <span class="cline-any cline-yes">35x</span>
355
+ <span class="cline-any cline-yes">35x</span>
356
+ <span class="cline-any cline-yes">35x</span>
357
+ <span class="cline-any cline-yes">61x</span>
358
+ <span class="cline-any cline-yes">61x</span>
359
+ <span class="cline-any cline-yes">96x</span>
360
+ <span class="cline-any cline-yes">59x</span>
361
+ <span class="cline-any cline-yes">59x</span>
362
+ <span class="cline-any cline-yes">59x</span>
363
+ <span class="cline-any cline-yes">2x</span>
364
+ <span class="cline-any cline-yes">2x</span>
365
+ <span class="cline-any cline-yes">2x</span>
366
+ <span class="cline-any cline-yes">96x</span>
311
367
  <span class="cline-any cline-no">&nbsp;</span>
312
368
  <span class="cline-any cline-no">&nbsp;</span>
313
369
  <span class="cline-any cline-no">&nbsp;</span>
370
+ <span class="cline-any cline-yes">2x</span>
371
+ <span class="cline-any cline-yes">2x</span>
372
+ <span class="cline-any cline-yes">2x</span>
373
+ <span class="cline-any cline-yes">1x</span>
374
+ <span class="cline-any cline-yes">1x</span>
375
+ <span class="cline-any cline-yes">1x</span>
376
+ <span class="cline-any cline-yes">2x</span>
377
+ <span class="cline-any cline-yes">2x</span>
378
+ <span class="cline-any cline-yes">96x</span>
379
+ <span class="cline-any cline-yes">19x</span>
380
+ <span class="cline-any cline-yes">19x</span>
381
+ <span class="cline-any cline-yes">19x</span>
382
+ <span class="cline-any cline-yes">19x</span>
383
+ <span class="cline-any cline-yes">19x</span>
384
+ <span class="cline-any cline-yes">19x</span>
385
+ <span class="cline-any cline-yes">19x</span>
386
+ <span class="cline-any cline-yes">19x</span>
387
+ <span class="cline-any cline-yes">19x</span>
388
+ <span class="cline-any cline-yes">19x</span>
389
+ <span class="cline-any cline-yes">19x</span>
390
+ <span class="cline-any cline-yes">19x</span>
391
+ <span class="cline-any cline-yes">19x</span>
392
+ <span class="cline-any cline-yes">19x</span>
393
+ <span class="cline-any cline-yes">19x</span>
394
+ <span class="cline-any cline-yes">19x</span>
395
+ <span class="cline-any cline-yes">19x</span>
396
+ <span class="cline-any cline-yes">19x</span>
397
+ <span class="cline-any cline-yes">19x</span>
398
+ <span class="cline-any cline-yes">19x</span>
399
+ <span class="cline-any cline-yes">19x</span>
314
400
  <span class="cline-any cline-yes">11x</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
315
402
  <span class="cline-any cline-yes">11x</span>
316
403
  <span class="cline-any cline-yes">11x</span>
317
404
  <span class="cline-any cline-yes">11x</span>
405
+ <span class="cline-any cline-no">&nbsp;</span>
318
406
  <span class="cline-any cline-yes">11x</span>
319
407
  <span class="cline-any cline-yes">11x</span>
320
408
  <span class="cline-any cline-yes">11x</span>
321
409
  <span class="cline-any cline-yes">11x</span>
322
410
  <span class="cline-any cline-yes">11x</span>
323
- <span class="cline-any cline-yes">11x</span>
324
- <span class="cline-any cline-yes">11x</span>
325
- <span class="cline-any cline-yes">11x</span>
326
- <span class="cline-any cline-yes">11x</span>
327
- <span class="cline-any cline-yes">11x</span>
328
- <span class="cline-any cline-yes">11x</span>
329
- <span class="cline-any cline-yes">11x</span>
330
- <span class="cline-any cline-yes">11x</span>
331
- <span class="cline-any cline-no">&nbsp;</span>
332
- <span class="cline-any cline-no">&nbsp;</span>
333
411
  <span class="cline-any cline-yes">19x</span>
334
412
  <span class="cline-any cline-yes">19x</span>
335
413
  <span class="cline-any cline-yes">19x</span>
@@ -346,16 +424,46 @@
346
424
  <span class="cline-any cline-no">&nbsp;</span>
347
425
  <span class="cline-any cline-yes">19x</span>
348
426
  <span class="cline-any cline-yes">19x</span>
349
- <span class="cline-any cline-yes">18x</span>
350
- <span class="cline-any cline-yes">18x</span>
351
- <span class="cline-any cline-yes">18x</span>
352
- <span class="cline-any cline-yes">18x</span>
353
- <span class="cline-any cline-yes">18x</span>
354
- <span class="cline-any cline-yes">18x</span>
355
- <span class="cline-any cline-yes">18x</span>
356
- <span class="cline-any cline-yes">18x</span>
357
- <span class="cline-any cline-yes">18x</span>
358
- <span class="cline-any cline-yes">18x</span>
427
+ <span class="cline-any cline-yes">19x</span>
428
+ <span class="cline-any cline-yes">19x</span>
429
+ <span class="cline-any cline-yes">19x</span>
430
+ <span class="cline-any cline-yes">19x</span>
431
+ <span class="cline-any cline-yes">19x</span>
432
+ <span class="cline-any cline-yes">19x</span>
433
+ <span class="cline-any cline-yes">19x</span>
434
+ <span class="cline-any cline-yes">19x</span>
435
+ <span class="cline-any cline-yes">19x</span>
436
+ <span class="cline-any cline-yes">19x</span>
437
+ <span class="cline-any cline-yes">19x</span>
438
+ <span class="cline-any cline-yes">12x</span>
439
+ <span class="cline-any cline-yes">12x</span>
440
+ <span class="cline-any cline-yes">12x</span>
441
+ <span class="cline-any cline-yes">12x</span>
442
+ <span class="cline-any cline-yes">12x</span>
443
+ <span class="cline-any cline-yes">12x</span>
444
+ <span class="cline-any cline-yes">12x</span>
445
+ <span class="cline-any cline-yes">12x</span>
446
+ <span class="cline-any cline-yes">12x</span>
447
+ <span class="cline-any cline-yes">12x</span>
448
+ <span class="cline-any cline-yes">12x</span>
449
+ <span class="cline-any cline-yes">12x</span>
450
+ <span class="cline-any cline-yes">12x</span>
451
+ <span class="cline-any cline-yes">12x</span>
452
+ <span class="cline-any cline-yes">12x</span>
453
+ <span class="cline-any cline-yes">12x</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-yes">12x</span>
457
+ <span class="cline-any cline-yes">19x</span>
458
+ <span class="cline-any cline-yes">19x</span>
459
+ <span class="cline-any cline-yes">19x</span>
460
+ <span class="cline-any cline-yes">19x</span>
461
+ <span class="cline-any cline-yes">19x</span>
462
+ <span class="cline-any cline-yes">19x</span>
463
+ <span class="cline-any cline-yes">19x</span>
464
+ <span class="cline-any cline-yes">19x</span>
465
+ <span class="cline-any cline-yes">19x</span>
466
+ <span class="cline-any cline-yes">19x</span>
359
467
  <span class="cline-any cline-yes">12x</span>
360
468
  <span class="cline-any cline-yes">12x</span>
361
469
  <span class="cline-any cline-yes">12x</span>
@@ -390,16 +498,16 @@
390
498
  <span class="cline-any cline-yes">12x</span>
391
499
  <span class="cline-any cline-yes">12x</span>
392
500
  <span class="cline-any cline-yes">12x</span>
393
- <span class="cline-any cline-yes">18x</span>
394
- <span class="cline-any cline-yes">18x</span>
395
- <span class="cline-any cline-yes">18x</span>
396
- <span class="cline-any cline-yes">18x</span>
397
- <span class="cline-any cline-yes">18x</span>
398
- <span class="cline-any cline-yes">18x</span>
399
- <span class="cline-any cline-yes">18x</span>
400
- <span class="cline-any cline-yes">18x</span>
401
- <span class="cline-any cline-yes">18x</span>
402
- <span class="cline-any cline-yes">18x</span>
501
+ <span class="cline-any cline-yes">19x</span>
502
+ <span class="cline-any cline-yes">19x</span>
503
+ <span class="cline-any cline-yes">19x</span>
504
+ <span class="cline-any cline-yes">19x</span>
505
+ <span class="cline-any cline-yes">19x</span>
506
+ <span class="cline-any cline-yes">19x</span>
507
+ <span class="cline-any cline-yes">19x</span>
508
+ <span class="cline-any cline-yes">19x</span>
509
+ <span class="cline-any cline-yes">19x</span>
510
+ <span class="cline-any cline-yes">19x</span>
403
511
  <span class="cline-any cline-yes">8x</span>
404
512
  <span class="cline-any cline-yes">3x</span>
405
513
  <span class="cline-any cline-yes">8x</span>
@@ -410,19 +518,19 @@
410
518
  <span class="cline-any cline-yes">5x</span>
411
519
  <span class="cline-any cline-yes">5x</span>
412
520
  <span class="cline-any cline-yes">8x</span>
413
- <span class="cline-any cline-yes">18x</span>
414
- <span class="cline-any cline-yes">18x</span>
415
- <span class="cline-any cline-yes">18x</span>
521
+ <span class="cline-any cline-yes">19x</span>
522
+ <span class="cline-any cline-yes">19x</span>
523
+ <span class="cline-any cline-yes">19x</span>
416
524
  <span class="cline-any cline-yes">1x</span>
417
525
  <span class="cline-any cline-neutral">&nbsp;</span>
418
526
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
419
527
  &nbsp;
420
528
  module.exports = function() {
421
529
  const api = this;
422
- const { services } = api.runtime;
530
+ const { models, services } = api.runtime;
423
531
  &nbsp;
424
- const AlertLog = api.log( "hitchy:plugin:auth:alert" );
425
- const DebugLog = api.log( "hitchy:plugin:auth:debug" );
532
+ const logAlert = api.log( "hitchy:plugin:auth:alert" );
533
+ const logDebug = api.log( "hitchy:plugin:auth:debug" );
426
534
  &nbsp;
427
535
  /**
428
536
  * Implements policy handlers transparently managing authentication process
@@ -437,7 +545,7 @@ module.exports = function() {
437
545
  * @param {Hitchy.Core.ContinuationHandler} next invoke to continue request handling
438
546
  * @returns {void}
439
547
  */
440
- static initialize( req, res, next ) {
548
+ static injectPassport( req, res, next ) {
441
549
  if ( this.local.passportInjected ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
442
550
  <span class="cstat-no" title="statement not covered" > next();</span>
443
551
  <span class="cstat-no" title="statement not covered" > return;</span>
@@ -464,6 +572,43 @@ module.exports = function() {
464
572
  }
465
573
  } );
466
574
  }
575
+ &nbsp;
576
+ /**
577
+ * Discovers HTTP basic authentication header and processes it
578
+ * accordingly based local user database.
579
+ *
580
+ * @param {Hitchy.Core.IncomingMessage} req request descriptor
581
+ * @param {Hitchy.Core.ServerResponse} res response manager
582
+ * @param {Hitchy.Core.ContinuationHandler} next invoke to continue request handling
583
+ * @returns {void}
584
+ */
585
+ static handleBasicAuth( req, res, next ) {
586
+ if ( req.user ) {
587
+ next();
588
+ return;
589
+ }
590
+ &nbsp;
591
+ const match = /^basic\s+([a-z0-9+/]+={1,2})$/i.exec( req.headers.authorization );
592
+ if ( !match ) {
593
+ next();
594
+ return;
595
+ }
596
+ &nbsp;
597
+ const decoded = Buffer.from( match[1], "base64" ).toString( "utf8" );
598
+ const parts = /^([^:]+):(.+)$/.exec( decoded );
599
+ if ( !parts ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
600
+ <span class="cstat-no" title="statement not covered" > next();</span>
601
+ <span class="cstat-no" title="statement not covered" > return;</span>
602
+ <span class="cstat-no" title="statement not covered" > }</span>
603
+ &nbsp;
604
+ services.AuthManager.checkAuthentication( parts[1], parts[2] )
605
+ .then( user =&gt; {
606
+ req.user = user; // eslint-disable-line no-param-reassign
607
+ &nbsp;
608
+ this.qualifyAuthenticated( req, res, next );
609
+ } )
610
+ .catch( next );
611
+ }
467
612
  &nbsp;
468
613
  /**
469
614
  * Authenticates a request, updates server-side session accordingly and
@@ -476,8 +621,7 @@ module.exports = function() {
476
621
  */
477
622
  static login( req, res, next ) {
478
623
  const { strategy } = req.params;
479
- const { model, service } = this;
480
- const { AuthenticationStrategies, AuthenticationPassport, AuthManager } = service;
624
+ const { AuthenticationStrategies, AuthenticationPassport } = services;
481
625
  const defaultStrategy = AuthenticationStrategies.defaultStrategy();
482
626
  &nbsp;
483
627
  req.fetchBody()
@@ -488,43 +632,61 @@ module.exports = function() {
488
632
  AuthenticationPassport.authenticate( strategy || defaultStrategy )( req, res, err =&gt; {
489
633
  if ( err ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
490
634
  <span class="cstat-no" title="statement not covered" > reject( err );</span>
491
- <span class="cstat-no" title="statement not covered" > return;</span>
492
- <span class="cstat-no" title="statement not covered" > }</span>
493
- &nbsp;
494
- if ( req.user ) {
495
- const { uuid, name } = req.user;
496
- &nbsp;
497
- AuthManager.listRolesOfUser( new model.User( uuid ) )
498
- .then( roles =&gt; {
499
- req.user.roles = roles; // eslint-disable-line no-param-reassign
500
- &nbsp;
501
- DebugLog( "authenticated as", req.user.name );
502
- &nbsp;
503
- res.set( "X-Authenticated-As", name );
504
- res.set( "X-Authorized-As", roles.join( "," ) );
505
- &nbsp;
635
+ } else {
636
+ this.qualifyAuthenticated( req, res, error =&gt; {
637
+ if ( error ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
638
+ <span class="cstat-no" title="statement not covered" > reject( error );</span>
639
+ } else {
506
640
  resolve();
507
- } )
508
- .catch( reject );
509
- }<span class="branch-0 cbranch-no" title="branch not covered" > else {</span>
510
- <span class="cstat-no" title="statement not covered" > AuthenticationPolicy.logout( req, res, cause =&gt; ( cause ? reject( cause ) : resolve() ) );</span>
511
- <span class="cstat-no" title="statement not covered" > }</span>
641
+ }
642
+ } );
643
+ }
512
644
  } );
513
645
  } );
514
646
  } )
515
647
  .then( next )
516
648
  .catch( err =&gt; {
517
- <span class="cstat-no" title="statement not covered" > AlertLog( err );</span>
649
+ <span class="cstat-no" title="statement not covered" > logAlert( err );</span>
518
650
  <span class="cstat-no" title="statement not covered" ></span>
519
651
  <span class="cstat-no" title="statement not covered" > AuthenticationPolicy.logout( req, res, cause =&gt; {</span>
520
652
  <span class="cstat-no" title="statement not covered" > if ( cause ) {</span>
521
- <span class="cstat-no" title="statement not covered" > AlertLog( `applying logout policy after failed login has caused another issue: ${cause.stack}` );</span>
653
+ <span class="cstat-no" title="statement not covered" > logAlert( `applying logout policy after failed login has caused another issue: ${cause.stack}` );</span>
522
654
  <span class="cstat-no" title="statement not covered" > }</span>
523
655
  <span class="cstat-no" title="statement not covered" ></span>
524
656
  <span class="cstat-no" title="statement not covered" > next( err );</span>
525
657
  <span class="cstat-no" title="statement not covered" > } );</span>
526
658
  } );
527
659
  }
660
+ &nbsp;
661
+ /**
662
+ * Extends request descriptor in case some authenticated user has been
663
+ * found recently.
664
+ *
665
+ * @param {Hitchy.Core.IncomingMessage} req request descriptor
666
+ * @param {Hitchy.Core.ServerResponse} res response manager
667
+ * @param {Hitchy.Core.ContinuationHandler} next invoke to continue request handling
668
+ * @returns {void}
669
+ */
670
+ static qualifyAuthenticated( req, res, next ) {
671
+ if ( req.user ) {
672
+ const { uuid, name } = req.user;
673
+ &nbsp;
674
+ services.AuthManager.listRolesOfUser( new models.User( uuid ) )
675
+ .then( roles =&gt; {
676
+ req.user.roles = roles; // eslint-disable-line no-param-reassign
677
+ &nbsp;
678
+ logDebug( "authenticated as", req.user.name );
679
+ &nbsp;
680
+ res.set( "X-Authenticated-As", name );
681
+ res.set( "X-Authorized-As", roles.join( "," ) );
682
+ &nbsp;
683
+ next();
684
+ } )
685
+ .catch( next );
686
+ }<span class="branch-0 cbranch-no" title="branch not covered" > else {</span>
687
+ <span class="cstat-no" title="statement not covered" > AuthenticationPolicy.logout( req, res, next );</span>
688
+ <span class="cstat-no" title="statement not covered" > }</span>
689
+ }
528
690
  &nbsp;
529
691
  /**
530
692
  * Drops any existing authentication on current request's user.
@@ -601,7 +763,7 @@ module.exports = function() {
601
763
  <div class='footer quiet pad2 space-top1 center small'>
602
764
  Code coverage generated by
603
765
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
604
- at Sun Mar 27 2022 18:00:09 GMT+0200 (Mitteleuropäische Sommerzeit)
766
+ at Mon Mar 28 2022 22:26:49 GMT+0200 (Mitteleuropäische Sommerzeit)
605
767
  </div>
606
768
  </div>
607
769
  <script src="../../../prettify.js"></script>
@@ -94,36 +94,36 @@
94
94
  <a name='L35'></a><a href='#L35'>35</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
95
95
  <span class="cline-any cline-yes">1x</span>
96
96
  <span class="cline-any cline-yes">1x</span>
97
+ <span class="cline-any cline-yes">19x</span>
98
+ <span class="cline-any cline-yes">19x</span>
99
+ <span class="cline-any cline-yes">19x</span>
100
+ <span class="cline-any cline-yes">19x</span>
101
+ <span class="cline-any cline-yes">19x</span>
102
+ <span class="cline-any cline-yes">19x</span>
103
+ <span class="cline-any cline-yes">19x</span>
104
+ <span class="cline-any cline-yes">19x</span>
105
+ <span class="cline-any cline-yes">19x</span>
106
+ <span class="cline-any cline-yes">19x</span>
107
+ <span class="cline-any cline-yes">19x</span>
108
+ <span class="cline-any cline-yes">19x</span>
109
+ <span class="cline-any cline-yes">19x</span>
110
+ <span class="cline-any cline-yes">19x</span>
97
111
  <span class="cline-any cline-yes">18x</span>
98
112
  <span class="cline-any cline-yes">18x</span>
99
113
  <span class="cline-any cline-yes">18x</span>
100
- <span class="cline-any cline-yes">18x</span>
101
- <span class="cline-any cline-yes">18x</span>
102
- <span class="cline-any cline-yes">18x</span>
103
- <span class="cline-any cline-yes">18x</span>
104
- <span class="cline-any cline-yes">18x</span>
105
- <span class="cline-any cline-yes">18x</span>
106
- <span class="cline-any cline-yes">18x</span>
107
- <span class="cline-any cline-yes">18x</span>
108
- <span class="cline-any cline-yes">18x</span>
109
- <span class="cline-any cline-yes">18x</span>
110
- <span class="cline-any cline-yes">18x</span>
111
- <span class="cline-any cline-yes">13x</span>
112
- <span class="cline-any cline-yes">13x</span>
113
- <span class="cline-any cline-yes">13x</span>
114
- <span class="cline-any cline-yes">6x</span>
115
- <span class="cline-any cline-yes">6x</span>
116
- <span class="cline-any cline-yes">6x</span>
117
- <span class="cline-any cline-yes">7x</span>
118
- <span class="cline-any cline-yes">7x</span>
119
114
  <span class="cline-any cline-yes">7x</span>
120
115
  <span class="cline-any cline-yes">7x</span>
121
116
  <span class="cline-any cline-yes">7x</span>
122
- <span class="cline-any cline-yes">7x</span>
123
- <span class="cline-any cline-yes">13x</span>
124
- <span class="cline-any cline-yes">18x</span>
125
- <span class="cline-any cline-yes">18x</span>
126
- <span class="cline-any cline-yes">18x</span>
117
+ <span class="cline-any cline-yes">11x</span>
118
+ <span class="cline-any cline-yes">11x</span>
119
+ <span class="cline-any cline-yes">11x</span>
120
+ <span class="cline-any cline-yes">11x</span>
121
+ <span class="cline-any cline-yes">11x</span>
122
+ <span class="cline-any cline-yes">11x</span>
123
+ <span class="cline-any cline-yes">18x</span>
124
+ <span class="cline-any cline-yes">19x</span>
125
+ <span class="cline-any cline-yes">19x</span>
126
+ <span class="cline-any cline-yes">19x</span>
127
127
  <span class="cline-any cline-yes">1x</span>
128
128
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
129
129
  &nbsp;
@@ -166,7 +166,7 @@ module.exports = function() {
166
166
  <div class='footer quiet pad2 space-top1 center small'>
167
167
  Code coverage generated by
168
168
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
169
- at Sun Mar 27 2022 18:00:09 GMT+0200 (Mitteleuropäische Sommerzeit)
169
+ at Mon Mar 28 2022 22:26:49 GMT+0200 (Mitteleuropäische Sommerzeit)
170
170
  </div>
171
171
  </div>
172
172
  <script src="../../../prettify.js"></script>