@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.
- package/package.json +11 -11
- package/.gitlab-ci.yml +0 -69
- package/coverage/base.css +0 -224
- package/coverage/block-navigation.js +0 -79
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +0 -231
- package/coverage/plugin-auth/api/controller/index.html +0 -111
- package/coverage/plugin-auth/api/controller/user.js.html +0 -368
- package/coverage/plugin-auth/api/model/authorization/index.html +0 -111
- package/coverage/plugin-auth/api/model/authorization/rule.js.html +0 -227
- package/coverage/plugin-auth/api/model/index.html +0 -141
- package/coverage/plugin-auth/api/model/role.js.html +0 -200
- package/coverage/plugin-auth/api/model/user-to-role.js.html +0 -167
- package/coverage/plugin-auth/api/model/user.js.html +0 -752
- package/coverage/plugin-auth/api/policy/authentication.js.html +0 -779
- package/coverage/plugin-auth/api/policy/authorization.js.html +0 -182
- package/coverage/plugin-auth/api/policy/index.html +0 -141
- package/coverage/plugin-auth/api/policy/user.js.html +0 -479
- package/coverage/plugin-auth/api/service/auth/index.html +0 -111
- package/coverage/plugin-auth/api/service/auth/manager.js.html +0 -959
- package/coverage/plugin-auth/api/service/authentication/index.html +0 -126
- package/coverage/plugin-auth/api/service/authentication/passport.js.html +0 -293
- package/coverage/plugin-auth/api/service/authentication/strategies.js.html +0 -929
- package/coverage/plugin-auth/api/service/authorization/index.html +0 -141
- package/coverage/plugin-auth/api/service/authorization/node.js.html +0 -944
- package/coverage/plugin-auth/api/service/authorization/policy-generator.js.html +0 -386
- package/coverage/plugin-auth/api/service/authorization/tree.js.html +0 -983
- package/coverage/plugin-auth/config/auth.js.html +0 -140
- package/coverage/plugin-auth/config/index.html +0 -111
- package/coverage/plugin-auth/index.html +0 -111
- package/coverage/plugin-auth/index.js.html +0 -383
- package/coverage/prettify.css +0 -1
- package/coverage/prettify.js +0 -2
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +0 -170
- package/docs/.vuepress/config.js +0 -55
- package/docs/.vuepress/styles/palette.styl +0 -4
- package/docs/api/config.md +0 -180
- package/docs/api/controller/readme.md +0 -10
- package/docs/api/controller/user.md +0 -44
- package/docs/api/model/authorization-rule.md +0 -38
- package/docs/api/model/readme.md +0 -13
- package/docs/api/model/role.md +0 -22
- package/docs/api/model/user-to-role.md +0 -26
- package/docs/api/model/user.md +0 -50
- package/docs/api/policy/authentication.md +0 -44
- package/docs/api/policy/authorization.md +0 -27
- package/docs/api/policy/readme.md +0 -12
- package/docs/api/policy/user.md +0 -22
- package/docs/api/readme.md +0 -52
- package/docs/api/routing.md +0 -101
- package/docs/api/service/auth-manager.md +0 -86
- package/docs/api/service/authentication-passport.md +0 -21
- package/docs/api/service/authentication-strategies.md +0 -22
- package/docs/api/service/authorization-node.md +0 -102
- package/docs/api/service/authorization-policy-generator.md +0 -66
- package/docs/api/service/authorization-tree.md +0 -123
- package/docs/api/service/readme.md +0 -15
- package/docs/guides/getting-started.md +0 -69
- package/docs/guides/idp-login.png +0 -0
- package/docs/guides/idp-saml-cert.png +0 -0
- package/docs/guides/openid-connect.md +0 -164
- package/docs/guides/readme.md +0 -12
- package/docs/guides/saml.md +0 -161
- package/docs/introduction.md +0 -78
- package/docs/readme.md +0 -11
|
@@ -1,983 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
<!doctype html>
|
|
3
|
-
<html lang="en">
|
|
4
|
-
|
|
5
|
-
<head>
|
|
6
|
-
<title>Code coverage report for plugin-auth/api/service/authorization/tree.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/authorization</a> tree.js</h1>
|
|
23
|
-
<div class='clearfix'>
|
|
24
|
-
|
|
25
|
-
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">87.04% </span>
|
|
27
|
-
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>262/301</span>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">85.71% </span>
|
|
34
|
-
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>48/56</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'>13/13</span>
|
|
43
|
-
</div>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">87.04% </span>
|
|
48
|
-
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>262/301</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>
|
|
354
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
355
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
356
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
357
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
358
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
359
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
360
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
361
|
-
<a name='L302'></a><a href='#L302'>302</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
362
|
-
<span class="cline-any cline-yes">1x</span>
|
|
363
|
-
<span class="cline-any cline-yes">1x</span>
|
|
364
|
-
<span class="cline-any cline-yes">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">19x</span>
|
|
381
|
-
<span class="cline-any cline-yes">19x</span>
|
|
382
|
-
<span class="cline-any cline-yes">19x</span>
|
|
383
|
-
<span class="cline-any cline-yes">19x</span>
|
|
384
|
-
<span class="cline-any cline-yes">19x</span>
|
|
385
|
-
<span class="cline-any cline-yes">19x</span>
|
|
386
|
-
<span class="cline-any cline-yes">112x</span>
|
|
387
|
-
<span class="cline-any cline-yes">19x</span>
|
|
388
|
-
<span class="cline-any cline-yes">19x</span>
|
|
389
|
-
<span class="cline-any cline-yes">112x</span>
|
|
390
|
-
<span class="cline-any cline-yes">112x</span>
|
|
391
|
-
<span class="cline-any cline-yes">112x</span>
|
|
392
|
-
<span class="cline-any cline-yes">19x</span>
|
|
393
|
-
<span class="cline-any cline-yes">19x</span>
|
|
394
|
-
<span class="cline-any cline-yes">19x</span>
|
|
395
|
-
<span class="cline-any cline-yes">19x</span>
|
|
396
|
-
<span class="cline-any cline-yes">19x</span>
|
|
397
|
-
<span class="cline-any cline-yes">19x</span>
|
|
398
|
-
<span class="cline-any cline-yes">19x</span>
|
|
399
|
-
<span class="cline-any cline-yes">19x</span>
|
|
400
|
-
<span class="cline-any cline-yes">19x</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">337x</span>
|
|
411
|
-
<span class="cline-any cline-no"> </span>
|
|
412
|
-
<span class="cline-any cline-no"> </span>
|
|
413
|
-
<span class="cline-any cline-yes">337x</span>
|
|
414
|
-
<span class="cline-any cline-yes">337x</span>
|
|
415
|
-
<span class="cline-any cline-yes">337x</span>
|
|
416
|
-
<span class="cline-any cline-yes">19x</span>
|
|
417
|
-
<span class="cline-any cline-yes">19x</span>
|
|
418
|
-
<span class="cline-any cline-yes">19x</span>
|
|
419
|
-
<span class="cline-any cline-yes">19x</span>
|
|
420
|
-
<span class="cline-any cline-yes">19x</span>
|
|
421
|
-
<span class="cline-any cline-yes">19x</span>
|
|
422
|
-
<span class="cline-any cline-yes">19x</span>
|
|
423
|
-
<span class="cline-any cline-yes">19x</span>
|
|
424
|
-
<span class="cline-any cline-yes">19x</span>
|
|
425
|
-
<span class="cline-any cline-yes">19x</span>
|
|
426
|
-
<span class="cline-any cline-yes">19x</span>
|
|
427
|
-
<span class="cline-any cline-yes">337x</span>
|
|
428
|
-
<span class="cline-any cline-yes">337x</span>
|
|
429
|
-
<span class="cline-any cline-yes">337x</span>
|
|
430
|
-
<span class="cline-any cline-yes">337x</span>
|
|
431
|
-
<span class="cline-any cline-yes">832x</span>
|
|
432
|
-
<span class="cline-any cline-yes">832x</span>
|
|
433
|
-
<span class="cline-any cline-yes">832x</span>
|
|
434
|
-
<span class="cline-any cline-yes">832x</span>
|
|
435
|
-
<span class="cline-any cline-yes">832x</span>
|
|
436
|
-
<span class="cline-any cline-yes">94x</span>
|
|
437
|
-
<span class="cline-any cline-no"> </span>
|
|
438
|
-
<span class="cline-any cline-no"> </span>
|
|
439
|
-
<span class="cline-any cline-yes">94x</span>
|
|
440
|
-
<span class="cline-any cline-yes">832x</span>
|
|
441
|
-
<span class="cline-any cline-yes">331x</span>
|
|
442
|
-
<span class="cline-any cline-yes">331x</span>
|
|
443
|
-
<span class="cline-any cline-yes">337x</span>
|
|
444
|
-
<span class="cline-any cline-yes">19x</span>
|
|
445
|
-
<span class="cline-any cline-yes">19x</span>
|
|
446
|
-
<span class="cline-any cline-yes">19x</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">42x</span>
|
|
452
|
-
<span class="cline-any cline-yes">42x</span>
|
|
453
|
-
<span class="cline-any cline-yes">42x</span>
|
|
454
|
-
<span class="cline-any cline-yes">42x</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">105x</span>
|
|
464
|
-
<span class="cline-any cline-yes">105x</span>
|
|
465
|
-
<span class="cline-any cline-yes">105x</span>
|
|
466
|
-
<span class="cline-any cline-yes">105x</span>
|
|
467
|
-
<span class="cline-any cline-yes">105x</span>
|
|
468
|
-
<span class="cline-any cline-yes">105x</span>
|
|
469
|
-
<span class="cline-any cline-yes">105x</span>
|
|
470
|
-
<span class="cline-any cline-yes">52x</span>
|
|
471
|
-
<span class="cline-any cline-yes">52x</span>
|
|
472
|
-
<span class="cline-any cline-yes">105x</span>
|
|
473
|
-
<span class="cline-any cline-yes">105x</span>
|
|
474
|
-
<span class="cline-any cline-yes">53x</span>
|
|
475
|
-
<span class="cline-any cline-yes">53x</span>
|
|
476
|
-
<span class="cline-any cline-yes">105x</span>
|
|
477
|
-
<span class="cline-any cline-yes">105x</span>
|
|
478
|
-
<span class="cline-any cline-yes">105x</span>
|
|
479
|
-
<span class="cline-any cline-yes">19x</span>
|
|
480
|
-
<span class="cline-any cline-yes">19x</span>
|
|
481
|
-
<span class="cline-any cline-yes">19x</span>
|
|
482
|
-
<span class="cline-any cline-yes">19x</span>
|
|
483
|
-
<span class="cline-any cline-yes">19x</span>
|
|
484
|
-
<span class="cline-any cline-yes">19x</span>
|
|
485
|
-
<span class="cline-any cline-yes">19x</span>
|
|
486
|
-
<span class="cline-any cline-yes">19x</span>
|
|
487
|
-
<span class="cline-any cline-yes">1x</span>
|
|
488
|
-
<span class="cline-any cline-yes">1x</span>
|
|
489
|
-
<span class="cline-any cline-yes">1x</span>
|
|
490
|
-
<span class="cline-any cline-yes">1x</span>
|
|
491
|
-
<span class="cline-any cline-yes">1x</span>
|
|
492
|
-
<span class="cline-any cline-yes">1x</span>
|
|
493
|
-
<span class="cline-any cline-yes">1x</span>
|
|
494
|
-
<span class="cline-any cline-yes">1x</span>
|
|
495
|
-
<span class="cline-any cline-no"> </span>
|
|
496
|
-
<span class="cline-any cline-no"> </span>
|
|
497
|
-
<span class="cline-any cline-yes">1x</span>
|
|
498
|
-
<span class="cline-any cline-yes">1x</span>
|
|
499
|
-
<span class="cline-any cline-yes">1x</span>
|
|
500
|
-
<span class="cline-any cline-yes">1x</span>
|
|
501
|
-
<span class="cline-any cline-yes">1x</span>
|
|
502
|
-
<span class="cline-any cline-yes">1x</span>
|
|
503
|
-
<span class="cline-any cline-yes">1x</span>
|
|
504
|
-
<span class="cline-any cline-yes">1x</span>
|
|
505
|
-
<span class="cline-any cline-yes">1x</span>
|
|
506
|
-
<span class="cline-any cline-yes">1x</span>
|
|
507
|
-
<span class="cline-any cline-yes">1x</span>
|
|
508
|
-
<span class="cline-any cline-yes">1x</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">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">48x</span>
|
|
522
|
-
<span class="cline-any cline-yes">48x</span>
|
|
523
|
-
<span class="cline-any cline-yes">48x</span>
|
|
524
|
-
<span class="cline-any cline-yes">48x</span>
|
|
525
|
-
<span class="cline-any cline-yes">94x</span>
|
|
526
|
-
<span class="cline-any cline-yes">94x</span>
|
|
527
|
-
<span class="cline-any cline-yes">94x</span>
|
|
528
|
-
<span class="cline-any cline-yes">18x</span>
|
|
529
|
-
<span class="cline-any cline-yes">18x</span>
|
|
530
|
-
<span class="cline-any cline-yes">48x</span>
|
|
531
|
-
<span class="cline-any cline-yes">48x</span>
|
|
532
|
-
<span class="cline-any cline-yes">6x</span>
|
|
533
|
-
<span class="cline-any cline-yes">6x</span>
|
|
534
|
-
<span class="cline-any cline-yes">6x</span>
|
|
535
|
-
<span class="cline-any cline-yes">42x</span>
|
|
536
|
-
<span class="cline-any cline-yes">48x</span>
|
|
537
|
-
<span class="cline-any cline-yes">7x</span>
|
|
538
|
-
<span class="cline-any cline-yes">7x</span>
|
|
539
|
-
<span class="cline-any cline-yes">35x</span>
|
|
540
|
-
<span class="cline-any cline-yes">48x</span>
|
|
541
|
-
<span class="cline-any cline-yes">9x</span>
|
|
542
|
-
<span class="cline-any cline-yes">9x</span>
|
|
543
|
-
<span class="cline-any cline-yes">26x</span>
|
|
544
|
-
<span class="cline-any cline-yes">26x</span>
|
|
545
|
-
<span class="cline-any cline-yes">48x</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">19x</span>
|
|
550
|
-
<span class="cline-any cline-yes">19x</span>
|
|
551
|
-
<span class="cline-any cline-yes">19x</span>
|
|
552
|
-
<span class="cline-any cline-yes">19x</span>
|
|
553
|
-
<span class="cline-any cline-yes">19x</span>
|
|
554
|
-
<span class="cline-any cline-yes">19x</span>
|
|
555
|
-
<span class="cline-any cline-yes">3x</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">3x</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">19x</span>
|
|
568
|
-
<span class="cline-any cline-yes">19x</span>
|
|
569
|
-
<span class="cline-any cline-yes">18x</span>
|
|
570
|
-
<span class="cline-any cline-yes">18x</span>
|
|
571
|
-
<span class="cline-any cline-yes">18x</span>
|
|
572
|
-
<span class="cline-any cline-no"> </span>
|
|
573
|
-
<span class="cline-any cline-no"> </span>
|
|
574
|
-
<span class="cline-any cline-no"> </span>
|
|
575
|
-
<span class="cline-any cline-no"> </span>
|
|
576
|
-
<span class="cline-any cline-no"> </span>
|
|
577
|
-
<span class="cline-any cline-no"> </span>
|
|
578
|
-
<span class="cline-any cline-no"> </span>
|
|
579
|
-
<span class="cline-any cline-no"> </span>
|
|
580
|
-
<span class="cline-any cline-no"> </span>
|
|
581
|
-
<span class="cline-any cline-no"> </span>
|
|
582
|
-
<span class="cline-any cline-no"> </span>
|
|
583
|
-
<span class="cline-any cline-no"> </span>
|
|
584
|
-
<span class="cline-any cline-no"> </span>
|
|
585
|
-
<span class="cline-any cline-no"> </span>
|
|
586
|
-
<span class="cline-any cline-no"> </span>
|
|
587
|
-
<span class="cline-any cline-no"> </span>
|
|
588
|
-
<span class="cline-any cline-no"> </span>
|
|
589
|
-
<span class="cline-any cline-no"> </span>
|
|
590
|
-
<span class="cline-any cline-no"> </span>
|
|
591
|
-
<span class="cline-any cline-no"> </span>
|
|
592
|
-
<span class="cline-any cline-no"> </span>
|
|
593
|
-
<span class="cline-any cline-no"> </span>
|
|
594
|
-
<span class="cline-any cline-no"> </span>
|
|
595
|
-
<span class="cline-any cline-no"> </span>
|
|
596
|
-
<span class="cline-any cline-no"> </span>
|
|
597
|
-
<span class="cline-any cline-no"> </span>
|
|
598
|
-
<span class="cline-any cline-no"> </span>
|
|
599
|
-
<span class="cline-any cline-no"> </span>
|
|
600
|
-
<span class="cline-any cline-no"> </span>
|
|
601
|
-
<span class="cline-any cline-no"> </span>
|
|
602
|
-
<span class="cline-any cline-no"> </span>
|
|
603
|
-
<span class="cline-any cline-yes">18x</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">19x</span>
|
|
612
|
-
<span class="cline-any cline-yes">46x</span>
|
|
613
|
-
<span class="cline-any cline-yes">46x</span>
|
|
614
|
-
<span class="cline-any cline-yes">46x</span>
|
|
615
|
-
<span class="cline-any cline-yes">46x</span>
|
|
616
|
-
<span class="cline-any cline-yes">46x</span>
|
|
617
|
-
<span class="cline-any cline-yes">83x</span>
|
|
618
|
-
<span class="cline-any cline-yes">83x</span>
|
|
619
|
-
<span class="cline-any cline-yes">83x</span>
|
|
620
|
-
<span class="cline-any cline-yes">55x</span>
|
|
621
|
-
<span class="cline-any cline-yes">55x</span>
|
|
622
|
-
<span class="cline-any cline-yes">55x</span>
|
|
623
|
-
<span class="cline-any cline-yes">55x</span>
|
|
624
|
-
<span class="cline-any cline-yes">55x</span>
|
|
625
|
-
<span class="cline-any cline-yes">330x</span>
|
|
626
|
-
<span class="cline-any cline-yes">330x</span>
|
|
627
|
-
<span class="cline-any cline-yes">275x</span>
|
|
628
|
-
<span class="cline-any cline-yes">275x</span>
|
|
629
|
-
<span class="cline-any cline-yes">55x</span>
|
|
630
|
-
<span class="cline-any cline-yes">55x</span>
|
|
631
|
-
<span class="cline-any cline-yes">55x</span>
|
|
632
|
-
<span class="cline-any cline-yes">330x</span>
|
|
633
|
-
<span class="cline-any cline-yes">91x</span>
|
|
634
|
-
<span class="cline-any cline-yes">91x</span>
|
|
635
|
-
<span class="cline-any cline-yes">91x</span>
|
|
636
|
-
<span class="cline-any cline-yes">91x</span>
|
|
637
|
-
<span class="cline-any cline-yes">91x</span>
|
|
638
|
-
<span class="cline-any cline-yes">91x</span>
|
|
639
|
-
<span class="cline-any cline-yes">91x</span>
|
|
640
|
-
<span class="cline-any cline-yes">91x</span>
|
|
641
|
-
<span class="cline-any cline-yes">91x</span>
|
|
642
|
-
<span class="cline-any cline-yes">91x</span>
|
|
643
|
-
<span class="cline-any cline-yes">91x</span>
|
|
644
|
-
<span class="cline-any cline-yes">91x</span>
|
|
645
|
-
<span class="cline-any cline-no"> </span>
|
|
646
|
-
<span class="cline-any cline-no"> </span>
|
|
647
|
-
<span class="cline-any cline-yes">91x</span>
|
|
648
|
-
<span class="cline-any cline-yes">55x</span>
|
|
649
|
-
<span class="cline-any cline-yes">55x</span>
|
|
650
|
-
<span class="cline-any cline-yes">55x</span>
|
|
651
|
-
<span class="cline-any cline-yes">37x</span>
|
|
652
|
-
<span class="cline-any cline-yes">37x</span>
|
|
653
|
-
<span class="cline-any cline-yes">55x</span>
|
|
654
|
-
<span class="cline-any cline-yes">46x</span>
|
|
655
|
-
<span class="cline-any cline-yes">46x</span>
|
|
656
|
-
<span class="cline-any cline-yes">46x</span>
|
|
657
|
-
<span class="cline-any cline-yes">46x</span>
|
|
658
|
-
<span class="cline-any cline-yes">19x</span>
|
|
659
|
-
<span class="cline-any cline-yes">19x</span>
|
|
660
|
-
<span class="cline-any cline-yes">19x</span>
|
|
661
|
-
<span class="cline-any cline-yes">1x</span>
|
|
662
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
|
|
663
|
-
|
|
664
|
-
module.exports = function() {
|
|
665
|
-
const api = this;
|
|
666
|
-
const { services, models } = api.runtime;
|
|
667
|
-
|
|
668
|
-
const logAlert = api.log( "hitchy:plugin:auth:alert" );
|
|
669
|
-
const logDebug = api.log( "hitchy:plugin:auth:debug" );
|
|
670
|
-
|
|
671
|
-
let cachedTree;
|
|
672
|
-
|
|
673
|
-
/**
|
|
674
|
-
* Implements hierarchy of authorization nodes for caching complex
|
|
675
|
-
* authorizations rules.
|
|
676
|
-
*
|
|
677
|
-
* @name AuthorizationTree
|
|
678
|
-
*/
|
|
679
|
-
class AuthorizationTree {
|
|
680
|
-
/**
|
|
681
|
-
* Fetches root node of current tree used to cache authorizations at
|
|
682
|
-
* runtime.
|
|
683
|
-
*
|
|
684
|
-
* @returns {AuthorizationTree} tree of authorizations
|
|
685
|
-
*/
|
|
686
|
-
static get current() {
|
|
687
|
-
if ( !cachedTree ) {
|
|
688
|
-
cachedTree = new this();
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
return cachedTree;
|
|
692
|
-
}
|
|
693
|
-
|
|
694
|
-
/** */
|
|
695
|
-
constructor() {
|
|
696
|
-
Object.defineProperties( this, {
|
|
697
|
-
node: { value: new services.AuthorizationNode(), configurable: true },
|
|
698
|
-
} );
|
|
699
|
-
|
|
700
|
-
this._gcCounter = 0;
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
/**
|
|
704
|
-
* Converts provided authorization selector into its sequences of names
|
|
705
|
-
* suitable for descending into hierarchy of authorization nodes.
|
|
706
|
-
*
|
|
707
|
-
* @param {string} selector raw selector addressing node of hierarchy
|
|
708
|
-
* @returns {string[]} sequence of segments each naming another child to pick on descending into hierarchy
|
|
709
|
-
*/
|
|
710
|
-
static selectorToSegments( selector ) {
|
|
711
|
-
if ( !selector || typeof selector !== "string" || !/^(?:\s*[^.\s]+\s*\.)*\s*[^.\s]+\s*$/.test( selector ) ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
712
|
-
<span class="cstat-no" title="statement not covered" > throw new TypeError( `invalid authorization selector: ${selector}` );</span>
|
|
713
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
714
|
-
|
|
715
|
-
return selector.trim().split( /\s*\.\s*/ );
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
/**
|
|
719
|
-
* Descends into current tree's hierarchy looking for the node named by
|
|
720
|
-
* provided selector.
|
|
721
|
-
*
|
|
722
|
-
* @param {string} selector full-stop-separated list of names each selecting another child node
|
|
723
|
-
* @param {boolean} addIfMissing true if missing nodes should be added implicitly
|
|
724
|
-
* @param {function(AuthorizationNode, string, number, string[]): (false|undefined)} callback function invoked on every node while descending
|
|
725
|
-
* @returns {AuthorizationNode} found node, undefined on addressing missing node while disabling implicit addition
|
|
726
|
-
*/
|
|
727
|
-
selectNode( selector, addIfMissing = true, callback = undefined ) {
|
|
728
|
-
const segments = this.constructor.selectorToSegments( selector );
|
|
729
|
-
let node = this.node;
|
|
730
|
-
|
|
731
|
-
for ( let i = 0, length = segments.length; node && i < length; i++ ) {
|
|
732
|
-
const segment = segments[i];
|
|
733
|
-
|
|
734
|
-
node = node.getChild( segment, addIfMissing );
|
|
735
|
-
|
|
736
|
-
if ( node && typeof callback === "function" ) {
|
|
737
|
-
if ( callback( node, segment, i, segments ) === false ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
738
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
739
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
740
|
-
}
|
|
741
|
-
}
|
|
742
|
-
|
|
743
|
-
return node;
|
|
744
|
-
}
|
|
745
|
-
|
|
746
|
-
/**
|
|
747
|
-
* Drops all nodes of tree implicitly removing any previously added rule.
|
|
748
|
-
*
|
|
749
|
-
* @returns {AuthorizationTree} fluent interface
|
|
750
|
-
*/
|
|
751
|
-
clear() {
|
|
752
|
-
this.node.clear();
|
|
753
|
-
|
|
754
|
-
return this;
|
|
755
|
-
}
|
|
756
|
-
|
|
757
|
-
/**
|
|
758
|
-
* Adds authorization rule to this tree.
|
|
759
|
-
*
|
|
760
|
-
* @param {AuthorizationRule} rule rule to be added
|
|
761
|
-
* @returns {AuthorizationTree} fluent interface
|
|
762
|
-
*/
|
|
763
|
-
addRule( rule ) {
|
|
764
|
-
const { selector, role, user, accept } = rule;
|
|
765
|
-
|
|
766
|
-
logDebug( "adding authorization rule", { selector, role, user, accept } );
|
|
767
|
-
|
|
768
|
-
const node = this.selectNode( selector );
|
|
769
|
-
|
|
770
|
-
if ( role ) {
|
|
771
|
-
node.addRole( role, accept );
|
|
772
|
-
}
|
|
773
|
-
|
|
774
|
-
if ( user ) {
|
|
775
|
-
node.addUser( user, accept );
|
|
776
|
-
}
|
|
777
|
-
|
|
778
|
-
return this;
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
/**
|
|
782
|
-
* Removes authorization rule from this tree.
|
|
783
|
-
*
|
|
784
|
-
* @param {AuthorizationRule} rule rule to be removed
|
|
785
|
-
* @returns {AuthorizationTree} fluent interface
|
|
786
|
-
*/
|
|
787
|
-
removeRule( rule ) {
|
|
788
|
-
const { selector, role, user, accept } = rule;
|
|
789
|
-
|
|
790
|
-
logDebug( "removing authorization rule", { selector, role, user, accept } );
|
|
791
|
-
|
|
792
|
-
const node = this.selectNode( selector, false );
|
|
793
|
-
|
|
794
|
-
if ( node ) {
|
|
795
|
-
if ( role ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
796
|
-
<span class="cstat-no" title="statement not covered" > node.removeRole( role, accept );</span>
|
|
797
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
798
|
-
|
|
799
|
-
if ( user ) {
|
|
800
|
-
node.removeUser( user, accept );
|
|
801
|
-
}
|
|
802
|
-
|
|
803
|
-
if ( role || user ) {
|
|
804
|
-
this.gc();
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
|
|
808
|
-
return this;
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
/**
|
|
812
|
-
* Tests if selected authorization is granted to or revoked from
|
|
813
|
-
* provided user(s) and/or role(s).
|
|
814
|
-
*
|
|
815
|
-
* @param {string} selector selector of authorization, full-stop-separated sequence of names
|
|
816
|
-
* @param {string|string[]} user names(s) of zero or more users to check
|
|
817
|
-
* @param {string|string[]} role names of zero or more roles to check
|
|
818
|
-
* @param {boolean} acceptByDefault fallback result ro return if neither rule is affecting selected user(s) or role(s)
|
|
819
|
-
* @returns {boolean} true if authorization is granted to user(s)/role(s), false if it's rejected
|
|
820
|
-
*/
|
|
821
|
-
isAuthorized( selector, user, role, acceptByDefault = false ) {
|
|
822
|
-
let result = 0;
|
|
823
|
-
|
|
824
|
-
try {
|
|
825
|
-
this.selectNode( selector, false, node => {
|
|
826
|
-
const localResult = node.isAuthorized( user, role, acceptByDefault );
|
|
827
|
-
|
|
828
|
-
if ( localResult !== 0 ) {
|
|
829
|
-
result = localResult;
|
|
830
|
-
}
|
|
831
|
-
} );
|
|
832
|
-
} catch ( cause ) {
|
|
833
|
-
logAlert( cause.message );
|
|
834
|
-
return false;
|
|
835
|
-
}
|
|
836
|
-
|
|
837
|
-
if ( result > 0 ) {
|
|
838
|
-
return true;
|
|
839
|
-
}
|
|
840
|
-
|
|
841
|
-
if ( result < 0 ) {
|
|
842
|
-
return false;
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
return Boolean( acceptByDefault );
|
|
846
|
-
}
|
|
847
|
-
|
|
848
|
-
/**
|
|
849
|
-
* Implements occasional garbage collection.
|
|
850
|
-
*
|
|
851
|
-
* @protected
|
|
852
|
-
* @param {boolean} force set true to force garbage collection
|
|
853
|
-
* @returns {void}
|
|
854
|
-
*/
|
|
855
|
-
gc( force = false ) {
|
|
856
|
-
if ( force || ++this._gcCounter % 100 === 0 ) {
|
|
857
|
-
Object.defineProperty( this, "node", {
|
|
858
|
-
value: this.node.gc() || new services.AuthorizationNode(),
|
|
859
|
-
configurable: true,
|
|
860
|
-
} );
|
|
861
|
-
}
|
|
862
|
-
}
|
|
863
|
-
|
|
864
|
-
/**
|
|
865
|
-
* Loads authorization rules from database.
|
|
866
|
-
*
|
|
867
|
-
* @returns {Promise<void>} promises authorization rules loaded from database
|
|
868
|
-
*/
|
|
869
|
-
async loadFromDatabase() {
|
|
870
|
-
const entries = await models.AuthorizationRule.list( { loadProperties: true } );
|
|
871
|
-
|
|
872
|
-
if ( entries.length > 0 ) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
873
|
-
<span class="cstat-no" title="statement not covered" > const { User, Role } = models;</span>
|
|
874
|
-
<span class="cstat-no" title="statement not covered" > const users = {};</span>
|
|
875
|
-
<span class="cstat-no" title="statement not covered" > const roles = {};</span>
|
|
876
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
877
|
-
<span class="cstat-no" title="statement not covered" > logDebug( `restoring ${entries.length} authorization rule(s) from database` );</span>
|
|
878
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
879
|
-
<span class="cstat-no" title="statement not covered" > for ( const entry of entries ) {</span>
|
|
880
|
-
<span class="cstat-no" title="statement not covered" > const userKey = entry.user ? entry.user.toString( "hex" ) : undefined;</span>
|
|
881
|
-
<span class="cstat-no" title="statement not covered" > const roleKey = entry.role ? entry.role.toString( "hex" ) : undefined;</span>
|
|
882
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
883
|
-
<span class="cstat-no" title="statement not covered" > const user = userKey ? users[userKey] || await new User( entry.user ).load() : undefined; // eslint-disable-line no-await-in-loop</span>
|
|
884
|
-
<span class="cstat-no" title="statement not covered" > const role = roleKey ? roles[roleKey] || await new Role( entry.role ).load() : undefined; // eslint-disable-line no-await-in-loop</span>
|
|
885
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
886
|
-
<span class="cstat-no" title="statement not covered" > if ( user ) {</span>
|
|
887
|
-
<span class="cstat-no" title="statement not covered" > users[userKey] = user;</span>
|
|
888
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
889
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
890
|
-
<span class="cstat-no" title="statement not covered" > if ( role ) {</span>
|
|
891
|
-
<span class="cstat-no" title="statement not covered" > roles[roleKey] = role;</span>
|
|
892
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
893
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
894
|
-
<span class="cstat-no" title="statement not covered" > if ( user || role ) {</span>
|
|
895
|
-
<span class="cstat-no" title="statement not covered" > this.addRule( {</span>
|
|
896
|
-
<span class="cstat-no" title="statement not covered" > selector: entry.selector,</span>
|
|
897
|
-
<span class="cstat-no" title="statement not covered" > role: role ? role.name : undefined,</span>
|
|
898
|
-
<span class="cstat-no" title="statement not covered" > user: user ? user.name : undefined,</span>
|
|
899
|
-
<span class="cstat-no" title="statement not covered" > accept: entry.accept,</span>
|
|
900
|
-
<span class="cstat-no" title="statement not covered" > } );</span>
|
|
901
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
902
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
903
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
904
|
-
}
|
|
905
|
-
|
|
906
|
-
/**
|
|
907
|
-
* Loads authorization rules from configuration.
|
|
908
|
-
*
|
|
909
|
-
* @param {{authorizations: object}} configuration auth configuration to load pre-defined authorizations from
|
|
910
|
-
* @returns {void}
|
|
911
|
-
*/
|
|
912
|
-
loadFromConfiguration( configuration ) {
|
|
913
|
-
const { authorizations = {} } = configuration <span class="branch-0 cbranch-no" title="branch not covered" >|| {};</span>
|
|
914
|
-
|
|
915
|
-
logDebug( `loading authorization(s) from configuration` );
|
|
916
|
-
|
|
917
|
-
const processLevel = ( source, prefix ) => {
|
|
918
|
-
const names = Object.keys( source );
|
|
919
|
-
|
|
920
|
-
for ( const name of names ) {
|
|
921
|
-
const sanitized = String( name ).trim().replace( /^\.+|\.+$/g, "" );
|
|
922
|
-
const path = prefix === "" ? sanitized <span class="branch-0 cbranch-no" title="branch not covered" >: prefix + "." + sanitized;</span>
|
|
923
|
-
const value = source[name];
|
|
924
|
-
|
|
925
|
-
for ( const key of [ "users", "roles", "grant", "revoke", "people", "" ] ) {
|
|
926
|
-
const items = key ? value[key] : value;
|
|
927
|
-
if ( items == null ) {
|
|
928
|
-
continue;
|
|
929
|
-
}
|
|
930
|
-
|
|
931
|
-
const list = String( items ).trim().split( /\s*,[,\s]*/ ).filter( i => i != null && i !== "" );
|
|
932
|
-
|
|
933
|
-
for ( const who of list ) {
|
|
934
|
-
const [ all, mode, role, id ] = /^\s*([+-]?)\s*(@?)\s*([^\s@,+-][^\s@,]*)\s*$/.exec( who ) <span class="branch-0 cbranch-no" title="branch not covered" >|| [];</span>
|
|
935
|
-
|
|
936
|
-
if ( all ) {
|
|
937
|
-
const isGranting = mode ? mode !== "-" : key !== "revoke";
|
|
938
|
-
const isRole = role || key === "roles";
|
|
939
|
-
|
|
940
|
-
this.addRule( {
|
|
941
|
-
selector: path,
|
|
942
|
-
accept: isGranting,
|
|
943
|
-
[isRole ? "role" : "user"]: id,
|
|
944
|
-
} );
|
|
945
|
-
}<span class="branch-0 cbranch-no" title="branch not covered" > else {</span>
|
|
946
|
-
<span class="cstat-no" title="statement not covered" > logAlert( `invalid user/role selector in ${key || "rule"} on ${name}` );</span>
|
|
947
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
948
|
-
}
|
|
949
|
-
}
|
|
950
|
-
|
|
951
|
-
if ( value.sub && !Array.isArray( value.sub ) ) {
|
|
952
|
-
processLevel( value.sub, path );
|
|
953
|
-
}
|
|
954
|
-
}
|
|
955
|
-
};
|
|
956
|
-
|
|
957
|
-
processLevel( authorizations, "" );
|
|
958
|
-
}
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
return AuthorizationTree;
|
|
962
|
-
};
|
|
963
|
-
</pre></td></tr></table></pre>
|
|
964
|
-
|
|
965
|
-
<div class='push'></div><!-- for sticky footer -->
|
|
966
|
-
</div><!-- /wrapper -->
|
|
967
|
-
<div class='footer quiet pad2 space-top1 center small'>
|
|
968
|
-
Code coverage generated by
|
|
969
|
-
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
970
|
-
at Mon Mar 28 2022 22:26:49 GMT+0200 (Mitteleuropäische Sommerzeit)
|
|
971
|
-
</div>
|
|
972
|
-
</div>
|
|
973
|
-
<script src="../../../../prettify.js"></script>
|
|
974
|
-
<script>
|
|
975
|
-
window.onload = function () {
|
|
976
|
-
prettyPrint();
|
|
977
|
-
};
|
|
978
|
-
</script>
|
|
979
|
-
<script src="../../../../sorter.js"></script>
|
|
980
|
-
<script src="../../../../block-navigation.js"></script>
|
|
981
|
-
</body>
|
|
982
|
-
</html>
|
|
983
|
-
|