+ self::checkAllowedScope(self::SCOPE_WRITE);
+ $uid = self::getCurrentUserID();
+
+ Logger::info('Photo post', ['request' => $request, 'files' => $_FILES]);
+
+ if (empty($_FILES['file'])) {
+ DI::mstdnError()->UnprocessableEntity();
+ }
+
+ $media = Photo::upload($uid, $_FILES['file']);
+ if (empty($media)) {
+ DI::mstdnError()->UnprocessableEntity();
+ }
+
+ Logger::info('Uploaded photo', ['media' => $media]);
+
+ System::jsonExit(DI::mstdnAttachment()->createFromPhoto($media['id']));
+ }
+
+ public function put(array $request = [])
+ {
+ self::checkAllowedScope(self::SCOPE_WRITE);
+ $uid = self::getCurrentUserID();
+
+ $request = $this->getRequest([
+ 'file' => [], // The file to be attached, using multipart form data.
+ 'thumbnail' => [], // The custom thumbnail of the media to be attached, using multipart form data.
+ 'description' => '', // A plain-text description of the media, for accessibility purposes.
+ 'focus' => '', // Two floating points (x,y), comma-delimited ranging from -1.0 to 1.0
+ ], $request);
+
+ if (empty($this->parameters['id'])) {
+ DI::mstdnError()->UnprocessableEntity();
+ }
+
+ $photo = Photo::selectFirst(['resource-id'], ['id' => $this->parameters['id'], 'uid' => $uid]);
+ if (empty($photo['resource-id'])) {
+ DI::mstdnError()->RecordNotFound();
+ }
+
+ Photo::update(['desc' => $request['description']], ['resource-id' => $photo['resource-id']]);
+
+ System::jsonExit(DI::mstdnAttachment()->createFromPhoto($this->parameters['id']));