123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- require_once("OAuth.php");
- require_once("TrivialOAuthDataStore.php");
- function getLastOAuthBodyBaseString() {
- global $LastOAuthBodyBaseString;
- return $LastOAuthBodyBaseString;
- }
- function getOAuthKeyFromHeaders()
- {
- $request_headers = OAuthUtil::get_headers();
- // print_r($request_headers);
- if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
- $header_parameters = OAuthUtil::split_header($request_headers['Authorization']);
- // echo("HEADER PARMS=\n");
- // print_r($header_parameters);
- return $header_parameters['oauth_consumer_key'];
- }
- return false;
- }
-
- function handleOAuthBodyPOST($oauth_consumer_key, $oauth_consumer_secret)
- {
- $request_headers = OAuthUtil::get_headers();
- // print_r($request_headers);
- // Must reject application/x-www-form-urlencoded
- $hdr = $request_headers['Content-type'];
- if ( !isset($hdr) ) $hdr = $request_headers['Content-Type'];
- if ($hdr == 'application/x-www-form-urlencoded' ) {
- throw new Exception("OAuth request body signing must not use application/x-www-form-urlencoded");
- }
- if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
- $header_parameters = OAuthUtil::split_header($request_headers['Authorization']);
- // echo("HEADER PARMS=\n");
- // print_r($header_parameters);
- $oauth_body_hash = $header_parameters['oauth_body_hash'];
- // echo("OBH=".$oauth_body_hash."\n");
- }
- if ( ! isset($oauth_body_hash) ) {
- throw new Exception("OAuth request body signing requires oauth_body_hash body");
- }
- // Verify the message signature
- $store = new TrivialOAuthDataStore();
- $store->add_consumer($oauth_consumer_key, $oauth_consumer_secret);
- $server = new OAuthServer($store);
- $method = new OAuthSignatureMethod_HMAC_SHA1();
- $server->add_signature_method($method);
- $request = OAuthRequest::from_request();
- global $LastOAuthBodyBaseString;
- $LastOAuthBodyBaseString = $request->get_signature_base_string();
- // echo($LastOAuthBodyBaseString."\n");
- try {
- $server->verify_request($request);
- } catch (Exception $e) {
- $message = $e->getMessage();
- throw new Exception("OAuth signature failed: " . $message);
- }
- $postdata = file_get_contents('php://input');
- // echo($postdata);
- $hash = base64_encode(sha1($postdata, TRUE));
- if ( $hash != $oauth_body_hash ) {
- throw new Exception("OAuth oauth_body_hash mismatch");
- }
- return $postdata;
- }
- function sendOAuthBodyPOST($method, $endpoint, $oauth_consumer_key, $oauth_consumer_secret, $content_type, $body)
- {
- $hash = base64_encode(sha1($body, TRUE));
- $parms = array('oauth_body_hash' => $hash);
- $test_token = '';
- $hmac_method = new OAuthSignatureMethod_HMAC_SHA1();
- $test_consumer = new OAuthConsumer($oauth_consumer_key, $oauth_consumer_secret, NULL);
- $acc_req = OAuthRequest::from_consumer_and_token($test_consumer, $test_token, $method, $endpoint, $parms);
- $acc_req->sign_request($hmac_method, $test_consumer, $test_token);
- // Pass this back up "out of band" for debugging
- global $LastOAuthBodyBaseString;
- $LastOAuthBodyBaseString = $acc_req->get_signature_base_string();
- // echo($LastOAuthBodyBaseString."\m");
- $header = $acc_req->to_header();
- $header = $header . "\r\nContent-type: " . $content_type . "\r\n";
- $params = array('http' => array(
- 'method' => 'POST',
- 'content' => $body,
- 'header' => $header
- ));
- try {
- $ctx = stream_context_create($params);
- $fp = @fopen($endpoint, 'rb', false, $ctx);
- } catch (Exception $e) {
- $fp = false;
- }
- if ($fp) {
- $response = @stream_get_contents($fp);
- } else { // Try CURL
- $headers = explode("\r\n",$header);
- $response = sendXmlOverPost($endpoint, $body, $headers);
- }
- if ($response === false) {
- throw new Exception("Problem reading data from $endpoint, $php_errormsg");
- }
- return $response;
- }
- function sendXmlOverPost($url, $xml, $header) {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- // For xml, change the content-type.
- curl_setopt ($ch, CURLOPT_HTTPHEADER, $header);
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ask for results to be returned
- /*
- if(CurlHelper::checkHttpsURL($url)) {
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
- }
- */
- // Send to remote and return data to caller.
- $result = curl_exec($ch);
- curl_close($ch);
- return $result;
- }
|