UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

1,128 lines (1,127 loc) 44.7 kB
<!doctype html> <html lang="en"> <head> <title>Code coverage report for src/api/mediators.coffee</title> <meta charset="utf-8" /> <link rel="stylesheet" href="../../prettify.css" /> <link rel="stylesheet" href="../../base.css" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <style type='text/css'> .coverage-summary .sorter { background-image: url(../../sort-arrow-sprite.png); } </style> </head> <body> <div class='wrapper'> <div class='pad1'> <h1> <a href="../../index.html">All files</a> / <a href="index.html">src/api</a> mediators.coffee </h1> <div class='clearfix'> <div class='fl pad1y space-right2'> <span class="strong">15.88% </span> <span class="quiet">Statements</span> <span class='fraction'>27/170</span> </div> <div class='fl pad1y space-right2'> <span class="strong">1.69% </span> <span class="quiet">Branches</span> <span class='fraction'>1/59</span> </div> <div class='fl pad1y space-right2'> <span class="strong">0% </span> <span class="quiet">Functions</span> <span class='fraction'>0/26</span> </div> <div class='fl pad1y space-right2'> <span class="strong">15.48% </span> <span class="quiet">Lines</span> <span class='fraction'>26/168</span> </div> </div> </div> <div class='status-line low'></div> <pre><table class="coverage"> <tr><td class="line-count quiet">1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355</td><td class="line-coverage quiet"><span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="fstat-no" title="function not covered" ><span class="branch-1 cbranch-no" title="branch not covered" >Channel = require('../model/channels').Channel</span></span> Mediator = require('../model/mediators').Mediator Q = require 'q' logger = require 'winston' authorisation = require './authorisation' semver = require 'semver' atna = require 'atna-audit' &nbsp; utils = require "../utils" auditing = require '../auditing' &nbsp; mask = '**********' &nbsp; maskPasswords = <span class="fstat-no" title="function not covered" >(</span>defs, config) -&gt; if not config <span class="cstat-no" title="statement not covered" > return</span> &nbsp; defs.forEach <span class="fstat-no" title="function not covered" >(</span>d) -&gt; if d.type is 'password' and config[d.param] <span class="cstat-no" title="statement not covered" > if d.array</span> <span class="cstat-no" title="statement not covered" > config[d.param] = config[d.param].map <span class="fstat-no" title="function not covered" ></span>-&gt; mask</span> else <span class="cstat-no" title="statement not covered" > config[d.param] = mask</span> if d.type is 'struct' and config[d.param] maskPasswords d.template, config[d.param] &nbsp; restoreMaskedPasswords = <span class="fstat-no" title="function not covered" >(</span>defs, maskedConfig, config) -&gt; if not maskedConfig or not config <span class="cstat-no" title="statement not covered" > return</span> &nbsp; defs.forEach <span class="fstat-no" title="function not covered" >(</span>d) -&gt; if d.type is 'password' and maskedConfig[d.param] and config[d.param] <span class="cstat-no" title="statement not covered" > if d.array</span> <span class="cstat-no" title="statement not covered" > maskedConfig[d.param].forEach <span class="fstat-no" title="function not covered" >(</span>p, i) -&gt;</span> if p is mask maskedConfig[d.param][i] = config[d.param][i] else <span class="cstat-no" title="statement not covered" > if maskedConfig[d.param] is mask</span> <span class="cstat-no" title="statement not covered" > maskedConfig[d.param] = config[d.param]</span> if d.type is 'struct' and maskedConfig[d.param] and config[d.param] restoreMaskedPasswords d.template, maskedConfig[d.param], config[d.param] &nbsp; exports.getAllMediators = <span class="fstat-no" title="function not covered" ></span>-&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to getAllMediators denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; try <span class="cstat-no" title="statement not covered" > m = y</span>ield Mediator.find().exec() <span class="cstat-no" title="statement not covered" > maskPasswords m.configDefs, m.config</span> this.body = m catch <span class="cstat-no" title="statement not covered" >err</span> logAndSetResponse this, 500, "Could not fetch mediators via the API: #{err}", 'error' &nbsp; &nbsp; &nbsp; exports.getMediator = <span class="fstat-no" title="function not covered" >(</span>mediatorURN) -&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to getMediator denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > urn = u</span>nescape mediatorURN &nbsp; try <span class="cstat-no" title="statement not covered" > result = y</span>ield Mediator.findOne({ "urn": urn }).exec() <span class="cstat-no" title="statement not covered" > if result == null</span> this.status = 404 else <span class="cstat-no" title="statement not covered" > maskPasswords result.configDefs, result.config</span> this.body = result catch <span class="cstat-no" title="statement not covered" >err</span> logAndSetResponse this, 500, "Could not fetch mediator using UUID #{urn} via the API: #{err}", 'error' &nbsp; constructError = <span class="fstat-no" title="function not covered" >(</span>message, name) -&gt; <span class="cstat-no" title="statement not covered" > err = new E</span>rror message <span class="cstat-no" title="statement not covered" > err.name = n</span>ame <span class="cstat-no" title="statement not covered" > return e</span>rr &nbsp; &nbsp; validateConfigDef = <span class="fstat-no" title="function not covered" >(</span>def) -&gt; if def.type is 'struct' and not def.template <span class="cstat-no" title="statement not covered" > throw constructError "Must specify a template for struct param '#{def.param}'", 'ValidationError'</span> &nbsp; else if def.type is 'struct' <span class="cstat-no" title="statement not covered" > for templateItem in def.template</span> if not templateItem.param <span class="cstat-no" title="statement not covered" > throw constructError "Must specify field 'param' in template definition for param '#{def.param}'", 'ValidationError'</span> &nbsp; if not templateItem.type <span class="cstat-no" title="statement not covered" > throw constructError "Must specify field 'type' in template definition for param '#{def.param}'", 'ValidationError'</span> &nbsp; if templateItem.type is 'struct' <span class="cstat-no" title="statement not covered" > throw constructError "May not recursively specify 'struct' in template definitions (param '#{def.param}')", 'ValidationError'</span> &nbsp; validateConfigDef templateItem &nbsp; else if def.type is 'option' if not utils.typeIsArray def.values <span class="cstat-no" title="statement not covered" > throw constructError "Expected field 'values' to be an array (option param '#{def.param}')", 'ValidationError'</span> <span class="cstat-no" title="statement not covered" > if not def.values? or def.values.length is 0</span> <span class="cstat-no" title="statement not covered" > throw constructError "Must specify a values array for option param '#{def.param}'", 'ValidationError'</span> &nbsp; # validations additional to the mongoose schema validation validateConfigDefs = <span class="fstat-no" title="function not covered" >(</span>configDefs) -&gt; <span class="cstat-no" title="statement not covered" > validateConfigDef def for def in configDefs</span> &nbsp; &nbsp; exports.addMediator = <span class="fstat-no" title="function not covered" ></span>-&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to addMediator denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; try <span class="cstat-no" title="statement not covered" > mediator = this.request.b</span>ody &nbsp; if mediator?.endpoints?[0]?.host? <span class="cstat-no" title="statement not covered" > mediatorHost = mediator.endpoints[0].host</span> else <span class="cstat-no" title="statement not covered" > mediatorHost = 'unknown'</span> &nbsp; # audit mediator start <span class="cstat-no" title="statement not covered" > audit = a</span>tna.appActivityAudit true, mediator.name, mediatorHost, 'system' <span class="cstat-no" title="statement not covered" > audit = a</span>tna.wrapInSyslog audit <span class="cstat-no" title="statement not covered" > auditing.sendAuditEvent audit, <span class="fstat-no" title="function not covered" ></span>-&gt;</span> logger.info "Processed internal mediator start audit for: #{mediator.name} - #{mediator.urn}" &nbsp; if not mediator.urn <span class="cstat-no" title="statement not covered" > throw constructError 'URN is required', 'ValidationError'</span> if not mediator.version or not semver.valid(mediator.version) <span class="cstat-no" title="statement not covered" > throw constructError 'Version is required. Must be in SemVer form x.y.z', 'ValidationError'</span> &nbsp; if mediator.configDefs <span class="cstat-no" title="statement not covered" > validateConfigDefs mediator.configDefs</span> <span class="cstat-no" title="statement not covered" > if mediator.config?</span> <span class="cstat-no" title="statement not covered" > validateConfig mediator.configDefs, mediator.config</span> &nbsp; <span class="cstat-no" title="statement not covered" > existing = y</span>ield Mediator.findOne({urn: mediator.urn}).exec() if existing? <span class="cstat-no" title="statement not covered" > if semver.gt(mediator.version, existing.version)</span> # update the mediator if mediator.config? and existing.config? # if some config already exists, add only config that didn't exist previously <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" > for param, val of mediator.config</span></span> if existing.config[param]? <span class="cstat-no" title="statement not covered" > mediator.config[param] = existing.config[param]</span> <span class="cstat-no" title="statement not covered" > yield Mediator.findByIdAndUpdate(existing._id, mediator).exec()</span> else # this is a new mediator validate and save it if not mediator.endpoints or mediator.endpoints.length &lt; 1 <span class="cstat-no" title="statement not covered" > throw constructError 'At least 1 endpoint is required', 'ValidationError'</span> <span class="cstat-no" title="statement not covered" > yield Q.ninvoke(new Mediator(mediator), 'save')</span> <span class="cstat-no" title="statement not covered" > this.status = 2</span>01 logger.info "User #{this.authenticated.email} created mediator with urn #{mediator.urn}" catch <span class="cstat-no" title="statement not covered" >err</span> <span class="cstat-no" title="statement not covered" > if err.name is 'ValidationError'</span> utils.logAndSetResponse this, 400, "Could not add Mediator via the API: #{err}", 'error' else utils.logAndSetResponse this, 500, "Could not add Mediator via the API: #{err}", 'error' &nbsp; exports.removeMediator = <span class="fstat-no" title="function not covered" >(</span>urn) -&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to removeMediator denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > urn = u</span>nescape urn &nbsp; try <span class="cstat-no" title="statement not covered" > yield Mediator.findOneAndRemove({ urn: urn }).exec()</span> <span class="cstat-no" title="statement not covered" > this.body = "Mediator with urn #{urn} has been successfully removed by #{this.authenticated.e</span>mail}" logger.info "Mediator with urn #{urn} has been successfully removed by #{this.authenticated.email}" catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not remove Mediator by urn #{urn} via the API: #{err}", 'error' &nbsp; exports.heartbeat = <span class="fstat-no" title="function not covered" >(</span>urn) -&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to removeMediator denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > urn = u</span>nescape urn &nbsp; try <span class="cstat-no" title="statement not covered" > mediator = y</span>ield Mediator.findOne({ urn: urn }).exec() &nbsp; if not mediator? <span class="cstat-no" title="statement not covered" > this.status = 4</span>04 <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > heartbeat = this.request.b</span>ody &nbsp; if not heartbeat?.uptime? <span class="cstat-no" title="statement not covered" > this.status = 4</span>00 <span class="cstat-no" title="statement not covered" > return</span> &nbsp; if mediator._configModifiedTS &gt; mediator._lastHeartbeat or heartbeat?.config is true # Return config if it has changed since last heartbeat <span class="cstat-no" title="statement not covered" > this.body = mediator.config</span> else <span class="cstat-no" title="statement not covered" > this.body = ""</span> &nbsp; # set internal properties if heartbeat? update = _lastHeartbeat: new Date() _uptime: heartbeat.uptime &nbsp; <span class="cstat-no" title="statement not covered" > yield Mediator.findByIdAndUpdate(mediator._id, update).exec()</span> &nbsp; this.status = 200 catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not process mediator heartbeat (urn: #{urn}): #{err}", 'error' &nbsp; &nbsp; validateConfigField = <span class="fstat-no" title="function not covered" >(</span>param, def, field) -&gt; <span class="cstat-no" title="statement not covered" > switch def.type</span> when <span class="cstat-no" title="statement not covered" >'string'</span> if typeof field isnt 'string' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be a string.", 'ValidationError'</span> &nbsp; when <span class="cstat-no" title="statement not covered" >'bigstring'</span> if typeof field isnt 'string' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be a large string.", 'ValidationError'</span> &nbsp; when <span class="cstat-no" title="statement not covered" >'number'</span> if typeof field isnt 'number' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be a number.", 'ValidationError'</span> &nbsp; when <span class="cstat-no" title="statement not covered" >'bool'</span> if typeof field isnt 'boolean' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be a boolean.", 'ValidationError'</span> &nbsp; when <span class="cstat-no" title="statement not covered" >'option'</span> if (def.values.indexOf field) is -1 <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be one of #{def.values}", 'ValidationError'</span> &nbsp; when <span class="cstat-no" title="statement not covered" >'map'</span> if typeof field isnt 'object' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be an object.", 'ValidationError'</span> <span class="cstat-no" title="statement not covered" > for k, v of field</span> if typeof v isnt 'string' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to only contain string values.", 'ValidationError'</span> &nbsp; when <span class="cstat-no" title="statement not covered" >'struct'</span> if typeof field isnt 'object' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be an object.", 'ValidationError'</span> <span class="cstat-no" title="statement not covered" > templateFields = (d</span>ef.template.map <span class="fstat-no" title="function not covered" >(</span>tp) -&gt; tp.param) <span class="cstat-no" title="statement not covered" > for paramField of field</span> if paramField not in templateFields <span class="cstat-no" title="statement not covered" > throw constructError "Field #{paramField} is not defined in template definition for config param #{param}.", 'ValidationError'</span> &nbsp; when 'password' if typeof field isnt 'string' <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be a string representing a password.", 'ValidationError'</span> &nbsp; validateConfig = <span class="fstat-no" title="function not covered" >(</span>configDef, config) -&gt; # reduce to a single true or false value, start assuming valid <span class="cstat-no" title="statement not covered" > return O</span>bject.keys(config).every <span class="fstat-no" title="function not covered" >(</span>param) -&gt; # find the matching def if there is one <span class="cstat-no" title="statement not covered" > matchingDefs = c</span>onfigDef.filter <span class="fstat-no" title="function not covered" >(</span>def) -&gt; <span class="cstat-no" title="statement not covered" > return def.param is p</span>aram &nbsp; # fail if there isn't a matching def if matchingDefs.length is 0 <span class="cstat-no" title="statement not covered" > throw constructError "No config definition found for parameter #{param}", 'ValidationError'</span> &nbsp; # validate the param against the defs matchingDefs.map <span class="fstat-no" title="function not covered" >(</span>def) -&gt; if def.array if not utils.typeIsArray config[param] <span class="cstat-no" title="statement not covered" > throw constructError "Expected config param #{param} to be an array of type #{def.type}", 'ValidationError'</span> &nbsp; <span class="cstat-no" title="statement not covered" > for field, i in config[param]</span> validateConfigField "#{param}[#{i}]", def, field else validateConfigField param, def, config[param] &nbsp; if process.env.NODE_ENV == "test" exports.validateConfig = validateConfig &nbsp; &nbsp; exports.setConfig = <span class="fstat-no" title="function not covered" >(</span>urn) -&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to removeMediator denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > urn = u</span>nescape urn <span class="cstat-no" title="statement not covered" > config = this.request.b</span>ody &nbsp; try <span class="cstat-no" title="statement not covered" > mediator = y</span>ield Mediator.findOne({ urn: urn }).exec() &nbsp; if not mediator? <span class="cstat-no" title="statement not covered" > this.status = 4</span>04 <span class="cstat-no" title="statement not covered" > this.body = '</span>No mediator found for this urn.' <span class="cstat-no" title="statement not covered" > return</span> try <span class="cstat-no" title="statement not covered" > restoreMaskedPasswords mediator.configDefs, config, mediator.config</span> <span class="cstat-no" title="statement not covered" > validateConfig mediator.configDefs, config</span> catch <span class="cstat-no" title="statement not covered" >err</span> <span class="cstat-no" title="statement not covered" > this.status = 4</span>00 <span class="cstat-no" title="statement not covered" > this.body = err.m</span>essage <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > yield Mediator.findOneAndUpdate({ urn: urn }, { config: this.request.body, _configModifiedTS: new Date() }).exec()</span> this.status = 200 catch <span class="cstat-no" title="statement not covered" >err</span> utils.logAndSetResponse this, 500, "Could not set mediator config (urn: #{urn}): #{err}", 'error' &nbsp; saveDefaultChannelConfig = <span class="fstat-no" title="function not covered" >(</span>channels) -&gt; <span class="cstat-no" title="statement not covered" > promises = [</span>] <span class="cstat-no" title="statement not covered" > for channel in channels</span> <span class="cstat-no" title="statement not covered" > delete channel._</span>id <span class="cstat-no" title="statement not covered" > for route in channel.routes</span> <span class="cstat-no" title="statement not covered" > delete route._</span>id <span class="cstat-no" title="statement not covered" > promises.push new Channel(channel).save()</span> <span class="cstat-no" title="statement not covered" > return p</span>romises &nbsp; exports.loadDefaultChannels = <span class="fstat-no" title="function not covered" >(</span>urn) -&gt; # Must be admin if not authorisation.inGroup 'admin', this.authenticated <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 403, "User #{this.authenticated.email} is not an admin, API access to removeMediator denied.", 'info'</span> <span class="cstat-no" title="statement not covered" > return</span> &nbsp; <span class="cstat-no" title="statement not covered" > urn = u</span>nescape urn <span class="cstat-no" title="statement not covered" > channels = this.request.b</span>ody &nbsp; try <span class="cstat-no" title="statement not covered" > mediator = y</span>ield Mediator.findOne({ urn: urn }).lean().exec() &nbsp; if not mediator? <span class="cstat-no" title="statement not covered" > this.status = 4</span>04 <span class="cstat-no" title="statement not covered" > this.body = '</span>No mediator found for this urn.' <span class="cstat-no" title="statement not covered" > return</span> &nbsp; if not channels? or channels.length is 0 <span class="cstat-no" title="statement not covered" > yield Q.all saveDefaultChannelConfig(mediator.defaultChannelConfig)</span> else <span class="cstat-no" title="statement not covered" > filteredChannelConfig = m</span>ediator.defaultChannelConfig.filter <span class="fstat-no" title="function not covered" >(</span>channel) -&gt; <span class="cstat-no" title="statement not covered" > return c</span>hannel.name in channels <span class="cstat-no" title="statement not covered" > if filteredChannelConfig.length &lt; channels.length</span> <span class="cstat-no" title="statement not covered" > utils.logAndSetResponse this, 400, "Could not load mediator default channel config, one or more channels in the request body not found in the mediator config (urn: #{urn})", 'error'</span> <span class="cstat-no" title="statement not covered" > return</span> else <span class="cstat-no" title="statement not covered" > yield Q.all saveDefaultChannelConfig(filteredChannelConfig)</span> &nbsp; this.status = 201 catch <span class="cstat-no" title="statement not covered" >err</span> <span class="cstat-no" title="statement not covered" > logger.debug err.stack</span> utils.logAndSetResponse this, 500, "Could not load mediator default channel config (urn: #{urn}): #{err}", 'error' &nbsp;</pre></td></tr> </table></pre> <div class='push'></div><!-- for sticky footer --> </div><!-- /wrapper --> <div class='footer quiet pad2 space-top1 center small'> Code coverage generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Mon Oct 10 2016 13:39:22 GMT+0200 (SAST) </div> </div> <script src="../../prettify.js"></script> <script> window.onload = function () { if (typeof prettyPrint === 'function') { prettyPrint(); } }; </script> <script src="../../sorter.js"></script> </body> </html>