array( 'title' => t('Administer fulcrm webhooks'), 'description' => t('Perform main installation/administration tasks for fulcrm webhooks.'), ), ); } function fulcrm_webhook_menu() { /* $items[ 'admin/config/services/fulcrm' ] = array( 'page callback' => 'system_admin_menu_block_page', 'file' => 'system.admin.inc', 'file path' => drupal_get_path('module', 'system'), 'title' => 'fulcrm', 'description' => 'Configuration integration with fulcrm.org.', 'position' => 'right', 'access callback' => 'user_access', 'access arguments' => array('access administration pages'), ); */ $items[ 'admin/config/services/fulcrm/webhook' ] = array( 'page callback' => 'fulcrm_webhook_admin', 'file' => 'fulcrm_webhook.admin.inc', 'title' => 'fulcrm webhooks', 'description' => 'Configure webhooks for fulcrm.org.', 'access callback' => 'user_access', 'access arguments' => array('administer fulcrm webhooks'), ); $items[ 'services/fulcrm/webhook/%' ] = array( 'page callback' => 'fulcrm_webhook_webhook', 'page arguments' => array(3), 'type' => MENU_CALLBACK, 'access callback' => 'user_access', 'access arguments' => array('access content'), ); return $items; } function fulcrm_webhook_webhook( $uuid ) { if ( $uuid === variable_get( 'fulcrm_webhook_url' ) ) { $headers = getallheaders(); $payload = null; $payload_error = null; $method = $_SERVER[ 'REQUEST_METHOD' ]; if ( array_key_exists( 'Content-Type', $headers ) && ( $headers[ 'Content-Type' ] === 'application/json' ) ) { $payload = json_decode( file_get_contents( "php://input" ) ); $payload_error = json_last_error(); $payload_error_msg = json_last_error_msg(); } $client_id = variable_get( 'fulcrm_apiv2_client_id' ); if ( fulcrm_apiv2_prevent_loop( $headers ) ) { switch ( $method ) { case 'GET': drupal_json_output( array( "status" => "error", "info" => "GET requests do nothing; webhooks must be POST, PATCH, PUT, or DELETE" ) ); break; case 'DELETE': case 'POST': case 'PATCH': case 'PUT': if ( $payload === null ) { drupal_json_output( array( 'status' => 'error', 'info' => $payload_error_msg ) ); } else { // actually do something :) drupal_json_output( array( 'status' => 'ok', 'headers' => $headers, 'method' => $method ) ); } break; default: drupal_json_output( array( 'status' => 'error', 'info' => 'unsupported method' ) ); break; } } else { drupal_json_output( array( 'status' => 'ok', 'info' => 'loop prevention' ) ); } } else { drupal_access_denied(); } }