diff --git a/coffee/request-handler.coffee b/coffee/request-handler.coffee index 58acceb..3f0d1b5 100644 --- a/coffee/request-handler.coffee +++ b/coffee/request-handler.coffee @@ -355,6 +355,10 @@ exports.handleAdminCommand = ( req, resp ) => # Parse events and register to user if it's a user specific event parsePushAndAnswerEvent = ( eventname, username, body, resp ) -> + # Currently we allow JSON and form data to arrive at webhooks. + # TODO We should allow to choose arriving formats, such as xml too + # TODO We should implement body selectors for webhooks as well to + # add flexibility in the way the data arrives if typeof body is 'string' try body = JSON.parse body @@ -364,6 +368,7 @@ parsePushAndAnswerEvent = ( eventname, username, body, resp ) -> catch err resp.send 400, 'Badly formed event!' return + obj = eventname: eventname body: body @@ -389,7 +394,7 @@ exports.handleMeasurements = ( req, resp ) => if obj.eventname is 'uptimestatistics' # This is a hack to quickly allow storing of public accessible data fPath = path.resolve __dirname, '..', 'webpages', 'public', 'data', 'histochart.json' - fs.writeFile fPath, JSON.stringify( JSON.parse( body ), undefined, 2 ), 'utf8' + fs.writeFile fPath, JSON.stringify( obj, undefined, 2 ), 'utf8' ### Handles webhook posts diff --git a/js/request-handler.js b/js/request-handler.js index 90775f8..853327b 100644 --- a/js/request-handler.js +++ b/js/request-handler.js @@ -480,7 +480,7 @@ Request Handler obj = parsePushAndAnswerEvent(name, null, body, resp); if (obj.eventname === 'uptimestatistics') { fPath = path.resolve(__dirname, '..', 'webpages', 'public', 'data', 'histochart.json'); - return fs.writeFile(fPath, JSON.stringify(JSON.parse(body), void 0, 2), 'utf8'); + return fs.writeFile(fPath, JSON.stringify(obj, void 0, 2), 'utf8'); } }); }; diff --git a/webpages/handlers/coffee/forge_rule.coffee b/webpages/handlers/coffee/forge_rule.coffee index 3fc686f..d0de8c2 100644 --- a/webpages/handlers/coffee/forge_rule.coffee +++ b/webpages/handlers/coffee/forge_rule.coffee @@ -153,7 +153,7 @@ fConvertDayHourToMinutes = ( strDayHour ) -> # # Prepare the event section when a different event type is selected -fPrepareEventType = ( eventtype ) -> +fPrepareEventType = ( eventtype, cb ) -> $( '#select_event_type' ).val eventtype $( '#event_parameters > div' ).detach() switch eventtype @@ -161,6 +161,7 @@ fPrepareEventType = ( eventtype ) -> # The user wants to react to custom event when 'Custom Event' $( '#event_parameters' ).append domInputEventName + cb?() # The user wants a webhook as event producer when 'Webhook' @@ -185,8 +186,12 @@ fPrepareEventType = ( eventtype ) -> catch err fDisplayError 'Badly formed webhooks!' + + cb?() - fail: fFailedRequest 'Unable to get webhooks!' + fail: () -> + fFailedRequest 'Unable to get webhooks!' + cb?() when 'Event Poller' fIssueRequest @@ -211,8 +216,11 @@ fPrepareEventType = ( eventtype ) -> catch err console.error 'ERROR: non-object received for event poller from server: ' + data.message + cb?() - fail: fFailedRequest 'Error fetching Event Poller' + fail: () -> + fFailedRequest 'Error fetching Event Poller' + cb?() # Fetch the required Event Poller parameters fFetchEventParams = ( name ) -> @@ -481,20 +489,18 @@ fOnLoad = () -> # If the user is coming from an event UI he wants a rule to be setup for him switch oParams.eventtype when 'custom' - $( '#input_id' ).val "My '#{ oParams.eventname }' Rule" - fPrepareEventType 'Custom Event' - $( '#input_eventname' ).val oParams.eventname - $( '#input_eventname' ).focus() - editor.setValue "[\n\n]" # For now we don't prepare conditions + name = decodeURIComponent oParams.eventname + $( '#input_id' ).val "My '#{ name }' Rule" + fPrepareEventType 'Custom Event', () -> + $( '#input_eventname' ).val name + $( '#input_eventname' ).focus() + editor.setValue "[\n\n]" # For now we don't prepare conditions when 'webhook' - $( '#input_id' ).val "My '#{ oParams.hookname }' Rule" - fPrepareEventType 'Webhook' - domSelectWebhook.val oParams.hookname - - when 'poller' - $( '#input_id' ).val "My '#{ oParams.eventpoller }' Rule" - fPrepareEventType 'Event Poller' + name = decodeURIComponent oParams.hookname + $( '#input_id' ).val "My '#{ name }' Rule" + fPrepareEventType 'Webhook', () -> + $( 'select', domSelectWebhook ).val name # ACTIONS diff --git a/webpages/handlers/coffee/forge_webhook.coffee b/webpages/handlers/coffee/forge_webhook.coffee index 6c35c09..43697f8 100644 --- a/webpages/handlers/coffee/forge_webhook.coffee +++ b/webpages/handlers/coffee/forge_webhook.coffee @@ -85,6 +85,7 @@ fShowWebhookUsage = ( hookid, hookname ) -> fOnLoad = () -> document.title = 'Create Webhooks!' + $( '#pagetitle' ).text 'Create your own Webhooks!' # Load existing Webhooks fUpdateWebhookList fShowWebhookUsage diff --git a/webpages/handlers/js/forge_rule.js b/webpages/handlers/js/forge_rule.js index 9d88b6e..289023f 100644 --- a/webpages/handlers/js/forge_rule.js +++ b/webpages/handlers/js/forge_rule.js @@ -176,12 +176,13 @@ return Math.max(1, mins); }; - fPrepareEventType = function(eventtype) { + fPrepareEventType = function(eventtype, cb) { $('#select_event_type').val(eventtype); $('#event_parameters > div').detach(); switch (eventtype) { case 'Custom Event': - return $('#event_parameters').append(domInputEventName); + $('#event_parameters').append(domInputEventName); + return typeof cb === "function" ? cb() : void 0; case 'Webhook': return fIssueRequest({ data: { @@ -200,17 +201,21 @@ selHook.append($('