Skip to content
Snippets Groups Projects
Commit 4f81cece authored by Mike Pearce's avatar Mike Pearce
Browse files

Removed exceptions and error suppressions, replaced output buffering with file_get_contents()

As we hide Exceptions from the end user, I've changed it to _doing_it_wrong(), so even if there is a problem, it'll be picked up in development.
The errors were supporessed because if image data was passed as a string, the file_exists() and is_readable() don't pattern match, they look for a file. So complain they were passed a string and not a file path. The best way around this is to look for a supported file extension first.
Output buffering seems overkill when you're only looking for the content of one file. So changed to file_get_contents()
parent 5746d3ed
No related branches found
No related tags found
No related merge requests found
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* An extension of the Codebird class to use Wordpress' HTTP API instead of * An extension of the Codebird class to use Wordpress' HTTP API instead of
* cURL. * cURL.
* *
* @version 1.1.1 * @version 1.1.0
*/ */
class WP_Codebird extends Codebird { class WP_Codebird extends Codebird {
/** /**
...@@ -12,6 +12,12 @@ class WP_Codebird extends Codebird { ...@@ -12,6 +12,12 @@ class WP_Codebird extends Codebird {
*/ */
private static $_instance = null; private static $_instance = null;
/**
* The file formats extensions twitter supports
* @var array
*/
protected $_supported_media_files_extensions = array( 'gif', 'jpg', 'jpeg', 'png' );
/** /**
* Returns singleton class instance * Returns singleton class instance
* Always use this method unless you're working with multiple authenticated * Always use this method unless you're working with multiple authenticated
...@@ -54,16 +60,12 @@ class WP_Codebird extends Codebird { ...@@ -54,16 +60,12 @@ class WP_Codebird extends Codebird {
* @param string $httpmethod The HTTP method to use for making the request * @param string $httpmethod The HTTP method to use for making the request
* @param string $method The API method to call * @param string $method The API method to call
* @param string $method_template The templated API method to call * @param string $method_template The templated API method to call
* @param array $params The parameters to send along (optional) * @param array optional $params The parameters to send along
* @param bool $multipart Whether to use multipart/form-data (optional) * @param bool optional $multipart Whether to use multipart/form-data
* @param bool $app_only_auth
*
* @throws Exception If something goes awry with auth or the reply
* *
* @return mixed The API reply, encoded in the set return_format. * @return mixed The API reply, encoded in the set return_format.
*/ */
protected function _callApi( $httpmethod, $method, $method_template, $params = array(), $multipart = false, $app_only_auth = false ) { protected function _callApi( $httpmethod, $method, $method_template, $params = array(), $multipart = false, $app_only_auth = false ) {
$url = $this->_getEndpoint( $method, $method_template ); $url = $this->_getEndpoint( $method, $method_template );
$url_with_params = null; $url_with_params = null;
$authorization = null; $authorization = null;
...@@ -96,8 +98,6 @@ class WP_Codebird extends Codebird { ...@@ -96,8 +98,6 @@ class WP_Codebird extends Codebird {
$params = $this->_buildMultipart( $method_template, $params ); $params = $this->_buildMultipart( $method_template, $params );
// Add the boundaries // Add the boundaries
// For the same reason we strip "Authorisation: " below. WP_HTTP_API uses the array key to know what the
// header is and Codebird uses a string.
$first_newline = strpos( $params, "\r\n" ); $first_newline = strpos( $params, "\r\n" );
$multipart_boundary = substr( $params, 2, $first_newline - 2 ); $multipart_boundary = substr( $params, 2, $first_newline - 2 );
$remote_params['headers']['Content-Length'] = strlen( $params ); $remote_params['headers']['Content-Length'] = strlen( $params );
...@@ -167,8 +167,6 @@ class WP_Codebird extends Codebird { ...@@ -167,8 +167,6 @@ class WP_Codebird extends Codebird {
* *
* Overridden to use the WordPress HTTP API * Overridden to use the WordPress HTTP API
* *
* @throws Exception
*
* @return string The OAuth bearer token * @return string The OAuth bearer token
*/ */
...@@ -285,8 +283,6 @@ class WP_Codebird extends Codebird { ...@@ -285,8 +283,6 @@ class WP_Codebird extends Codebird {
* @param string $method The API method to call * @param string $method The API method to call
* @param array $params The parameters to send along * @param array $params The parameters to send along
* *
* @throws Exception
*
* @return void * @return void
*/ */
protected function _buildMultipart( $method, $params ) { protected function _buildMultipart( $method, $params ) {
...@@ -317,7 +313,11 @@ class WP_Codebird extends Codebird { ...@@ -317,7 +313,11 @@ class WP_Codebird extends Codebird {
foreach ( $params as $key => $value ) { foreach ( $params as $key => $value ) {
// is it an array? // is it an array?
if ( is_array( $value ) ) { if ( is_array( $value ) ) {
throw new \Exception( 'Using URL-encoded parameters is not supported for uploading media.' ); _doing_it_wrong(
'_buildMultiPart()',
'Using URL-encoded parameters is not supported for uploading media.',
'3.7.1'
);
continue; continue;
} }
$multipart_request .= $multipart_request .=
...@@ -326,33 +326,29 @@ class WP_Codebird extends Codebird { ...@@ -326,33 +326,29 @@ class WP_Codebird extends Codebird {
// check for filenames // check for filenames
if ( in_array( $key, $possible_files ) ) { if ( in_array( $key, $possible_files ) ) {
if ( // is it a file, a readable one? /**
@file_exists( $value ) * As is_file, file_exists and is_readable don't pattern match on paths, instead they
&& @is_readable( $value ) * look for the file, we get errors when using them on vars that contain image data.
* This is why we check for an extension
// is it a valid image? */
&& $data = @getimagesize( $value ) $value = "/home/wpcom/public_html/wp-content/themes/pub/twentyeleven/images/headers/chessboard.jpg";
if (
in_array( strtolower( end( explode( ".", $value ) ) ), $this->_supported_media_files_extensions )
&& file_exists( $value )
&& is_readable( $value )
&& $data = getimagesize( $value )
) { ) {
if ( // is it a supported image format? if ( // is it a supported image format?
in_array( $data[2], $this->_supported_media_files ) in_array( $data[2], $this->_supported_media_files )
) { ) {
// try to read the file // try to read the file
ob_start(); $data = file_get_contents( $value );
readfile( $value );
$data = ob_get_contents();
ob_end_clean();
if ( strlen( $data ) == 0 ) { if ( strlen( $data ) == 0 ) {
continue; continue;
} }
$value = $data; $value = $data;
} }
} }
/*
$multipart_request .=
"\r\nContent-Transfer-Encoding: base64";
$value = base64_encode($value);
*/
} }
$multipart_request .= $multipart_request .=
...@@ -362,4 +358,5 @@ class WP_Codebird extends Codebird { ...@@ -362,4 +358,5 @@ class WP_Codebird extends Codebird {
return $multipart_request; return $multipart_request;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment