@hitchy/plugin-auth 0.3.5 → 0.3.6

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 (67) hide show
  1. package/package.json +1 -1
  2. package/.gitlab-ci.yml +0 -69
  3. package/coverage/base.css +0 -224
  4. package/coverage/block-navigation.js +0 -87
  5. package/coverage/favicon.png +0 -0
  6. package/coverage/index.html +0 -236
  7. package/coverage/plugin-auth/api/controller/index.html +0 -116
  8. package/coverage/plugin-auth/api/controller/user.js.html +0 -373
  9. package/coverage/plugin-auth/api/model/authorization/index.html +0 -116
  10. package/coverage/plugin-auth/api/model/authorization/rule.js.html +0 -232
  11. package/coverage/plugin-auth/api/model/index.html +0 -146
  12. package/coverage/plugin-auth/api/model/role.js.html +0 -205
  13. package/coverage/plugin-auth/api/model/user-to-role.js.html +0 -172
  14. package/coverage/plugin-auth/api/model/user.js.html +0 -757
  15. package/coverage/plugin-auth/api/policy/authentication.js.html +0 -784
  16. package/coverage/plugin-auth/api/policy/authorization.js.html +0 -187
  17. package/coverage/plugin-auth/api/policy/index.html +0 -146
  18. package/coverage/plugin-auth/api/policy/user.js.html +0 -484
  19. package/coverage/plugin-auth/api/service/auth/index.html +0 -116
  20. package/coverage/plugin-auth/api/service/auth/manager.js.html +0 -964
  21. package/coverage/plugin-auth/api/service/authentication/index.html +0 -131
  22. package/coverage/plugin-auth/api/service/authentication/passport.js.html +0 -298
  23. package/coverage/plugin-auth/api/service/authentication/strategies.js.html +0 -934
  24. package/coverage/plugin-auth/api/service/authorization/index.html +0 -146
  25. package/coverage/plugin-auth/api/service/authorization/node.js.html +0 -949
  26. package/coverage/plugin-auth/api/service/authorization/policy-generator.js.html +0 -391
  27. package/coverage/plugin-auth/api/service/authorization/tree.js.html +0 -988
  28. package/coverage/plugin-auth/config/auth.js.html +0 -145
  29. package/coverage/plugin-auth/config/index.html +0 -116
  30. package/coverage/plugin-auth/index.html +0 -116
  31. package/coverage/plugin-auth/index.js.html +0 -388
  32. package/coverage/prettify.css +0 -1
  33. package/coverage/prettify.js +0 -2
  34. package/coverage/sort-arrow-sprite.png +0 -0
  35. package/coverage/sorter.js +0 -196
  36. package/coverage/tmp/coverage-2884-1653923449663-0.json +0 -1
  37. package/docs/.vuepress/config.js +0 -55
  38. package/docs/.vuepress/styles/palette.styl +0 -4
  39. package/docs/api/config.md +0 -180
  40. package/docs/api/controller/readme.md +0 -10
  41. package/docs/api/controller/user.md +0 -44
  42. package/docs/api/model/authorization-rule.md +0 -38
  43. package/docs/api/model/readme.md +0 -13
  44. package/docs/api/model/role.md +0 -22
  45. package/docs/api/model/user-to-role.md +0 -26
  46. package/docs/api/model/user.md +0 -50
  47. package/docs/api/policy/authentication.md +0 -44
  48. package/docs/api/policy/authorization.md +0 -27
  49. package/docs/api/policy/readme.md +0 -12
  50. package/docs/api/policy/user.md +0 -22
  51. package/docs/api/readme.md +0 -52
  52. package/docs/api/routing.md +0 -101
  53. package/docs/api/service/auth-manager.md +0 -86
  54. package/docs/api/service/authentication-passport.md +0 -21
  55. package/docs/api/service/authentication-strategies.md +0 -22
  56. package/docs/api/service/authorization-node.md +0 -102
  57. package/docs/api/service/authorization-policy-generator.md +0 -66
  58. package/docs/api/service/authorization-tree.md +0 -123
  59. package/docs/api/service/readme.md +0 -15
  60. package/docs/guides/getting-started.md +0 -69
  61. package/docs/guides/idp-login.png +0 -0
  62. package/docs/guides/idp-saml-cert.png +0 -0
  63. package/docs/guides/openid-connect.md +0 -164
  64. package/docs/guides/readme.md +0 -12
  65. package/docs/guides/saml.md +0 -161
  66. package/docs/introduction.md +0 -78
  67. package/docs/readme.md +0 -11
@@ -1,934 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for plugin-auth/api/service/authentication/strategies.js</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../../../prettify.css" />
9
- <link rel="stylesheet" href="../../../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../../../index.html">All files</a> / <a href="index.html">plugin-auth/api/service/authentication</a> strategies.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">79.5% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>225/283</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">78.12% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>25/32</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">84.61% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>11/13</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">79.5% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>225/283</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line medium'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
350
- <span class="cline-any cline-yes">1x</span>
351
- <span class="cline-any cline-yes">1x</span>
352
- <span class="cline-any cline-yes">1x</span>
353
- <span class="cline-any cline-yes">1x</span>
354
- <span class="cline-any cline-yes">1x</span>
355
- <span class="cline-any cline-yes">1x</span>
356
- <span class="cline-any cline-yes">1x</span>
357
- <span class="cline-any cline-yes">1x</span>
358
- <span class="cline-any cline-yes">1x</span>
359
- <span class="cline-any cline-yes">1x</span>
360
- <span class="cline-any cline-yes">1x</span>
361
- <span class="cline-any cline-yes">1x</span>
362
- <span class="cline-any cline-yes">1x</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-yes">1x</span>
365
- <span class="cline-any cline-yes">1x</span>
366
- <span class="cline-any cline-yes">1x</span>
367
- <span class="cline-any cline-yes">19x</span>
368
- <span class="cline-any cline-yes">19x</span>
369
- <span class="cline-any cline-yes">19x</span>
370
- <span class="cline-any cline-yes">19x</span>
371
- <span class="cline-any cline-yes">19x</span>
372
- <span class="cline-any cline-yes">19x</span>
373
- <span class="cline-any cline-yes">19x</span>
374
- <span class="cline-any cline-yes">19x</span>
375
- <span class="cline-any cline-yes">19x</span>
376
- <span class="cline-any cline-yes">19x</span>
377
- <span class="cline-any cline-yes">19x</span>
378
- <span class="cline-any cline-yes">19x</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">2x</span>
383
- <span class="cline-any cline-yes">2x</span>
384
- <span class="cline-any cline-yes">2x</span>
385
- <span class="cline-any cline-yes">2x</span>
386
- <span class="cline-any cline-no">&nbsp;</span>
387
- <span class="cline-any cline-no">&nbsp;</span>
388
- <span class="cline-any cline-yes">2x</span>
389
- <span class="cline-any cline-yes">2x</span>
390
- <span class="cline-any cline-yes">2x</span>
391
- <span class="cline-any cline-yes">2x</span>
392
- <span class="cline-any cline-yes">2x</span>
393
- <span class="cline-any cline-yes">2x</span>
394
- <span class="cline-any cline-yes">2x</span>
395
- <span class="cline-any cline-yes">2x</span>
396
- <span class="cline-any cline-no">&nbsp;</span>
397
- <span class="cline-any cline-no">&nbsp;</span>
398
- <span class="cline-any cline-yes">2x</span>
399
- <span class="cline-any cline-yes">2x</span>
400
- <span class="cline-any cline-yes">2x</span>
401
- <span class="cline-any cline-yes">2x</span>
402
- <span class="cline-any cline-yes">19x</span>
403
- <span class="cline-any cline-yes">19x</span>
404
- <span class="cline-any cline-yes">19x</span>
405
- <span class="cline-any cline-yes">19x</span>
406
- <span class="cline-any cline-yes">19x</span>
407
- <span class="cline-any cline-yes">19x</span>
408
- <span class="cline-any cline-yes">19x</span>
409
- <span class="cline-any cline-yes">19x</span>
410
- <span class="cline-any cline-yes">19x</span>
411
- <span class="cline-any cline-yes">19x</span>
412
- <span class="cline-any cline-yes">19x</span>
413
- <span class="cline-any cline-yes">19x</span>
414
- <span class="cline-any cline-yes">19x</span>
415
- <span class="cline-any cline-yes">19x</span>
416
- <span class="cline-any cline-yes">19x</span>
417
- <span class="cline-any cline-no">&nbsp;</span>
418
- <span class="cline-any cline-no">&nbsp;</span>
419
- <span class="cline-any cline-no">&nbsp;</span>
420
- <span class="cline-any cline-no">&nbsp;</span>
421
- <span class="cline-any cline-no">&nbsp;</span>
422
- <span class="cline-any cline-no">&nbsp;</span>
423
- <span class="cline-any cline-no">&nbsp;</span>
424
- <span class="cline-any cline-no">&nbsp;</span>
425
- <span class="cline-any cline-no">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
427
- <span class="cline-any cline-no">&nbsp;</span>
428
- <span class="cline-any cline-no">&nbsp;</span>
429
- <span class="cline-any cline-no">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
431
- <span class="cline-any cline-no">&nbsp;</span>
432
- <span class="cline-any cline-no">&nbsp;</span>
433
- <span class="cline-any cline-no">&nbsp;</span>
434
- <span class="cline-any cline-no">&nbsp;</span>
435
- <span class="cline-any cline-no">&nbsp;</span>
436
- <span class="cline-any cline-no">&nbsp;</span>
437
- <span class="cline-any cline-no">&nbsp;</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
439
- <span class="cline-any cline-no">&nbsp;</span>
440
- <span class="cline-any cline-no">&nbsp;</span>
441
- <span class="cline-any cline-no">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
443
- <span class="cline-any cline-no">&nbsp;</span>
444
- <span class="cline-any cline-no">&nbsp;</span>
445
- <span class="cline-any cline-no">&nbsp;</span>
446
- <span class="cline-any cline-no">&nbsp;</span>
447
- <span class="cline-any cline-no">&nbsp;</span>
448
- <span class="cline-any cline-no">&nbsp;</span>
449
- <span class="cline-any cline-no">&nbsp;</span>
450
- <span class="cline-any cline-no">&nbsp;</span>
451
- <span class="cline-any cline-no">&nbsp;</span>
452
- <span class="cline-any cline-yes">19x</span>
453
- <span class="cline-any cline-yes">19x</span>
454
- <span class="cline-any cline-yes">19x</span>
455
- <span class="cline-any cline-yes">19x</span>
456
- <span class="cline-any cline-yes">19x</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">9x</span>
462
- <span class="cline-any cline-yes">9x</span>
463
- <span class="cline-any cline-yes">9x</span>
464
- <span class="cline-any cline-yes">9x</span>
465
- <span class="cline-any cline-yes">9x</span>
466
- <span class="cline-any cline-no">&nbsp;</span>
467
- <span class="cline-any cline-no">&nbsp;</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-no">&nbsp;</span>
470
- <span class="cline-any cline-no">&nbsp;</span>
471
- <span class="cline-any cline-yes">9x</span>
472
- <span class="cline-any cline-yes">19x</span>
473
- <span class="cline-any cline-yes">19x</span>
474
- <span class="cline-any cline-yes">19x</span>
475
- <span class="cline-any cline-yes">19x</span>
476
- <span class="cline-any cline-yes">19x</span>
477
- <span class="cline-any cline-yes">19x</span>
478
- <span class="cline-any cline-yes">19x</span>
479
- <span class="cline-any cline-yes">19x</span>
480
- <span class="cline-any cline-yes">19x</span>
481
- <span class="cline-any cline-yes">19x</span>
482
- <span class="cline-any cline-yes">19x</span>
483
- <span class="cline-any cline-yes">19x</span>
484
- <span class="cline-any cline-yes">19x</span>
485
- <span class="cline-any cline-yes">19x</span>
486
- <span class="cline-any cline-yes">19x</span>
487
- <span class="cline-any cline-yes">19x</span>
488
- <span class="cline-any cline-yes">2x</span>
489
- <span class="cline-any cline-yes">1x</span>
490
- <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-yes">1x</span>
492
- <span class="cline-any cline-yes">2x</span>
493
- <span class="cline-any cline-yes">2x</span>
494
- <span class="cline-any cline-yes">2x</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
496
- <span class="cline-any cline-yes">2x</span>
497
- <span class="cline-any cline-yes">2x</span>
498
- <span class="cline-any cline-yes">2x</span>
499
- <span class="cline-any cline-yes">2x</span>
500
- <span class="cline-any cline-yes">2x</span>
501
- <span class="cline-any cline-yes">2x</span>
502
- <span class="cline-any cline-yes">2x</span>
503
- <span class="cline-any cline-yes">2x</span>
504
- <span class="cline-any cline-yes">2x</span>
505
- <span class="cline-any cline-yes">2x</span>
506
- <span class="cline-any cline-yes">2x</span>
507
- <span class="cline-any cline-yes">2x</span>
508
- <span class="cline-any cline-yes">2x</span>
509
- <span class="cline-any cline-yes">2x</span>
510
- <span class="cline-any cline-yes">2x</span>
511
- <span class="cline-any cline-yes">2x</span>
512
- <span class="cline-any cline-yes">1x</span>
513
- <span class="cline-any cline-yes">1x</span>
514
- <span class="cline-any cline-yes">1x</span>
515
- <span class="cline-any cline-yes">1x</span>
516
- <span class="cline-any cline-yes">1x</span>
517
- <span class="cline-any cline-yes">1x</span>
518
- <span class="cline-any cline-yes">1x</span>
519
- <span class="cline-any cline-yes">1x</span>
520
- <span class="cline-any cline-yes">1x</span>
521
- <span class="cline-any cline-yes">1x</span>
522
- <span class="cline-any cline-yes">1x</span>
523
- <span class="cline-any cline-no">&nbsp;</span>
524
- <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-yes">1x</span>
526
- <span class="cline-any cline-yes">1x</span>
527
- <span class="cline-any cline-yes">1x</span>
528
- <span class="cline-any cline-yes">1x</span>
529
- <span class="cline-any cline-yes">11x</span>
530
- <span class="cline-any cline-yes">11x</span>
531
- <span class="cline-any cline-yes">1x</span>
532
- <span class="cline-any cline-yes">1x</span>
533
- <span class="cline-any cline-yes">1x</span>
534
- <span class="cline-any cline-yes">1x</span>
535
- <span class="cline-any cline-no">&nbsp;</span>
536
- <span class="cline-any cline-yes">1x</span>
537
- <span class="cline-any cline-yes">1x</span>
538
- <span class="cline-any cline-yes">1x</span>
539
- <span class="cline-any cline-yes">1x</span>
540
- <span class="cline-any cline-no">&nbsp;</span>
541
- <span class="cline-any cline-yes">1x</span>
542
- <span class="cline-any cline-yes">1x</span>
543
- <span class="cline-any cline-yes">1x</span>
544
- <span class="cline-any cline-yes">1x</span>
545
- <span class="cline-any cline-yes">1x</span>
546
- <span class="cline-any cline-yes">1x</span>
547
- <span class="cline-any cline-yes">1x</span>
548
- <span class="cline-any cline-yes">1x</span>
549
- <span class="cline-any cline-yes">1x</span>
550
- <span class="cline-any cline-yes">1x</span>
551
- <span class="cline-any cline-yes">1x</span>
552
- <span class="cline-any cline-yes">1x</span>
553
- <span class="cline-any cline-yes">1x</span>
554
- <span class="cline-any cline-no">&nbsp;</span>
555
- <span class="cline-any cline-no">&nbsp;</span>
556
- <span class="cline-any cline-no">&nbsp;</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
558
- <span class="cline-any cline-no">&nbsp;</span>
559
- <span class="cline-any cline-no">&nbsp;</span>
560
- <span class="cline-any cline-no">&nbsp;</span>
561
- <span class="cline-any cline-no">&nbsp;</span>
562
- <span class="cline-any cline-yes">1x</span>
563
- <span class="cline-any cline-yes">2x</span>
564
- <span class="cline-any cline-yes">2x</span>
565
- <span class="cline-any cline-yes">2x</span>
566
- <span class="cline-any cline-yes">2x</span>
567
- <span class="cline-any cline-yes">2x</span>
568
- <span class="cline-any cline-yes">2x</span>
569
- <span class="cline-any cline-yes">19x</span>
570
- <span class="cline-any cline-yes">19x</span>
571
- <span class="cline-any cline-yes">19x</span>
572
- <span class="cline-any cline-yes">19x</span>
573
- <span class="cline-any cline-yes">19x</span>
574
- <span class="cline-any cline-yes">19x</span>
575
- <span class="cline-any cline-yes">19x</span>
576
- <span class="cline-any cline-yes">19x</span>
577
- <span class="cline-any cline-yes">19x</span>
578
- <span class="cline-any cline-yes">19x</span>
579
- <span class="cline-any cline-yes">2x</span>
580
- <span class="cline-any cline-yes">1x</span>
581
- <span class="cline-any cline-yes">2x</span>
582
- <span class="cline-any cline-yes">2x</span>
583
- <span class="cline-any cline-yes">2x</span>
584
- <span class="cline-any cline-yes">2x</span>
585
- <span class="cline-any cline-yes">2x</span>
586
- <span class="cline-any cline-yes">2x</span>
587
- <span class="cline-any cline-yes">2x</span>
588
- <span class="cline-any cline-yes">2x</span>
589
- <span class="cline-any cline-yes">2x</span>
590
- <span class="cline-any cline-yes">2x</span>
591
- <span class="cline-any cline-yes">2x</span>
592
- <span class="cline-any cline-yes">2x</span>
593
- <span class="cline-any cline-yes">2x</span>
594
- <span class="cline-any cline-yes">2x</span>
595
- <span class="cline-any cline-yes">2x</span>
596
- <span class="cline-any cline-yes">1x</span>
597
- <span class="cline-any cline-yes">1x</span>
598
- <span class="cline-any cline-yes">1x</span>
599
- <span class="cline-any cline-yes">1x</span>
600
- <span class="cline-any cline-yes">1x</span>
601
- <span class="cline-any cline-yes">1x</span>
602
- <span class="cline-any cline-yes">1x</span>
603
- <span class="cline-any cline-yes">1x</span>
604
- <span class="cline-any cline-yes">1x</span>
605
- <span class="cline-any cline-yes">2x</span>
606
- <span class="cline-any cline-yes">2x</span>
607
- <span class="cline-any cline-yes">2x</span>
608
- <span class="cline-any cline-yes">2x</span>
609
- <span class="cline-any cline-yes">2x</span>
610
- <span class="cline-any cline-yes">2x</span>
611
- <span class="cline-any cline-yes">19x</span>
612
- <span class="cline-any cline-yes">19x</span>
613
- <span class="cline-any cline-yes">19x</span>
614
- <span class="cline-any cline-yes">19x</span>
615
- <span class="cline-any cline-yes">19x</span>
616
- <span class="cline-any cline-yes">19x</span>
617
- <span class="cline-any cline-yes">19x</span>
618
- <span class="cline-any cline-yes">52x</span>
619
- <span class="cline-any cline-yes">52x</span>
620
- <span class="cline-any cline-yes">52x</span>
621
- <span class="cline-any cline-no">&nbsp;</span>
622
- <span class="cline-any cline-no">&nbsp;</span>
623
- <span class="cline-any cline-yes">52x</span>
624
- <span class="cline-any cline-yes">52x</span>
625
- <span class="cline-any cline-yes">52x</span>
626
- <span class="cline-any cline-yes">52x</span>
627
- <span class="cline-any cline-yes">52x</span>
628
- <span class="cline-any cline-yes">19x</span>
629
- <span class="cline-any cline-yes">19x</span>
630
- <span class="cline-any cline-yes">19x</span>
631
- <span class="cline-any cline-yes">1x</span>
632
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
633
- &nbsp;
634
- const LocalStrategy = require( "passport-local" ).Strategy;
635
- &nbsp;
636
- /**
637
- * Temporarily tracks additional session data per remotely authenticated user.
638
- *
639
- * Some strategies (such as passport-saml) expect certain strategy-related data
640
- * per authenticated user to be present on `req.user` prior to accepting request
641
- * for logging out. In hitchy, `req.user` is fetched from database on every
642
- * request and thus no temporary data is available. Hence, this local map is
643
- * used instead to track any additional data for those strategies.
644
- *
645
- * @type {Map&lt;any, any&gt;}
646
- */
647
- const RemoteAuthCustomData = new Map();
648
- &nbsp;
649
- module.exports = function() {
650
- const api = this;
651
- const { models, services } = api.runtime;
652
- &nbsp;
653
- const logAlert = api.log( "hitchy:plugin:auth:alert" );
654
- &nbsp;
655
- /**
656
- * Fetches named user's local profile.
657
- *
658
- * @param {string} strategyName name of strategy used to authenticate user
659
- * @param {string} username name of user to search locally for related profile
660
- * @param {boolean} createIfMissing set true to create user's profile if it's missing currenly
661
- * @param {function(Error?, object):void} doneFn callback invoked with encountered error or user's profile
662
- * @returns {void}
663
- */
664
- function getLocalProfile( strategyName, username, createIfMissing, doneFn ) {
665
- models.User.find( { eq: { name: username } } )
666
- .then( candidates =&gt; candidates.find( user =&gt; user.strategy === strategyName ) )
667
- .then( match =&gt; {
668
- if ( match ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
669
- <span class="cstat-no" title="statement not covered" > return match;</span>
670
- <span class="cstat-no" title="statement not covered" > }</span>
671
- &nbsp;
672
- if ( createIfMissing ) {
673
- const newUser = new models.User();
674
- newUser.name = username;
675
- newUser.strategy = strategyName;
676
- &nbsp;
677
- return newUser.save();
678
- }
679
- <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
680
- <span class="cstat-no" title="statement not covered" > throw new TypeError( "selected user does not exist" );</span>
681
- } )
682
- .then( profile =&gt; doneFn( null, profile ) )
683
- .catch( doneFn );
684
- }
685
- &nbsp;
686
- /**
687
- * Implements helpers for generating strategies for passport.js.
688
- */
689
- class AuthenticationStrategies {
690
- /**
691
- * Picks user based on provided name and checks if provided password is
692
- * matching or not.
693
- *
694
- * @param {string} username name of user to authenticate
695
- * @param {string} password named user's password for authentication
696
- * @param {function(Error?, object, object)} done invoked with optional error, authenticated user or some message as feedback
697
- * @returns {void}
698
- */
699
- static <span class="fstat-no" title="function not covered" >checkAuthentication( username, password, done ) {</span>
700
- <span class="cstat-no" title="statement not covered" > models.User</span>
701
- <span class="cstat-no" title="statement not covered" > .find( { eq: { username } }, {}, { loadRecords: true } )</span>
702
- <span class="cstat-no" title="statement not covered" > .then( matches =&gt; {</span>
703
- <span class="cstat-no" title="statement not covered" > switch ( matches.length ) {</span>
704
- <span class="cstat-no" title="statement not covered" > case 0 :</span>
705
- <span class="cstat-no" title="statement not covered" > done( null, false, { message: "Incorrect username." } );</span>
706
- <span class="cstat-no" title="statement not covered" > return undefined;</span>
707
- <span class="cstat-no" title="statement not covered" ></span>
708
- <span class="cstat-no" title="statement not covered" > case 1 : {</span>
709
- <span class="cstat-no" title="statement not covered" > const [user] = matches;</span>
710
- <span class="cstat-no" title="statement not covered" ></span>
711
- <span class="cstat-no" title="statement not covered" > if ( user.strategy &amp;&amp; user.strategy !== "local" ) {</span>
712
- <span class="cstat-no" title="statement not covered" > done( null, false, { message: "Authenticating this user requires different strategy." } );</span>
713
- <span class="cstat-no" title="statement not covered" > return undefined;</span>
714
- <span class="cstat-no" title="statement not covered" > }</span>
715
- <span class="cstat-no" title="statement not covered" ></span>
716
- <span class="cstat-no" title="statement not covered" > return user.verifyPassword( password ).then( result =&gt; {</span>
717
- <span class="cstat-no" title="statement not covered" > if ( result ) {</span>
718
- <span class="cstat-no" title="statement not covered" > done( null, user );</span>
719
- <span class="cstat-no" title="statement not covered" > } else {</span>
720
- <span class="cstat-no" title="statement not covered" > done( null, false, { message: "Incorrect password." } );</span>
721
- <span class="cstat-no" title="statement not covered" > }</span>
722
- <span class="cstat-no" title="statement not covered" > } );</span>
723
- <span class="cstat-no" title="statement not covered" > }</span>
724
- <span class="cstat-no" title="statement not covered" ></span>
725
- <span class="cstat-no" title="statement not covered" > default :</span>
726
- <span class="cstat-no" title="statement not covered" > done( null, false, { message: "Ambiguous username." } );</span>
727
- <span class="cstat-no" title="statement not covered" > return undefined;</span>
728
- <span class="cstat-no" title="statement not covered" > }</span>
729
- <span class="cstat-no" title="statement not covered" > } )</span>
730
- <span class="cstat-no" title="statement not covered" > .catch( err =&gt; {</span>
731
- <span class="cstat-no" title="statement not covered" > logAlert( err );</span>
732
- <span class="cstat-no" title="statement not covered" > done( err );</span>
733
- <span class="cstat-no" title="statement not covered" > } );</span>
734
- <span class="cstat-no" title="statement not covered" > }</span>
735
- &nbsp;
736
- /**
737
- * Generates local strategy authenticating user based on local user
738
- * model managed in local ODM.
739
- *
740
- * @returns {Strategy} generated strategy for use with passport.js
741
- */
742
- static generateLocal() {
743
- const strategy = new LocalStrategy( ( name, password, done ) =&gt; {
744
- services.AuthManager.checkAuthentication( name, password, done )
745
- .then( user =&gt; {
746
- done( null, user );
747
- } )
748
- .catch( error =&gt; {
749
- <span class="cstat-no" title="statement not covered" > if ( error instanceof services.HttpException &amp;&amp; Math.floor( error.statusCode / 100 ) === 4 ) {</span>
750
- <span class="cstat-no" title="statement not covered" > done( null, false, { message: error.message } );</span>
751
- <span class="cstat-no" title="statement not covered" > } else {</span>
752
- <span class="cstat-no" title="statement not covered" > done( error );</span>
753
- <span class="cstat-no" title="statement not covered" > }</span>
754
- } );
755
- } );
756
- &nbsp;
757
- strategy.passwordRequried = true;
758
- &nbsp;
759
- return strategy;
760
- }
761
- &nbsp;
762
- /**
763
- * Generates SAML strategy authenticating user against some remote IdP
764
- * based on SAML v2.0 protocol.
765
- *
766
- * @param {string} strategyName name of resulting strategy in context of your application
767
- * @param {Hitchy.Plugin.Auth.SamlConfig} config SAML protocol configuration
768
- * @returns {Strategy} generated strategy for use with passport.js
769
- */
770
- static generateSaml( strategyName, config ) {
771
- const verifyLocalProfileOnLogin = ( req, userInfo, done ) =&gt; {
772
- RemoteAuthCustomData.set( `${strategyName}:${userInfo.nameID}`, { ...userInfo } );
773
- &nbsp;
774
- getLocalProfile( strategyName, userInfo.nameID, true, done );
775
- };
776
- &nbsp;
777
- const verifyLocalProfileOnLogout = <span class="fstat-no" title="function not covered" >( req, userInfo, done ) =&gt; {</span>
778
- <span class="cstat-no" title="statement not covered" > getLocalProfile( strategyName, userInfo.nameID, false, done );</span>
779
- };
780
- &nbsp;
781
- const { Strategy } = require( "passport-saml" );
782
- const strategy = new Strategy( {
783
- ...config,
784
- passReqToCallback: true,
785
- }, verifyLocalProfileOnLogin, verifyLocalProfileOnLogout );
786
- &nbsp;
787
- /**
788
- * Triggers requesting user being logged out remotely.
789
- *
790
- * @param {Hitchy.Core.IncomingMessage} req request descriptor
791
- * @returns {Promise&lt;boolean&gt;} promises indicator if request was redirected to come back after remote logout succeeded
792
- */
793
- strategy.logOutRemotely = req =&gt; {
794
- if ( req.query.SAMLResponse ) {
795
- return Promise.resolve( false );
796
- }
797
- &nbsp;
798
- const res = req.context.response;
799
- &nbsp;
800
- return new Promise( ( resolve, reject ) =&gt; {
801
- const { user } = req;
802
- &nbsp;
803
- const remoteSessionKey = `${strategyName}:${user.name}`;
804
- &nbsp;
805
- if ( !user || user.strategy !== strategyName || !RemoteAuthCustomData.has( remoteSessionKey ) ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
806
- <span class="cstat-no" title="statement not covered" > resolve( {} );</span>
807
- } else {
808
- // inject custom auth data into `req.user` as expected by passport-saml strategy
809
- const data = RemoteAuthCustomData.get( remoteSessionKey );
810
- &nbsp;
811
- for ( const name of Object.keys( data ) ) {
812
- user[name] = data[name];
813
- }
814
- &nbsp;
815
- user.nameID = user.name;
816
- &nbsp;
817
- if ( !user.nameID || !user.nameIDFormat ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
818
- <span class="cstat-no" title="statement not covered" > reject( new Error( "missing nameID and nameIDFormat of user required for requesting logout at IdP" ) );</span>
819
- } else {
820
- // ask strategy for generating logout URL for redirecting client to
821
- strategy.logout( req, ( error, logoutUrl ) =&gt; {
822
- if ( error ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
823
- <span class="cstat-no" title="statement not covered" > reject( error );</span>
824
- } else {
825
- resolve( { name: remoteSessionKey, url: logoutUrl } );
826
- }
827
- } );
828
- }
829
- }
830
- } )
831
- .then( ( { name, url } ) =&gt; {
832
- if ( url ) {
833
- // first pass -&gt; redirect to IdP
834
- res.redirect( 302, url );
835
- return true;
836
- }
837
- <span class="cstat-no" title="statement not covered" ><span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
838
- <span class="cstat-no" title="statement not covered" > // second pass -&gt; returned from IdP</span>
839
- <span class="cstat-no" title="statement not covered" ></span>
840
- <span class="cstat-no" title="statement not covered" > if ( name ) {</span>
841
- <span class="cstat-no" title="statement not covered" > RemoteAuthCustomData.delete( name );</span>
842
- <span class="cstat-no" title="statement not covered" > }</span>
843
- <span class="cstat-no" title="statement not covered" ></span>
844
- <span class="cstat-no" title="statement not covered" > return false;</span>
845
- } );
846
- };
847
- &nbsp;
848
- Object.defineProperty( strategy, "$$doNotSeal$$", { value: true } );
849
- &nbsp;
850
- return strategy;
851
- }
852
- &nbsp;
853
- /**
854
- * Creates strategy for illustrating and testing integration with remote IdP
855
- * supporting OpenID Connect with Authorization Code Flow.
856
- *
857
- * @param {string} strategyName name of resulting strategy in context of your application
858
- * @param {ClientMetaData} config OpenID Connect client configuration
859
- * @returns {Promise&lt;Strategy&gt;} promises generated strategy for use with passport.js
860
- */
861
- static async generateOpenIdConnect( strategyName, config ) { // eslint-disable-line consistent-this
862
- const verifyLocalProfileOnLogin = ( req, tokens, userInfo, done ) =&gt; {
863
- getLocalProfile( strategyName, userInfo.preferred_username, true, done );
864
- };
865
- &nbsp;
866
- const { Issuer, Strategy } = require( "openid-client" );
867
- const issuer = await Issuer.discover( config.discovery_url );
868
- const client = new issuer.Client( config );
869
- &nbsp;
870
- const strategy = new Strategy( {
871
- client,
872
- passReqToCallback: true,
873
- }, verifyLocalProfileOnLogin );
874
- &nbsp;
875
- strategy.logOutRemotely = req =&gt; {
876
- const key = `${strategyName}:logout_state`;
877
- &nbsp;
878
- if ( req.session[key] &amp;&amp; req.query.state === req.session[key] ) {
879
- return Promise.resolve( false );
880
- }
881
- &nbsp;
882
- const state = req.session[key] = require( "crypto" ).randomBytes( 32 ).toString( "base64" ); // eslint-disable-line no-param-reassign
883
- &nbsp;
884
- // redirect user to discovered end_session_url of IdP
885
- req.context.response.redirect( 302, client.endSessionUrl( { state } ) );
886
- &nbsp;
887
- return Promise.resolve( true );
888
- };
889
- &nbsp;
890
- Object.defineProperty( strategy, "$$doNotSeal$$", { value: true } );
891
- &nbsp;
892
- return strategy;
893
- }
894
- &nbsp;
895
- /**
896
- * Retrieves name of strategy to use by default.
897
- *
898
- * @returns {string} name of strategy to use for user authentication
899
- */
900
- static defaultStrategy() {
901
- const { defaultStrategy, strategies } = api.config.auth;
902
- &nbsp;
903
- if ( defaultStrategy ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
904
- <span class="cstat-no" title="statement not covered" > return defaultStrategy;</span>
905
- <span class="cstat-no" title="statement not covered" > }</span>
906
- &nbsp;
907
- const strategiesNames = Object.keys( strategies );
908
- &nbsp;
909
- return strategiesNames.length === 1 ? strategiesNames[0] : "local";
910
- }
911
- }
912
- &nbsp;
913
- return AuthenticationStrategies;
914
- };
915
- &nbsp;</pre></td></tr></table></pre>
916
-
917
- <div class='push'></div><!-- for sticky footer -->
918
- </div><!-- /wrapper -->
919
- <div class='footer quiet pad2 space-top1 center small'>
920
- Code coverage generated by
921
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
922
- at Mon May 30 2022 17:10:50 GMT+0200 (Mitteleuropäische Sommerzeit)
923
- </div>
924
- <script src="../../../../prettify.js"></script>
925
- <script>
926
- window.onload = function () {
927
- prettyPrint();
928
- };
929
- </script>
930
- <script src="../../../../sorter.js"></script>
931
- <script src="../../../../block-navigation.js"></script>
932
- </body>
933
- </html>
934
-