diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 2b187718b94..3f1d7543a80 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -3094,3 +3094,7 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- tweak: the e20 will now get logged when it goes BEWM, as it should.
Fox McCloud:
- bugfix: Fixes double-breaking news newscaster
+2016-11-26
+ Fox McCloud:
+ - bugfix: Fixes faint emote doing nothing
+ - bugfix: Fixes Mickey Finn's Special Brew not functioning properly/not making you fall asleep
\ No newline at end of file
diff --git a/tools/github_webhook_processor.php b/tools/github_webhook_processor.php
index 26a08418d69..c27a7eb4c5b 100644
--- a/tools/github_webhook_processor.php
+++ b/tools/github_webhook_processor.php
@@ -20,7 +20,7 @@
//Github lets you have it sign the message with a secret that you can validate. This prevents people from faking events.
//This var should match the secret you configured for this webhook on github.
-//set to NULL (no quotes) to disable validation.
+//This is required as otherwise somebody could trick the script into leaking the api key.
$hookSecret = '08ajh0qj93209qj90jfq932j32r';
//Api key for pushing changelogs.
@@ -49,27 +49,36 @@ set_exception_handler(function($e) {
die();
});
$rawPost = NULL;
-if ($hookSecret !== NULL) {
- if (!isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) {
- throw new \Exception("HTTP header 'X-Hub-Signature' is missing.");
- } elseif (!extension_loaded('hash')) {
- throw new \Exception("Missing 'hash' extension to check the secret code validity.");
- }
- list($algo, $hash) = explode('=', $_SERVER['HTTP_X_HUB_SIGNATURE'], 2) + array('', '');
- if (!in_array($algo, hash_algos(), TRUE)) {
- throw new \Exception("Hash algorithm '$algo' is not supported.");
- }
- $rawPost = file_get_contents('php://input');
- if ($hash !== hash_hmac($algo, $rawPost, $hookSecret)) {
- throw new \Exception('Hook secret does not match.');
- }
+if (!$hookSecret || $hookSecret == '08ajh0qj93209qj90jfq932j32r')
+ throw new \Exception("Hook secret is required and can not be default");
+if (!isset($_SERVER['HTTP_X_HUB_SIGNATURE'])) {
+ throw new \Exception("HTTP header 'X-Hub-Signature' is missing.");
+} elseif (!extension_loaded('hash')) {
+ throw new \Exception("Missing 'hash' extension to check the secret code validity.");
}
+list($algo, $hash) = explode('=', $_SERVER['HTTP_X_HUB_SIGNATURE'], 2) + array('', '');
+if (!in_array($algo, hash_algos(), TRUE)) {
+ throw new \Exception("Hash algorithm '$algo' is not supported.");
+}
+$rawPost = file_get_contents('php://input');
+if ($hash !== hash_hmac($algo, $rawPost, $hookSecret)) {
+ throw new \Exception('Hook secret does not match.');
+}
+
+$contenttype = null;
+//apache and nginx/fastcgi/phpfpm call this two different things.
if (!isset($_SERVER['HTTP_CONTENT_TYPE'])) {
- throw new \Exception("Missing HTTP 'Content-Type' header.");
-} elseif (!isset($_SERVER['HTTP_X_GITHUB_EVENT'])) {
+ if (!isset($_SERVER['CONTENT_TYPE']))
+ throw new \Exception("Missing HTTP 'Content-Type' header.");
+ else
+ $contenttype = $_SERVER['CONTENT_TYPE'];
+} else {
+ $contenttype = $_SERVER['HTTP_CONTENT_TYPE'];
+}
+if (!isset($_SERVER['HTTP_X_GITHUB_EVENT'])) {
throw new \Exception("Missing HTTP 'X-Github-Event' header.");
}
-switch ($_SERVER['HTTP_CONTENT_TYPE']) {
+switch ($contenttype) {
case 'application/json':
$json = $rawPost ?: file_get_contents('php://input');
break;
@@ -77,7 +86,7 @@ switch ($_SERVER['HTTP_CONTENT_TYPE']) {
$json = $_POST['payload'];
break;
default:
- throw new \Exception("Unsupported content type: $_SERVER[HTTP_CONTENT_TYPE]");
+ throw new \Exception("Unsupported content type: $contenttype");
}
# Payload structure depends on triggered event
# https://developer.github.com/v3/activity/events/types/
@@ -146,14 +155,14 @@ function checkchangelog($payload, $merge = false) {
$foundcltag = false;
foreach ($body as $line) {
$line = trim($line);
- if (substr($line,0,4) == ':cl:') {
+ if (substr($line,0,4) == ':cl:' || substr($line,0,4) == '🆑') {
$incltag = true;
$foundcltag = true;
$pos = strpos($line, " ");
if ($pos)
$username = substr($line, $pos+1);
continue;
- } else if (substr($line,0,5) == '/:cl:' || substr($line,0,6) == '/ :cl:' || substr($line,0,5) == ':/cl:') {
+ } else if (substr($line,0,5) == '/:cl:' || substr($line,0,6) == '/ :cl:' || substr($line,0,5) == ':/cl:' || substr($line,0,5) == '/🆑' || substr($line,0,6) == '/ 🆑' ) {
$incltag = false;
$changelogbody = array_merge($changelogbody, $currentchangelogblock);
continue;
@@ -242,7 +251,7 @@ function checkchangelog($payload, $merge = false) {
if (!count($changelogbody))
return;
- $file = 'author: '.$username."\n";
+ $file = 'author: "'.trim(str_replace(array("\\", '"'), array("\\\\", "\\\""), $username)).'"'."\n";
$file .= "delete-after: True\n";
$file .= "changes: \n";
foreach ($changelogbody as $changelogitem) {
@@ -252,8 +261,9 @@ function checkchangelog($payload, $merge = false) {
$file .= "\n";
}
$content = array (
- 'message' => 'Automatic changelog generation for PR #'.$payload['pull_request']['number'],
- 'content' => base64_encode($file)
+ 'branch' => $payload['pull_request']['base']['ref'],
+ 'message' => 'Automatic changelog generation for PR #'.$payload['pull_request']['number'].' [ci skip]',
+ 'content' => base64_encode($file)
);
$scontext = array('http' => array(
'method' => 'PUT',
@@ -342,4 +352,4 @@ function export($addr, $port, $str) {
$error = true;
return "ERROR";
}
-?>
+?>
\ No newline at end of file