Moving Extension\Restler\UploadFormat class

This commit is contained in:
Erik Amaru Ortiz
2014-04-02 17:23:31 -04:00
parent 8b823af4ae
commit adee81e1ac
2 changed files with 11 additions and 18 deletions

View File

@@ -0,0 +1,155 @@
<?php
namespace Luracast\Restler\Format;
use Luracast\Restler\RestException;
/**
* Extending UploadFormat Support for Multi Part Form Data and File Uploads
*
* @category Framework
* @author Erik Amaru Ortiz <erik@colosa.com>
*/
class UploadFormat extends Format
{
const MIME = 'multipart/form-data';
const EXTENSION = 'post';
/**
* use it if you need to restrict uploads based on file type
* setting it as an empty array allows all file types
* default is to allow only png and jpeg images
*
* @var array
*/
public static $allowedMimeTypes = array(
'image/jpeg',
'image/png',
'image/png',
'application/octet-stream',
'text/plain',
'text/xml',
'text/html',
'text/css'
);
/**
* use it to restrict uploads based on file size
* set it to 0 to allow all sizes
* please note that it upload restrictions in the server
* takes precedence so it has to be lower than or equal to that
* default value is 1MB (1024x1024)bytes
* usual value for the server is 8388608
*
* @var int
*/
public static $maximumFileSize = 1048576;
/**
* Your own validation function for validating each uploaded file
* it can return false or throw an exception for invalid file
* use anonymous function / closure in PHP 5.3 and above
* use function name in other cases
*
* @var Callable
*/
public static $customValidationFunction;
/**
* Since exceptions are triggered way before at the `get` stage
*
* @var bool
*/
public static $suppressExceptionsAsError = false;
protected static function checkFile(& $file, $doMimeCheck = false, $doSizeCheck = false)
{
try {
if ($file['error']) {
//server is throwing an error
//assume that the error is due to maximum size limit
throw new RestException(413, "Uploaded file ({$file['name']}) is too big.");
}
if ($doMimeCheck && !in_array($file['type'],
self::$allowedMimeTypes)
) {
throw new RestException(403, "File type ({$file['type']}) is not supported.");
}
if ($doSizeCheck && $file['size'] > self::$maximumFileSize) {
throw new RestException(413, "Uploaded file ({$file['name']}) is too big.");
}
if (self::$customValidationFunction) {
if (!call_user_func(self::$customValidationFunction, $file)) {
throw new RestException(403, "File ({$file['name']}) is not supported.");
}
}
} catch (RestException $e) {
if (static::$suppressExceptionsAsError) {
$file['error'] = true;
$file['exception'] = $e;
} else {
throw $e;
}
}
}
public function encode($data, $humanReadable = false)
{
throw new RestException(500, 'UploadFormat is read only');
}
public function decode($data)
{
$doMimeCheck = !empty(self::$allowedMimeTypes);
$doSizeCheck = self::$maximumFileSize ? TRUE : FALSE;
//validate
foreach ($_FILES as & $file) {
if (is_array($file['error'])) {
foreach ($file['error'] as $i => $error) {
$innerFile = array();
foreach ($file as $property => $value) {
$innerFile[$property] = $value[$i];
}
if ($innerFile['name'])
static::checkFile($innerFile, $doMimeCheck, $doSizeCheck);
if (isset($innerFile['exception'])) {
$file['error'] = true;
$file['exception'] = $innerFile['exception'];
break;
}
}
} else {
if ($file['name'])
static::checkFile($file, $doMimeCheck, $doSizeCheck);
if (isset($innerFile['exception'])) {
break;
}
}
}
//sort file order if needed;
return $_FILES + $_POST;
}
function isWritable()
{
return false;
}
}
///**
// * Extending UploadFormat Support for Multi Part Form Data and File Uploads
// *
// * @category Framework
// * @author Erik Amaru Ortiz <erik@colosa.com>
// */
//class UploadFormat extends \Luracast\Restler\Format\UploadFormat
//{
// protected static function checkFile(& $file, $doMimeCheck = false, $doSizeCheck = false)
// {
// self::$allowedMimeTypes = array(
// 'image/jpeg',
// 'image/png',
// 'application/octet-stream'
// );
//
// parent::checkFile($file, $doMimeCheck, $doSizeCheck);
// }
//}

View File

@@ -2,6 +2,7 @@
namespace Maveriks;
use Maveriks\Util;
use ProcessMaker\Services;
class WebApplication
{
@@ -141,6 +142,8 @@ class WebApplication
*/
header('Access-Control-Allow-Origin: *');
require_once $this->rootDir . "framework/src/Maveriks/Extension/Restler/UploadFormat.php";
// $servicesDir contains directory where Services Classes are allocated
$servicesDir = $this->workflowDir . 'engine' . DS . 'src' . DS . 'ProcessMaker' . DS . 'Services' . DS;
// $apiDir - contains directory to scan classes and add them to Restler
@@ -161,9 +164,7 @@ class WebApplication
}
// Setting current workspace to Api class
\ProcessMaker\Services\Api::setWorkspace(SYS_SYS);
// TODO remove this setting on the future, it is not needed, but if it is not present is throwing a warning
//\Luracast\Restler\Format\HtmlFormat::$viewPath = $servicesDir . 'oauth2/views';
Services\Api::setWorkspace(SYS_SYS);
// create a new Restler instance
//$rest = new \Luracast\Restler\Restler();
@@ -179,20 +180,13 @@ class WebApplication
// Setting database connection source
list($host, $port) = strpos(DB_HOST, ':') !== false ? explode(':', DB_HOST) : array(DB_HOST, '');
$port = empty($port) ? '' : ";port=$port";
\ProcessMaker\Services\OAuth2\Server::setDatabaseSource(DB_USER, DB_PASS, DB_ADAPTER.":host=$host;dbname=".DB_NAME.$port);
Services\OAuth2\Server::setDatabaseSource(DB_USER, DB_PASS, DB_ADAPTER.":host=$host;dbname=".DB_NAME.$port);
// Setting default OAuth Client id, for local PM Web Designer
\ProcessMaker\Services\OAuth2\Server::setPmClientId($pmOauthClientId);
Services\OAuth2\Server::setPmClientId($pmOauthClientId);
require_once $this->workflowDir . "engine/src/Extension/Restler/UploadFormat.php";
//require_once PATH_CORE
//$rest->setSupportedFormats('JsonFormat', 'XmlFormat', 'UploadFormat');
//$rest->setOverridingFormats('UploadFormat', 'JsonFormat', 'XmlFormat', 'HtmlFormat');
$rest->setOverridingFormats('JsonFormat', 'UploadFormat');
// Override $_SERVER['REQUEST_URI'] to Restler handles the current url correctly
$isPluginRequest = strpos($uri, '/plugin-') !== false ? true : false;
if ($isPluginRequest) {
@@ -204,6 +198,7 @@ class WebApplication
$uri = str_replace('/plugin-'.$pluginName, '', $uri);
}
// Override $_SERVER['REQUEST_URI'] to Restler handles the modified url
$_SERVER['REQUEST_URI'] = $uri;
if (! $isPluginRequest) { // if it is not a request for a plugin endpoint
@@ -213,17 +208,15 @@ class WebApplication
foreach ($classesList as $classFile) {
if (pathinfo($classFile, PATHINFO_EXTENSION) === 'php') {
$namespace = '\\ProcessMaker\\Services\\' . str_replace(
DIRECTORY_SEPARATOR,
'\\',
str_replace('.php', '', str_replace($servicesDir, '', $classFile))
);
//var_dump($namespace); die;
DIRECTORY_SEPARATOR,
'\\',
str_replace('.php', '', str_replace($servicesDir, '', $classFile))
);
$rest->addAPIClass($namespace);
}
}
// adding aliases for Restler
//print_r($apiIniConf);
if (array_key_exists('alias', $apiIniConf)) {
foreach ($apiIniConf['alias'] as $alias => $aliasData) {
if (is_array($aliasData)) {