You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by ch...@apache.org on 2008/07/29 19:38:11 UTC

svn commit: r680784 - /incubator/shindig/trunk/php/src/gadgets/SigningFetcherFactory.php

Author: chabotc
Date: Tue Jul 29 10:38:10 2008
New Revision: 680784

URL: http://svn.apache.org/viewvc?rev=680784&view=rev
Log:
SHINDIG-477 by Ram Sharma, better handling of missing keys

Modified:
    incubator/shindig/trunk/php/src/gadgets/SigningFetcherFactory.php

Modified: incubator/shindig/trunk/php/src/gadgets/SigningFetcherFactory.php
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/php/src/gadgets/SigningFetcherFactory.php?rev=680784&r1=680783&r2=680784&view=diff
==============================================================================
--- incubator/shindig/trunk/php/src/gadgets/SigningFetcherFactory.php (original)
+++ incubator/shindig/trunk/php/src/gadgets/SigningFetcherFactory.php Tue Jul 29 10:38:10 2008
@@ -1,4 +1,4 @@
-<?php
+<?php
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -16,15 +16,15 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
- */
-
+ */
+
 /**
  * Produces Signing content fetchers for input tokens.
- */
-class SigningFetcherFactory {
-    private $keyName;
-    private $privateKey;
-
+ */
+class SigningFetcherFactory {
+	private $keyName;
+	private $privateKey;
+
 	/**
 	 * Produces a signing fetcher that will sign requests and delegate actual
 	 * network retrieval to the {@code networkFetcher}
@@ -33,50 +33,59 @@
 	 * @param token The gadget token used for extracting signing parameters.
 	 * @return The signing fetcher.
 	 * @throws GadgetException
-	 */
-	public function getSigningFetcher($networkFetcher, $token)
-	{
-		return SigningFetcher::makeFromB64PrivateKey($networkFetcher, $token, $this->keyName, $this->privateKey);
-	}
-
+	 */
+	public function getSigningFetcher($networkFetcher, $token)
+	{
+		return SigningFetcher::makeFromB64PrivateKey($networkFetcher, $token, $this->keyName, $this->privateKey);
+	}
+
 	/**
 	 * @param keyFile The file containing your private key for signing requests.
-	 */
-	public function __construct($keyFile = null)
-	{
-		$this->keyName = 'http://'.$_SERVER["HTTP_HOST"].Config::get('web_prefix').'/public.crt';
-		if (! empty($keyFile)) {
-			$privateKey = null;
-			try {
+	 */
+	public function __construct($keyFile = null)
+	{
+		$this->keyName = 'http://' . $_SERVER["HTTP_HOST"] . Config::get('web_prefix') . '/public.crt';
+		if (! empty($keyFile)) {
+			$privateKey = null;
+			try {
 				// check if the converted from PKCS8 key is in cache, if not, convert it
-				$cache = Config::get('data_cache');
-				$cache = new $cache();
-				if (($cachedKey = $cache->get(md5("RSA_PRIVATE_KEY_" . $this->keyName))) !== false) {
-					$rsa_private_key = $cachedKey;
-				} else {
-					if (! $rsa_private_key = @file_get_contents($keyFile)) {
-						throw new Exception("Could not read keyfile ($keyFile), check the file name and permission");
-					}
-					$phrase = Config::get('private_key_phrase') != '' ? (Config::get('private_key_phrase')) : null;
-					if (strpos($rsa_private_key, "-----BEGIN") === false) {
-						$privateKey .= "-----BEGIN PRIVATE KEY-----\n";
-						$chunks = str_split($rsa_private_key, 64);
-						foreach ($chunks as $chunk) {
-							$privateKey .= $chunk . "\n";
-						}
-						$privateKey .= "-----END PRIVATE KEY-----";
+				$cache = Config::get('data_cache');
+				$cache = new $cache();
+				if (($cachedKey = $cache->get(md5("RSA_PRIVATE_KEY_" . $this->keyName))) !== false) {
+					$rsa_private_key = $cachedKey;
+				} else {
+					if (file_exists($keyFile) && is_readable($keyFile)) {
+						$rsa_private_key = @file_get_contents($keyFile);
 					} else {
-						$privateKey = $rsa_private_key;
-					}
-					$cache->set(md5("RSA_PRIVATE_KEY_" . $this->keyName), $rsa_private_key);
-					if (! $rsa_private_key = @openssl_pkey_get_private($privateKey, $phrase)) {
-						throw new Exception("Could not create the key");
-					}
-				}
-			} catch (Exception $e) {
-				throw new Exception("Error loading private key: " . $e);
-			}
-			$this->privateKey = $rsa_private_key;
-		}
-	}
+						throw new Exception("Could not read keyfile ($keyFile), check the file name and permission");
+					}
+					if (! $rsa_private_key) {
+						$rsa_private_key = "";
+					} else {
+						$phrase = Config::get('private_key_phrase') != '' ? (Config::get('private_key_phrase')) : null;
+						if (strpos($rsa_private_key, "-----BEGIN") === false) {
+							$privateKey .= "-----BEGIN PRIVATE KEY-----\n";
+							$chunks = str_split($rsa_private_key, 64);
+							foreach ($chunks as $chunk) {
+								$privateKey .= $chunk . "\n";
+							}
+							$privateKey .= "-----END PRIVATE KEY-----";
+						} else {
+							$privateKey = $rsa_private_key;
+						}
+						if (! $rsa_private_key = @openssl_pkey_get_private($privateKey, $phrase)) {
+							throw new Exception("Could not create the key");
+						}
+					}
+					$cache->set(md5("RSA_PRIVATE_KEY_" . $this->keyName), $rsa_private_key);
+					if (! $rsa_private_key = @openssl_pkey_get_private($privateKey, $phrase)) {
+						throw new Exception("Could not create the key");
+					}
+				}
+			} catch (Exception $e) {
+				throw new Exception("Error loading private key: " . $e);
+			}
+			$this->privateKey = $rsa_private_key;
+		}
+	}
 }