Example #1
0
    ], async function (ctx, args) {
      if (!_.has(args, 'rid')) {
        throw new Error('engine:uninstallRuleset needs a rid string or array')
      }

      let picoId = picoArgOrCtxPico('uninstallRuleset', ctx, args)
      picoId = await core.db.assertPicoID(picoId)

      let ridIsString = ktypes.isString(args.rid)
      if (!ridIsString && !ktypes.isArray(args.rid)) {
        throw new TypeError('engine:uninstallRuleset was given ' + ktypes.toString(args.rid) + ' instead of a rid string or array')
      }
      if (ridIsString) {
        await core.uninstallRuleset(picoId, args.rid)
        return
      }

      let rids = _.uniq(args.rid)
      for (let rid of rids) {
        if (!ktypes.isString(rid)) {
          throw new TypeError('engine:uninstallRuleset was given a rid array containing a non-string (' + ktypes.toString(rid) + ')')
        }
      }

      for (let rid of rids) {
        await core.uninstallRuleset(picoId, rid)
      }
    }),
Example #2
0
    ], async function (ctx, args) {
      let ridGiven = _.has(args, 'rid')
      if (!ridGiven && !_.has(args, 'url')) {
        throw new Error('engine:installRuleset needs either a rid string or array, or a url string')
      }

      let picoId = picoArgOrCtxPico('installRuleset', ctx, args)
      picoId = await core.db.assertPicoID(picoId)

      let install = function (rid) {
        return core.installRuleset(picoId, rid)
          .then(function () {
            return rid
          })
      }

      if (ridGiven) {
        let ridIsString = ktypes.isString(args.rid)
        if (!ridIsString && !ktypes.isArray(args.rid)) {
          throw new TypeError('engine:installRuleset was given ' + ktypes.toString(args.rid) + ' instead of a rid string or array')
        }
        if (ridIsString) {
          return install(args.rid)
        }

        let rids = _.uniq(args.rid)

        for (let rid of rids) {
          if (!ktypes.isString(rid)) {
            throw new TypeError('engine:installRuleset was given a rid array containing a non-string (' + ktypes.toString(rid) + ')')
          }
        }
        return Promise.all(_.map(rids, install))
      }

      if (!ktypes.isString(args.url)) {
        throw new TypeError('engine:installRuleset was given ' + ktypes.toString(args.url) + ' instead of a url string')
      }
      let uri = ktypes.isString(args.base)
        ? urllib.resolve(args.base, args.url)
        : args.url

      let results = await core.db.findRulesetsByURL(uri)
      let rids = _.uniq(_.map(results, 'rid'))
      if (_.size(rids) === 0) {
        let data = await core.registerRulesetURL(uri)
        return install(data.rid)
      }
      if (_.size(rids) !== 1) {
        throw new Error('More than one rid found for the given url: ' + rids.join(' , '))
      }
      return install(_.head(rids))
    }),
Example #3
0
    ], async function (ctx, args) {
      if (!_.has(args, 'url')) {
        throw new Error('engine:registerRuleset needs a url string')
      }
      if (!ktypes.isString(args.url)) {
        throw new TypeError('engine:registerRuleset was given ' + ktypes.toString(args.url) + ' instead of a url string')
      }

      let uri = ktypes.isString(args.base)
        ? urllib.resolve(args.base, args.url)
        : args.url
      let data = await core.registerRulesetURL(uri)
      return data.rid
    }),
Example #4
0
    ], async function (ctx, args) {
      let picoId = picoArgOrCtxPico('newChannel', ctx, args)
      let policyId = ADMIN_POLICY_ID

      if (_.has(args, 'policy_id')) {
        if (!ktypes.isString(args.policy_id)) {
          throw new TypeError('engine:newChannel argument `policy_id` should be String but was ' + ktypes.typeOf(args.policy_id))
        }
        policyId = args.policy_id
      }

      if (!_.has(args, 'name')) {
        throw new Error('engine:newChannel needs a name string')
      }
      if (!_.has(args, 'type')) {
        throw new Error('engine:newChannel needs a type string')
      }

      picoId = await core.db.assertPicoID(picoId)

      policyId = await core.db.assertPolicyID(policyId)

      return core.db.newChannel({
        pico_id: picoId,
        name: ktypes.toString(args.name),
        type: ktypes.toString(args.type),
        policy_id: policyId
      })
    }),
Example #5
0
 ], async function (ctx, args) {
   if (!_.has(args, 'rid')) {
     throw new Error('engine:describeRuleset needs a rid string')
   }
   if (!ktypes.isString(args.rid)) {
     throw new TypeError('engine:describeRuleset was given ' + ktypes.toString(args.rid) + ' instead of a rid string')
   }
   let data = await core.db.getEnabledRuleset(args.rid)
   if (!data) {
     return
   }
   let rid = data.rid
   return {
     rid: rid,
     src: data.src,
     hash: data.hash,
     url: data.url,
     timestamp_stored: data.timestamp_stored,
     timestamp_enable: data.timestamp_enable,
     meta: {
       name: _.get(core.rsreg.get(rid), ['meta', 'name']),
       description: _.get(core.rsreg.get(rid), ['meta', 'description']),
       author: _.get(core.rsreg.get(rid), ['meta', 'author'])
     }
   }
 }),
Example #6
0
let picoArgOrCtxPico = function (fnName, ctx, args, key) {
  key = key || 'pico_id'
  let picoId = _.has(args, key) ? args[key] : ctx.pico_id
  if (!ktypes.isString(picoId)) {
    throw new TypeError('engine:' + fnName + ' was given ' + ktypes.toString(args.eci) + ' instead of a ' + key + ' string')
  }
  return picoId
}
Example #7
0
    ], async function (ctx, args) {
      let picoId = picoArgOrCtxPico('setPicoStatus', ctx, args)
      let isLeaving = args.isLeaving === true
      let movedToHost = ktypes.isString(args.movedToHost) ? args.movedToHost : null

      await core.db.setPicoStatus(picoId, isLeaving, movedToHost)

      return true
    }),
Example #8
0
    ], async function (ctx, args) {
      if (!_.has(args, 'rid')) {
        throw new Error('engine:unregisterRuleset needs a rid string or array')
      }
      if (ktypes.isString(args.rid)) {
        await core.unregisterRuleset(args.rid)
        return
      }
      if (!ktypes.isArray(args.rid)) {
        throw new TypeError('engine:unregisterRuleset was given ' + ktypes.toString(args.rid) + ' instead of a rid string or array')
      }

      let rids = _.uniq(args.rid)

      for (let rid of rids) {
        if (!ktypes.isString(rid)) {
          throw new TypeError('engine:unregisterRuleset was given a rid array containing a non-string (' + ktypes.toString(rid) + ')')
        }
      }

      for (let rid of rids) {
        await core.unregisterRuleset(rid)
      }
    }),
Example #9
0
    ], async function (ctx, args) {
      if (!_.has(args, 'eci')) {
        throw new Error('engine:removeChannel needs an eci string')
      }
      if (!ktypes.isString(args.eci)) {
        throw new TypeError('engine:removeChannel was given ' + ktypes.toString(args.eci) + ' instead of an eci string')
      }

      try {
        await core.db.removeChannel(args.eci)
        return true
      } catch (err) {
        if (err && err.notFound) return false
        throw err
      }
    }),
Example #10
0
    ], async function (ctx, args) {
      if (!_.has(args, 'eci')) {
        throw new Error('engine:getPicoIDByECI needs an eci string')
      }
      if (!ktypes.isString(args.eci)) {
        throw new TypeError('engine:getPicoIDByECI was given ' + ktypes.toString(args.eci) + ' instead of an eci string')
      }

      let pico
      try {
        pico = await core.db.getPicoIDByECI(args.eci)
      } catch (err) {
        if (err && err.notFound) return
        throw err
      }
      return pico
    }),