--- Consumer_old.php 2008-04-11 16:10:43.000000000 -0700
+++ Consumer_new.php 2008-04-17 21:38:26.000000000 -0700
@@ -291,20 +291,6 @@
}
$params2['openid.mode'] = 'check_authentication';
$ret = $this->_httpRequest($server, 'POST', $params2);
- $r = array();
- if (is_string($ret)) {
- foreach(explode("\n", $ret) as $line) {
- $line = trim($line);
- if (!empty($line)) {
- $x = explode(':', $line, 2);
- if (is_array($x) && count($x) == 2) {
- list($key, $value) = $x;
- $r[trim($key)] = trim($value);
- }
- }
- }
- }
- $ret = $r;
if (!empty($ret['invalidate_handle'])) {
if ($this->_storage->getAssociationByHandle(
$ret['invalidate_handle'],
@@ -419,9 +405,25 @@
} catch (Exception $e) {
return false;
}
- if ($response->getStatus() == 200) {
- return $response->getBody();
- }else{
+ if ($response->getStatus() == 200 || $response->getStatus() == 400) {
+ $r = array();
+ $result_body = $response->getBody();
+ foreach(explode("\n", $result_body) as $line) {
+ $line = trim($line);
+ if (!empty($line)) {
+ $x = explode(':', $line, 2);
+ if (is_array($x) && count($x) == 2) {
+ list($key, $value) = $x;
+ $r[trim($key)] = trim($value);
+ }
+ }
+ }
+ $r['Zend_OpenId_Http_Status'] = $response->getStatus();
+ $r['Zend_OpenId_Http_Response_Body'] = $response->getBody();
+ return $r;
+ }
+
+ else{
return false;
}
}
@@ -488,18 +490,30 @@
return false;
}
- $r = array();
- foreach(explode("\n", $ret) as $line) {
- $line = trim($line);
- if (!empty($line)) {
- $x = explode(':', $line, 2);
- if (is_array($x) && count($x) == 2) {
- list($key, $value) = $x;
- $r[trim($key)] = trim($value);
- }
+ // Had to take out the Http_Status == 400 because beemba doesn't follow
+ // spec. I imagine other people also don't follow this spec, so
+ // it's out for right now.
+ if( /*$ret['Zend_OpenId_Http_Status'] == 400 &&*/
+ $params['openid.assoc_type'] == 'HMAC-SHA256' &&
+ $ret['error_code'] == 'unsupported-type')
+ {
+ //We got an error because they don't support SHA256, generate a new private key and try sha1
+ $params['openid.assoc_type'] = 'HMAC-SHA1';
+ $params['openid.session_type'] = 'DH-SHA1';
+ $dh = Zend_OpenId::createDhKey(pack('H*', Zend_OpenId::DH_P),
+ pack('H*', Zend_OpenId::DH_G),
+ $priv_key);
+ $dh_details = Zend_OpenId::getDhKeyDetails($dh);
+
+ $params['openid.dh_modulus'] = base64_encode(Zend_OpenId::btwoc($dh_details['p']));
+ $params['openid.dh_gen'] = base64_encode(Zend_OpenId::btwoc($dh_details['g']));
+ $params['openid.dh_consumer_public'] = base64_encode(Zend_OpenId::btwoc($dh_details['pub_key']));
+
+ $ret = $this->_httpRequest($url, 'POST', $params);
+ if($ret === false || $ret['Zend_OpenId_Http_Status'] != 200){
+ return false;
}
}
- $ret = $r;
if ($version >= 2.0 &&
isset($ret['ns']) &&
@@ -597,35 +611,35 @@
$id = $realId;
return true;
}
-
/* TODO: OpenID 2.0 (7.3) XRI and Yadis discovery */
/* HTML-based discovery */
$response = $this->_httpRequest($id);
- if (!is_string($response)) {
+ if (!is_string($response['Zend_OpenId_Http_Response_Body']) ||
+ $response['Zend_OpenId_Http_Status'] != 200) {
return false;
}
if (preg_match(
'/]*rel=(["\'])openid2.provider\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$version = 2.0;
$server = $r[3];
} else if (preg_match(
'/]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])openid2.provider\\3[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$version = 2.0;
$server = $r[2];
} else if (preg_match(
'/]*rel=(["\'])openid.server\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$version = 1.1;
$server = $r[3];
} else if (preg_match(
'/]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])openid.server\\3[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$version = 1.1;
$server = $r[2];
@@ -635,24 +649,24 @@
if ($version >= 2.0) {
if (preg_match(
'/]*rel=(["\'])openid2.local_id\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$realId = $r[3];
} else if (preg_match(
'/]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])openid2.local_id\\3[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$realId = $r[2];
}
} else {
if (preg_match(
'/]*rel=(["\'])openid.delegate\\1[^>]*href=(["\'])([^"\']+)\\2[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$realId = $r[3];
} else if (preg_match(
'/]*href=(["\'])([^"\']+)\\1[^>]*rel=(["\'])openid.delegate\\3[^>]*\/?>/i',
- $response,
+ $response['Zend_OpenId_Http_Response_Body'],
$r)) {
$realId = $r[2];
}