initializers/params.js

'use strict'

const ActionHero = require('./../index.js')
const api = ActionHero.api

/**
 * Collects and formats allowed params for this server.
 *
 * @namespace api.params
 * @extends ActionHero.Initializer
 */
module.exports = class Params extends ActionHero.Initializer {
  constructor () {
    super()
    this.name = 'params'
    this.loadPriority = 420
  }

  initialize () {
    api.params = {
      postVariables: []
    }

    // special params we will always accept
    api.params.globalSafeParams = [
      'file',
      'apiVersion',
      'callback',
      'action'
    ]

    api.params.buildPostVariables = () => {
      let postVariables = []
      let i
      let j

      api.params.globalSafeParams.forEach((p) => {
        postVariables.push(p)
      })

      for (i in api.actions.actions) {
        for (j in api.actions.actions[i]) {
          let action = api.actions.actions[i][j]
          for (let key in action.inputs) {
            postVariables.push(key)
          }
        }
      }

      api.params.postVariables = api.utils.arrayUniqueify(postVariables)
      return api.params.postVariables
    }

    api.params.buildPostVariables()
  }
}