jonnybarnes.uk/app/Http/Controllers/MicropubController.php
Jonny Barnes a4f07e510e Improved test code coverage, including necessary refactor
Squashed commit of the following:

commit 18996bc4916e945e130ad4abb17149ea2d0afa93
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Dec 7 14:46:41 2017 +0000

    Fixing styleci issue

commit e5bfedfdede637d3090603b55946cc34aec8b52d
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Dec 7 14:45:47 2017 +0000

    The Micorpub controller istelf is basically refactored now

commit 9eacc968c8bf9b0f5e746c38f04423c51f678d50
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Dec 7 14:16:23 2017 +0000

    Add more tests, easily into 90% plus test coverage now

commit 2dcbf94298841884083f752f17de46ef7809a369
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Dec 7 10:57:42 2017 +0000

    Fix some styleci issues

commit 6a989f61af412d59751281bc09ba0778597f09ec
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Dec 7 10:56:13 2017 +0000

    First real attempt at refactoring micropub controller

commit c10da3d630ca8e06b120122041bb6c64c1084325
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Dec 5 16:51:20 2017 +0000

    Fix a styleci issue

commit d7ee556fdebdd2160620e65d4bf3c67134f01187
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Dec 5 16:47:52 2017 +0000

    Improve the code for the media endpoint and add tests

commit bc81bbaff3fad8afcc2135d76f213bba8ba54534
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Dec 5 16:47:07 2017 +0000

    Modify process image to process media, this allows for improvment within the micropub controller

commit d13035cb2cbeff41d15ff017beb9a5b6bb41daee
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 15:14:18 2017 +0000

    Better name the current tests

commit 0a2ef16f74f3e322a945a8d6b239be3f97e8c5b8
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 14:08:13 2017 +0000

    Reach 100% code coverage for webmentions

commit 60f8b196a0fb4e6570b74d7577a9ff5f6c218613
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 13:35:03 2017 +0000

    Fix a styleci issue

commit e96be1869da909b8b080a38e4e33f94656b5b786
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 13:32:54 2017 +0000

    Add tests for Notes Admin code

commit 213319798bf5b3118034ab18a7c9eca5cf18296f
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 12:44:02 2017 +0000

    Fix a styleci issue

commit a614332c7664f66edcb78ef23db392a417c0deb0
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 12:43:02 2017 +0000

    Fix a phpcs issue

commit 6a2e445dbf87fb8b48a24b34ca0fc3518b4376b6
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 12:20:19 2017 +0000

    Add some tests fopr editing places in the admin cp

commit 7044f2555228ffd7df2823c0c19a4380ca886b5d
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Dec 4 11:35:59 2017 +0000

    Add tests for contacts admin code

commit 280c4498dbe2cf2879a08ee45a90a0c9ff2f296a
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Sat Dec 2 13:45:27 2017 +0000

    Improve admin related tests

commit ee93a108d11053b1f2fe38f30f3219b3e96267fc
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Sat Dec 2 00:01:42 2017 +0000

    Measure coverage with coveralls

commit 47c4f5088b1b12e4d183a72b9792e723bda64f77
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 23:57:32 2017 +0000

    Remove un-used PhotosController

commit 5737621dbc0ff7009896b483e1d004cdf2eb1523
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 23:47:08 2017 +0000

    Remove the curl test that was used for debugging purposes

commit b4d312b056df884eef7e4b0392b5dd1a3ae978bd
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 23:39:47 2017 +0000

    We don’t want ports in the longurl/shorturl env vars

commit 915370845448ef4e1be1ff5e7f4ef084c4200953
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 23:30:17 2017 +0000

    Use the right port

commit f9a3eac51063899fd003a8fa572dcf972d2f3a5c
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 23:18:57 2017 +0000

    I can’t get nginx listening on custom domains

commit 3742a04cda5b5ae56ad839bf0ed74ddd9874e74c
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 23:10:51 2017 +0000

    Try naked domains, i.e. without .localhost

commit d46040f86f32f0a70dae3bd1cf7c27465ee83a77
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 23:02:51 2017 +0000

    Add some default values back for pid and error_log

commit f15eb73b995f215e3b56243bbba49f23393beb5e
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 22:56:38 2017 +0000

    Let pid be the default value

commit 91048b96302b5f13c1eba4ae9ab226ff00859ea6
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 22:51:22 2017 +0000

    Don’t try and run php-fpm and nginx on the same port

commit 4203f7de976df9d0e832c09b18f15fff05837af7
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 22:36:26 2017 +0000

    Can only have one default_server

commit 6d117929d09707add7d687883d4cb6eba5881e96
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 22:10:35 2017 +0000

    Try and get a long url and short url both working

commit 995c7721e3dd96b01307cf75ae0f839fad96aaf9
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 22:01:14 2017 +0000

    Test the remaining shorturl redirects

commit d4c8a1a9c41c4e807d986b54c397b88a54292713
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 22:00:54 2017 +0000

    Get rid of some of my legacy redirects

commit 96d8c5b4cf576d66864a9e241cbef89b7bbe4597
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 21:46:42 2017 +0000

    Try and fix which url is being replied to

commit 692a7d0a2dcb3050f9c6da4afce2bb6c8ee72583
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 21:22:15 2017 +0000

    Add tests and improve code for the search feature

commit 442c26ff485a4d20710e1c38ab78bb1df212edda
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 20:04:00 2017 +0000

    Add tests for saving css preference in the session

commit e2180f0c40e4e8de293d2dd174816095affb0e3f
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 19:35:32 2017 +0000

    Some styleci fixes

commit a90bbe79c092ee4548f4fbad1399b99fddcb432c
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 19:33:40 2017 +0000

    Don’t consider un-used laravel middleware when calculating code coverage

commit 15edeb0d0179d5a37648c454d316c99250ba9bea
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 19:27:42 2017 +0000

    Add some tests for the process webmention job

commit a354c63945c582196990823845b57c7e51ff182d
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 17:55:47 2017 +0000

    Add tests for save profile image job

commit 0230102bafddbccd81512c37330be0e2fcb39a53
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 15:05:30 2017 +0000

    Test sending webmentions

commit e664e911c5fcca7fc884eda39253b503970a8bc2
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 15:04:44 2017 +0000

    Fix typo in test name

commit 391d1aa8f584b9e8bd8a7154b68447a2098ddc1a
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 12:04:05 2017 +0000

    Add tests for syndication jobs

commit 16d8215c09ff235c5b8253189055ad6c17f2f009
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Dec 1 11:49:05 2017 +0000

    Fix issue with scope date and month being 12 the int or 12 the string

commit 0d9aaaa178b088a6856a70f4338fffea0ad8a0f3
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 30 19:00:39 2017 +0000

    Improve Bookmark processing code and test coverage

commit 93d4419b37af7d0fcf8fe48cb855c1290512b30c
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 30 18:59:10 2017 +0000

    Improve Like processing code and test coverage

commit 1ccb42c48a4760daf9cf0bed744740aa931a6a89
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 30 14:12:07 2017 +0000

    Try and install nginx natively, given its listed in travis-ci/apt-package-whitelist

commit 126a3c4c9639eae1a986674a952923dd4e1384cc
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 30 12:09:47 2017 +0000

    Test the download webmention job

commit 2889e95c1526796684613d7fbb0998f654dbef28
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 30 12:08:56 2017 +0000

    Test the add client job

commit 4054a24e93ffe5dd68c2ab211bf6a88b114c3f10
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Nov 27 21:21:09 2017 +0000

    Ignore code coverage for such a trivial command

commit 5bda55d401fa677a84d334b6200d7ce045e23a90
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Nov 27 18:22:18 2017 +0000

    For now don’t analyse laravel’s exception handler

commit bb21e2ffc620cf22c14b49f2f292616f0d1bcc77
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Nov 27 18:21:55 2017 +0000

    test coverage

commit 2980127778d5be8dee7dd119cc6eb20b7a9f5e52
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Nov 27 16:30:44 2017 +0000

    phpcs fixes

commit 6e802bf78a93e5886a38007177d54d33ed85b31b
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Nov 27 16:28:47 2017 +0000

    Increase and improve tests for bookmarks

commit 1f6ffbacb86be86faa2cd37022d50e41f9582d59
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Mon Nov 27 13:04:11 2017 +0000

    Increase test coverage for token generation/validation

commit 66d866fdbfd1dcd0f161d4d30c7fb79fbb4a7250
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Sun Nov 26 16:58:30 2017 +0000

    Increase test coverage for Place relasted code

commit 6774d5c837ccc8c7d9f1cd80607dd40ffb5257f5
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Sun Nov 26 16:57:42 2017 +0000

    Increase test coverage for Like relasted code

commit 4e055527276499eca721cf9be64473d91b30e1d9
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Sun Nov 26 10:21:21 2017 +0000

    Ignore code that can’t be tested from coverage analysis

commit fbe7a88ab2319a3dcf4d441bd6db7be49e6445c5
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Sun Nov 26 10:20:48 2017 +0000

    Increase test coverages for note creation/deletion

commit cae9bce276372a4870b0cbe7ebd561ef49d1b131
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Nov 24 15:16:52 2017 +0000

    Test a single bookmark page

commit e23cf9846ae5bb28554d7665aee92826e237dc38
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Nov 24 15:16:34 2017 +0000

    Test login route for admin page

commit 9e2902f2048edac949edd0cc73e1abbf84a4f224
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Nov 24 14:11:46 2017 +0000

    Improve articles controller to redirect outdated links, add tests

commit 49bfaaf615461149a06bcfb74fd7a676eb3d49f8
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Nov 24 13:57:03 2017 +0000

    Remove Auth controllers we don’t use

commit 5cebbc45aa72d24fc729c314c4f6ef1fc99c16d3
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Nov 24 13:36:11 2017 +0000

    More testing, looking at middleware being applied

commit 2e5c9dd77143d3b23b3461decd5d1cda1375c510
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Fri Nov 24 13:12:56 2017 +0000

    Tweak reply webmentions and re-parsing them, as well as add tests

commit 766739f42fe8432daa10172ae7fcff84fe29d78d
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 23 21:18:56 2017 +0000

    Test redownload webmentions command dispatches the job

commit 6a25e99af4bad4ea3070a1ac4277542a52f6b465
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 23 20:24:18 2017 +0000

    Fixing and increasing test coverage for notes, still some work left to do

commit 1e10fffb344b50a4665060d42e94cb564a8404e7
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 23 15:16:11 2017 +0000

    Increase test coverage for places

commit 0b40ccedd285262b57be2414dfa2fd637e80ef2b
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Thu Nov 23 11:54:08 2017 +0000

    Tweak of code and increased test coverage

commit 64dc03b381fb79046e57ba2c623cb3a667adc345
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Wed Nov 22 15:38:17 2017 +0000

    Increase text coverage for Tags

commit 62bdb775ec5ec2c06595fc4d427703c683ae81a7
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Wed Nov 22 15:25:33 2017 +0000

    Increase test coverage for media-client code

commit 6bcf4cb909048e94aed7b7807bbe380833c258a1
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Wed Nov 22 15:25:05 2017 +0000

    Incurease test coverage for media

commit 89ede0fd1c9d7ee66b1af8be2b4d75b03b4bd8b9
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Wed Nov 22 15:24:36 2017 +0000

    Fix some issues with notes and increase test coverage

commit 1ad7c952703e9098bd80c2024eeec0a0937c9db3
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Nov 21 14:40:33 2017 +0000

    Improve bookmarks test coverage

commit 5a3cb440edeb9c63e9c447a36b3000dcb0b0ec7a
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Nov 21 14:40:05 2017 +0000

    Add Like tests

commit 8481e367ea74b081269a99ee97175f49d71176b8
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Nov 21 14:08:38 2017 +0000

    Add a another Like to the db without content and with an auhtor_url

commit 4053dcf8ec02e8b3618eb3ad2b875870368eab49
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Nov 21 14:07:32 2017 +0000

    Don’t show the url instead of content, just leave blank

commit 8e12a125b927efd327323044e5f86beef6ccef8c
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Nov 21 14:05:36 2017 +0000

    Add tests for Article model

commit d827d3399a1ed9513c4bac05e5078345f2768081
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Nov 21 14:05:14 2017 +0000

    Make sure year and month are cast to ints for scopeDate

commit db747d95bc80e521604b4b3487bed6c7fd46b8fe
Author: Jonny Barnes <jonny@jonnybarnes.uk>
Date:   Tue Nov 21 14:04:26 2017 +0000

    Remove un-needed webmentions method, change scopeDate to use integers for month
2017-12-07 15:06:56 +00:00

299 lines
9.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers;
use Storage;
use Monolog\Logger;
use Ramsey\Uuid\Uuid;
use App\Jobs\ProcessMedia;
use Illuminate\Http\UploadedFile;
use Monolog\Handler\StreamHandler;
use App\{Like, Media, Note, Place};
use Intervention\Image\ImageManager;
use Illuminate\Http\{Request, Response};
use App\Exceptions\InvalidTokenException;
use Phaza\LaravelPostgis\Geometries\Point;
use Intervention\Image\Exception\NotReadableException;
use App\Services\{NoteService, PlaceService, TokenService};
use App\Services\Micropub\{HCardService, HEntryService, UpdateService};
class MicropubController extends Controller
{
protected $tokenService;
protected $noteService;
protected $placeService;
protected $hentryService;
protected $hcardService;
protected $updateService;
public function __construct(
TokenService $tokenService,
NoteService $noteService,
PlaceService $placeService,
HEntryService $hentryService,
HCardService $hcardService,
UpdateService $updateService
) {
$this->tokenService = $tokenService;
$this->noteService = $noteService;
$this->placeService = $placeService;
$this->hentryService = $hentryService;
$this->hcardService = $hcardService;
$this->updateService = $updateService;
}
/**
* This function receives an API request, verifies the authenticity
* then passes over the info to the relavent Service class.
*
* @param \Illuminate\Http\Request request
* @return \Illuminate\Http\Response
*/
public function post(Request $request)
{
try {
$tokenData = $this->tokenService->validateToken($request->bearerToken());
} catch (InvalidTokenException $e) {
return $this->invalidTokenResponse();
}
if ($tokenData->hasClaim('scope') === false) {
return $this->tokenHasNoScopeResponse();
}
$this->logMicropubRequest($request);
if (($request->input('h') == 'entry') || ($request->input('type.0') == 'h-entry')) {
if (stristr($tokenData->getClaim('scope'), 'create') === false) {
return $this->insufficientScopeResponse();
}
$location = $this->hentryService->process($request);
return response()->json([
'response' => 'created',
'location' => $location,
], 201)->header('Location', $location);
}
if ($request->input('h') == 'card' || $request->input('type')[0] == 'h-card') {
if (stristr($tokenData->getClaim('scope'), 'create') === false) {
return $this->insufficientScopeResponse();
}
$location = $this->hcardService->process($request);
return response()->json([
'response' => 'created',
'location' => $location,
], 201)->header('Location', $location);
}
if ($request->input('action') == 'update') {
if (stristr($tokenData->getClaim('scope'), 'update') === false) {
return $this->returnInsufficientScopeResponse();
}
return $this->updateService->process($request);
}
}
/**
* A GET request has been made to `api/post` with an accompanying
* token, here we check wether the token is valid and respond
* appropriately. Further if the request has the query parameter
* synidicate-to we respond with the known syndication endpoints.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function get(Request $request)
{
try {
$tokenData = $this->tokenService->validateToken($request->bearerToken());
} catch (InvalidTokenException $e) {
return $this->invalidTokenResponse();
}
if ($request->input('q') === 'syndicate-to') {
return response()->json([
'syndicate-to' => config('syndication.targets'),
]);
}
if ($request->input('q') == 'config') {
return response()->json([
'syndicate-to' => config('syndication.targets'),
'media-endpoint' => route('media-endpoint'),
]);
}
if (substr($request->input('q'), 0, 4) === 'geo:') {
preg_match_all(
'/([0-9\.\-]+)/',
$request->input('q'),
$matches
);
$distance = (count($matches[0]) == 3) ? 100 * $matches[0][2] : 1000;
$places = Place::near(new Point($matches[0][0], $matches[0][1]))->get();
return response()->json([
'response' => 'places',
'places' => $places,
]);
}
// default response is just to return the token data
return response()->json([
'response' => 'token',
'token' => [
'me' => $tokenData->getClaim('me'),
'scope' => $tokenData->getClaim('scope'),
'client_id' => $tokenData->getClaim('client_id'),
],
]);
}
/**
* Process a media item posted to the media endpoint.
*
* @param Illuminate\Http\Request $request
* @return Illuminate\Http\Response
*/
public function media(Request $request)
{
try {
$tokenData = $this->tokenService->validateToken($request->bearerToken());
} catch (InvalidTokenException $e) {
return $this->invalidTokenResponse();
}
if ($tokenData->hasClaim('scope') === false) {
return $this->tokenHasNoScopeResponse();
}
if (stristr($tokenData->getClaim('scope'), 'create') === false) {
return $this->insufficientScopeResponse();
}
if (($request->hasFile('file') && $request->file('file')->isValid()) === false) {
return response()->json([
'response' => 'error',
'error' => 'invalid_request',
'error_description' => 'The uploaded file failed validation',
], 400);
}
$this->logMicropubRequest($request);
$filename = $this->saveFile($request->file('file'));
$manager = resolve(ImageManager::class);
try {
$image = $manager->make($request->file('file'));
$width = $image->width();
} catch (NotReadableException $exception) {
// not an image
$width = null;
}
$media = Media::create([
'token' => $request->bearerToken(),
'path' => 'media/' . $filename,
'type' => $this->getFileTypeFromMimeType($request->file('file')->getMimeType()),
'image_widths' => $width,
]);
ProcessMedia::dispatch($filename);
return response()->json([
'response' => 'created',
'location' => $media->url,
], 201)->header('Location', $media->url);
}
/**
* Get the file type from the mimetype of the uploaded file.
*
* @param string The mimetype
* @return string The type
*/
private function getFileTypeFromMimeType($mimetype)
{
//try known images
$imageMimeTypes = [
'image/gif',
'image/jpeg',
'image/png',
'image/svg+xml',
'image/tiff',
'image/webp',
];
if (in_array($mimetype, $imageMimeTypes)) {
return 'image';
}
//try known video
$videoMimeTypes = [
'video/mp4',
'video/mpeg',
'video/quicktime',
'video/webm',
];
if (in_array($mimetype, $videoMimeTypes)) {
return 'video';
}
//try known audio types
$audioMimeTypes = [
'audio/midi',
'audio/mpeg',
'audio/ogg',
'audio/x-m4a',
];
if (in_array($mimetype, $audioMimeTypes)) {
return 'audio';
}
return 'download';
}
private function logMicropubRequest(Request $request)
{
$logger = new Logger('micropub');
$logger->pushHandler(new StreamHandler(storage_path('logs/micropub.log')), Logger::DEBUG);
$logger->debug('MicropubLog', $request->all());
}
private function saveFile(UploadedFile $file)
{
$filename = Uuid::uuid4() . '.' . $file->extension();
$size = $file->getClientSize();
Storage::disk('local')->put($filename, $file->openFile()->fread($size));
return $filename;
}
private function insufficientScopeResponse()
{
return response()->json([
'response' => 'error',
'error' => 'insufficient_scope',
'error_description' => 'The tokens scope does not have the necessary requirements.',
], 401);
}
private function invalidTokenResponse()
{
return response()->json([
'response' => 'error',
'error' => 'invalid_token',
'error_description' => 'The provided token did not pass validation',
], 400);
}
private function tokenHasNoScopeResponse()
{
return response()->json([
'response' => 'error',
'error' => 'invalid_request',
'error_description' => 'The provided token has no scopes',
], 400);
}
}