r0adkll
4/4/2015 - 6:15 AM

Slack Incoming Webhook script for lolcommits plugin "uploldz"

Slack Incoming Webhook script for lolcommits plugin "uploldz"

<?php
	
/***************************************************************************************************
 *
 *	Step 1: Save the sent file locally on the server   
 *    
 */
$file_name = basename($_FILES["file"]["name"]);
$target_file = "images/".basename($_FILES["file"]["name"]);
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
	
    // Pull the information from the POST request from 'uploldz' plugin
    $repo = $_POST["repo"];
    $message = $_POST["message"];
    $author_name = $_POST["author_name"];
    $author_email = $_POST["author_email"];
    $sha = $_POST["sha"];
    $key = $_POST["key"];
    
	// Form URLs for the slack request
    $imageUrl = "http://example.com/lolcommits/".$target_file;    
    $slackUrl = "https://hooks.slack.com/services/<SLACK_INCOMING_WEBHOOK_URL>";
    
    /***************************************************************************************************
	 *
	 *	Step 2: Build the Slack Payload
	 *    
	 */
    
	// Build the message fields
    $fieldRepo["title"] = "Repository";
    $fieldRepo["value"] = $key;
    $fieldRepo["short"] = true;

    $fieldHash["title"] = "Commit";
    $fieldHash["value"] = $sha;
    $fieldHash["short"] = true;    
    
    $fields = array($fieldRepo, $fieldHash);
    $attachment["fields"] = $fields;
    
    // Build the basic metadata
    $attachment["pretext"] = "New lolcommit from ".$author_name;
    $attachment["text"] = $message;
    $attachment["title"] = $file_name;
    $attachment["color"] = "#52AADD";
    $attachment["image_url"] = $imageUrl;
    
    // Construct & Encode
    $attachments = array($attachment);
    $payload["attachments"] = $attachments;
    $postdata = json_encode($payload);
    
    /***************************************************************************************************
	 *
	 *	Step 3: Begin the POST request to slack using cURL and Slack's Incoming Webhook api's 
	 *    
	 */
    
    // Get cURL resource
	$ch = curl_init();
	
	// Set url
	curl_setopt($ch, CURLOPT_URL, $slackUrl);
	
	// Set method
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
	
	// Set options
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	
	// Set body
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
	
	// Send the request & save response to $resp
	$resp = curl_exec($ch);
	
	if(!$resp) {
	  die('Error: "' . curl_error($ch) . '" - Code: ' . curl_errno($ch));
	} else {
	  echo "Response HTTP Status Code : " . curl_getinfo($ch, CURLINFO_HTTP_CODE);
	  echo "\nResponse HTTP Body : " . $resp;
	}
	
	// Close request to clear up some resources
	curl_close($ch);
    
} else {
    echo "Sorry, there was an error uploading your file.";
}

?>