Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions modules/sendgrid-sdk/handlers/webhooks.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,41 @@ component {
*/
property name="interceptorService" inject="coldbox:interceptorService";

/**
* SendGrid Module Settings
*/
property name="log" inject="logbox:logger:{this}";

/**
* Translate incoming webhooks to ColdBox interceptors
*/
function handle( event, rc, prc ) {
if ( needsAuth() ) {
log.debug( "Authentication is set up for SendGrid SDK. Checking credentials now" );
if ( isPartialAuthCredentials() ) {
log.warn( "Partial authentication detected for SendGrid SDK.", sendgridSettings );
return event.renderData( statusCode = 500, data = "Invalid auth configuration" );
}
if ( isInvalidAuthCredentials( event ) ) {
log.info( "Invalid incoming credentials detected for SendGrid webhook endpoint", {
"incomingCredentials": event.getHTTPBasicCredentials(),
"sendgridSettings": sendgridSettings
} );
return event.renderData( statusCode = 401, data = "Invalid credentials" );
}
}

var webhookEvents = event.getHTTPContent( json = true );
log.debug( "Converting incoming webhook events to interception points", webhookEvents );
for ( var webhookEvent in webhookEvents ) {
log.debug( "Announcing #generateStateName( webhookEvent )# SendGrid event", webhookEvent );
interceptorService.processState(
generateStateName( webhookEvent ),
webhookEvent
);
}

log.debug( "All events announced. Returning 200 to SendGrid" );
return event.renderData( statusCode = 200, data = "Successfully caught the webhook" );
}

Expand Down