@hitchy/plugin-auth 0.3.4 → 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 (66) hide show
  1. package/package.json +11 -11
  2. package/.gitlab-ci.yml +0 -69
  3. package/coverage/base.css +0 -224
  4. package/coverage/block-navigation.js +0 -79
  5. package/coverage/favicon.png +0 -0
  6. package/coverage/index.html +0 -231
  7. package/coverage/plugin-auth/api/controller/index.html +0 -111
  8. package/coverage/plugin-auth/api/controller/user.js.html +0 -368
  9. package/coverage/plugin-auth/api/model/authorization/index.html +0 -111
  10. package/coverage/plugin-auth/api/model/authorization/rule.js.html +0 -227
  11. package/coverage/plugin-auth/api/model/index.html +0 -141
  12. package/coverage/plugin-auth/api/model/role.js.html +0 -200
  13. package/coverage/plugin-auth/api/model/user-to-role.js.html +0 -167
  14. package/coverage/plugin-auth/api/model/user.js.html +0 -752
  15. package/coverage/plugin-auth/api/policy/authentication.js.html +0 -779
  16. package/coverage/plugin-auth/api/policy/authorization.js.html +0 -182
  17. package/coverage/plugin-auth/api/policy/index.html +0 -141
  18. package/coverage/plugin-auth/api/policy/user.js.html +0 -479
  19. package/coverage/plugin-auth/api/service/auth/index.html +0 -111
  20. package/coverage/plugin-auth/api/service/auth/manager.js.html +0 -959
  21. package/coverage/plugin-auth/api/service/authentication/index.html +0 -126
  22. package/coverage/plugin-auth/api/service/authentication/passport.js.html +0 -293
  23. package/coverage/plugin-auth/api/service/authentication/strategies.js.html +0 -929
  24. package/coverage/plugin-auth/api/service/authorization/index.html +0 -141
  25. package/coverage/plugin-auth/api/service/authorization/node.js.html +0 -944
  26. package/coverage/plugin-auth/api/service/authorization/policy-generator.js.html +0 -386
  27. package/coverage/plugin-auth/api/service/authorization/tree.js.html +0 -983
  28. package/coverage/plugin-auth/config/auth.js.html +0 -140
  29. package/coverage/plugin-auth/config/index.html +0 -111
  30. package/coverage/plugin-auth/index.html +0 -111
  31. package/coverage/plugin-auth/index.js.html +0 -383
  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 -170
  36. package/docs/.vuepress/config.js +0 -55
  37. package/docs/.vuepress/styles/palette.styl +0 -4
  38. package/docs/api/config.md +0 -180
  39. package/docs/api/controller/readme.md +0 -10
  40. package/docs/api/controller/user.md +0 -44
  41. package/docs/api/model/authorization-rule.md +0 -38
  42. package/docs/api/model/readme.md +0 -13
  43. package/docs/api/model/role.md +0 -22
  44. package/docs/api/model/user-to-role.md +0 -26
  45. package/docs/api/model/user.md +0 -50
  46. package/docs/api/policy/authentication.md +0 -44
  47. package/docs/api/policy/authorization.md +0 -27
  48. package/docs/api/policy/readme.md +0 -12
  49. package/docs/api/policy/user.md +0 -22
  50. package/docs/api/readme.md +0 -52
  51. package/docs/api/routing.md +0 -101
  52. package/docs/api/service/auth-manager.md +0 -86
  53. package/docs/api/service/authentication-passport.md +0 -21
  54. package/docs/api/service/authentication-strategies.md +0 -22
  55. package/docs/api/service/authorization-node.md +0 -102
  56. package/docs/api/service/authorization-policy-generator.md +0 -66
  57. package/docs/api/service/authorization-tree.md +0 -123
  58. package/docs/api/service/readme.md +0 -15
  59. package/docs/guides/getting-started.md +0 -69
  60. package/docs/guides/idp-login.png +0 -0
  61. package/docs/guides/idp-saml-cert.png +0 -0
  62. package/docs/guides/openid-connect.md +0 -164
  63. package/docs/guides/readme.md +0 -12
  64. package/docs/guides/saml.md +0 -161
  65. package/docs/introduction.md +0 -78
  66. package/docs/readme.md +0 -11
@@ -1,959 +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
- </div>
58
- <div class='status-line high'></div>
59
- <pre><table class="coverage">
60
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
- <a name='L2'></a><a href='#L2'>2</a>
62
- <a name='L3'></a><a href='#L3'>3</a>
63
- <a name='L4'></a><a href='#L4'>4</a>
64
- <a name='L5'></a><a href='#L5'>5</a>
65
- <a name='L6'></a><a href='#L6'>6</a>
66
- <a name='L7'></a><a href='#L7'>7</a>
67
- <a name='L8'></a><a href='#L8'>8</a>
68
- <a name='L9'></a><a href='#L9'>9</a>
69
- <a name='L10'></a><a href='#L10'>10</a>
70
- <a name='L11'></a><a href='#L11'>11</a>
71
- <a name='L12'></a><a href='#L12'>12</a>
72
- <a name='L13'></a><a href='#L13'>13</a>
73
- <a name='L14'></a><a href='#L14'>14</a>
74
- <a name='L15'></a><a href='#L15'>15</a>
75
- <a name='L16'></a><a href='#L16'>16</a>
76
- <a name='L17'></a><a href='#L17'>17</a>
77
- <a name='L18'></a><a href='#L18'>18</a>
78
- <a name='L19'></a><a href='#L19'>19</a>
79
- <a name='L20'></a><a href='#L20'>20</a>
80
- <a name='L21'></a><a href='#L21'>21</a>
81
- <a name='L22'></a><a href='#L22'>22</a>
82
- <a name='L23'></a><a href='#L23'>23</a>
83
- <a name='L24'></a><a href='#L24'>24</a>
84
- <a name='L25'></a><a href='#L25'>25</a>
85
- <a name='L26'></a><a href='#L26'>26</a>
86
- <a name='L27'></a><a href='#L27'>27</a>
87
- <a name='L28'></a><a href='#L28'>28</a>
88
- <a name='L29'></a><a href='#L29'>29</a>
89
- <a name='L30'></a><a href='#L30'>30</a>
90
- <a name='L31'></a><a href='#L31'>31</a>
91
- <a name='L32'></a><a href='#L32'>32</a>
92
- <a name='L33'></a><a href='#L33'>33</a>
93
- <a name='L34'></a><a href='#L34'>34</a>
94
- <a name='L35'></a><a href='#L35'>35</a>
95
- <a name='L36'></a><a href='#L36'>36</a>
96
- <a name='L37'></a><a href='#L37'>37</a>
97
- <a name='L38'></a><a href='#L38'>38</a>
98
- <a name='L39'></a><a href='#L39'>39</a>
99
- <a name='L40'></a><a href='#L40'>40</a>
100
- <a name='L41'></a><a href='#L41'>41</a>
101
- <a name='L42'></a><a href='#L42'>42</a>
102
- <a name='L43'></a><a href='#L43'>43</a>
103
- <a name='L44'></a><a href='#L44'>44</a>
104
- <a name='L45'></a><a href='#L45'>45</a>
105
- <a name='L46'></a><a href='#L46'>46</a>
106
- <a name='L47'></a><a href='#L47'>47</a>
107
- <a name='L48'></a><a href='#L48'>48</a>
108
- <a name='L49'></a><a href='#L49'>49</a>
109
- <a name='L50'></a><a href='#L50'>50</a>
110
- <a name='L51'></a><a href='#L51'>51</a>
111
- <a name='L52'></a><a href='#L52'>52</a>
112
- <a name='L53'></a><a href='#L53'>53</a>
113
- <a name='L54'></a><a href='#L54'>54</a>
114
- <a name='L55'></a><a href='#L55'>55</a>
115
- <a name='L56'></a><a href='#L56'>56</a>
116
- <a name='L57'></a><a href='#L57'>57</a>
117
- <a name='L58'></a><a href='#L58'>58</a>
118
- <a name='L59'></a><a href='#L59'>59</a>
119
- <a name='L60'></a><a href='#L60'>60</a>
120
- <a name='L61'></a><a href='#L61'>61</a>
121
- <a name='L62'></a><a href='#L62'>62</a>
122
- <a name='L63'></a><a href='#L63'>63</a>
123
- <a name='L64'></a><a href='#L64'>64</a>
124
- <a name='L65'></a><a href='#L65'>65</a>
125
- <a name='L66'></a><a href='#L66'>66</a>
126
- <a name='L67'></a><a href='#L67'>67</a>
127
- <a name='L68'></a><a href='#L68'>68</a>
128
- <a name='L69'></a><a href='#L69'>69</a>
129
- <a name='L70'></a><a href='#L70'>70</a>
130
- <a name='L71'></a><a href='#L71'>71</a>
131
- <a name='L72'></a><a href='#L72'>72</a>
132
- <a name='L73'></a><a href='#L73'>73</a>
133
- <a name='L74'></a><a href='#L74'>74</a>
134
- <a name='L75'></a><a href='#L75'>75</a>
135
- <a name='L76'></a><a href='#L76'>76</a>
136
- <a name='L77'></a><a href='#L77'>77</a>
137
- <a name='L78'></a><a href='#L78'>78</a>
138
- <a name='L79'></a><a href='#L79'>79</a>
139
- <a name='L80'></a><a href='#L80'>80</a>
140
- <a name='L81'></a><a href='#L81'>81</a>
141
- <a name='L82'></a><a href='#L82'>82</a>
142
- <a name='L83'></a><a href='#L83'>83</a>
143
- <a name='L84'></a><a href='#L84'>84</a>
144
- <a name='L85'></a><a href='#L85'>85</a>
145
- <a name='L86'></a><a href='#L86'>86</a>
146
- <a name='L87'></a><a href='#L87'>87</a>
147
- <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a>
149
- <a name='L90'></a><a href='#L90'>90</a>
150
- <a name='L91'></a><a href='#L91'>91</a>
151
- <a name='L92'></a><a href='#L92'>92</a>
152
- <a name='L93'></a><a href='#L93'>93</a>
153
- <a name='L94'></a><a href='#L94'>94</a>
154
- <a name='L95'></a><a href='#L95'>95</a>
155
- <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a>
157
- <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a>
159
- <a name='L100'></a><a href='#L100'>100</a>
160
- <a name='L101'></a><a href='#L101'>101</a>
161
- <a name='L102'></a><a href='#L102'>102</a>
162
- <a name='L103'></a><a href='#L103'>103</a>
163
- <a name='L104'></a><a href='#L104'>104</a>
164
- <a name='L105'></a><a href='#L105'>105</a>
165
- <a name='L106'></a><a href='#L106'>106</a>
166
- <a name='L107'></a><a href='#L107'>107</a>
167
- <a name='L108'></a><a href='#L108'>108</a>
168
- <a name='L109'></a><a href='#L109'>109</a>
169
- <a name='L110'></a><a href='#L110'>110</a>
170
- <a name='L111'></a><a href='#L111'>111</a>
171
- <a name='L112'></a><a href='#L112'>112</a>
172
- <a name='L113'></a><a href='#L113'>113</a>
173
- <a name='L114'></a><a href='#L114'>114</a>
174
- <a name='L115'></a><a href='#L115'>115</a>
175
- <a name='L116'></a><a href='#L116'>116</a>
176
- <a name='L117'></a><a href='#L117'>117</a>
177
- <a name='L118'></a><a href='#L118'>118</a>
178
- <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a>
180
- <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a>
182
- <a name='L123'></a><a href='#L123'>123</a>
183
- <a name='L124'></a><a href='#L124'>124</a>
184
- <a name='L125'></a><a href='#L125'>125</a>
185
- <a name='L126'></a><a href='#L126'>126</a>
186
- <a name='L127'></a><a href='#L127'>127</a>
187
- <a name='L128'></a><a href='#L128'>128</a>
188
- <a name='L129'></a><a href='#L129'>129</a>
189
- <a name='L130'></a><a href='#L130'>130</a>
190
- <a name='L131'></a><a href='#L131'>131</a>
191
- <a name='L132'></a><a href='#L132'>132</a>
192
- <a name='L133'></a><a href='#L133'>133</a>
193
- <a name='L134'></a><a href='#L134'>134</a>
194
- <a name='L135'></a><a href='#L135'>135</a>
195
- <a name='L136'></a><a href='#L136'>136</a>
196
- <a name='L137'></a><a href='#L137'>137</a>
197
- <a name='L138'></a><a href='#L138'>138</a>
198
- <a name='L139'></a><a href='#L139'>139</a>
199
- <a name='L140'></a><a href='#L140'>140</a>
200
- <a name='L141'></a><a href='#L141'>141</a>
201
- <a name='L142'></a><a href='#L142'>142</a>
202
- <a name='L143'></a><a href='#L143'>143</a>
203
- <a name='L144'></a><a href='#L144'>144</a>
204
- <a name='L145'></a><a href='#L145'>145</a>
205
- <a name='L146'></a><a href='#L146'>146</a>
206
- <a name='L147'></a><a href='#L147'>147</a>
207
- <a name='L148'></a><a href='#L148'>148</a>
208
- <a name='L149'></a><a href='#L149'>149</a>
209
- <a name='L150'></a><a href='#L150'>150</a>
210
- <a name='L151'></a><a href='#L151'>151</a>
211
- <a name='L152'></a><a href='#L152'>152</a>
212
- <a name='L153'></a><a href='#L153'>153</a>
213
- <a name='L154'></a><a href='#L154'>154</a>
214
- <a name='L155'></a><a href='#L155'>155</a>
215
- <a name='L156'></a><a href='#L156'>156</a>
216
- <a name='L157'></a><a href='#L157'>157</a>
217
- <a name='L158'></a><a href='#L158'>158</a>
218
- <a name='L159'></a><a href='#L159'>159</a>
219
- <a name='L160'></a><a href='#L160'>160</a>
220
- <a name='L161'></a><a href='#L161'>161</a>
221
- <a name='L162'></a><a href='#L162'>162</a>
222
- <a name='L163'></a><a href='#L163'>163</a>
223
- <a name='L164'></a><a href='#L164'>164</a>
224
- <a name='L165'></a><a href='#L165'>165</a>
225
- <a name='L166'></a><a href='#L166'>166</a>
226
- <a name='L167'></a><a href='#L167'>167</a>
227
- <a name='L168'></a><a href='#L168'>168</a>
228
- <a name='L169'></a><a href='#L169'>169</a>
229
- <a name='L170'></a><a href='#L170'>170</a>
230
- <a name='L171'></a><a href='#L171'>171</a>
231
- <a name='L172'></a><a href='#L172'>172</a>
232
- <a name='L173'></a><a href='#L173'>173</a>
233
- <a name='L174'></a><a href='#L174'>174</a>
234
- <a name='L175'></a><a href='#L175'>175</a>
235
- <a name='L176'></a><a href='#L176'>176</a>
236
- <a name='L177'></a><a href='#L177'>177</a>
237
- <a name='L178'></a><a href='#L178'>178</a>
238
- <a name='L179'></a><a href='#L179'>179</a>
239
- <a name='L180'></a><a href='#L180'>180</a>
240
- <a name='L181'></a><a href='#L181'>181</a>
241
- <a name='L182'></a><a href='#L182'>182</a>
242
- <a name='L183'></a><a href='#L183'>183</a>
243
- <a name='L184'></a><a href='#L184'>184</a>
244
- <a name='L185'></a><a href='#L185'>185</a>
245
- <a name='L186'></a><a href='#L186'>186</a>
246
- <a name='L187'></a><a href='#L187'>187</a>
247
- <a name='L188'></a><a href='#L188'>188</a>
248
- <a name='L189'></a><a href='#L189'>189</a>
249
- <a name='L190'></a><a href='#L190'>190</a>
250
- <a name='L191'></a><a href='#L191'>191</a>
251
- <a name='L192'></a><a href='#L192'>192</a>
252
- <a name='L193'></a><a href='#L193'>193</a>
253
- <a name='L194'></a><a href='#L194'>194</a>
254
- <a name='L195'></a><a href='#L195'>195</a>
255
- <a name='L196'></a><a href='#L196'>196</a>
256
- <a name='L197'></a><a href='#L197'>197</a>
257
- <a name='L198'></a><a href='#L198'>198</a>
258
- <a name='L199'></a><a href='#L199'>199</a>
259
- <a name='L200'></a><a href='#L200'>200</a>
260
- <a name='L201'></a><a href='#L201'>201</a>
261
- <a name='L202'></a><a href='#L202'>202</a>
262
- <a name='L203'></a><a href='#L203'>203</a>
263
- <a name='L204'></a><a href='#L204'>204</a>
264
- <a name='L205'></a><a href='#L205'>205</a>
265
- <a name='L206'></a><a href='#L206'>206</a>
266
- <a name='L207'></a><a href='#L207'>207</a>
267
- <a name='L208'></a><a href='#L208'>208</a>
268
- <a name='L209'></a><a href='#L209'>209</a>
269
- <a name='L210'></a><a href='#L210'>210</a>
270
- <a name='L211'></a><a href='#L211'>211</a>
271
- <a name='L212'></a><a href='#L212'>212</a>
272
- <a name='L213'></a><a href='#L213'>213</a>
273
- <a name='L214'></a><a href='#L214'>214</a>
274
- <a name='L215'></a><a href='#L215'>215</a>
275
- <a name='L216'></a><a href='#L216'>216</a>
276
- <a name='L217'></a><a href='#L217'>217</a>
277
- <a name='L218'></a><a href='#L218'>218</a>
278
- <a name='L219'></a><a href='#L219'>219</a>
279
- <a name='L220'></a><a href='#L220'>220</a>
280
- <a name='L221'></a><a href='#L221'>221</a>
281
- <a name='L222'></a><a href='#L222'>222</a>
282
- <a name='L223'></a><a href='#L223'>223</a>
283
- <a name='L224'></a><a href='#L224'>224</a>
284
- <a name='L225'></a><a href='#L225'>225</a>
285
- <a name='L226'></a><a href='#L226'>226</a>
286
- <a name='L227'></a><a href='#L227'>227</a>
287
- <a name='L228'></a><a href='#L228'>228</a>
288
- <a name='L229'></a><a href='#L229'>229</a>
289
- <a name='L230'></a><a href='#L230'>230</a>
290
- <a name='L231'></a><a href='#L231'>231</a>
291
- <a name='L232'></a><a href='#L232'>232</a>
292
- <a name='L233'></a><a href='#L233'>233</a>
293
- <a name='L234'></a><a href='#L234'>234</a>
294
- <a name='L235'></a><a href='#L235'>235</a>
295
- <a name='L236'></a><a href='#L236'>236</a>
296
- <a name='L237'></a><a href='#L237'>237</a>
297
- <a name='L238'></a><a href='#L238'>238</a>
298
- <a name='L239'></a><a href='#L239'>239</a>
299
- <a name='L240'></a><a href='#L240'>240</a>
300
- <a name='L241'></a><a href='#L241'>241</a>
301
- <a name='L242'></a><a href='#L242'>242</a>
302
- <a name='L243'></a><a href='#L243'>243</a>
303
- <a name='L244'></a><a href='#L244'>244</a>
304
- <a name='L245'></a><a href='#L245'>245</a>
305
- <a name='L246'></a><a href='#L246'>246</a>
306
- <a name='L247'></a><a href='#L247'>247</a>
307
- <a name='L248'></a><a href='#L248'>248</a>
308
- <a name='L249'></a><a href='#L249'>249</a>
309
- <a name='L250'></a><a href='#L250'>250</a>
310
- <a name='L251'></a><a href='#L251'>251</a>
311
- <a name='L252'></a><a href='#L252'>252</a>
312
- <a name='L253'></a><a href='#L253'>253</a>
313
- <a name='L254'></a><a href='#L254'>254</a>
314
- <a name='L255'></a><a href='#L255'>255</a>
315
- <a name='L256'></a><a href='#L256'>256</a>
316
- <a name='L257'></a><a href='#L257'>257</a>
317
- <a name='L258'></a><a href='#L258'>258</a>
318
- <a name='L259'></a><a href='#L259'>259</a>
319
- <a name='L260'></a><a href='#L260'>260</a>
320
- <a name='L261'></a><a href='#L261'>261</a>
321
- <a name='L262'></a><a href='#L262'>262</a>
322
- <a name='L263'></a><a href='#L263'>263</a>
323
- <a name='L264'></a><a href='#L264'>264</a>
324
- <a name='L265'></a><a href='#L265'>265</a>
325
- <a name='L266'></a><a href='#L266'>266</a>
326
- <a name='L267'></a><a href='#L267'>267</a>
327
- <a name='L268'></a><a href='#L268'>268</a>
328
- <a name='L269'></a><a href='#L269'>269</a>
329
- <a name='L270'></a><a href='#L270'>270</a>
330
- <a name='L271'></a><a href='#L271'>271</a>
331
- <a name='L272'></a><a href='#L272'>272</a>
332
- <a name='L273'></a><a href='#L273'>273</a>
333
- <a name='L274'></a><a href='#L274'>274</a>
334
- <a name='L275'></a><a href='#L275'>275</a>
335
- <a name='L276'></a><a href='#L276'>276</a>
336
- <a name='L277'></a><a href='#L277'>277</a>
337
- <a name='L278'></a><a href='#L278'>278</a>
338
- <a name='L279'></a><a href='#L279'>279</a>
339
- <a name='L280'></a><a href='#L280'>280</a>
340
- <a name='L281'></a><a href='#L281'>281</a>
341
- <a name='L282'></a><a href='#L282'>282</a>
342
- <a name='L283'></a><a href='#L283'>283</a>
343
- <a name='L284'></a><a href='#L284'>284</a>
344
- <a name='L285'></a><a href='#L285'>285</a>
345
- <a name='L286'></a><a href='#L286'>286</a>
346
- <a name='L287'></a><a href='#L287'>287</a>
347
- <a name='L288'></a><a href='#L288'>288</a>
348
- <a name='L289'></a><a href='#L289'>289</a>
349
- <a name='L290'></a><a href='#L290'>290</a>
350
- <a name='L291'></a><a href='#L291'>291</a>
351
- <a name='L292'></a><a href='#L292'>292</a>
352
- <a name='L293'></a><a href='#L293'>293</a>
353
- <a name='L294'></a><a href='#L294'>294</a></td><td class="line-coverage quiet"><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">19x</span>
357
- <span class="cline-any cline-yes">19x</span>
358
- <span class="cline-any cline-yes">19x</span>
359
- <span class="cline-any cline-yes">19x</span>
360
- <span class="cline-any cline-yes">19x</span>
361
- <span class="cline-any cline-yes">19x</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">109x</span>
375
- <span class="cline-any cline-no">&nbsp;</span>
376
- <span class="cline-any cline-no">&nbsp;</span>
377
- <span class="cline-any cline-yes">109x</span>
378
- <span class="cline-any cline-yes">109x</span>
379
- <span class="cline-any cline-yes">109x</span>
380
- <span class="cline-any cline-yes">31x</span>
381
- <span class="cline-any cline-yes">109x</span>
382
- <span class="cline-any cline-yes">31x</span>
383
- <span class="cline-any cline-yes">109x</span>
384
- <span class="cline-any cline-yes">95x</span>
385
- <span class="cline-any cline-yes">95x</span>
386
- <span class="cline-any cline-yes">14x</span>
387
- <span class="cline-any cline-yes">109x</span>
388
- <span class="cline-any cline-no">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
390
- <span class="cline-any cline-yes">14x</span>
391
- <span class="cline-any cline-yes">109x</span>
392
- <span class="cline-any cline-yes">4x</span>
393
- <span class="cline-any cline-yes">4x</span>
394
- <span class="cline-any cline-yes">10x</span>
395
- <span class="cline-any cline-yes">10x</span>
396
- <span class="cline-any cline-yes">10x</span>
397
- <span class="cline-any cline-yes">109x</span>
398
- <span class="cline-any cline-yes">109x</span>
399
- <span class="cline-any cline-yes">109x</span>
400
- <span class="cline-any cline-yes">109x</span>
401
- <span class="cline-any cline-yes">19x</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">123x</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
413
- <span class="cline-any cline-no">&nbsp;</span>
414
- <span class="cline-any cline-yes">123x</span>
415
- <span class="cline-any cline-yes">123x</span>
416
- <span class="cline-any cline-yes">123x</span>
417
- <span class="cline-any cline-yes">123x</span>
418
- <span class="cline-any cline-yes">75x</span>
419
- <span class="cline-any cline-yes">75x</span>
420
- <span class="cline-any cline-yes">75x</span>
421
- <span class="cline-any cline-yes">2x</span>
422
- <span class="cline-any cline-yes">2x</span>
423
- <span class="cline-any cline-yes">75x</span>
424
- <span class="cline-any cline-yes">121x</span>
425
- <span class="cline-any cline-yes">123x</span>
426
- <span class="cline-any cline-yes">73x</span>
427
- <span class="cline-any cline-yes">123x</span>
428
- <span class="cline-any cline-yes">73x</span>
429
- <span class="cline-any cline-yes">123x</span>
430
- <span class="cline-any cline-yes">75x</span>
431
- <span class="cline-any cline-yes">75x</span>
432
- <span class="cline-any cline-yes">46x</span>
433
- <span class="cline-any cline-yes">123x</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-yes">46x</span>
437
- <span class="cline-any cline-yes">123x</span>
438
- <span class="cline-any cline-yes">2x</span>
439
- <span class="cline-any cline-yes">2x</span>
440
- <span class="cline-any cline-yes">44x</span>
441
- <span class="cline-any cline-yes">44x</span>
442
- <span class="cline-any cline-yes">44x</span>
443
- <span class="cline-any cline-yes">123x</span>
444
- <span class="cline-any cline-yes">123x</span>
445
- <span class="cline-any cline-yes">123x</span>
446
- <span class="cline-any cline-yes">123x</span>
447
- <span class="cline-any cline-yes">19x</span>
448
- <span class="cline-any cline-yes">19x</span>
449
- <span class="cline-any cline-yes">19x</span>
450
- <span class="cline-any cline-yes">19x</span>
451
- <span class="cline-any cline-yes">19x</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">49x</span>
458
- <span class="cline-any cline-yes">49x</span>
459
- <span class="cline-any cline-yes">49x</span>
460
- <span class="cline-any cline-yes">49x</span>
461
- <span class="cline-any cline-yes">49x</span>
462
- <span class="cline-any cline-yes">49x</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">38x</span>
466
- <span class="cline-any cline-yes">38x</span>
467
- <span class="cline-any cline-yes">38x</span>
468
- <span class="cline-any cline-no">&nbsp;</span>
469
- <span class="cline-any cline-yes">38x</span>
470
- <span class="cline-any cline-yes">38x</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">49x</span>
474
- <span class="cline-any cline-yes">49x</span>
475
- <span class="cline-any cline-yes">49x</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">27x</span>
487
- <span class="cline-any cline-yes">26x</span>
488
- <span class="cline-any cline-yes">26x</span>
489
- <span class="cline-any cline-yes">26x</span>
490
- <span class="cline-any cline-yes">26x</span>
491
- <span class="cline-any cline-yes">26x</span>
492
- <span class="cline-any cline-yes">26x</span>
493
- <span class="cline-any cline-yes">27x</span>
494
- <span class="cline-any cline-yes">8x</span>
495
- <span class="cline-any cline-yes">8x</span>
496
- <span class="cline-any cline-yes">8x</span>
497
- <span class="cline-any cline-yes">2x</span>
498
- <span class="cline-any cline-yes">8x</span>
499
- <span class="cline-any cline-yes">6x</span>
500
- <span class="cline-any cline-yes">6x</span>
501
- <span class="cline-any cline-yes">8x</span>
502
- <span class="cline-any cline-yes">26x</span>
503
- <span class="cline-any cline-yes">27x</span>
504
- <span class="cline-any cline-yes">27x</span>
505
- <span class="cline-any cline-yes">19x</span>
506
- <span class="cline-any cline-yes">19x</span>
507
- <span class="cline-any cline-yes">19x</span>
508
- <span class="cline-any cline-yes">19x</span>
509
- <span class="cline-any cline-yes">19x</span>
510
- <span class="cline-any cline-yes">19x</span>
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">36x</span>
516
- <span class="cline-any cline-yes">35x</span>
517
- <span class="cline-any cline-yes">35x</span>
518
- <span class="cline-any cline-yes">35x</span>
519
- <span class="cline-any cline-yes">35x</span>
520
- <span class="cline-any cline-yes">35x</span>
521
- <span class="cline-any cline-yes">36x</span>
522
- <span class="cline-any cline-yes">2x</span>
523
- <span class="cline-any cline-yes">2x</span>
524
- <span class="cline-any cline-yes">2x</span>
525
- <span class="cline-any cline-yes">2x</span>
526
- <span class="cline-any cline-yes">33x</span>
527
- <span class="cline-any cline-yes">33x</span>
528
- <span class="cline-any cline-yes">33x</span>
529
- <span class="cline-any cline-yes">33x</span>
530
- <span class="cline-any cline-yes">33x</span>
531
- <span class="cline-any cline-yes">33x</span>
532
- <span class="cline-any cline-yes">36x</span>
533
- <span class="cline-any cline-yes">19x</span>
534
- <span class="cline-any cline-yes">19x</span>
535
- <span class="cline-any cline-yes">19x</span>
536
- <span class="cline-any cline-yes">19x</span>
537
- <span class="cline-any cline-yes">19x</span>
538
- <span class="cline-any cline-yes">19x</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">5x</span>
544
- <span class="cline-any cline-yes">4x</span>
545
- <span class="cline-any cline-yes">4x</span>
546
- <span class="cline-any cline-yes">4x</span>
547
- <span class="cline-any cline-yes">4x</span>
548
- <span class="cline-any cline-yes">4x</span>
549
- <span class="cline-any cline-yes">5x</span>
550
- <span class="cline-any cline-yes">2x</span>
551
- <span class="cline-any cline-yes">2x</span>
552
- <span class="cline-any cline-yes">2x</span>
553
- <span class="cline-any cline-yes">2x</span>
554
- <span class="cline-any cline-yes">2x</span>
555
- <span class="cline-any cline-yes">2x</span>
556
- <span class="cline-any cline-yes">4x</span>
557
- <span class="cline-any cline-yes">4x</span>
558
- <span class="cline-any cline-yes">5x</span>
559
- <span class="cline-any cline-yes">19x</span>
560
- <span class="cline-any cline-yes">19x</span>
561
- <span class="cline-any cline-yes">19x</span>
562
- <span class="cline-any cline-yes">19x</span>
563
- <span class="cline-any cline-yes">19x</span>
564
- <span class="cline-any cline-yes">19x</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">48x</span>
568
- <span class="cline-any cline-yes">48x</span>
569
- <span class="cline-any cline-yes">48x</span>
570
- <span class="cline-any cline-yes">48x</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">21x</span>
579
- <span class="cline-any cline-yes">21x</span>
580
- <span class="cline-any cline-yes">21x</span>
581
- <span class="cline-any cline-yes">21x</span>
582
- <span class="cline-any cline-yes">1x</span>
583
- <span class="cline-any cline-yes">1x</span>
584
- <span class="cline-any cline-yes">1x</span>
585
- <span class="cline-any cline-yes">1x</span>
586
- <span class="cline-any cline-yes">20x</span>
587
- <span class="cline-any cline-yes">20x</span>
588
- <span class="cline-any cline-yes">20x</span>
589
- <span class="cline-any cline-yes">20x</span>
590
- <span class="cline-any cline-yes">20x</span>
591
- <span class="cline-any cline-yes">21x</span>
592
- <span class="cline-any cline-yes">1x</span>
593
- <span class="cline-any cline-yes">21x</span>
594
- <span class="cline-any cline-yes">19x</span>
595
- <span class="cline-any cline-yes">19x</span>
596
- <span class="cline-any cline-yes">19x</span>
597
- <span class="cline-any cline-yes">19x</span>
598
- <span class="cline-any cline-yes">19x</span>
599
- <span class="cline-any cline-yes">19x</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">20x</span>
606
- <span class="cline-any cline-yes">20x</span>
607
- <span class="cline-any cline-yes">20x</span>
608
- <span class="cline-any cline-yes">20x</span>
609
- <span class="cline-any cline-yes">21x</span>
610
- <span class="cline-any cline-yes">19x</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">19x</span>
619
- <span class="cline-any cline-yes">19x</span>
620
- <span class="cline-any cline-yes">11x</span>
621
- <span class="cline-any cline-yes">11x</span>
622
- <span class="cline-any cline-yes">11x</span>
623
- <span class="cline-any cline-yes">11x</span>
624
- <span class="cline-any cline-yes">11x</span>
625
- <span class="cline-any cline-yes">11x</span>
626
- <span class="cline-any cline-no">&nbsp;</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-yes">10x</span>
633
- <span class="cline-any cline-yes">10x</span>
634
- <span class="cline-any cline-yes">1x</span>
635
- <span class="cline-any cline-yes">1x</span>
636
- <span class="cline-any cline-yes">1x</span>
637
- <span class="cline-any cline-yes">11x</span>
638
- <span class="cline-any cline-yes">11x</span>
639
- <span class="cline-any cline-no">&nbsp;</span>
640
- <span class="cline-any cline-yes">11x</span>
641
- <span class="cline-any cline-yes">11x</span>
642
- <span class="cline-any cline-yes">19x</span>
643
- <span class="cline-any cline-yes">19x</span>
644
- <span class="cline-any cline-yes">19x</span>
645
- <span class="cline-any cline-yes">1x</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
647
- &nbsp;
648
- module.exports = function() {
649
- const api = this;
650
- const { models, services } = api.runtime;
651
- &nbsp;
652
- const logDebug = api.log( "hitchy:plugin:auth:debug" );
653
- &nbsp;
654
- /**
655
- * Implements several helper methods meant to simplify user/role management.
656
- */
657
- class AuthManager {
658
- /**
659
- * Qualifies selected user by means of loading or creating it when
660
- * providing a user's name, only.
661
- *
662
- * @param {string|Hitchy.Plugin.Auth.User} user a user's name or model instance
663
- * @param {boolean} createIfMissing set true to create any missing user
664
- * @returns {Promise&lt;Hitchy.Plugin.Auth.User&gt;} promises selected user properly set up in database
665
- */
666
- static async asUser( user, createIfMissing = false ) {
667
- if ( !user ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
668
- <span class="cstat-no" title="statement not covered" > throw new TypeError( "missing user information" );</span>
669
- <span class="cstat-no" title="statement not covered" > }</span>
670
- &nbsp;
671
- const { User } = models;
672
- const users = user instanceof User ? [user] : await User.find( {
673
- eq: { name: "name", value: user.name || user },
674
- } );
675
- &nbsp;
676
- if ( users.length === 1 ) {
677
- return users[0];
678
- }
679
- &nbsp;
680
- if ( users.length &gt; 1 ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
681
- <span class="cstat-no" title="statement not covered" > throw new Error( "selecting user did not yield unique match" );</span>
682
- <span class="cstat-no" title="statement not covered" > }</span>
683
- &nbsp;
684
- if ( !createIfMissing ) {
685
- throw new Error( "selecting user did not yield any match" );
686
- }
687
- &nbsp;
688
- const newUser = new User();
689
- &nbsp;
690
- newUser.name = user.name || user;
691
- &nbsp;
692
- return await newUser.save();
693
- }
694
- &nbsp;
695
- /**
696
- * Qualifies selected role by means of loading or creating it when
697
- * providing a role's name, only.
698
- *
699
- * @param {string|Hitchy.Plugin.Auth.Role} role a role's name or model instance
700
- * @param {boolean} createIfMissing set true to create any missing user
701
- * @returns {Promise&lt;Hitchy.Plugin.Auth.Role&gt;} promises selected role properly set up in database
702
- */
703
- static async asRole( role, createIfMissing = false ) {
704
- if ( !role ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
705
- <span class="cstat-no" title="statement not covered" > throw new TypeError( "missing role information" );</span>
706
- <span class="cstat-no" title="statement not covered" > }</span>
707
- &nbsp;
708
- const { Role } = models;
709
- &nbsp;
710
- if ( !( role instanceof Role ) ) {
711
- role = String( role ); // eslint-disable-line no-param-reassign
712
- &nbsp;
713
- if ( !/^[a-z_]/i.test( role ) || /\s/.test( role ) ) {
714
- throw new TypeError( "missing role information" );
715
- }
716
- }
717
- &nbsp;
718
- const roles = role instanceof Role ? [role] : await Role.find( {
719
- eq: { name: "name", value: role.name || role },
720
- } );
721
- &nbsp;
722
- if ( roles.length === 1 ) {
723
- return roles[0];
724
- }
725
- &nbsp;
726
- if ( roles.length &gt; 1 ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
727
- <span class="cstat-no" title="statement not covered" > throw new Error( "selecting role did not yield unique match" );</span>
728
- <span class="cstat-no" title="statement not covered" > }</span>
729
- &nbsp;
730
- if ( !createIfMissing ) {
731
- throw new Error( "selecting role did not yield any match" );
732
- }
733
- &nbsp;
734
- const newRole = new Role();
735
- &nbsp;
736
- newRole.name = role.name || role;
737
- &nbsp;
738
- return await newRole.save();
739
- }
740
- &nbsp;
741
- /**
742
- * Fetches list of provided user's roles.
743
- *
744
- * @param {string|Hitchy.Plugin.Auth.User} user user to assign role to (given by instance or by its name)
745
- * @param {boolean} createIfMissing set true to create any missing user
746
- * @param {boolean} uuidsOnly true to prevent associated users' instances being loaded
747
- * @returns {Promise&lt;Role[]&gt;} promises list of (unloaded) roles assigned to selected user
748
- */
749
- static async listRolesOfUser( user, createIfMissing = false, uuidsOnly = false ) {
750
- const { $uuid: userUuid } = await this.asUser( user, createIfMissing );
751
- const { Role, UserToRole } = models;
752
- &nbsp;
753
- const associations = await UserToRole.find( { eq: { name: "user", value: userUuid } } );
754
- const numAssociations = associations.length;
755
- const roles = new Array( numAssociations );
756
- &nbsp;
757
- for ( let i = 0; i &lt; numAssociations; i++ ) {
758
- const { role: roleUuid } = associations[i];
759
- &nbsp;
760
- if ( uuidsOnly ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
761
- <span class="cstat-no" title="statement not covered" > roles[i] = new Role( roleUuid );</span>
762
- } else {
763
- roles[i] = new Role( roleUuid ).load();
764
- }
765
- }
766
- &nbsp;
767
- return uuidsOnly <span class="branch-0 cbranch-no" title="branch not covered" >? roles </span>: Promise.all( roles );
768
- }
769
- &nbsp;
770
- /**
771
- * Searches local database for user's with a role selected by its name.
772
- *
773
- * @param {string|Hitchy.Plugin.Auth.Role} role name of role to search for or that role's instance
774
- * @param {boolean} createIfMissing set true to create any missing role
775
- * @param {boolean} uuidsOnly true to prevent associated users' instances being loaded
776
- * @returns {Promise&lt;User[]&gt;} promises list of users with selected role
777
- */
778
- static async listUsersOfRole( role, createIfMissing = false, uuidsOnly = false ) {
779
- const { $uuid: roleUuid } = await this.asRole( role, createIfMissing );
780
- const { User, UserToRole } = models;
781
- &nbsp;
782
- const associations = await UserToRole.find( { eq: { name: "role", value: roleUuid } } );
783
- const numAssociations = associations.length;
784
- const users = new Array( numAssociations );
785
- &nbsp;
786
- for ( let i = 0; i &lt; numAssociations; i++ ) {
787
- const { user: userUuid } = associations[i];
788
- &nbsp;
789
- if ( uuidsOnly ) {
790
- users[i] = new User( userUuid );
791
- } else {
792
- users[i] = new User( userUuid ).load();
793
- }
794
- }
795
- &nbsp;
796
- return uuidsOnly ? users : Promise.all( users );
797
- }
798
- &nbsp;
799
- /**
800
- * Assigns selected role to selected user.
801
- *
802
- * @param {string|Hitchy.Plugin.Auth.Role} role role to assign user to (given by instance or by its name)
803
- * @param {string|Hitchy.Plugin.Auth.User} user user to assign role to (given by instance or by its name)
804
- * @param {boolean} createIfMissing set true to create any missing user/role
805
- * @returns {Promise&lt;void&gt;} promises role assigned to user
806
- */
807
- static async grantRoleToUser( role, user, createIfMissing = false ) {
808
- const { $uuid: userUuid } = await this.asUser( user, createIfMissing );
809
- const { $uuid: roleUuid } = await this.asRole( role, createIfMissing );
810
- &nbsp;
811
- const matches = await models.UserToRole.find( { eq: { name: "user", value: userUuid } } );
812
- const numMatches = matches.length;
813
- &nbsp;
814
- for ( let i = 0; i &lt; numMatches; i++ ) {
815
- if ( matches[i].role.equals( roleUuid ) ) {
816
- return;
817
- }
818
- }
819
- &nbsp;
820
- const association = new models.UserToRole();
821
- association.user = userUuid;
822
- association.role = roleUuid;
823
- &nbsp;
824
- await association.save();
825
- }
826
- &nbsp;
827
- /**
828
- * Drops assignment of selected role and selected user.
829
- *
830
- * @param {string|Hitchy.Plugin.Auth.Role} role role to assign user to (given by instance or by its name)
831
- * @param {string|Hitchy.Plugin.Auth.User} user user to assign role to (given by instance or by its name)
832
- * @param {boolean} createIfMissing set true to create any missing user/role
833
- * @returns {Promise&lt;void&gt;} promises role assigned to user
834
- */
835
- static async revokeRoleFromUser( role, user, createIfMissing = false ) {
836
- const { $uuid: userUuid } = await this.asUser( user, createIfMissing );
837
- const { $uuid: roleUuid } = await this.asRole( role, createIfMissing );
838
- &nbsp;
839
- const associations = await models.UserToRole.find( { eq: { name: "user", value: userUuid } } );
840
- const promises = [];
841
- &nbsp;
842
- for ( let i = 0, count = associations.length; i &lt; count; i++ ) {
843
- const association = associations[i];
844
- &nbsp;
845
- if ( association.role.equals( roleUuid ) ) {
846
- promises.push( association.remove() );
847
- }
848
- }
849
- &nbsp;
850
- return Promise.all( promises );
851
- }
852
- &nbsp;
853
- /**
854
- * Provides configurable name of role implicitly granting full access to
855
- * its associated users.
856
- *
857
- * @returns {string} configured name of role
858
- */
859
- static get adminRole() {
860
- const config = api.config.auth.admin;
861
- &nbsp;
862
- return process.env.HITCHY_ADMIN_ROLE || ( config ? config.role : "" ) || "admin";
863
- }
864
- &nbsp;
865
- /**
866
- * Creates user with admin role if missing in database.
867
- *
868
- * @returns {Promise&lt;Hitchy.Plugin.Auth.User[]&gt;} promises list of eventually existing users with admin role
869
- */
870
- static async createAdminUserIfMissing() {
871
- const role = await this.asRole( this.adminRole, true );
872
- const users = await this.listUsersOfRole( role );
873
- &nbsp;
874
- if ( users.length &gt; 0 ) {
875
- logDebug( "admin user found" );
876
- &nbsp;
877
- return users;
878
- }
879
- &nbsp;
880
- &nbsp;
881
- const existingAdmins = await models.User.find( { eq: { name: "admin" } } );
882
- let user;
883
- &nbsp;
884
- if ( existingAdmins.length &gt; 0 ) {
885
- user = existingAdmins[0];
886
- } else {
887
- const config = api.config.auth.admin;
888
- &nbsp;
889
- logDebug( "creating admin user" );
890
- &nbsp;
891
- user = new models.User();
892
- &nbsp;
893
- user.name = process.env.HITCHY_ADMIN_NAME || ( config ? config.name : "" ) || "admin";
894
- &nbsp;
895
- await user.setPassword( process.env.HITCHY_ADMIN_PASSWORD || ( config ? config.password : "" ) || "nimda" );
896
- await user.save();
897
- }
898
- &nbsp;
899
- await this.grantRoleToUser( role, user );
900
- &nbsp;
901
- return [user];
902
- }
903
- &nbsp;
904
- /**
905
- * Checks if named user can be authenticated locally using provided
906
- * password.
907
- *
908
- * @param {string} username name of user to authenticate
909
- * @param {string} password password of named to user
910
- * @return {Promise&lt;User&gt;} promises successfully authenticated user
911
- */
912
- static async checkAuthentication( username, password ) {
913
- const candidates = ( await models.User
914
- .find( { eq: { name: username } }, {}, { loadRecords: true } ) )
915
- .filter( user =&gt; !user.strategy <span class="branch-0 cbranch-no" title="branch not covered" >|| user.strategy === "local" </span>);
916
- &nbsp;
917
- switch ( candidates.length ) {
918
- <span class="branch-0 cbranch-no" title="branch not covered" > case 0 :</span>
919
- <span class="cstat-no" title="statement not covered" > throw new services.HttpException( 400, `no such local user: ${username}` );</span>
920
- &nbsp;
921
- case 1 : {
922
- const [user] = candidates;
923
- &nbsp;
924
- if ( await user.verifyPassword( password ) ) {
925
- return user;
926
- }
927
- &nbsp;
928
- throw new services.HttpException( 403, "invalid password" );
929
- }
930
- &nbsp;
931
- <span class="branch-0 cbranch-no" title="branch not covered" > default :</span>
932
- <span class="cstat-no" title="statement not covered" > throw new services.HttpException( 400, "ambiguous username" );</span>
933
- }
934
- }
935
- }
936
- &nbsp;
937
- return AuthManager;
938
- };
939
- &nbsp;</pre></td></tr></table></pre>
940
-
941
- <div class='push'></div><!-- for sticky footer -->
942
- </div><!-- /wrapper -->
943
- <div class='footer quiet pad2 space-top1 center small'>
944
- Code coverage generated by
945
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
946
- at Mon Mar 28 2022 22:26:49 GMT+0200 (Mitteleuropäische Sommerzeit)
947
- </div>
948
- </div>
949
- <script src="../../../../prettify.js"></script>
950
- <script>
951
- window.onload = function () {
952
- prettyPrint();
953
- };
954
- </script>
955
- <script src="../../../../sorter.js"></script>
956
- <script src="../../../../block-navigation.js"></script>
957
- </body>
958
- </html>
959
-