 ###
 # Retrieves the list of active channels
 ###
-exports.getChannels = `function *getChannels() {
-  try {
-    this.body = yield authorisation.getUserViewableChannels(this.authenticated);
-  }
-  catch (e) {
-    // Error! So inform the user
-    logger.error('Could not fetch all channels via the API: ' + e);
-    this.body = e.message;
-    this.status = 'internal server error';
-  }
-}`
-
+exports.getChannels = ->
+  try
+    this.body = yield authorisation.getUserViewableChannels this.authenticated
+  catch err
+    utils.logAndSetResponse this, 'internal server error', "Could not fetch all channels via the API: #{err}", 'error'
 
 processPostAddTriggers = (channel) ->
   if channel.type and authMiddleware.isChannelEnabled channel

      else
        polling.removePollingChannel channel, (err) -> logger.error err if err


###
# Updates the details for a specific channel
###
exports.updateChannel = `function *updateChannel(channelId) {

  // Test if the user is authorised
  if (authorisation.inGroup('admin', this.authenticated) === false) {
    logger.info('User ' +this.authenticated.email+ ' is not an admin, API access to updateChannel denied.')
    this.body = 'User ' +this.authenticated.email+ ' is not an admin, API access to updateChannel denied.'
    this.status = 'forbidden';
    return;
  }

  // Get the values to use
  var id = unescape(channelId);
  var channelData = this.request.body;

  //Ignore _id if it exists, user cannot change the internal id
  if (typeof channelData._id !== 'undefined') {
    delete channelData._id;
  }

  if (!isPathValid(channelData)) {
    this.body = 'Channel cannot have both path and pathTransform. pathTransform must be of the form s/from/to[/g]';
    this.status = 'bad request';
    return;
  }

  try {
    var channel = yield Channel.findByIdAndUpdate(id, channelData).exec();

    // All ok! So set the result
    this.body = 'The channel was successfully updated';
    logger.info('User %s updated channel with id %s', this.authenticated.email, id);

    processPostUpdateTriggers(channel);
  }
  catch (e) {
    // Error! So inform the user
    logger.error('Could not update channel by id: ' +id+ ' via the API: ' + e);
    this.body = e.message;
    this.status = 'internal server error';
  }
}`


processPostDeleteTriggers = (channel) ->
  if channel.type

    else if channel.type is 'polling'
      polling.registerPollingChannel channel, (err) -> logger.error err if err

###
# Creates a new channel
###
exports.addChannel = ->
  # Test if the user is authorised
  if authorisation.inGroup('admin', this.authenticated) is false
    utils.logAndSetResponse this, 'forbidden', "User #{this.authenticated.email} is not an admin, API access to addChannel denied.", 'info'
    return

  # Get the values to use
  channelData = this.request.body

  try
    channel = new Channel channelData

    if not isPathValid channel
      this.body = 'Channel cannot have both path and pathTransform. pathTransform must be of the form s/from/to[/g]'
      this.status = 'bad request'
      return

    result = yield Q.ninvoke channel, 'save'

    # All ok! So set the result
    this.body = 'Channel successfully created'
    this.status = 'created'
    logger.info 'User %s created channel with id %s', this.authenticated.email, channel.id

    processPostAddTriggers channel
  catch err
    # Error! So inform the user
    util.logAndSetResponse this, 'bad request', "Could not add channel via the API: #{err}", 'error'

###
# Retrieves the details for a specific channel
###
exports.getChannel = (channelId) ->
  # Get the values to use
  id = unescape channelId

  try
    # Try to get the channel
    result = null
    accessDenied = false
    # if admin allow acces to all channels otherwise restrict result set
    if authorisation.inGroup('admin', this.authenticated) is false
      result = yield Channel.findOne({ _id: id, txViewAcl: { $in: this.authenticated.groups } }).exec()
      adminResult = yield Channel.findById(id).exec()
      if adminResult?
        accessDenied = true
    else
      result = yield Channel.findById(id).exec()

    # Test if the result if valid
    if result is null
      if accessDenied
        # Channel exists but this user doesn't have access
        this.body = "Access denied to channel with Id: '#{id}'."
        this.status = 'forbidden'
      else
        # Channel not found! So inform the user
        this.body = "We could not find a channel with Id:'#{id}'."
        this.status = 'not found'
    else
      # All ok! So set the result
      this.body = result
  catch err
    # Error! So inform the user
    utils.logAndSetResponse this, 'internal server error', "Could not fetch channel by Id '#{id}' via the API: #{err}", 'error'

processPostUpdateTriggers = (channel) ->
  if channel.type
