EM
Feb 02, 2018Nimbostratus
HTTP Response from ILXPlugin
Hi DevCentral community!
I am currently trying to develop an iRule ILXPlugin, which checks a client HTTP request for certain properties. If some condiditions don't match I would like to send an HTTP response error message from the ILXPlugin to the client (without further forwarding to the backend). If everything is valid I want to forward it to the respective backend pool member.
Unfortunately, the ILXTransaction does not provide any real examples (other than the description) on how to use the methods respond and replaceBody to achieve this use case.
You can find my current code below, whereas I am trying to send a response with a custom html body and HTTP status code 404:
'use strict';
var f5 = require('f5-nodejs');
var plugin = new f5.ILXPlugin();
var options = new f5.ILXPluginOptions();
options.handleServerData = false;
options.handleServerResponse = false;
options.handleClientData = false;
options.handleClientOpen = true;
plugin.on('initialized', function () {
console.log('INITIALIZED');
});
plugin.on('connect', function(flow) {
var tmmID = flow.tmmId();
var clientSourceAddress = flow.client.remoteAddress;
flow.client.on('requestComplete', function(request) {
var destinationHost = request.params.headers.host;
var requestMethod = request.params.method;
// Example
if(requestMethod === 'POST') {
request.replaceBody();
request.respond();
// Send response with body: 'ERROR RESPONSE!' and Status Code '404'
flow.client.end();
}
var options = new f5.ILXLbOptions();
options.pool = '/Common/api_pool';
flow.lbSelect(options);
flow.client.allow();
request.complete();
});
flow.client.on('error', function(errorText) {
console.error('client error event: ' + errorText);
});
flow.server.on('error', function(errorText) {
console.error('server error event: ' + errorText);
});
flow.on('error', function(errorText) {
console.error('flow error event: ' + errorText);
});
});
plugin.start(options);
I would appreciate any suggestions.
Thank you in advance.