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
299 lines
9.3 KiB
PHP
299 lines
9.3 KiB
PHP
<?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 token’s 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);
|
||
}
|
||
}
|