diff --git a/public/index.php b/public/index.php index 7f4d652..7b407bf 100644 --- a/public/index.php +++ b/public/index.php @@ -34,6 +34,26 @@ function eepromOriginAllowed(string $origin): bool { return in_array($origin, $allowed); } +function eepromUploadInfo(Upload $uploadInfo): array { + return [ + 'id' => $uploadInfo->getId(), + 'url' => $uploadInfo->getPublicUrl(), + 'urlf' => $uploadInfo->getPublicUrl(true), + 'thumb' => $uploadInfo->getPublicThumbUrl(), + 'name' => $uploadInfo->getName(), + 'type' => $uploadInfo->getType(), + 'size' => $uploadInfo->getSize(), + 'user' => $uploadInfo->getUserId(), + 'appl' => $uploadInfo->getApplicationId(), + 'hash' => $uploadInfo->getHash(), + 'created' => date('c', $uploadInfo->getCreated()), + 'accessed' => $uploadInfo->hasBeenAccessed() ? date('c', $uploadInfo->getLastAccessed()) : null, + 'expires' => $uploadInfo->hasExpired() ? date('c', $uploadInfo->getExpires()) : null, + 'deleted' => $uploadInfo->isDeleted() ? date('c', $uploadInfo->getDeleted()) : null, + 'dmca' => $uploadInfo->isDMCA() ? date('c', $uploadInfo->getDMCA()) : null, + ]; +} + $isApiDomain = $_SERVER['HTTP_HOST'] === $cfg->getString('domain:api'); $router = new HttpFx; @@ -174,23 +194,23 @@ if($isApiDomain) { $hash = hash_file('sha256', $localFile); // this is stupid: dmca status is stored as a file record rather than in a separate table requiring this hack ass garbage - $fileInfo = Upload::byUserHash($db, $userInfo, $hash) ?? Upload::byHash($db, $hash); + $uploadInfo = Upload::byUserHash($db, $userInfo, $hash) ?? Upload::byHash($db, $hash); - if($fileInfo !== null) { - if($fileInfo->isDMCA()) + if($uploadInfo !== null) { + if($uploadInfo->isDMCA()) return 451; - if($fileInfo->getUserId() !== $userInfo->getId() - || $fileInfo->getApplicationId() !== $appInfo->getId()) - unset($fileInfo); + if($uploadInfo->getUserId() !== $userInfo->getId() + || $uploadInfo->getApplicationId() !== $appInfo->getId()) + unset($uploadInfo); } - if(!empty($fileInfo)) { - if($fileInfo->isDeleted()) - $fileInfo->restore($db); - $fileInfo->bumpExpiry($db); + if(!empty($uploadInfo)) { + if($uploadInfo->isDeleted()) + $uploadInfo->restore($db); + $uploadInfo->bumpExpiry($db); } else { - $fileInfo = Upload::create( + $uploadInfo = Upload::create( $db, $appInfo, $userInfo, $file->getSuggestedFileName(), mime_content_type($localFile), @@ -198,12 +218,13 @@ if($isApiDomain) { $appInfo->getExpiry(), true ); - $file->moveTo($fileInfo->getPath()); + $file->moveTo($uploadInfo->getPath()); } $response->setStatusCode(201); $response->setHeader('Content-Type', 'application/json; charset=utf-8'); - return $fileInfo; + + return eepromUploadInfo($uploadInfo); }); $router->delete('/uploads/:fileid', function($response, $request, $fileId) use ($db) { @@ -252,7 +273,7 @@ if($isApiDomain) { } if($isJson) - return $uploadInfo; + return eepromUploadInfo($uploadInfo); if($uploadInfo->isDMCA()) { $response->setContent('File is unavailable for copyright reasons.'); diff --git a/src/Application.php b/src/Application.php index bfa7213..46feea0 100644 --- a/src/Application.php +++ b/src/Application.php @@ -2,10 +2,9 @@ namespace EEPROM; use RuntimeException; -use JsonSerializable; use Index\Data\IDbConnection; -final class Application implements JsonSerializable { +final class Application { public function __construct( private int $id = 0, private string $name = '', @@ -39,17 +38,6 @@ final class Application implements JsonSerializable { return $this->expiry; } - public function jsonSerialize(): mixed { - return [ - 'id' => $this->id, - 'name' => $this->name, - 'size_limit' => $this->sizeLimit, - 'size_multi' => $this->allowSizeMultiplier, - 'expiry' => $this->expiry, - 'created' => date('c', $this->created), - ]; - } - public static function byId(IDbConnection $conn, int $appId): self { $get = $conn->prepare( 'SELECT `app_id`, `app_name`, `app_size_limit`, `app_expiry`, `app_allow_size_multiplier`,' diff --git a/src/Upload.php b/src/Upload.php index 3050ff5..a2f059c 100644 --- a/src/Upload.php +++ b/src/Upload.php @@ -5,12 +5,11 @@ use Exception; use InvalidArgumentException; use RuntimeException; use Imagick; -use JsonSerializable; use Index\XString; use Index\Data\IDbConnection; use Index\Data\IDbResult; -final class Upload implements JsonSerializable { +final class Upload { public function __construct( private string $id = '', private int $userId = 0, @@ -89,6 +88,10 @@ final class Upload implements JsonSerializable { return $this->created; } + public function hasBeenAccessed(): bool { + return $this->accessed < 1; + } + public function getLastAccessed(): int { return $this->accessed; } @@ -175,26 +178,6 @@ final class Upload implements JsonSerializable { } } - public function jsonSerialize(): mixed { - return [ - 'id' => $this->id, - 'url' => $this->getPublicUrl(), - 'urlf' => $this->getPublicUrl(true), - 'thumb' => $this->getPublicThumbUrl(), - 'name' => $this->name, - 'type' => $this->type, - 'size' => $this->size, - 'user' => $this->userId, - 'appl' => $this->appId, - 'hash' => $this->hash, - 'created' => date('c', $this->created), - 'accessed' => $this->accessed < 1 ? null : date('c', $this->accessed), - 'expires' => $this->expires < 1 ? null : date('c', $this->expires), - 'deleted' => $this->deleted < 1 ? null : date('c', $this->deleted), - 'dmca' => $this->dmca < 1 ? null : date('c', $this->dmca), - ]; - } - public static function create( IDbConnection $conn, Application $app, User $user, diff --git a/src/User.php b/src/User.php index 603a86c..de3e2b8 100644 --- a/src/User.php +++ b/src/User.php @@ -2,10 +2,9 @@ namespace EEPROM; use RuntimeException; -use JsonSerializable; use Index\Data\IDbConnection; -class User implements JsonSerializable { +class User { private static $active; public static function hasActive(): bool { @@ -50,15 +49,6 @@ class User implements JsonSerializable { return $this->restricted > 0; } - public function jsonSerialize(): mixed { - return [ - 'id' => $this->id, - 'size_multi' => $this->sizeMultiplier, - 'created' => date('c', $this->created), - 'restricted' => $this->restricted < 1 ? null : date('c', $this->restricted), - ]; - } - public static function byId(IDbConnection $conn, int $userId): self { $create = $conn->prepare('INSERT IGNORE INTO `prm_users` (`user_id`) VALUES (?)'); $create->addParameter(1, $userId);