@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,964 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for plugin-auth/api/service/auth/manager.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/auth</a> manager.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">96.24% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>282/293</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">86.95% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>60/69</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>10/10</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">96.24% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>282/293</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 high'></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>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a></td><td class="line-coverage quiet"><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">19x</span>
363
- <span class="cline-any cline-yes">19x</span>
364
- <span class="cline-any cline-yes">19x</span>
365
- <span class="cline-any cline-yes">19x</span>
366
- <span class="cline-any cline-yes">19x</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">109x</span>
381
- <span class="cline-any cline-no">&nbsp;</span>
382
- <span class="cline-any cline-no">&nbsp;</span>
383
- <span class="cline-any cline-yes">109x</span>
384
- <span class="cline-any cline-yes">109x</span>
385
- <span class="cline-any cline-yes">109x</span>
386
- <span class="cline-any cline-yes">31x</span>
387
- <span class="cline-any cline-yes">109x</span>
388
- <span class="cline-any cline-yes">31x</span>
389
- <span class="cline-any cline-yes">109x</span>
390
- <span class="cline-any cline-yes">95x</span>
391
- <span class="cline-any cline-yes">95x</span>
392
- <span class="cline-any cline-yes">14x</span>
393
- <span class="cline-any cline-yes">109x</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
395
- <span class="cline-any cline-no">&nbsp;</span>
396
- <span class="cline-any cline-yes">14x</span>
397
- <span class="cline-any cline-yes">109x</span>
398
- <span class="cline-any cline-yes">4x</span>
399
- <span class="cline-any cline-yes">4x</span>
400
- <span class="cline-any cline-yes">10x</span>
401
- <span class="cline-any cline-yes">10x</span>
402
- <span class="cline-any cline-yes">10x</span>
403
- <span class="cline-any cline-yes">109x</span>
404
- <span class="cline-any cline-yes">109x</span>
405
- <span class="cline-any cline-yes">109x</span>
406
- <span class="cline-any cline-yes">109x</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-yes">123x</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-yes">123x</span>
421
- <span class="cline-any cline-yes">123x</span>
422
- <span class="cline-any cline-yes">123x</span>
423
- <span class="cline-any cline-yes">123x</span>
424
- <span class="cline-any cline-yes">75x</span>
425
- <span class="cline-any cline-yes">75x</span>
426
- <span class="cline-any cline-yes">75x</span>
427
- <span class="cline-any cline-yes">2x</span>
428
- <span class="cline-any cline-yes">2x</span>
429
- <span class="cline-any cline-yes">75x</span>
430
- <span class="cline-any cline-yes">121x</span>
431
- <span class="cline-any cline-yes">123x</span>
432
- <span class="cline-any cline-yes">73x</span>
433
- <span class="cline-any cline-yes">123x</span>
434
- <span class="cline-any cline-yes">73x</span>
435
- <span class="cline-any cline-yes">123x</span>
436
- <span class="cline-any cline-yes">75x</span>
437
- <span class="cline-any cline-yes">75x</span>
438
- <span class="cline-any cline-yes">46x</span>
439
- <span class="cline-any cline-yes">123x</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-yes">46x</span>
443
- <span class="cline-any cline-yes">123x</span>
444
- <span class="cline-any cline-yes">2x</span>
445
- <span class="cline-any cline-yes">2x</span>
446
- <span class="cline-any cline-yes">44x</span>
447
- <span class="cline-any cline-yes">44x</span>
448
- <span class="cline-any cline-yes">44x</span>
449
- <span class="cline-any cline-yes">123x</span>
450
- <span class="cline-any cline-yes">123x</span>
451
- <span class="cline-any cline-yes">123x</span>
452
- <span class="cline-any cline-yes">123x</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">19x</span>
462
- <span class="cline-any cline-yes">19x</span>
463
- <span class="cline-any cline-yes">49x</span>
464
- <span class="cline-any cline-yes">49x</span>
465
- <span class="cline-any cline-yes">49x</span>
466
- <span class="cline-any cline-yes">49x</span>
467
- <span class="cline-any cline-yes">49x</span>
468
- <span class="cline-any cline-yes">49x</span>
469
- <span class="cline-any cline-yes">49x</span>
470
- <span class="cline-any cline-yes">49x</span>
471
- <span class="cline-any cline-yes">38x</span>
472
- <span class="cline-any cline-yes">38x</span>
473
- <span class="cline-any cline-yes">38x</span>
474
- <span class="cline-any cline-no">&nbsp;</span>
475
- <span class="cline-any cline-yes">38x</span>
476
- <span class="cline-any cline-yes">38x</span>
477
- <span class="cline-any cline-yes">38x</span>
478
- <span class="cline-any cline-yes">38x</span>
479
- <span class="cline-any cline-yes">49x</span>
480
- <span class="cline-any cline-yes">49x</span>
481
- <span class="cline-any cline-yes">49x</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">19x</span>
489
- <span class="cline-any cline-yes">19x</span>
490
- <span class="cline-any cline-yes">19x</span>
491
- <span class="cline-any cline-yes">19x</span>
492
- <span class="cline-any cline-yes">27x</span>
493
- <span class="cline-any cline-yes">26x</span>
494
- <span class="cline-any cline-yes">26x</span>
495
- <span class="cline-any cline-yes">26x</span>
496
- <span class="cline-any cline-yes">26x</span>
497
- <span class="cline-any cline-yes">26x</span>
498
- <span class="cline-any cline-yes">26x</span>
499
- <span class="cline-any cline-yes">27x</span>
500
- <span class="cline-any cline-yes">8x</span>
501
- <span class="cline-any cline-yes">8x</span>
502
- <span class="cline-any cline-yes">8x</span>
503
- <span class="cline-any cline-yes">2x</span>
504
- <span class="cline-any cline-yes">8x</span>
505
- <span class="cline-any cline-yes">6x</span>
506
- <span class="cline-any cline-yes">6x</span>
507
- <span class="cline-any cline-yes">8x</span>
508
- <span class="cline-any cline-yes">26x</span>
509
- <span class="cline-any cline-yes">27x</span>
510
- <span class="cline-any cline-yes">27x</span>
511
- <span class="cline-any cline-yes">19x</span>
512
- <span class="cline-any cline-yes">19x</span>
513
- <span class="cline-any cline-yes">19x</span>
514
- <span class="cline-any cline-yes">19x</span>
515
- <span class="cline-any cline-yes">19x</span>
516
- <span class="cline-any cline-yes">19x</span>
517
- <span class="cline-any cline-yes">19x</span>
518
- <span class="cline-any cline-yes">19x</span>
519
- <span class="cline-any cline-yes">19x</span>
520
- <span class="cline-any cline-yes">19x</span>
521
- <span class="cline-any cline-yes">36x</span>
522
- <span class="cline-any cline-yes">35x</span>
523
- <span class="cline-any cline-yes">35x</span>
524
- <span class="cline-any cline-yes">35x</span>
525
- <span class="cline-any cline-yes">35x</span>
526
- <span class="cline-any cline-yes">35x</span>
527
- <span class="cline-any cline-yes">36x</span>
528
- <span class="cline-any cline-yes">2x</span>
529
- <span class="cline-any cline-yes">2x</span>
530
- <span class="cline-any cline-yes">2x</span>
531
- <span class="cline-any cline-yes">2x</span>
532
- <span class="cline-any cline-yes">33x</span>
533
- <span class="cline-any cline-yes">33x</span>
534
- <span class="cline-any cline-yes">33x</span>
535
- <span class="cline-any cline-yes">33x</span>
536
- <span class="cline-any cline-yes">33x</span>
537
- <span class="cline-any cline-yes">33x</span>
538
- <span class="cline-any cline-yes">36x</span>
539
- <span class="cline-any cline-yes">19x</span>
540
- <span class="cline-any cline-yes">19x</span>
541
- <span class="cline-any cline-yes">19x</span>
542
- <span class="cline-any cline-yes">19x</span>
543
- <span class="cline-any cline-yes">19x</span>
544
- <span class="cline-any cline-yes">19x</span>
545
- <span class="cline-any cline-yes">19x</span>
546
- <span class="cline-any cline-yes">19x</span>
547
- <span class="cline-any cline-yes">19x</span>
548
- <span class="cline-any cline-yes">19x</span>
549
- <span class="cline-any cline-yes">5x</span>
550
- <span class="cline-any cline-yes">4x</span>
551
- <span class="cline-any cline-yes">4x</span>
552
- <span class="cline-any cline-yes">4x</span>
553
- <span class="cline-any cline-yes">4x</span>
554
- <span class="cline-any cline-yes">4x</span>
555
- <span class="cline-any cline-yes">5x</span>
556
- <span class="cline-any cline-yes">2x</span>
557
- <span class="cline-any cline-yes">2x</span>
558
- <span class="cline-any cline-yes">2x</span>
559
- <span class="cline-any cline-yes">2x</span>
560
- <span class="cline-any cline-yes">2x</span>
561
- <span class="cline-any cline-yes">2x</span>
562
- <span class="cline-any cline-yes">4x</span>
563
- <span class="cline-any cline-yes">4x</span>
564
- <span class="cline-any cline-yes">5x</span>
565
- <span class="cline-any cline-yes">19x</span>
566
- <span class="cline-any cline-yes">19x</span>
567
- <span class="cline-any cline-yes">19x</span>
568
- <span class="cline-any cline-yes">19x</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">48x</span>
574
- <span class="cline-any cline-yes">48x</span>
575
- <span class="cline-any cline-yes">48x</span>
576
- <span class="cline-any cline-yes">48x</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">19x</span>
580
- <span class="cline-any cline-yes">19x</span>
581
- <span class="cline-any cline-yes">19x</span>
582
- <span class="cline-any cline-yes">19x</span>
583
- <span class="cline-any cline-yes">19x</span>
584
- <span class="cline-any cline-yes">21x</span>
585
- <span class="cline-any cline-yes">21x</span>
586
- <span class="cline-any cline-yes">21x</span>
587
- <span class="cline-any cline-yes">21x</span>
588
- <span class="cline-any cline-yes">1x</span>
589
- <span class="cline-any cline-yes">1x</span>
590
- <span class="cline-any cline-yes">1x</span>
591
- <span class="cline-any cline-yes">1x</span>
592
- <span class="cline-any cline-yes">20x</span>
593
- <span class="cline-any cline-yes">20x</span>
594
- <span class="cline-any cline-yes">20x</span>
595
- <span class="cline-any cline-yes">20x</span>
596
- <span class="cline-any cline-yes">20x</span>
597
- <span class="cline-any cline-yes">21x</span>
598
- <span class="cline-any cline-yes">1x</span>
599
- <span class="cline-any cline-yes">21x</span>
600
- <span class="cline-any cline-yes">19x</span>
601
- <span class="cline-any cline-yes">19x</span>
602
- <span class="cline-any cline-yes">19x</span>
603
- <span class="cline-any cline-yes">19x</span>
604
- <span class="cline-any cline-yes">19x</span>
605
- <span class="cline-any cline-yes">19x</span>
606
- <span class="cline-any cline-yes">19x</span>
607
- <span class="cline-any cline-yes">19x</span>
608
- <span class="cline-any cline-yes">19x</span>
609
- <span class="cline-any cline-yes">19x</span>
610
- <span class="cline-any cline-yes">19x</span>
611
- <span class="cline-any cline-yes">20x</span>
612
- <span class="cline-any cline-yes">20x</span>
613
- <span class="cline-any cline-yes">20x</span>
614
- <span class="cline-any cline-yes">20x</span>
615
- <span class="cline-any cline-yes">21x</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">19x</span>
619
- <span class="cline-any cline-yes">19x</span>
620
- <span class="cline-any cline-yes">19x</span>
621
- <span class="cline-any cline-yes">19x</span>
622
- <span class="cline-any cline-yes">19x</span>
623
- <span class="cline-any cline-yes">19x</span>
624
- <span class="cline-any cline-yes">19x</span>
625
- <span class="cline-any cline-yes">19x</span>
626
- <span class="cline-any cline-yes">11x</span>
627
- <span class="cline-any cline-yes">11x</span>
628
- <span class="cline-any cline-yes">11x</span>
629
- <span class="cline-any cline-yes">11x</span>
630
- <span class="cline-any cline-yes">11x</span>
631
- <span class="cline-any cline-yes">11x</span>
632
- <span class="cline-any cline-no">&nbsp;</span>
633
- <span class="cline-any cline-yes">11x</span>
634
- <span class="cline-any cline-yes">11x</span>
635
- <span class="cline-any cline-yes">11x</span>
636
- <span class="cline-any cline-yes">11x</span>
637
- <span class="cline-any cline-yes">11x</span>
638
- <span class="cline-any cline-yes">10x</span>
639
- <span class="cline-any cline-yes">10x</span>
640
- <span class="cline-any cline-yes">1x</span>
641
- <span class="cline-any cline-yes">1x</span>
642
- <span class="cline-any cline-yes">1x</span>
643
- <span class="cline-any cline-yes">11x</span>
644
- <span class="cline-any cline-yes">11x</span>
645
- <span class="cline-any cline-no">&nbsp;</span>
646
- <span class="cline-any cline-yes">11x</span>
647
- <span class="cline-any cline-yes">11x</span>
648
- <span class="cline-any cline-yes">19x</span>
649
- <span class="cline-any cline-yes">19x</span>
650
- <span class="cline-any cline-yes">19x</span>
651
- <span class="cline-any cline-yes">1x</span>
652
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
653
- &nbsp;
654
- module.exports = function() {
655
- const api = this;
656
- const { models, services } = api.runtime;
657
- &nbsp;
658
- const logDebug = api.log( "hitchy:plugin:auth:debug" );
659
- &nbsp;
660
- /**
661
- * Implements several helper methods meant to simplify user/role management.
662
- */
663
- class AuthManager {
664
- /**
665
- * Qualifies selected user by means of loading or creating it when
666
- * providing a user's name, only.
667
- *
668
- * @param {string|Hitchy.Plugin.Auth.User} user a user's name or model instance
669
- * @param {boolean} createIfMissing set true to create any missing user
670
- * @returns {Promise&lt;Hitchy.Plugin.Auth.User&gt;} promises selected user properly set up in database
671
- */
672
- static async asUser( user, createIfMissing = false ) {
673
- if ( !user ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
674
- <span class="cstat-no" title="statement not covered" > throw new TypeError( "missing user information" );</span>
675
- <span class="cstat-no" title="statement not covered" > }</span>
676
- &nbsp;
677
- const { User } = models;
678
- const users = user instanceof User ? [user] : await User.find( {
679
- eq: { name: "name", value: user.name || user },
680
- } );
681
- &nbsp;
682
- if ( users.length === 1 ) {
683
- return users[0];
684
- }
685
- &nbsp;
686
- if ( users.length &gt; 1 ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
687
- <span class="cstat-no" title="statement not covered" > throw new Error( "selecting user did not yield unique match" );</span>
688
- <span class="cstat-no" title="statement not covered" > }</span>
689
- &nbsp;
690
- if ( !createIfMissing ) {
691
- throw new Error( "selecting user did not yield any match" );
692
- }
693
- &nbsp;
694
- const newUser = new User();
695
- &nbsp;
696
- newUser.name = user.name || user;
697
- &nbsp;
698
- return await newUser.save();
699
- }
700
- &nbsp;
701
- /**
702
- * Qualifies selected role by means of loading or creating it when
703
- * providing a role's name, only.
704
- *
705
- * @param {string|Hitchy.Plugin.Auth.Role} role a role's name or model instance
706
- * @param {boolean} createIfMissing set true to create any missing user
707
- * @returns {Promise&lt;Hitchy.Plugin.Auth.Role&gt;} promises selected role properly set up in database
708
- */
709
- static async asRole( role, createIfMissing = false ) {
710
- if ( !role ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
711
- <span class="cstat-no" title="statement not covered" > throw new TypeError( "missing role information" );</span>
712
- <span class="cstat-no" title="statement not covered" > }</span>
713
- &nbsp;
714
- const { Role } = models;
715
- &nbsp;
716
- if ( !( role instanceof Role ) ) {
717
- role = String( role ); // eslint-disable-line no-param-reassign
718
- &nbsp;
719
- if ( !/^[a-z_]/i.test( role ) || /\s/.test( role ) ) {
720
- throw new TypeError( "missing role information" );
721
- }
722
- }
723
- &nbsp;
724
- const roles = role instanceof Role ? [role] : await Role.find( {
725
- eq: { name: "name", value: role.name || role },
726
- } );
727
- &nbsp;
728
- if ( roles.length === 1 ) {
729
- return roles[0];
730
- }
731
- &nbsp;
732
- if ( roles.length &gt; 1 ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
733
- <span class="cstat-no" title="statement not covered" > throw new Error( "selecting role did not yield unique match" );</span>
734
- <span class="cstat-no" title="statement not covered" > }</span>
735
- &nbsp;
736
- if ( !createIfMissing ) {
737
- throw new Error( "selecting role did not yield any match" );
738
- }
739
- &nbsp;
740
- const newRole = new Role();
741
- &nbsp;
742
- newRole.name = role.name || role;
743
- &nbsp;
744
- return await newRole.save();
745
- }
746
- &nbsp;
747
- /**
748
- * Fetches list of provided user's roles.
749
- *
750
- * @param {string|Hitchy.Plugin.Auth.User} user user to assign role to (given by instance or by its name)
751
- * @param {boolean} createIfMissing set true to create any missing user
752
- * @param {boolean} uuidsOnly true to prevent associated users' instances being loaded
753
- * @returns {Promise&lt;Role[]&gt;} promises list of (unloaded) roles assigned to selected user
754
- */
755
- static async listRolesOfUser( user, createIfMissing = false, uuidsOnly = false ) {
756
- const { $uuid: userUuid } = await this.asUser( user, createIfMissing );
757
- const { Role, UserToRole } = models;
758
- &nbsp;
759
- const associations = await UserToRole.find( { eq: { name: "user", value: userUuid } } );
760
- const numAssociations = associations.length;
761
- const roles = new Array( numAssociations );
762
- &nbsp;
763
- for ( let i = 0; i &lt; numAssociations; i++ ) {
764
- const { role: roleUuid } = associations[i];
765
- &nbsp;
766
- if ( uuidsOnly ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
767
- <span class="cstat-no" title="statement not covered" > roles[i] = new Role( roleUuid );</span>
768
- } else {
769
- roles[i] = new Role( roleUuid ).load();
770
- }
771
- }
772
- &nbsp;
773
- return uuidsOnly <span class="branch-0 cbranch-no" title="branch not covered" >? roles </span>: Promise.all( roles );
774
- }
775
- &nbsp;
776
- /**
777
- * Searches local database for user's with a role selected by its name.
778
- *
779
- * @param {string|Hitchy.Plugin.Auth.Role} role name of role to search for or that role's instance
780
- * @param {boolean} createIfMissing set true to create any missing role
781
- * @param {boolean} uuidsOnly true to prevent associated users' instances being loaded
782
- * @returns {Promise&lt;User[]&gt;} promises list of users with selected role
783
- */
784
- static async listUsersOfRole( role, createIfMissing = false, uuidsOnly = false ) {
785
- const { $uuid: roleUuid } = await this.asRole( role, createIfMissing );
786
- const { User, UserToRole } = models;
787
- &nbsp;
788
- const associations = await UserToRole.find( { eq: { name: "role", value: roleUuid } } );
789
- const numAssociations = associations.length;
790
- const users = new Array( numAssociations );
791
- &nbsp;
792
- for ( let i = 0; i &lt; numAssociations; i++ ) {
793
- const { user: userUuid } = associations[i];
794
- &nbsp;
795
- if ( uuidsOnly ) {
796
- users[i] = new User( userUuid );
797
- } else {
798
- users[i] = new User( userUuid ).load();
799
- }
800
- }
801
- &nbsp;
802
- return uuidsOnly ? users : Promise.all( users );
803
- }
804
- &nbsp;
805
- /**
806
- * Assigns selected role to selected user.
807
- *
808
- * @param {string|Hitchy.Plugin.Auth.Role} role role to assign user to (given by instance or by its name)
809
- * @param {string|Hitchy.Plugin.Auth.User} user user to assign role to (given by instance or by its name)
810
- * @param {boolean} createIfMissing set true to create any missing user/role
811
- * @returns {Promise&lt;void&gt;} promises role assigned to user
812
- */
813
- static async grantRoleToUser( role, user, createIfMissing = false ) {
814
- const { $uuid: userUuid } = await this.asUser( user, createIfMissing );
815
- const { $uuid: roleUuid } = await this.asRole( role, createIfMissing );
816
- &nbsp;
817
- const matches = await models.UserToRole.find( { eq: { name: "user", value: userUuid } } );
818
- const numMatches = matches.length;
819
- &nbsp;
820
- for ( let i = 0; i &lt; numMatches; i++ ) {
821
- if ( matches[i].role.equals( roleUuid ) ) {
822
- return;
823
- }
824
- }
825
- &nbsp;
826
- const association = new models.UserToRole();
827
- association.user = userUuid;
828
- association.role = roleUuid;
829
- &nbsp;
830
- await association.save();
831
- }
832
- &nbsp;
833
- /**
834
- * Drops assignment of selected role and selected user.
835
- *
836
- * @param {string|Hitchy.Plugin.Auth.Role} role role to assign user to (given by instance or by its name)
837
- * @param {string|Hitchy.Plugin.Auth.User} user user to assign role to (given by instance or by its name)
838
- * @param {boolean} createIfMissing set true to create any missing user/role
839
- * @returns {Promise&lt;void&gt;} promises role assigned to user
840
- */
841
- static async revokeRoleFromUser( role, user, createIfMissing = false ) {
842
- const { $uuid: userUuid } = await this.asUser( user, createIfMissing );
843
- const { $uuid: roleUuid } = await this.asRole( role, createIfMissing );
844
- &nbsp;
845
- const associations = await models.UserToRole.find( { eq: { name: "user", value: userUuid } } );
846
- const promises = [];
847
- &nbsp;
848
- for ( let i = 0, count = associations.length; i &lt; count; i++ ) {
849
- const association = associations[i];
850
- &nbsp;
851
- if ( association.role.equals( roleUuid ) ) {
852
- promises.push( association.remove() );
853
- }
854
- }
855
- &nbsp;
856
- return Promise.all( promises );
857
- }
858
- &nbsp;
859
- /**
860
- * Provides configurable name of role implicitly granting full access to
861
- * its associated users.
862
- *
863
- * @returns {string} configured name of role
864
- */
865
- static get adminRole() {
866
- const config = api.config.auth.admin;
867
- &nbsp;
868
- return process.env.HITCHY_ADMIN_ROLE || ( config ? config.role : "" ) || "admin";
869
- }
870
- &nbsp;
871
- /**
872
- * Creates user with admin role if missing in database.
873
- *
874
- * @returns {Promise&lt;Hitchy.Plugin.Auth.User[]&gt;} promises list of eventually existing users with admin role
875
- */
876
- static async createAdminUserIfMissing() {
877
- const role = await this.asRole( this.adminRole, true );
878
- const users = await this.listUsersOfRole( role );
879
- &nbsp;
880
- if ( users.length &gt; 0 ) {
881
- logDebug( "admin user found" );
882
- &nbsp;
883
- return users;
884
- }
885
- &nbsp;
886
- &nbsp;
887
- const existingAdmins = await models.User.find( { eq: { name: "admin" } } );
888
- let user;
889
- &nbsp;
890
- if ( existingAdmins.length &gt; 0 ) {
891
- user = existingAdmins[0];
892
- } else {
893
- const config = api.config.auth.admin;
894
- &nbsp;
895
- logDebug( "creating admin user" );
896
- &nbsp;
897
- user = new models.User();
898
- &nbsp;
899
- user.name = process.env.HITCHY_ADMIN_NAME || ( config ? config.name : "" ) || "admin";
900
- &nbsp;
901
- await user.setPassword( process.env.HITCHY_ADMIN_PASSWORD || ( config ? config.password : "" ) || "nimda" );
902
- await user.save();
903
- }
904
- &nbsp;
905
- await this.grantRoleToUser( role, user );
906
- &nbsp;
907
- return [user];
908
- }
909
- &nbsp;
910
- /**
911
- * Checks if named user can be authenticated locally using provided
912
- * password.
913
- *
914
- * @param {string} username name of user to authenticate
915
- * @param {string} password password of named to user
916
- * @return {Promise&lt;User&gt;} promises successfully authenticated user
917
- */
918
- static async checkAuthentication( username, password ) {
919
- const candidates = ( await models.User
920
- .find( { eq: { name: username } }, {}, { loadRecords: true } ) )
921
- .filter( user =&gt; !user.strategy <span class="branch-0 cbranch-no" title="branch not covered" >|| user.strategy === "local" </span>);
922
- &nbsp;
923
- switch ( candidates.length ) {
924
- <span class="branch-0 cbranch-no" title="branch not covered" > case 0 :</span>
925
- <span class="cstat-no" title="statement not covered" > throw new services.HttpException( 400, `no such local user: ${username}` );</span>
926
- &nbsp;
927
- case 1 : {
928
- const [user] = candidates;
929
- &nbsp;
930
- if ( await user.verifyPassword( password ) ) {
931
- return user;
932
- }
933
- &nbsp;
934
- throw new services.HttpException( 403, "invalid password" );
935
- }
936
- &nbsp;
937
- <span class="branch-0 cbranch-no" title="branch not covered" > default :</span>
938
- <span class="cstat-no" title="statement not covered" > throw new services.HttpException( 400, "ambiguous username" );</span>
939
- }
940
- }
941
- }
942
- &nbsp;
943
- return AuthManager;
944
- };
945
- &nbsp;</pre></td></tr></table></pre>
946
-
947
- <div class='push'></div><!-- for sticky footer -->
948
- </div><!-- /wrapper -->
949
- <div class='footer quiet pad2 space-top1 center small'>
950
- Code coverage generated by
951
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
952
- at Mon May 30 2022 17:10:50 GMT+0200 (Mitteleuropäische Sommerzeit)
953
- </div>
954
- <script src="../../../../prettify.js"></script>
955
- <script>
956
- window.onload = function () {
957
- prettyPrint();
958
- };
959
- </script>
960
- <script src="../../../../sorter.js"></script>
961
- <script src="../../../../block-navigation.js"></script>
962
- </body>
963
- </html>
964
-