From 7551b6d08858c4f2690834d0f0908c4da27e7a15 Mon Sep 17 00:00:00 2001 From: Anton Priestley Date: Wed, 3 Jul 2013 23:26:16 +0100 Subject: [PATCH 1/2] Added Abitility To Use Certificate (PEM) Passwords Added Abitility To Use Certificate (PEM) Passwords. Also fixed some $_POST undefined warnings and session_start warnings --- .DS_Store | Bin 0 -> 6148 bytes .gitignore | 4 +++ ManagerAPNS/certs/MyAppName/cert_config.php | 7 +++++ ManagerAPNS/certs/MyAppName/sandbox.pem | 0 ManagerAPNS/include/apns-all.php | 11 ++++--- ManagerAPNS/include/class_APNS.php | 24 ++++++++++++--- ManagerAPNS/include/config.php | 11 ++++--- ManagerAPNS/include/sendPush.php | 29 +++++++++++++----- .../production.pem => log/APNSLog.log} | 0 9 files changed, 65 insertions(+), 21 deletions(-) create mode 100644 .DS_Store create mode 100644 .gitignore create mode 100644 ManagerAPNS/certs/MyAppName/cert_config.php mode change 100644 => 100755 ManagerAPNS/certs/MyAppName/sandbox.pem rename ManagerAPNS/{certs/MyAppName/production.pem => log/APNSLog.log} (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0'PEM_PASS_IF_REQUIRED', + 'development_cert'=>'ABSOLUTE_PATH_TO_PEM', + 'production_cert'=>'ABSOLUTE_PATH_TO_PEM' + ); +?> \ No newline at end of file diff --git a/ManagerAPNS/certs/MyAppName/sandbox.pem b/ManagerAPNS/certs/MyAppName/sandbox.pem old mode 100644 new mode 100755 diff --git a/ManagerAPNS/include/apns-all.php b/ManagerAPNS/include/apns-all.php index 6b10aa3..9e1bd1a 100644 --- a/ManagerAPNS/include/apns-all.php +++ b/ManagerAPNS/include/apns-all.php @@ -16,7 +16,6 @@ $db = new DbConnect($config->dbAddress, $config->dbUsername, $config->dbPassword, $config->dbName); $db->show_errors(); - $db_aux = mysql_connect($config->dbAddress, $config->dbUsername, $config->dbPassword); mysql_select_db($config->dbName, $db_aux); @@ -27,8 +26,12 @@ } foreach ($appNameList as $appname) { - $production = $config->absolutePath."/certs/".$appname."/production.pem"; - $sandbox = $config->absolutePath."/certs/".$appname."/sandbox.pem"; + include_once($config->absolutePath."/certs/".$appname."/cert_config.php"); + + $production = $cert_config['production_cert']; + $sandbox = $cert_config['development_cert']; + $log = $config->absolutePath.$config->logFile; + $passPhrase = $cert_config['passphrase']; // FETCH $_GET OR CRON ARGUMENTS TO AUTOMATE TASKS $args = (!empty($_GET)) ? $_GET:array('task'=>$argv[1]); @@ -36,6 +39,6 @@ $args['appname']=$appname; // CREATE APNS OBJECT, WITH DATABASE OBJECT AND ARGUMENTS - $apns= new APNS($db, $args, $production, $sandbox); + $apns= new APNS($db, $args, $production, $sandbox, $log, $passPhrase); } ?> diff --git a/ManagerAPNS/include/class_APNS.php b/ManagerAPNS/include/class_APNS.php index 934832c..d6b2485 100644 --- a/ManagerAPNS/include/class_APNS.php +++ b/ManagerAPNS/include/class_APNS.php @@ -1,5 +1,8 @@ array( 'certificate'=>$this->certificate, 'ssl'=>$this->ssl, - 'feedback'=>$this->feedback + 'feedback'=>$this->feedback, + 'certificate_password'=>$certificate_password ), 'sandbox'=>array( 'certificate'=>$this->sandboxCertificate, 'ssl'=>$this->sandboxSsl, - 'feedback'=>$this->sandboxFeedback + 'feedback'=>$this->sandboxFeedback, + 'certificate_password'=>$certificate_password ) ); if ($logPath !== null) { @@ -523,6 +528,11 @@ private function _iterateMessages($sql) { private function _connectSSLSocket($development) { $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $this->apnsData[$development]['certificate']); + if ($this->apnsData[$development]['certificate_password'] != NULL && + $this->apnsData[$development]['certificate_password']) { + stream_context_set_option($ctx, 'ssl', 'passphrase', $this->apnsData[$development]['certificate_password']); + } + $this->sslStreams[$development] = stream_socket_client($this->apnsData[$development]['ssl'], $error, $errorString, 100, (STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT), $ctx); if(!$this->sslStreams[$development]){ $this->_triggerError("Failed to connect to APNS: {$error} {$errorString}."); @@ -662,6 +672,10 @@ private function _pushMessage($pid, $message, $token, $development){ */ private function _checkFeedback($development){ $ctx = stream_context_create(); + if ($this->apnsData[$development]['certificate_password'] != NULL && + $this->apnsData[$development]['certificate_password']) { + stream_context_set_option($ctx, 'ssl', 'passphrase', $this->apnsData[$development]['certificate_password']); + } stream_context_set_option($ctx, 'ssl', 'local_cert', $this->apnsData[$development]['certificate']); stream_context_set_option($ctx, 'ssl', 'verify_peer', false); $fp = stream_socket_client($this->apnsData[$development]['feedback'], $error,$errorString, 100, (STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT), $ctx); @@ -1160,4 +1174,4 @@ public function processQueue(){ $this->_fetchMessages(); } } -?> +?> \ No newline at end of file diff --git a/ManagerAPNS/include/config.php b/ManagerAPNS/include/config.php index e37fd3f..54cc432 100644 --- a/ManagerAPNS/include/config.php +++ b/ManagerAPNS/include/config.php @@ -9,10 +9,11 @@ class EasyAPNSConfiguration { private $appList = array(); - public $dbUsername = "user"; //TO CHANGE - public $dbPassword = "pass";//TO CHANGE - public $dbName = "database";//TO CHANGE + public $dbUsername = "DB_USERNAME"; //TO CHANGE + public $dbPassword = "DB_PASS";//TO CHANGE + public $dbName = "DB_NAME";//TO CHANGE public $dbAddress = "localhost";//TO CHANGE - public $absolutePath = "/absolute/path/to/install/dir/";//TO CHANGE + public $logFile = "/log/APNSLog.log"; + public $absolutePath = "/var/www/httpdocs/MY_DOMAIN/public_html/ManagerAPNS"; } -?> +?> \ No newline at end of file diff --git a/ManagerAPNS/include/sendPush.php b/ManagerAPNS/include/sendPush.php index 10c900a..f672aa4 100644 --- a/ManagerAPNS/include/sendPush.php +++ b/ManagerAPNS/include/sendPush.php @@ -7,7 +7,13 @@ * @link https://github.com/apascual/ManagerAPNS */ - session_start(); // NEVER forget this! + error_reporting(E_ALL); +ini_set('display_errors', 1); + + if(!session_id()) { + session_start(); // NEVER forget this! + } + if(!isset($_SESSION['loggedin'])) { header("Location: index.php"); @@ -26,14 +32,23 @@ } $appname = $_POST['appname']; - - $production = $config->absolutePath."/certs/".$appname."/production.pem"; - $sandbox = $config->absolutePath."/certs/".$appname."/sandbox.pem"; + require_once($config->absolutePath."/certs/".$appname."/cert_config.php"); + + $production = $cert_config['production_cert']; + $sandbox = $cert_config['development_cert']; $db = new DbConnect($config->dbAddress, $config->dbUsername, $config->dbPassword, $config->dbName); $db->show_errors(); + + $apns= new APNS( + $db, + NULL, + $production, + $sandbox, + $config->absolutePath.$config->logFile, + $cert_config['passphrase'] + ); - $apns= new APNS($db, NULL, $production, $sandbox); $pidList = explode(';', $_POST['pid']); settype($_POST['badge'], "int"); @@ -41,7 +56,7 @@ $pid = $value; settype($pid, "int"); - if($_POST['date']) + if(array_key_exists('date', $_POST)) $apns->newMessage($pid,$_POST['date']); else $apns->newMessage($pid); @@ -49,7 +64,7 @@ $apns->addMessageAlert($_POST['message']); $apns->addMessageBadge($_POST['badge']); $apns->addMessageSound($_POST['sound']); - $apns->addMessageCustom('url', $_POST['url']); + $apns->addMessageCustom('url', (array_key_exists('url', $_POST) ? $_POST['url'] : null)); $apns->queueMessage(); } ?> diff --git a/ManagerAPNS/certs/MyAppName/production.pem b/ManagerAPNS/log/APNSLog.log similarity index 100% rename from ManagerAPNS/certs/MyAppName/production.pem rename to ManagerAPNS/log/APNSLog.log From aefc55a4dafee3c7797ec2f7a2eeef0f23ec730e Mon Sep 17 00:00:00 2001 From: Anton Priestley Date: Thu, 4 Jul 2013 00:34:42 +0100 Subject: [PATCH 2/2] Bug Fixes --- ManagerAPNS/include/sendFetch.php | 16 ++++++++++++---- ManagerAPNS/include/sendFlush.php | 25 ++++++++++++++++++++----- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/ManagerAPNS/include/sendFetch.php b/ManagerAPNS/include/sendFetch.php index b24853a..b085d4a 100644 --- a/ManagerAPNS/include/sendFetch.php +++ b/ManagerAPNS/include/sendFetch.php @@ -24,9 +24,10 @@ } $appname = $_POST['appname']; - - $production = $config->absolutePath."/certs/".$appname."/production.pem"; - $sandbox = $config->absolutePath."/certs/".$appname."/sandbox.pem"; + require_once($config->absolutePath."/certs/".$appname."/cert_config.php"); + + $production = $cert_config['production_cert']; + $sandbox = $cert_config['development_cert']; $db = new DbConnect($config->dbAddress, $config->dbUsername, $config->dbPassword, $config->dbName); $db->show_errors(); @@ -34,6 +35,13 @@ $args = array(); $args["task"] = "fetch"; $args["appname"]=$appname; - $apns= new APNS($db, $args, $production, $sandbox); + $apns= new APNS( + $db, + $args, + $production, + $sandbox, + $config->absolutePath.$config->logFile, + $cert_config['passphrase'] + ); ?> diff --git a/ManagerAPNS/include/sendFlush.php b/ManagerAPNS/include/sendFlush.php index 3b7f4aa..b0fcc9f 100644 --- a/ManagerAPNS/include/sendFlush.php +++ b/ManagerAPNS/include/sendFlush.php @@ -7,7 +7,13 @@ * @link https://github.com/apascual/ManagerAPNS */ - session_start(); // NEVER forget this! + error_reporting(E_ALL); +ini_set('display_errors', 1); + + if(!session_id()) { + session_start(); // NEVER forget this! + } + if(!isset($_SESSION['loggedin'])) { header("Location: index.php"); @@ -23,9 +29,10 @@ } $appname = $_POST['appname']; - - $production = $config->absolutePath."/certs/".$appname."/production.pem"; - $sandbox = $config->absolutePath."/certs/".$appname."/sandbox.pem"; + require_once($config->absolutePath."/certs/".$appname."/cert_config.php"); + + $production = $cert_config['production_cert']; + $sandbox = $cert_config['development_cert']; $db = new DbConnect($config->dbAddress, $config->dbUsername, $config->dbPassword, $config->dbName); $db->show_errors(); @@ -33,6 +40,14 @@ $args = array(); $args["task"] = "flush"; $args["appname"]=$appname; - $apns= new APNS($db, $args, $production, $sandbox); + + $apns= new APNS( + $db, + $args, + $production, + $sandbox, + $config->absolutePath.$config->logFile, + $cert_config['passphrase'] + ); ?>