args['projectId']; $event = $this->args['event']; $payload = json_encode($this->args['payload']); // Webhook Authorization::disable(); $project = $consoleDB->getDocument($projectId); Authorization::enable(); if(is_null($project->getUid()) || Database::SYSTEM_COLLECTION_PROJECTS !== $project->getCollection()) { throw new Exception('Project Not Found'); } foreach ($project->getAttribute('webhooks', []) as $webhook) { if(!(isset($webhook['events']) && is_array($webhook['events']) && in_array($event, $webhook['events']))) { continue; } $name = (isset($webhook['name'])) ? $webhook['name'] : ''; $signature = (isset($webhook['signature'])) ? $webhook['signature'] : 'not-yet-implemented'; $url = (isset($webhook['url'])) ? $webhook['url'] : ''; $security = (isset($webhook['security'])) ? (bool)$webhook['security'] : true; $httpUser = (isset($webhook['httpUser'])) ? $webhook['httpUser'] : null; $httpPass = (isset($webhook['httpPass'])) ? $webhook['httpPass'] : null; $ch = curl_init($url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, sprintf(APP_USERAGENT, $version)); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json', 'Content-Length: ' . strlen($payload), 'X-' . APP_NAME . '-Event: ' . $event, 'X-' . APP_NAME . '-Webhook-Name: ' . $name, 'X-' . APP_NAME . '-Webhook-Signature: ' . $signature ] ); if(!$security) { curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); } if(!empty($httpUser) && !empty($httpPass)) { curl_setopt($ch, CURLOPT_USERPWD, "$httpUser:$httpPass"); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); } if(false === curl_exec($ch)) { $errors[] = curl_error($ch) . ' in event ' . $event . ' for webhook ' . $name; } curl_close($ch); } if(!empty($errors)) { throw new Exception(implode(" / \n\n" , $errors)); } } public function tearDown() { // ... Remove environment for this job } }