Skip to content
Open
Show file tree
Hide file tree
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
59 changes: 47 additions & 12 deletions IronMQ.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ function __construct($message, $properties = array()) {
}
}

public function encrypt($encryption_key) {
$this->body = IronMQ_Crypt::encrypt($this->body, $encryption_key);
}

public function getBody() {
return $this->body;
}
Expand Down Expand Up @@ -120,6 +124,29 @@ public function asArray() {
}
}

class IronMQ_Crypt {
const method = 'AES-256-CBC';
const signature = 'ENCRYPTED';

public static function encrypt($message, $encryption_key){
$iv = openssl_random_pseudo_bytes(16);

$encrypted = openssl_encrypt($message, self::method, self::keyDigest($encryption_key), 0, $iv);

return self::signature . ":" . base64_encode($iv) . ":" . $encrypted;
}

public static function decrypt($body, $encryption_key){
list($signature, $iv, $message) = explode(":", $body);

return openssl_decrypt($message, self::method, self::keyDigest($encryption_key), 0, base64_decode($iv));
}

private static function keyDigest($encryption_key){
return openssl_digest($encryption_key, 'sha256', true);
}
}

class IronMQ extends IronCore {

protected $client_version = '1.4.6';
Expand Down Expand Up @@ -238,15 +265,7 @@ public function clearQueue($queue_name) {
* @return mixed
*/
public function postMessage($queue_name, $message, $properties = array()) {
$msg = new IronMQ_Message($message, $properties);
$req = array(
"messages" => array($msg->asArray())
);
$this->setCommonHeaders();
$queue = rawurlencode($queue_name);
$url = "projects/{$this->project_id}/queues/$queue/messages";
$res = $this->apiCall(self::POST, $url, $req);
$decoded = self::json_decode($res);
$decoded = $this->postMessages($queue_name, array($message), $properties);
$decoded->id = $decoded->ids[0];
return $decoded;
}
Expand Down Expand Up @@ -274,6 +293,9 @@ public function postMessages($queue_name, $messages, $properties = array()) {
);
foreach($messages as $message) {
$msg = new IronMQ_Message($message, $properties);
if ($this->encryption_key){
$msg->encrypt($this->encryption_key);
}
array_push($req['messages'], $msg->asArray());
}
$this->setCommonHeaders();
Expand Down Expand Up @@ -304,10 +326,13 @@ public function getMessages($queue_name, $count = 1, $timeout = self::GET_MESSAG
$this->setJsonHeaders();
$response = $this->apiCall(self::GET, $url, $params);
$result = self::json_decode($response);
if(count($result->messages) < 1) {

$messages = $this->postProcessMessages($result->messages);

if(count($messages) < 1) {
return null;
} else {
return $result->messages;
return $messages;
}
}

Expand Down Expand Up @@ -375,7 +400,7 @@ public function peekMessages($queue_name, $count) {
}
$this->setJsonHeaders();
$response = self::json_decode($this->apiCall(self::GET, $url, $params));
return $response->messages;
return $this->postProcessMessages($response->messages);
}

/**
Expand Down Expand Up @@ -533,6 +558,16 @@ public function deleteMessagePushStatus($queue_name, $message_id, $subscription_

/* PRIVATE FUNCTIONS */


private function postProcessMessages($messages){
if ($this->encryption_key){
foreach($messages as $k => $v) {
$messages[$k]->body = IronMQ_Crypt::decrypt($v->body, $this->encryption_key);
}
}
return $messages;
}

private function setJsonHeaders(){
$this->setCommonHeaders();
}
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
],
"require": {
"php": ">=5.2.0",
"iron-io/iron_core": "*"
"iron-io/iron_core": ">=0.1.5"
},
"autoload": {
"files": ["IronMQ.class.php"]
Expand Down
Binary file modified iron_mq.phar
Binary file not shown.
112 changes: 88 additions & 24 deletions testMessages.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,40 +8,104 @@
#$ironmq->debug_enabled = true;
$ironmq->ssl_verifypeer = false;

$queue_name = 'test-php-queue';
$res = $ironmq->postMessage($queue_name, 'foo!');
$res = $ironmq->postMessage('test-queue-multi', 'foo!');


for ($i = 0; $i < 10; $i++){
echo "Post message:\n";
$res = $ironmq->postMessage("test_queue", "Test Message $i");
var_dump($res);

echo "Post messages:\n";
$res = $ironmq->postMessages("test-queue-multi", array("Test Message $i", "Test Message $i-2"));
var_dump($res);
print "run #$i: ";

$msg = "Test Message $i";

$res = $ironmq->clearQueue($queue_name);
$res = $ironmq->clearQueue('test-queue-multi');
if ($res->msg){
print ".";
}else{
print 'F';
var_dump($res);
}

#echo "Post message:\n";
$res = $ironmq->postMessage($queue_name, $msg);
if ($res->id && count($res->ids) == 1){
print ".";
}else{
print 'F';
var_dump($res);
}

#echo "Post messages:\n";
$res = $ironmq->postMessages("test-queue-multi", array($msg, $msg));
if (count($res->ids) == 2){
print ".";
}else{
print 'F';
var_dump($res);
}

#echo "Get message..\n";
$message = $ironmq->getMessage($queue_name);
if ($message->body == $msg){
print ".";
}else{
print 'F';
var_dump($message);
}

#echo "Touch message..\n";
$res = $ironmq->touchMessage($queue_name, $message->id);
if ($res->msg){
print ".";
}else{
print 'F';
var_dump($res);
}

#echo "Release message..\n";
$res = $ironmq->releaseMessage($queue_name, $message->id);
if ($res->msg){
print ".";
}else{
print 'F';
var_dump($res);
}

echo "Get message..\n";
$message = $ironmq->getMessage("test_queue");
print_r($message);
#echo "Peek message..\n";
$res = $ironmq->peekMessage($queue_name);
if ($res->body == $msg){
print ".";
}else{
print 'F';
var_dump($res);
}

echo "Touch message..\n";
$res = $ironmq->touchMessage("test_queue", $message->id);
print_r($res);
#echo "Delete message..\n";
$message = $ironmq->deleteMessage($queue_name, $message->id);

echo "Release message..\n";
$res = $ironmq->releaseMessage("test_queue", $message->id);
print_r($res);
if ($message){
print ".";
}else{
print 'F';
var_dump($message);
}

echo "Peek message..\n";
$res = $ironmq->peekMessage("test_queue");
print_r($res);

echo "Delete message..\n";
$message = $ironmq->deleteMessage("test_queue", $message->id);
print_r($message);
$res = $ironmq->getMessage($queue_name);
if ($res === null){
print ".";
}else{
print 'F';
var_dump($res);
}

$message = $ironmq->getMessage("test_queue");
print_r($message);

echo "\n";
$ironmq->postMessage($queue_name, $msg);
$ironmq->postMessage($queue_name, $msg);

echo "\n------$i-------\n";
}


Expand Down