Bug:Fix file validation issue
[vnfsdk/refrepo.git] / vnfmarket / src / main / webapp / vnfmarket / node_modules / policyfile / doc / index.html
1 <html>
2         <head>
3                 <title>FlashPolicyFileServer</title>
4                 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
5                 <style>body {
6     margin: 0;
7     padding: 0;
8     font: 14px/1.5 'Palatino Linotype', 'Book Antiqua', Palatino, FreeSerif, serif;
9     color: #252519;
10 }
11 a {
12     color: #252519;
13 }
14 a:hover {
15     text-decoration: underline;
16     color: #19469D;
17 }
18 p {
19     margin: 12px 0;
20 }
21 h1, h2, h3 {
22     margin: 0;
23     padding: 0;
24 }
25 table#source {
26     width: 100%;
27     border-collapse: collapse;
28 }
29 table#source td:first-child {
30     padding: 30px 40px 30px 40px;
31     vertical-align: top;
32 }
33 table#source td:first-child,
34 table#source td:first-child pre {
35     width: 450px;
36 }
37 table#source td:last-child {
38     padding: 30px 0 30px 40px;
39     border-left: 1px solid #E5E5EE;
40     background: #F5F5FF;
41 }
42 table#source tr {
43     border-bottom: 1px solid #E5E5EE;
44 }
45 table#source tr.filename {
46     padding-top: 40px;
47     border-top: 1px solid #E5E5EE;
48 }
49 table#source tr.filename td:first-child {
50     text-transform: capitalize;
51 }
52 table#source tr.filename td:last-child {
53     font-size: 12px;
54 }
55 table#source tr.filename h2 {
56     margin: 0;
57     padding: 0;
58     cursor: pointer;
59 }
60 table#source tr.code h1,
61 table#source tr.code h2,
62 table#source tr.code h3 {
63     margin-top: 30px;
64     font-family: "Lucida Grande", "Helvetica Nueue", Arial, sans-serif;
65     font-size: 18px;
66 }
67 table#source tr.code h2 {
68     font-size: 16px;
69 }
70 table#source tr.code h3 {
71     font-size: 14px;
72 }
73 table#source tr.code ul {
74     margin: 15px 0 15px 35px;
75     padding: 0;
76 }
77 table#source tr.code ul li {
78     margin: 0;
79     padding: 1px 0;
80 }
81 table#source tr.code ul li p {
82     margin: 0;
83     padding: 0;
84 }
85 table#source tr.code td:first-child pre {
86     padding: 20px;
87 }
88 #ribbon {
89     position: fixed;
90     top: 0;
91     right: 0;
92 }
93 code .string { color: #219161; }
94 code .regexp { color: #219161; }
95 code .keyword { color: #954121; }
96 code .number { color: #19469D; }
97 code .comment { color: #bbb; }
98 code .this { color: #19469D; }</style>
99                 <script>
100                         $(function(){
101                                 $('tr.code').hide();
102                                 $('tr.filename').toggle(function(){
103                                         $(this).nextUntil('.filename').fadeIn();
104                                 }, function(){
105                                         $(this).nextUntil('.filename').fadeOut();
106                                 });
107                         });
108                 </script>
109         </head>
110         <body>
111 <table id="source"><tbody><tr><td><h1>FlashPolicyFileServer</h1></td><td></td></tr><tr class="filename"><td><h2 id="lib/server.js"><a href="#">server</a></h2></td><td>lib/server.js</td></tr><tr class="code">
112 <td class="docs">
113 <p>Module dependencies and cached references.
114  </p>
115 </td>
116 <td class="code">
117 <pre><code><span class="keyword">var</span> <span class="variable">slice</span> = <span class="class">Array</span>.<span class="variable">prototype</span>.<span class="variable">slice</span>
118   , <span class="variable">net</span> = <span class="variable">require</span>(<span class="string">'net'</span>);</code></pre>
119 </td>
120 </tr>
121 <tr class="code">
122 <td class="docs">
123 <p>The server that does the Policy File severing</p>
124
125 <h2>Options</h2>
126
127 <ul><li><code>log</code>  false or a function that can output log information, defaults to console.log?</li></ul>
128
129 <h2></h2>
130
131 <ul><li><p><strong>param</strong>: <em>Object</em>  options Options to customize the servers functionality.</p></li><li><p><strong>param</strong>: <em>Array</em>  origins The origins that are allowed on this server, defaults to <code>*:*</code>.</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
132 </td>
133 <td class="code">
134 <pre><code><span class="keyword">function</span> <span class="class">Server</span>(<span class="variable">options</span>, <span class="variable">origins</span>){
135   <span class="keyword">var</span> <span class="variable">me</span> = <span class="this">this</span>;
136   
137   <span class="this">this</span>.<span class="variable">origins</span> = <span class="variable">origins</span> || [<span class="string">'*:*'</span>];
138   <span class="this">this</span>.<span class="variable">port</span> = <span class="number integer">843</span>;
139   <span class="this">this</span>.<span class="variable">log</span> = <span class="variable">console</span>.<span class="variable">log</span>;
140   
141   <span class="comment">// merge `this` with the options</span>
142   <span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">options</span>).<span class="variable">forEach</span>(<span class="keyword">function</span>(<span class="variable">key</span>){
143     <span class="variable">me</span>[<span class="variable">key</span>] &<span class="variable">amp</span>;&<span class="variable">amp</span>; (<span class="variable">me</span>[<span class="variable">key</span>] = <span class="variable">options</span>[<span class="variable">key</span>])
144   });
145   
146   <span class="comment">// create the net server</span>
147   <span class="this">this</span>.<span class="variable">socket</span> = <span class="variable">net</span>.<span class="variable">createServer</span>(<span class="keyword">function</span> <span class="variable">createServer</span>(<span class="variable">socket</span>){
148     <span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'error'</span>, <span class="keyword">function</span> <span class="variable">socketError</span>(){ <span class="variable">me</span>.<span class="variable">responder</span>.<span class="variable">call</span>(<span class="variable">me</span>, <span class="variable">socket</span>) });
149     <span class="variable">me</span>.<span class="variable">responder</span>.<span class="variable">call</span>(<span class="variable">me</span>, <span class="variable">socket</span>);
150   });
151   
152   <span class="comment">// Listen for errors as the port might be blocked because we do not have root priv.</span>
153   <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'error'</span>, <span class="keyword">function</span> <span class="variable">serverError</span>(<span class="variable">err</span>){
154     <span class="comment">// Special and common case error handling</span>
155     <span class="keyword">if</span> (<span class="variable">err</span>.<span class="variable">errno</span> == <span class="number integer">13</span>){
156       <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(
157         <span class="string">'Unable to listen to port `'</span> + <span class="variable">me</span>.<span class="variable">port</span> + <span class="string">'` as your Node.js instance does not have root privileges. '</span> +
158         (
159           <span class="variable">me</span>.<span class="variable">server</span>
160           ? <span class="string">'The Flash Policy file will now be served inline over the supplied HTTP server, Flash Policy files request will suffer.'</span>
161           : <span class="string">'No fallback server supplied.'</span>
162         )
163       );
164       
165       <span class="variable">me</span>.<span class="variable">socket</span>.<span class="variable">removeAllListeners</span>();
166       <span class="keyword">delete</span> <span class="variable">me</span>.<span class="variable">socket</span>;
167
168       <span class="variable">me</span>.<span class="variable">emit</span>(<span class="string">'connect_failed'</span>, <span class="variable">err</span>);
169     } <span class="keyword">else</span> {
170       <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(<span class="string">'FlashPolicyFileServer received a error event:\n'</span> + (<span class="variable">err</span>.<span class="variable">message</span> ? <span class="variable">err</span>.<span class="variable">message</span> : <span class="variable">err</span>));
171     }
172   });
173   
174   <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'timeout'</span>, <span class="keyword">function</span> <span class="variable">serverTimeout</span>(){});
175   <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">on</span>(<span class="string">'close'</span>, <span class="keyword">function</span> <span class="variable">serverClosed</span>(<span class="variable">err</span>){
176     <span class="variable">err</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(<span class="string">'Server closing due to an error: \n'</span> + (<span class="variable">err</span>.<span class="variable">message</span> ? <span class="variable">err</span>.<span class="variable">message</span> : <span class="variable">err</span>));
177     
178     <span class="keyword">if</span> (<span class="variable">me</span>.<span class="variable">server</span>){
179       <span class="comment">// not online anymore</span>
180       <span class="keyword">delete</span> <span class="variable">me</span>.<span class="variable">server</span>.<span class="variable">online</span>;
181       
182       <span class="comment">// Remove the inline policy listener if we close down</span>
183       <span class="comment">// but only when the server was `online` (see listen prototype)</span>
184       <span class="keyword">if</span>( <span class="variable">me</span>.<span class="variable">server</span>[<span class="string">'@'</span>] &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">server</span>.<span class="variable">online</span>){
185         <span class="variable">me</span>.<span class="variable">server</span>.<span class="variable">removeListener</span>(<span class="string">'connection'</span>, <span class="variable">me</span>.<span class="variable">server</span>[<span class="string">'@'</span>]);
186       }
187     }
188     <span class="variable">me</span>.<span class="variable">log</span> &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">me</span>.<span class="variable">log</span>(<span class="string">'Shutting down FlashPolicyFileServer'</span>);
189   });
190   
191   <span class="comment">// Compile the initial `buffer`</span>
192   <span class="this">this</span>.<span class="variable">compile</span>();
193 }</code></pre>
194 </td>
195 </tr>
196 <tr class="code">
197 <td class="docs">
198 <p>Start listening for requests</p>
199
200 <h2></h2>
201
202 <ul><li><p><strong>param</strong>: <em>Number</em>  port The port number it should be listening to.</p></li><li><p><strong>param</strong>: <em>Server</em>  server A HTTP server instance, this will be used to listen for inline requests</p></li><li><p><strong>param</strong>: <em>Function</em>  cb The callback needs to be called once server is ready</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
203 </td>
204 <td class="code">
205 <pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">listen</span> = <span class="keyword">function</span> <span class="variable">listen</span>(<span class="variable">port</span>, <span class="variable">server</span>, <span class="variable">cb</span>){
206   <span class="keyword">var</span> <span class="variable">me</span> = <span class="this">this</span>
207     , <span class="variable">args</span> = <span class="variable">slice</span>.<span class="variable">call</span>(<span class="variable">arguments</span>, <span class="number integer">0</span>)
208     , <span class="variable">callback</span>;
209   
210   <span class="comment">// assign the correct vars, for flexible arguments</span>
211   <span class="variable">args</span>.<span class="variable">forEach</span>(<span class="keyword">function</span> <span class="variable">args</span>(<span class="variable">arg</span>){
212     <span class="keyword">var</span> <span class="variable">type</span> = <span class="keyword">typeof</span> <span class="variable">arg</span>;
213     
214     <span class="keyword">if</span> (<span class="variable">type</span> === <span class="string">'number'</span>) <span class="variable">me</span>.<span class="variable">port</span> = <span class="variable">arg</span>;
215     <span class="keyword">if</span> (<span class="variable">type</span> === <span class="string">'function'</span>) <span class="variable">callback</span> = <span class="variable">arg</span>;
216     <span class="keyword">if</span> (<span class="variable">type</span> === <span class="string">'object'</span>) <span class="variable">me</span>.<span class="variable">server</span> = <span class="variable">arg</span>;
217   });
218   
219   <span class="keyword">if</span> (<span class="this">this</span>.<span class="variable">server</span>){
220     
221     <span class="comment">// no one in their right mind would ever create a `@` prototype, so Im just gonna store</span>
222     <span class="comment">// my function on the server, so I can remove it later again once the server(s) closes</span>
223     <span class="this">this</span>.<span class="variable">server</span>[<span class="string">'@'</span>] = <span class="keyword">function</span> <span class="variable">connection</span>(<span class="variable">socket</span>){
224       <span class="variable">socket</span>.<span class="variable">once</span>(<span class="string">'data'</span>, <span class="keyword">function</span> <span class="variable">requestData</span>(<span class="variable">data</span>){
225         <span class="comment">// if it's a Flash policy request, and we can write to the </span>
226         <span class="keyword">if</span> (
227              <span class="variable">data</span>
228           &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">data</span>[<span class="number integer">0</span>] === <span class="number integer">60</span>
229           &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">data</span>.<span class="variable">toString</span>() === <span class="string">'&lt;policy-file-request/&gt;\0'</span>
230           &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">socket</span>
231           &<span class="variable">amp</span>;&<span class="variable">amp</span>; (<span class="variable">socket</span>.<span class="variable">readyState</span> === <span class="string">'open'</span> || <span class="variable">socket</span>.<span class="variable">readyState</span> === <span class="string">'writeOnly'</span>)
232         ){
233           <span class="comment">// send the buffer</span>
234           <span class="variable">socket</span>.<span class="variable">end</span>(<span class="variable">me</span>.<span class="variable">buffer</span>);
235         }
236       });
237     };
238     <span class="comment">// attach it</span>
239     <span class="this">this</span>.<span class="variable">server</span>.<span class="variable">on</span>(<span class="string">'connection'</span>, <span class="this">this</span>.<span class="variable">server</span>[<span class="string">'@'</span>]);
240   }
241   
242   <span class="comment">// We add a callback method, so we can set a flag for when the server is `enabled` or `online`.</span>
243   <span class="comment">// this flag is needed because if a error occurs and the we cannot boot up the server the</span>
244   <span class="comment">// fallback functionality should not be removed during the `close` event</span>
245   <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">listen</span>(<span class="this">this</span>.<span class="variable">port</span>, <span class="keyword">function</span> <span class="variable">serverListening</span>(){
246    <span class="variable">me</span>.<span class="variable">socket</span>.<span class="variable">online</span> = <span class="variable">true</span>;
247    
248    <span class="keyword">if</span> (<span class="variable">callback</span>) <span class="variable">callback</span>(), <span class="variable">callback</span> = <span class="variable">undefined</span>;
249    
250   });
251   
252   <span class="keyword">return</span> <span class="this">this</span>;
253 };</code></pre>
254 </td>
255 </tr>
256 <tr class="code">
257 <td class="docs">
258 <p>Adds a new origin to the Flash Policy File.</p>
259
260 <h2></h2>
261
262 <ul><li><p><strong>param</strong>: <em>Arguments</em>  The origins that need to be added.</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
263 </td>
264 <td class="code">
265 <pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">add</span> = <span class="keyword">function</span> <span class="variable">add</span>(){
266   <span class="keyword">var</span> <span class="variable">args</span> = <span class="variable">slice</span>.<span class="variable">call</span>(<span class="variable">arguments</span>, <span class="number integer">0</span>)
267     , <span class="variable">i</span> = <span class="variable">args</span>.<span class="variable">length</span>;
268   
269   <span class="comment">// flag duplicates</span>
270   <span class="keyword">while</span> (<span class="variable">i</span>--){
271     <span class="keyword">if</span> (<span class="this">this</span>.<span class="variable">origins</span>.<span class="variable">indexOf</span>(<span class="variable">args</span>[<span class="variable">i</span>]) &<span class="variable">gt</span>;= <span class="number integer">0</span>){
272       <span class="variable">args</span>[<span class="variable">i</span>] = <span class="keyword">null</span>;
273     }
274   }
275   
276   <span class="comment">// Add all the arguments to the array</span>
277   <span class="comment">// but first we want to remove all `falsy` values from the args</span>
278   <span class="class">Array</span>.<span class="variable">prototype</span>.<span class="variable">push</span>.<span class="variable">apply</span>(
279     <span class="this">this</span>.<span class="variable">origins</span>
280   , <span class="variable">args</span>.<span class="variable">filter</span>(<span class="keyword">function</span>(<span class="variable">value</span>){ <span class="keyword">return</span> !!<span class="variable">value</span> })
281   );
282   
283   <span class="this">this</span>.<span class="variable">compile</span>();
284   <span class="keyword">return</span> <span class="this">this</span>;
285 };</code></pre>
286 </td>
287 </tr>
288 <tr class="code">
289 <td class="docs">
290 <p>Removes a origin from the Flash Policy File.</p>
291
292 <h2></h2>
293
294 <ul><li><p><strong>param</strong>: <em>String</em>  origin The origin that needs to be removed from the server</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
295 </td>
296 <td class="code">
297 <pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">remove</span> = <span class="keyword">function</span> <span class="variable">remove</span>(<span class="variable">origin</span>){
298   <span class="keyword">var</span> <span class="variable">position</span> = <span class="this">this</span>.<span class="variable">origins</span>.<span class="variable">indexOf</span>(<span class="variable">origin</span>);
299   
300   <span class="comment">// only remove and recompile if we have a match</span>
301   <span class="keyword">if</span> (<span class="variable">position</span> &<span class="variable">gt</span>; <span class="number integer">0</span>){
302     <span class="this">this</span>.<span class="variable">origins</span>.<span class="variable">splice</span>(<span class="variable">position</span>,<span class="number integer">1</span>);
303     <span class="this">this</span>.<span class="variable">compile</span>();
304   }
305   
306   <span class="keyword">return</span> <span class="this">this</span>;
307 };</code></pre>
308 </td>
309 </tr>
310 <tr class="code">
311 <td class="docs">
312 <p>Closes and cleans up the server</p>
313
314 <ul><li><p><strong>api</strong>: <em>public</em></p></li></ul>
315 </td>
316 <td class="code">
317 <pre><code><span class="class">Server</span>.<span class="variable">prototype</span>.<span class="variable">close</span> = <span class="keyword">function</span> <span class="variable">close</span>(){
318   <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">removeAllListeners</span>();
319   <span class="this">this</span>.<span class="variable">socket</span>.<span class="variable">close</span>();
320   
321   <span class="keyword">return</span> <span class="this">this</span>;
322 };</code></pre>
323 </td>
324 </tr>
325 <tr class="code">
326 <td class="docs">
327 <p>Proxy the event listener requests to the created Net server
328  </p>
329 </td>
330 <td class="code">
331 <pre><code><span class="class">Object</span>.<span class="variable">keys</span>(<span class="variable">process</span>.<span class="class">EventEmitter</span>.<span class="variable">prototype</span>).<span class="variable">forEach</span>(<span class="keyword">function</span> <span class="variable">proxy</span>(<span class="variable">key</span>){
332   <span class="class">Server</span>.<span class="variable">prototype</span>[<span class="variable">key</span>] = <span class="class">Server</span>.<span class="variable">prototype</span>[<span class="variable">key</span>] || <span class="keyword">function</span> (){
333     <span class="keyword">if</span> (<span class="this">this</span>.<span class="variable">socket</span>) <span class="this">this</span>.<span class="variable">socket</span>[<span class="variable">key</span>].<span class="variable">apply</span>(<span class="this">this</span>.<span class="variable">socket</span>, <span class="variable">arguments</span>);
334     <span class="keyword">return</span> <span class="this">this</span>;
335   };
336 });</code></pre>
337 </td>
338 </tr>
339 <tr class="code">
340 <td class="docs">
341 <p>Creates a new server instance.</p>
342
343 <h2></h2>
344
345 <ul><li><p><strong>param</strong>: <em>Object</em>  options A options object to override the default config</p></li><li><p><strong>param</strong>: <em>Array</em>  origins The origins that should be allowed by the server</p></li><li><p><strong>api</strong>: <em>public</em></p></li></ul>
346 </td>
347 <td class="code">
348 <pre><code><span class="variable">exports</span>.<span class="variable">createServer</span> = <span class="keyword">function</span> <span class="variable">createServer</span>(<span class="variable">options</span>, <span class="variable">origins</span>){
349   <span class="variable">origins</span> = <span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">origins</span>) ? <span class="variable">origins</span> : (<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">options</span>) ? <span class="variable">options</span> : <span class="variable">false</span>);
350   <span class="variable">options</span> = !<span class="class">Array</span>.<span class="variable">isArray</span>(<span class="variable">options</span>) &<span class="variable">amp</span>;&<span class="variable">amp</span>; <span class="variable">options</span> ? <span class="variable">options</span> : {};
351   
352   <span class="keyword">return</span> <span class="keyword">new</span> <span class="class">Server</span>(<span class="variable">options</span>, <span class="variable">origins</span>);
353 };</code></pre>
354 </td>
355 </tr>
356 <tr class="code">
357 <td class="docs">
358 <p>Provide a hook to the original server, so it can be extended if needed.
359  </p>
360 </td>
361 <td class="code">
362 <pre><code><span class="variable">exports</span>.<span class="class">Server</span> = <span class="class">Server</span>;</code></pre>
363 </td>
364 </tr>
365 <tr class="code">
366 <td class="docs">
367 <p>Module version
368  </p>
369 </td>
370 <td class="code">
371 <pre><code><span class="variable">exports</span>.<span class="variable">version</span> = <span class="string">'0.0.2'</span>;
372 </code></pre>
373 </td>
374 </tr>   </body>
375 </html></tbody></table>