From b4fc2f892b877fe0cfb90063248d720bf87b49c8 Mon Sep 17 00:00:00 2001 From: Austin Gillmann Date: Tue, 3 Jan 2017 19:12:58 -0600 Subject: Merge php submodule into pomf, delete expiry. --- static/php/classes/Response.class.php | 241 +++++++++++++++++++++++++++ static/php/classes/UploadException.class.php | 63 +++++++ static/php/classes/UploadedFile.class.php | 32 ++++ 3 files changed, 336 insertions(+) create mode 100644 static/php/classes/Response.class.php create mode 100644 static/php/classes/UploadException.class.php create mode 100644 static/php/classes/UploadedFile.class.php (limited to 'static/php/classes') diff --git a/static/php/classes/Response.class.php b/static/php/classes/Response.class.php new file mode 100644 index 0000000..8a8e8b1 --- /dev/null +++ b/static/php/classes/Response.class.php @@ -0,0 +1,241 @@ +type = $response_type; + break; + case 'html': + header('Content-Type: text/html; charset=UTF-8'); + $this->type = $response_type; + break; + case 'json': + header('Content-Type: application/json; charset=UTF-8'); + $this->type = $response_type; + break; + case 'gyazo': + header('Content-Type: text/plain; charset=UTF-8'); + $this->type = 'text'; + break; + case 'text': + header('Content-Type: text/plain; charset=UTF-8'); + $this->type = $response_type; + break; + default: + header('Content-Type: application/json; charset=UTF-8'); + $this->type = 'json'; + $this->error(400, 'Invalid response type. Valid options are: csv, html, json, text.'); + break; + } + } + + /** + * Routes error messages depending on response type. + * + * @param int $code HTTP status code number. + * @param int $desc Descriptive error message. + * @return void + */ + public function error($code, $desc) + { + $response = null; + + switch ($this->type) { + case 'csv': + $response = $this->csvError($desc); + break; + case 'html': + $response = $this->htmlError($code, $desc); + break; + case 'json': + $response = $this->jsonError($code, $desc); + break; + case 'text': + $response = $this->textError($code, $desc); + break; + } + + http_response_code(500); // "500 Internal Server Error" + echo $response; + } + + /** + * Routes success messages depending on response type. + * + * @param mixed[] $files + * @return void + */ + public function send($files) + { + $response = null; + + switch ($this->type) { + case 'csv': + $response = $this->csvSuccess($files); + break; + case 'html': + $response = $this->htmlSuccess($files); + break; + case 'json': + $response = $this->jsonSuccess($files); + break; + case 'text': + $response = $this->textSuccess($files); + break; + } + + http_response_code(200); // "200 OK". Success. + echo $response; + } + + /** + * Indicates with CSV body the request was invalid. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param int $description Descriptive error message. + * @return string Error message in CSV format. + */ + private static function csvError($description) + { + return '"error"'."\r\n"."\"$description\""."\r\n"; + } + + /** + * Indicates with CSV body the request was successful. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param mixed[] $files + * @return string Success message in CSV format. + */ + private static function csvSuccess($files) + { + $result = '"name","url","hash","size"'."\r\n"; + foreach ($files as $file) { + $result .= '"'.$file['name'].'"'.','. + '"'.$file['url'].'"'.','. + '"'.$file['hash'].'"'.','. + '"'.$file['size'].'"'."\r\n"; + } + + return $result; + } + + /** + * Indicates with HTML body the request was invalid. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param int $code HTTP status code number. + * @param int $description Descriptive error message. + * @return string Error message in HTML format. + */ + private static function htmlError($code, $description) + { + return '

ERROR: ('.$code.') '.$description.'

'; + } + + /** + * Indicates with HTML body the request was successful. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param mixed[] $files + * @return string Success message in HTML format. + */ + private static function htmlSuccess($files) + { + $result = ''; + + foreach ($files as $file) { + $result .= ''.$file['url'].'
'; + } + + return $result; + } + + /** + * Indicates with JSON body the request was invalid. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param int $code HTTP status code number. + * @param int $description Descriptive error message. + * @return string Error message in pretty-printed JSON format. + */ + private static function jsonError($code, $description) + { + return json_encode(array( + 'success' => false, + 'errorcode' => $code, + 'description' => $description, + ), JSON_PRETTY_PRINT); + } + + /** + * Indicates with JSON body the request was successful. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param mixed[] $files + * @return string Success message in pretty-printed JSON format. + */ + private static function jsonSuccess($files) + { + return json_encode(array( + 'success' => true, + 'files' => $files, + ), JSON_PRETTY_PRINT); + } + + /** + * Indicates with plain text body the request was invalid. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param int $code HTTP status code number. + * @param int $description Descriptive error message. + * @return string Error message in plain text format. + */ + private static function textError($code, $description) + { + return 'ERROR: ('.$code.') '.$description; + } + + /** + * Indicates with plain text body the request was successful. + * + * @deprecated 2.1.0 Will be renamed to camelCase format. + * @param mixed[] $files + * @return string Success message in plain text format. + */ + private static function textSuccess($files) + { + $result = ''; + + foreach ($files as $file) { + $result .= $file['url']."\n"; + } + + return $result; + } +} diff --git a/static/php/classes/UploadException.class.php b/static/php/classes/UploadException.class.php new file mode 100644 index 0000000..8c9e4f6 --- /dev/null +++ b/static/php/classes/UploadException.class.php @@ -0,0 +1,63 @@ + + * @author Michiel Thalen + * @copyright Copyright © 1997 - 2016 by the PHP Documentation Group + * @license + * UploadException is licensed under a Creative Commons Attribution 3.0 License + * or later. + * + * Based on a work at + * https://secure.php.net/manual/en/features.file-upload.errors.php#89374. + * + * You should have received a copy of the Creative Commons Attribution 3.0 + * License with this program. If not, see + * . + */ + + +class UploadException extends Exception +{ + public function __construct($code) + { + $message = $this->codeToMessage($code); + parent::__construct($message, 500); + } + + private function codeToMessage($code) + { + switch ($code) { + case UPLOAD_ERR_INI_SIZE: + $message = 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; + break; + case UPLOAD_ERR_FORM_SIZE: + $message = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was '. + 'specified in the HTML form'; + break; + case UPLOAD_ERR_PARTIAL: + $message = 'The uploaded file was only partially uploaded'; + break; + case UPLOAD_ERR_NO_FILE: + $message = 'No file was uploaded'; + break; + case UPLOAD_ERR_NO_TMP_DIR: + $message = 'Missing a temporary folder'; + break; + case UPLOAD_ERR_CANT_WRITE: + $message = 'Failed to write file to disk'; + break; + case UPLOAD_ERR_EXTENSION: + $message = 'File upload stopped by extension'; + break; + + default: + $message = 'Unknown upload error'; + break; + } + + return $message; + } +} diff --git a/static/php/classes/UploadedFile.class.php b/static/php/classes/UploadedFile.class.php new file mode 100644 index 0000000..d90a9a4 --- /dev/null +++ b/static/php/classes/UploadedFile.class.php @@ -0,0 +1,32 @@ +sha1) { + $this->sha1 = sha1_file($this->tempfile); + } + + return $this->sha1; + } +} -- cgit v1.2.3