diff --git a/app/Auth.php b/app/Auth.php index 75dddf2e0db..0c7928263e8 100644 --- a/app/Auth.php +++ b/app/Auth.php @@ -20,21 +20,8 @@ namespace Fisharebest\Webtrees; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\FamilyAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\FamilyNotFoundException; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\IndividualAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\IndividualNotFoundException; -use Fisharebest\Webtrees\Exceptions\MediaAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\MediaNotFoundException; -use Fisharebest\Webtrees\Exceptions\NoteAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\NoteNotFoundException; -use Fisharebest\Webtrees\Exceptions\RecordAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\RecordNotFoundException; -use Fisharebest\Webtrees\Exceptions\RepositoryAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\RepositoryNotFoundException; -use Fisharebest\Webtrees\Exceptions\SourceAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\SourceNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\ModuleInterface; use Fisharebest\Webtrees\Services\UserService; @@ -191,7 +178,7 @@ public static function user(): UserInterface */ public static function login(UserInterface $user): void { - Session::regenerate(false); + Session::regenerate(); Session::put('wt_user', $user->id()); } @@ -225,13 +212,15 @@ public static function checkComponentAccess(ModuleInterface $module, string $int * @param bool $edit * * @return Family - * @throws FamilyNotFoundException - * @throws FamilyAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkFamilyAccess(?Family $family, bool $edit = false): Family { + $message = I18N::translate('This family does not exist or you do not have permission to view it.'); + if ($family === null) { - throw new FamilyNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $family->canEdit()) { @@ -244,7 +233,7 @@ public static function checkFamilyAccess(?Family $family, bool $edit = false): F return $family; } - throw new FamilyAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** @@ -252,13 +241,15 @@ public static function checkFamilyAccess(?Family $family, bool $edit = false): F * @param bool $edit * * @return Header - * @throws RecordNotFoundException - * @throws RecordAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkHeaderAccess(?Header $header, bool $edit = false): Header { + $message = I18N::translate('This record does not exist or you do not have permission to view it.'); + if ($header === null) { - throw new RecordNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $header->canEdit()) { @@ -271,22 +262,24 @@ public static function checkHeaderAccess(?Header $header, bool $edit = false): H return $header; } - throw new RecordAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** * @param Individual|null $individual * @param bool $edit - * @param bool $chart For some charts, we can show private records + * @param bool $chart For some charts, we can show private records * * @return Individual - * @throws IndividualNotFoundException - * @throws IndividualAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ - public static function checkIndividualAccess(?Individual $individual, bool $edit = false, $chart = false): Individual + public static function checkIndividualAccess(?Individual $individual, bool $edit = false, bool $chart = false): Individual { + $message = I18N::translate('This individual does not exist or you do not have permission to view it.'); + if ($individual === null) { - throw new IndividualNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $individual->canEdit()) { @@ -303,21 +296,23 @@ public static function checkIndividualAccess(?Individual $individual, bool $edit return $individual; } - throw new IndividualAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** * @param Location|null $location - * @param bool $edit + * @param bool $edit * * @return Location - * @throws RecordNotFoundException - * @throws RecordAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkLocationAccess(?Location $location, bool $edit = false): Location { + $message = I18N::translate('This record does not exist or you do not have permission to view it.'); + if ($location === null) { - throw new RecordNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $location->canEdit()) { @@ -330,7 +325,7 @@ public static function checkLocationAccess(?Location $location, bool $edit = fal return $location; } - throw new RecordAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** @@ -338,13 +333,15 @@ public static function checkLocationAccess(?Location $location, bool $edit = fal * @param bool $edit * * @return Media - * @throws MediaNotFoundException - * @throws MediaAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkMediaAccess(?Media $media, bool $edit = false): Media { + $message = I18N::translate('This media object does not exist or you do not have permission to view it.'); + if ($media === null) { - throw new MediaNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $media->canEdit()) { @@ -357,7 +354,7 @@ public static function checkMediaAccess(?Media $media, bool $edit = false): Medi return $media; } - throw new MediaAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** @@ -365,13 +362,15 @@ public static function checkMediaAccess(?Media $media, bool $edit = false): Medi * @param bool $edit * * @return Note - * @throws NoteNotFoundException - * @throws NoteAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkNoteAccess(?Note $note, bool $edit = false): Note { + $message = I18N::translate('This note does not exist or you do not have permission to view it.'); + if ($note === null) { - throw new NoteNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $note->canEdit()) { @@ -384,7 +383,7 @@ public static function checkNoteAccess(?Note $note, bool $edit = false): Note return $note; } - throw new NoteAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** @@ -392,13 +391,15 @@ public static function checkNoteAccess(?Note $note, bool $edit = false): Note * @param bool $edit * * @return GedcomRecord - * @throws RecordNotFoundException - * @throws RecordAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkRecordAccess(?GedcomRecord $record, bool $edit = false): GedcomRecord { + $message = I18N::translate('This record does not exist or you do not have permission to view it.'); + if ($record === null) { - throw new RecordNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $record->canEdit()) { @@ -411,7 +412,7 @@ public static function checkRecordAccess(?GedcomRecord $record, bool $edit = fal return $record; } - throw new RecordAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** @@ -419,13 +420,15 @@ public static function checkRecordAccess(?GedcomRecord $record, bool $edit = fal * @param bool $edit * * @return Repository - * @throws RepositoryNotFoundException - * @throws RepositoryAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkRepositoryAccess(?Repository $repository, bool $edit = false): Repository { + $message = I18N::translate('This repository does not exist or you do not have permission to view it.'); + if ($repository === null) { - throw new RepositoryNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $repository->canEdit()) { @@ -438,7 +441,7 @@ public static function checkRepositoryAccess(?Repository $repository, bool $edit return $repository; } - throw new RepositoryAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** @@ -446,13 +449,15 @@ public static function checkRepositoryAccess(?Repository $repository, bool $edit * @param bool $edit * * @return Source - * @throws SourceNotFoundException - * @throws SourceAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkSourceAccess(?Source $source, bool $edit = false): Source { + $message = I18N::translate('This source does not exist or you do not have permission to view it.'); + if ($source === null) { - throw new SourceNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $source->canEdit()) { @@ -465,7 +470,7 @@ public static function checkSourceAccess(?Source $source, bool $edit = false): S return $source; } - throw new SourceAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /* @@ -473,13 +478,15 @@ public static function checkSourceAccess(?Source $source, bool $edit = false): S * @param bool $edit * * @return Submitter - * @throws RecordNotFoundException - * @throws RecordAccessDeniedException + * @throws HttpFoundException + * @throws HttpDeniedException */ public static function checkSubmitterAccess(?Submitter $submitter, bool $edit = false): Submitter { + $message = I18N::translate('This record does not exist or you do not have permission to view it.'); + if ($submitter === null) { - throw new RecordNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $submitter->canEdit()) { @@ -492,7 +499,7 @@ public static function checkSubmitterAccess(?Submitter $submitter, bool $edit = return $submitter; } - throw new RecordAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /* @@ -500,13 +507,15 @@ public static function checkSubmitterAccess(?Submitter $submitter, bool $edit = * @param bool $edit * * @return Submission - * @throws RecordNotFoundException - * @throws RecordAccessDeniedException + * @throws HttpNotFoundException + * @throws HttpAccessDeniedException */ public static function checkSubmissionAccess(?Submission $submission, bool $edit = false): Submission { + $message = I18N::translate('This record does not exist or you do not have permission to view it.'); + if ($submission === null) { - throw new RecordNotFoundException(); + throw new HttpNotFoundException($message); } if ($edit && $submission->canEdit()) { @@ -519,7 +528,7 @@ public static function checkSubmissionAccess(?Submission $submission, bool $edit return $submission; } - throw new RecordAccessDeniedException(); + throw new HttpAccessDeniedException($message); } /** diff --git a/app/Exceptions/FamilyAccessDeniedException.php b/app/Exceptions/FamilyAccessDeniedException.php deleted file mode 100644 index 405ef02095a..00000000000 --- a/app/Exceptions/FamilyAccessDeniedException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a family cannot be accessed due to privacy rules. - */ -class FamilyAccessDeniedException extends HttpAccessDeniedException -{ - /** - * FamilyNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This family does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/FamilyNotFoundException.php b/app/Exceptions/FamilyNotFoundException.php deleted file mode 100644 index 043bdf4b637..00000000000 --- a/app/Exceptions/FamilyNotFoundException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a family does not exist. - */ -class FamilyNotFoundException extends HttpNotFoundException -{ - /** - * FamilyNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This family does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/GedcomErrorException.php b/app/Exceptions/GedcomErrorException.php index 93dad7c3e64..557abfe6026 100644 --- a/app/Exceptions/GedcomErrorException.php +++ b/app/Exceptions/GedcomErrorException.php @@ -22,6 +22,8 @@ use Exception; use Fisharebest\Webtrees\I18N; +use function e; + /** * Exception thrown when importing invalid GEDCOM data. */ diff --git a/app/Exceptions/IndividualAccessDeniedException.php b/app/Exceptions/IndividualAccessDeniedException.php deleted file mode 100644 index dcfd39ea3d4..00000000000 --- a/app/Exceptions/IndividualAccessDeniedException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when an individual cannot be accessed due to privacy rules. - */ -class IndividualAccessDeniedException extends HttpAccessDeniedException -{ - /** - * IndividualNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This individual does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/IndividualNotFoundException.php b/app/Exceptions/IndividualNotFoundException.php deleted file mode 100644 index dd0c357b291..00000000000 --- a/app/Exceptions/IndividualNotFoundException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when an individual does not exist. - */ -class IndividualNotFoundException extends HttpNotFoundException -{ - /** - * IndividualNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This individual does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/MediaAccessDeniedException.php b/app/Exceptions/MediaAccessDeniedException.php deleted file mode 100644 index 125f119680d..00000000000 --- a/app/Exceptions/MediaAccessDeniedException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a media cannot be accessed due to privacy rules. - */ -class MediaAccessDeniedException extends HttpAccessDeniedException -{ - /** - * MediaNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This media object does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/MediaNotFoundException.php b/app/Exceptions/MediaNotFoundException.php deleted file mode 100644 index de4e28dfe3b..00000000000 --- a/app/Exceptions/MediaNotFoundException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a media does not exist. - */ -class MediaNotFoundException extends HttpNotFoundException -{ - /** - * MediaNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This media object does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/MissingParameterException.php b/app/Exceptions/MissingParameterException.php deleted file mode 100644 index 151f0e22957..00000000000 --- a/app/Exceptions/MissingParameterException.php +++ /dev/null @@ -1,48 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; -use Psr\Http\Message\ServerRequestInterface; - -/** - * Application level exceptions. - */ -class MissingParameterException extends HttpBadRequestException -{ - /** - * @param ServerRequestInterface $request - * @param string $parameter - */ - public function __construct(ServerRequestInterface $request, string $parameter) - { - $message = I18N::translate('The parameter “%s” is missing.', $parameter); - - $referer = $request->getHeaderLine('Referer'); - - if ($referer !== '') { - $message .= ' '; - /* I18N: %s is a URL */ - $message .= I18N::translate('This could be caused by an error at %s', $referer); - } - - parent::__construct($message); - } -} diff --git a/app/Exceptions/NoteAccessDeniedException.php b/app/Exceptions/NoteAccessDeniedException.php deleted file mode 100644 index 96afd63d423..00000000000 --- a/app/Exceptions/NoteAccessDeniedException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a note cannot be accessed due to privacy rules. - */ -class NoteAccessDeniedException extends HttpAccessDeniedException -{ - /** - * NoteNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This note does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/RecordAccessDeniedException.php b/app/Exceptions/RecordAccessDeniedException.php deleted file mode 100644 index 8b081d68685..00000000000 --- a/app/Exceptions/RecordAccessDeniedException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a record cannot be accessed due to privacy rules. - */ -class RecordAccessDeniedException extends HttpAccessDeniedException -{ - /** - * RecordNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This record does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/RecordNotFoundException.php b/app/Exceptions/RecordNotFoundException.php deleted file mode 100644 index df79be9f577..00000000000 --- a/app/Exceptions/RecordNotFoundException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a record does not exist. - */ -class RecordNotFoundException extends HttpNotFoundException -{ - /** - * RecordNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This record does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/RepositoryAccessDeniedException.php b/app/Exceptions/RepositoryAccessDeniedException.php deleted file mode 100644 index 134e17ac911..00000000000 --- a/app/Exceptions/RepositoryAccessDeniedException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a repository cannot be accessed due to privacy rules. - */ -class RepositoryAccessDeniedException extends HttpAccessDeniedException -{ - /** - * RepositoryNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This repository does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/RepositoryNotFoundException.php b/app/Exceptions/RepositoryNotFoundException.php deleted file mode 100644 index 197a8b37047..00000000000 --- a/app/Exceptions/RepositoryNotFoundException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a repository does not exist. - */ -class RepositoryNotFoundException extends HttpNotFoundException -{ - /** - * RepositoryNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This repository does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/SourceAccessDeniedException.php b/app/Exceptions/SourceAccessDeniedException.php deleted file mode 100644 index 103e52285c5..00000000000 --- a/app/Exceptions/SourceAccessDeniedException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a source cannot be accessed due to privacy rules. - */ -class SourceAccessDeniedException extends HttpAccessDeniedException -{ - /** - * SourceNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This source does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/SourceNotFoundException.php b/app/Exceptions/SourceNotFoundException.php deleted file mode 100644 index 5751e944a70..00000000000 --- a/app/Exceptions/SourceNotFoundException.php +++ /dev/null @@ -1,38 +0,0 @@ -. - */ - -declare(strict_types=1); - -namespace Fisharebest\Webtrees\Exceptions; - -use Fisharebest\Webtrees\I18N; - -/** - * Exception thrown when a source does not exist. - */ -class SourceNotFoundException extends HttpNotFoundException -{ - /** - * SourceNotFoundException constructor. - */ - public function __construct() - { - parent::__construct(I18N::translate( - 'This source does not exist or you do not have permission to view it.' - )); - } -} diff --git a/app/Exceptions/HttpAccessDeniedException.php b/app/Http/Exceptions/HttpAccessDeniedException.php similarity index 88% rename from app/Exceptions/HttpAccessDeniedException.php rename to app/Http/Exceptions/HttpAccessDeniedException.php index 8d2e28dae75..1b3c404aae1 100644 --- a/app/Exceptions/HttpAccessDeniedException.php +++ b/app/Http/Exceptions/HttpAccessDeniedException.php @@ -17,7 +17,7 @@ declare(strict_types=1); -namespace Fisharebest\Webtrees\Exceptions; +namespace Fisharebest\Webtrees\Http\Exceptions; use Fisharebest\Webtrees\I18N; @@ -31,7 +31,7 @@ class HttpAccessDeniedException extends HttpException */ public function __construct(string $message = null) { - $message = $message ?? I18N::translate('You do not have permission to view this page.'); + $message ??= I18N::translate('You do not have permission to view this page.'); parent::__construct($message, self::STATUS_FORBIDDEN); } diff --git a/app/Exceptions/HttpBadRequestException.php b/app/Http/Exceptions/HttpBadRequestException.php similarity index 83% rename from app/Exceptions/HttpBadRequestException.php rename to app/Http/Exceptions/HttpBadRequestException.php index acf5a7602ac..3ec76533f8c 100644 --- a/app/Exceptions/HttpBadRequestException.php +++ b/app/Http/Exceptions/HttpBadRequestException.php @@ -17,7 +17,7 @@ declare(strict_types=1); -namespace Fisharebest\Webtrees\Exceptions; +namespace Fisharebest\Webtrees\Http\Exceptions; use Fisharebest\Webtrees\I18N; @@ -29,9 +29,9 @@ class HttpBadRequestException extends HttpException /** * @param string|null $message */ - public function __construct(string $message = null) + public function __construct(string $message) { - $message = $message ?? I18N::translate('The server could not understand this request.'); + $message ??= I18N::translate('The server could not understand this request.'); parent::__construct($message, self::STATUS_BAD_REQUEST); } diff --git a/app/Exceptions/HttpException.php b/app/Http/Exceptions/HttpException.php similarity index 96% rename from app/Exceptions/HttpException.php rename to app/Http/Exceptions/HttpException.php index b583a9313f0..73faf19a14f 100644 --- a/app/Exceptions/HttpException.php +++ b/app/Http/Exceptions/HttpException.php @@ -17,7 +17,7 @@ declare(strict_types=1); -namespace Fisharebest\Webtrees\Exceptions; +namespace Fisharebest\Webtrees\Http\Exceptions; use Fig\Http\Message\StatusCodeInterface; use RuntimeException; diff --git a/app/Exceptions/HttpNotFoundException.php b/app/Http/Exceptions/HttpNotFoundException.php similarity index 88% rename from app/Exceptions/HttpNotFoundException.php rename to app/Http/Exceptions/HttpNotFoundException.php index c5888a1733a..3857ef8a4d5 100644 --- a/app/Exceptions/HttpNotFoundException.php +++ b/app/Http/Exceptions/HttpNotFoundException.php @@ -17,7 +17,7 @@ declare(strict_types=1); -namespace Fisharebest\Webtrees\Exceptions; +namespace Fisharebest\Webtrees\Http\Exceptions; use Fisharebest\Webtrees\I18N; @@ -31,7 +31,7 @@ class HttpNotFoundException extends HttpException */ public function __construct(string $message = null) { - $message = $message ?? I18N::translate('You do not have permission to view this page.'); + $message ??= I18N::translate('You do not have permission to view this page.'); parent::__construct($message, self::STATUS_NOT_FOUND); } diff --git a/app/Exceptions/HttpServerErrorException.php b/app/Http/Exceptions/HttpServerErrorException.php similarity index 95% rename from app/Exceptions/HttpServerErrorException.php rename to app/Http/Exceptions/HttpServerErrorException.php index 4067c64ee38..3501a37dc38 100644 --- a/app/Exceptions/HttpServerErrorException.php +++ b/app/Http/Exceptions/HttpServerErrorException.php @@ -17,7 +17,7 @@ declare(strict_types=1); -namespace Fisharebest\Webtrees\Exceptions; +namespace Fisharebest\Webtrees\Http\Exceptions; use Fig\Http\Message\StatusCodeInterface; diff --git a/app/Exceptions/HttpServiceUnavailableException.php b/app/Http/Exceptions/HttpServiceUnavailableException.php similarity index 95% rename from app/Exceptions/HttpServiceUnavailableException.php rename to app/Http/Exceptions/HttpServiceUnavailableException.php index 3438b7c025f..526555345fa 100644 --- a/app/Exceptions/HttpServiceUnavailableException.php +++ b/app/Http/Exceptions/HttpServiceUnavailableException.php @@ -17,7 +17,7 @@ declare(strict_types=1); -namespace Fisharebest\Webtrees\Exceptions; +namespace Fisharebest\Webtrees\Http\Exceptions; use Fig\Http\Message\StatusCodeInterface; diff --git a/app/Exceptions/NoteNotFoundException.php b/app/Http/Exceptions/HttpTooManyRequestsException.php similarity index 68% rename from app/Exceptions/NoteNotFoundException.php rename to app/Http/Exceptions/HttpTooManyRequestsException.php index 4bc4db9b6e1..f56c052ca22 100644 --- a/app/Exceptions/NoteNotFoundException.php +++ b/app/Http/Exceptions/HttpTooManyRequestsException.php @@ -17,22 +17,22 @@ declare(strict_types=1); -namespace Fisharebest\Webtrees\Exceptions; +namespace Fisharebest\Webtrees\Http\Exceptions; use Fisharebest\Webtrees\I18N; /** - * Exception thrown when a note does not exist. + * Application level exceptions. */ -class NoteNotFoundException extends HttpNotFoundException +class HttpTooManyRequestsException extends HttpException { /** - * NoteNotFoundException constructor. + * @param string|null $message */ - public function __construct() + public function __construct(string $message = null) { - parent::__construct(I18N::translate( - 'This note does not exist or you do not have permission to view it.' - )); + $message ??= I18N::translate('Too many requests. Try again later.'); + + parent::__construct($message, self::STATUS_TOO_MANY_REQUESTS); } } diff --git a/app/Http/Middleware/AuthAdministrator.php b/app/Http/Middleware/AuthAdministrator.php index cb69099da5d..94bab8ddaff 100644 --- a/app/Http/Middleware/AuthAdministrator.php +++ b/app/Http/Middleware/AuthAdministrator.php @@ -21,7 +21,7 @@ use Fig\Http\Message\RequestMethodInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\RequestHandlers\LoginPage; use Fisharebest\Webtrees\User; use Psr\Http\Message\ResponseInterface; diff --git a/app/Http/Middleware/AuthEditor.php b/app/Http/Middleware/AuthEditor.php index c5512f62436..c636f287287 100644 --- a/app/Http/Middleware/AuthEditor.php +++ b/app/Http/Middleware/AuthEditor.php @@ -21,7 +21,7 @@ use Fig\Http\Message\RequestMethodInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\RequestHandlers\LoginPage; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/app/Http/Middleware/AuthManager.php b/app/Http/Middleware/AuthManager.php index 1a55011ba3b..54af5ddb65b 100644 --- a/app/Http/Middleware/AuthManager.php +++ b/app/Http/Middleware/AuthManager.php @@ -21,7 +21,7 @@ use Fig\Http\Message\RequestMethodInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\RequestHandlers\LoginPage; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/app/Http/Middleware/AuthMember.php b/app/Http/Middleware/AuthMember.php index 73646fcaca6..03974d9003b 100644 --- a/app/Http/Middleware/AuthMember.php +++ b/app/Http/Middleware/AuthMember.php @@ -21,7 +21,7 @@ use Fig\Http\Message\RequestMethodInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\RequestHandlers\LoginPage; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/app/Http/Middleware/AuthModerator.php b/app/Http/Middleware/AuthModerator.php index 656eb78ce0c..22764f9637f 100644 --- a/app/Http/Middleware/AuthModerator.php +++ b/app/Http/Middleware/AuthModerator.php @@ -21,7 +21,7 @@ use Fig\Http\Message\RequestMethodInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\RequestHandlers\LoginPage; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/app/Http/Middleware/HandleExceptions.php b/app/Http/Middleware/HandleExceptions.php index 085015049d7..374f811e7b0 100644 --- a/app/Http/Middleware/HandleExceptions.php +++ b/app/Http/Middleware/HandleExceptions.php @@ -21,7 +21,7 @@ use Fig\Http\Message\RequestMethodInterface; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpException; +use Fisharebest\Webtrees\Http\Exceptions\HttpException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\Log; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/Middleware/NoRouteFound.php b/app/Http/Middleware/NoRouteFound.php index fb831cec36f..ced658e441c 100644 --- a/app/Http/Middleware/NoRouteFound.php +++ b/app/Http/Middleware/NoRouteFound.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\Middleware; use Fig\Http\Message\RequestMethodInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Http\RequestHandlers\HomePage; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Psr\Http\Message\ResponseInterface; diff --git a/app/Http/RequestHandlers/AddChildToFamilyAction.php b/app/Http/RequestHandlers/AddChildToFamilyAction.php index d6b42a4bac4..232df365263 100644 --- a/app/Http/RequestHandlers/AddChildToFamilyAction.php +++ b/app/Http/RequestHandlers/AddChildToFamilyAction.php @@ -79,7 +79,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $family->createFact('1 CHIL @' . $child->xref() . '@', false); $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $child->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $child->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/AddChildToIndividualAction.php b/app/Http/RequestHandlers/AddChildToIndividualAction.php index c2b4a33e1f4..70aa01557d0 100644 --- a/app/Http/RequestHandlers/AddChildToIndividualAction.php +++ b/app/Http/RequestHandlers/AddChildToIndividualAction.php @@ -87,7 +87,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $child->createFact('1 FAMC @' . $family->xref() . '@', false); $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $child->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $child->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/AddParentToIndividualAction.php b/app/Http/RequestHandlers/AddParentToIndividualAction.php index 8d19d88c761..9ea0f0dd5c3 100644 --- a/app/Http/RequestHandlers/AddParentToIndividualAction.php +++ b/app/Http/RequestHandlers/AddParentToIndividualAction.php @@ -87,7 +87,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $parent->createFact('1 FAMS @' . $family->xref() . '@', false); $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $parent->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $parent->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/AddSpouseToFamilyAction.php b/app/Http/RequestHandlers/AddSpouseToFamilyAction.php index 79e9e4e0999..f4d9a007c91 100644 --- a/app/Http/RequestHandlers/AddSpouseToFamilyAction.php +++ b/app/Http/RequestHandlers/AddSpouseToFamilyAction.php @@ -96,7 +96,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $family->createFact('1 ' . $link . ' @' . $spouse->xref() . '@', false); $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $spouse->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $spouse->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/AddSpouseToIndividualAction.php b/app/Http/RequestHandlers/AddSpouseToIndividualAction.php index 05565649540..edadd01aa11 100644 --- a/app/Http/RequestHandlers/AddSpouseToIndividualAction.php +++ b/app/Http/RequestHandlers/AddSpouseToIndividualAction.php @@ -90,7 +90,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $spouse->createFact('1 FAMS @' . $family->xref() . '@', false); $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $spouse->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $spouse->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/AddUnlinkedAction.php b/app/Http/RequestHandlers/AddUnlinkedAction.php index 51e7437ad2c..3212480b238 100644 --- a/app/Http/RequestHandlers/AddUnlinkedAction.php +++ b/app/Http/RequestHandlers/AddUnlinkedAction.php @@ -67,7 +67,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $individual = $tree->createIndividual("0 @@ INDI\n" . $gedcom); $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $individual->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $individual->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/ContactAction.php b/app/Http/RequestHandlers/ContactAction.php index 705a40bf47c..19bc4d91be0 100644 --- a/app/Http/RequestHandlers/ContactAction.php +++ b/app/Http/RequestHandlers/ContactAction.php @@ -19,10 +19,10 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\GuestUser; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\CaptchaService; @@ -94,7 +94,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $from_name = Validator::parsedBody($request)->string('from_name') ?? ''; $subject = Validator::parsedBody($request)->string('subject') ?? ''; $to = Validator::parsedBody($request)->string('to') ?? ''; - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $base_url; + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $base_url; $ip = $request->getAttribute('client-ip'); $to_user = $this->user_service->findByUserName($to); diff --git a/app/Http/RequestHandlers/ContactPage.php b/app/Http/RequestHandlers/ContactPage.php index 709582a4d0a..db371779c83 100644 --- a/app/Http/RequestHandlers/ContactPage.php +++ b/app/Http/RequestHandlers/ContactPage.php @@ -19,7 +19,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\CaptchaService; diff --git a/app/Http/RequestHandlers/DeleteUser.php b/app/Http/RequestHandlers/DeleteUser.php index 27d00122585..14c1fc04e20 100644 --- a/app/Http/RequestHandlers/DeleteUser.php +++ b/app/Http/RequestHandlers/DeleteUser.php @@ -20,8 +20,8 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Log; use Fisharebest\Webtrees\Services\UserService; use Psr\Http\Message\ResponseInterface; diff --git a/app/Http/RequestHandlers/EditFactAction.php b/app/Http/RequestHandlers/EditFactAction.php index 8bb0967ed5d..160796e6bdc 100644 --- a/app/Http/RequestHandlers/EditFactAction.php +++ b/app/Http/RequestHandlers/EditFactAction.php @@ -116,7 +116,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface } $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $record->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $record->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/EditRawFactAction.php b/app/Http/RequestHandlers/EditRawFactAction.php index 6b5b67f0c57..67c8bd73525 100644 --- a/app/Http/RequestHandlers/EditRawFactAction.php +++ b/app/Http/RequestHandlers/EditRawFactAction.php @@ -74,7 +74,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface } $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $record->url(); + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $record->url(); return redirect($url); } diff --git a/app/Http/RequestHandlers/EmptyClipboard.php b/app/Http/RequestHandlers/EmptyClipboard.php index b7115ffd0a0..a49681cd155 100644 --- a/app/Http/RequestHandlers/EmptyClipboard.php +++ b/app/Http/RequestHandlers/EmptyClipboard.php @@ -57,7 +57,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $base_url = $request->getAttribute('base_url'); $default_url = $request->getHeaderLine('Referer'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $default_url; + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $default_url; return redirect($url); } diff --git a/app/Http/RequestHandlers/LoginAction.php b/app/Http/RequestHandlers/LoginAction.php index ab8574882bb..100d7dd42d2 100644 --- a/app/Http/RequestHandlers/LoginAction.php +++ b/app/Http/RequestHandlers/LoginAction.php @@ -72,7 +72,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $default_url = route(HomePage::class); $username = Validator::parsedBody($request)->string('username') ?? ''; $password = Validator::parsedBody($request)->string('password') ?? ''; - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $default_url; + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $default_url; try { $this->doLogin($username, $password); diff --git a/app/Http/RequestHandlers/ManageMediaData.php b/app/Http/RequestHandlers/ManageMediaData.php index 2b1c17b8c53..cb26ae023d6 100644 --- a/app/Http/RequestHandlers/ManageMediaData.php +++ b/app/Http/RequestHandlers/ManageMediaData.php @@ -19,7 +19,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Media; use Fisharebest\Webtrees\Mime; diff --git a/app/Http/RequestHandlers/Masquerade.php b/app/Http/RequestHandlers/Masquerade.php index 3ff5775b4a2..7a226309be1 100644 --- a/app/Http/RequestHandlers/Masquerade.php +++ b/app/Http/RequestHandlers/Masquerade.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Log; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Session; diff --git a/app/Http/RequestHandlers/MessageAction.php b/app/Http/RequestHandlers/MessageAction.php index 8571b794f16..b5e5bba60db 100644 --- a/app/Http/RequestHandlers/MessageAction.php +++ b/app/Http/RequestHandlers/MessageAction.php @@ -20,8 +20,8 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\MessageService; @@ -78,7 +78,7 @@ public function handle(ServerRequestInterface $request): ResponseInterface $to_user = $this->user_service->findByUserName($to); $ip = $request->getAttribute('client-ip'); $base_url = $request->getAttribute('base_url'); - $url = Validator::parsedBody($request)->localUrl($base_url)->string('url') ?? $base_url; + $url = Validator::parsedBody($request)->isLocalUrl($base_url)->string('url') ?? $base_url; if ($to_user === null || $to_user->getPreference(UserInterface::PREF_CONTACT_METHOD) === 'none') { throw new HttpAccessDeniedException('Invalid contact user id'); diff --git a/app/Http/RequestHandlers/MessagePage.php b/app/Http/RequestHandlers/MessagePage.php index 58b658ab978..f16e0f123c4 100644 --- a/app/Http/RequestHandlers/MessagePage.php +++ b/app/Http/RequestHandlers/MessagePage.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\UserService; diff --git a/app/Http/RequestHandlers/ModuleAction.php b/app/Http/RequestHandlers/ModuleAction.php index 293284f062c..7bc6de28bb9 100644 --- a/app/Http/RequestHandlers/ModuleAction.php +++ b/app/Http/RequestHandlers/ModuleAction.php @@ -21,8 +21,8 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Services\ModuleService; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; diff --git a/app/Http/RequestHandlers/RedirectAncestryPhp.php b/app/Http/RequestHandlers/RedirectAncestryPhp.php index 1b8dd6cf1ce..690e09f965f 100644 --- a/app/Http/RequestHandlers/RedirectAncestryPhp.php +++ b/app/Http/RequestHandlers/RedirectAncestryPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\AncestorsChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectBranchesPhp.php b/app/Http/RequestHandlers/RedirectBranchesPhp.php index a7c46a88946..e793f23b34a 100644 --- a/app/Http/RequestHandlers/RedirectBranchesPhp.php +++ b/app/Http/RequestHandlers/RedirectBranchesPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\BranchesListModule; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Site; diff --git a/app/Http/RequestHandlers/RedirectCalendarPhp.php b/app/Http/RequestHandlers/RedirectCalendarPhp.php index 12d3fc2b09d..35334c09f56 100644 --- a/app/Http/RequestHandlers/RedirectCalendarPhp.php +++ b/app/Http/RequestHandlers/RedirectCalendarPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; diff --git a/app/Http/RequestHandlers/RedirectCompactPhp.php b/app/Http/RequestHandlers/RedirectCompactPhp.php index eacd3de57d2..394350c7370 100644 --- a/app/Http/RequestHandlers/RedirectCompactPhp.php +++ b/app/Http/RequestHandlers/RedirectCompactPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\CompactTreeChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectDescendencyPhp.php b/app/Http/RequestHandlers/RedirectDescendencyPhp.php index d12c1817743..9e054ab0260 100644 --- a/app/Http/RequestHandlers/RedirectDescendencyPhp.php +++ b/app/Http/RequestHandlers/RedirectDescendencyPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\DescendancyChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectFamListPhp.php b/app/Http/RequestHandlers/RedirectFamListPhp.php index d9e8aa3d96e..f44f4068473 100644 --- a/app/Http/RequestHandlers/RedirectFamListPhp.php +++ b/app/Http/RequestHandlers/RedirectFamListPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\FamilyListModule; use Fisharebest\Webtrees\Module\ModuleListInterface; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/app/Http/RequestHandlers/RedirectFamilyBookPhp.php b/app/Http/RequestHandlers/RedirectFamilyBookPhp.php index 9e7bb35daff..818f708615e 100644 --- a/app/Http/RequestHandlers/RedirectFamilyBookPhp.php +++ b/app/Http/RequestHandlers/RedirectFamilyBookPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\FamilyBookChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectFamilyPhp.php b/app/Http/RequestHandlers/RedirectFamilyPhp.php index 78de0c2aa5c..bafe1db2ea6 100644 --- a/app/Http/RequestHandlers/RedirectFamilyPhp.php +++ b/app/Http/RequestHandlers/RedirectFamilyPhp.php @@ -20,12 +20,13 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\FamilyNotFoundException; use Fisharebest\Webtrees\Family; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; -use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -51,12 +52,12 @@ public function __construct(TreeService $tree_service) * @param ServerRequestInterface $request * * @return ResponseInterface + * @throws HttpNotFoundException */ public function handle(ServerRequestInterface $request): ResponseInterface { - $query = $request->getQueryParams(); - $ged = $query['ged'] ?? Site::getPreference('DEFAULT_GEDCOM'); - $famid = $query['famid'] ?? ''; + $ged = Validator::queryParams($request)->requiredString('ged'); + $famid = Validator::queryParams($request)->isXref()->requiredString('famid'); $tree = $this->tree_service->all()->get($ged); if ($tree instanceof Tree) { @@ -67,6 +68,8 @@ public function handle(ServerRequestInterface $request): ResponseInterface } } - throw new FamilyNotFoundException(); + $message = I18N::translate('This family does not exist or you do not have permission to view it.'); + + throw new HttpNotFoundException($message); } } diff --git a/app/Http/RequestHandlers/RedirectFanChartPhp.php b/app/Http/RequestHandlers/RedirectFanChartPhp.php index f21767b0b3c..1bebac84b9d 100644 --- a/app/Http/RequestHandlers/RedirectFanChartPhp.php +++ b/app/Http/RequestHandlers/RedirectFanChartPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\FanChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectGedRecordPhp.php b/app/Http/RequestHandlers/RedirectGedRecordPhp.php index 9babce5cb5e..632275831f3 100644 --- a/app/Http/RequestHandlers/RedirectGedRecordPhp.php +++ b/app/Http/RequestHandlers/RedirectGedRecordPhp.php @@ -20,8 +20,9 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\RecordNotFoundException; use Fisharebest\Webtrees\GedcomRecord; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Site; @@ -51,6 +52,7 @@ public function __construct(TreeService $tree_service) * @param ServerRequestInterface $request * * @return ResponseInterface + * @throws HttpNotFoundException */ public function handle(ServerRequestInterface $request): ResponseInterface { @@ -67,6 +69,9 @@ public function handle(ServerRequestInterface $request): ResponseInterface } } - throw new RecordNotFoundException(); + $message = I18N::translate('This record does not exist or you do not have permission to view it.'); + + + throw new HttpNotFoundException($message); } } diff --git a/app/Http/RequestHandlers/RedirectHourGlassPhp.php b/app/Http/RequestHandlers/RedirectHourGlassPhp.php index e7c027e69de..9137900b08f 100644 --- a/app/Http/RequestHandlers/RedirectHourGlassPhp.php +++ b/app/Http/RequestHandlers/RedirectHourGlassPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\HourglassChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectIndiListPhp.php b/app/Http/RequestHandlers/RedirectIndiListPhp.php index bc11dd315b7..24ed9285fdb 100644 --- a/app/Http/RequestHandlers/RedirectIndiListPhp.php +++ b/app/Http/RequestHandlers/RedirectIndiListPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\IndividualListModule; use Fisharebest\Webtrees\Module\ModuleListInterface; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/app/Http/RequestHandlers/RedirectIndividualPhp.php b/app/Http/RequestHandlers/RedirectIndividualPhp.php index c683043424d..0c1c96a370f 100644 --- a/app/Http/RequestHandlers/RedirectIndividualPhp.php +++ b/app/Http/RequestHandlers/RedirectIndividualPhp.php @@ -20,12 +20,13 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\IndividualNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; -use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -51,13 +52,13 @@ public function __construct(TreeService $tree_service) * @param ServerRequestInterface $request * * @return ResponseInterface + * @throws HttpNotFoundException */ public function handle(ServerRequestInterface $request): ResponseInterface { - $query = $request->getQueryParams(); - $ged = $query['ged'] ?? Site::getPreference('DEFAULT_GEDCOM'); - $pid = $query['pid'] ?? ''; - $tree = $this->tree_service->all()->get($ged); + $ged = Validator::queryParams($request)->requiredString('ged'); + $pid = Validator::queryParams($request)->isXref()->requiredString('pid'); + $tree = $this->tree_service->all()->get($ged); if ($tree instanceof Tree) { $individual = Registry::individualFactory()->make($pid, $tree); @@ -67,6 +68,8 @@ public function handle(ServerRequestInterface $request): ResponseInterface } } - throw new IndividualNotFoundException(); + $message = I18N::translate('This individual does not exist or you do not have permission to view it.'); + + throw new HttpNotFoundException($message); } } diff --git a/app/Http/RequestHandlers/RedirectLifeSpanPhp.php b/app/Http/RequestHandlers/RedirectLifeSpanPhp.php index f93702fca67..3bdf52fbdd1 100644 --- a/app/Http/RequestHandlers/RedirectLifeSpanPhp.php +++ b/app/Http/RequestHandlers/RedirectLifeSpanPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\LifespansChartModule; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Site; diff --git a/app/Http/RequestHandlers/RedirectMediaListPhp.php b/app/Http/RequestHandlers/RedirectMediaListPhp.php index 650a30957fd..94feed89f37 100644 --- a/app/Http/RequestHandlers/RedirectMediaListPhp.php +++ b/app/Http/RequestHandlers/RedirectMediaListPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\MediaListModule; use Fisharebest\Webtrees\Module\ModuleListInterface; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/app/Http/RequestHandlers/RedirectMediaViewerPhp.php b/app/Http/RequestHandlers/RedirectMediaViewerPhp.php index 8a08fd6840a..65eb2233700 100644 --- a/app/Http/RequestHandlers/RedirectMediaViewerPhp.php +++ b/app/Http/RequestHandlers/RedirectMediaViewerPhp.php @@ -20,12 +20,13 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\MediaNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Media; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; -use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -51,13 +52,13 @@ public function __construct(TreeService $tree_service) * @param ServerRequestInterface $request * * @return ResponseInterface + * @throws HttpNotFoundException */ public function handle(ServerRequestInterface $request): ResponseInterface { - $query = $request->getQueryParams(); - $ged = $query['ged'] ?? Site::getPreference('DEFAULT_GEDCOM'); - $mid = $query['mid'] ?? ''; - $tree = $this->tree_service->all()->get($ged); + $ged = Validator::queryParams($request)->requiredString('ged'); + $mid = Validator::queryParams($request)->isXref()->requiredString('mid'); + $tree = $this->tree_service->all()->get($ged); if ($tree instanceof Tree) { $media = Registry::mediaFactory()->make($mid, $tree); @@ -67,6 +68,8 @@ public function handle(ServerRequestInterface $request): ResponseInterface } } - throw new MediaNotFoundException(); + $message = I18N::translate('This media object does not exist or you do not have permission to view it.'); + + throw new HttpNotFoundException($message); } } diff --git a/app/Http/RequestHandlers/RedirectModulePhp.php b/app/Http/RequestHandlers/RedirectModulePhp.php index d071e183d6f..d4779725655 100644 --- a/app/Http/RequestHandlers/RedirectModulePhp.php +++ b/app/Http/RequestHandlers/RedirectModulePhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Module\PedigreeMapModule; use Fisharebest\Webtrees\Registry; diff --git a/app/Http/RequestHandlers/RedirectNoteListPhp.php b/app/Http/RequestHandlers/RedirectNoteListPhp.php index e537538eb76..d8ebb58676a 100644 --- a/app/Http/RequestHandlers/RedirectNoteListPhp.php +++ b/app/Http/RequestHandlers/RedirectNoteListPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\ModuleListInterface; use Fisharebest\Webtrees\Module\NoteListModule; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/app/Http/RequestHandlers/RedirectNotePhp.php b/app/Http/RequestHandlers/RedirectNotePhp.php index 49af88720d2..7006e60dcb6 100644 --- a/app/Http/RequestHandlers/RedirectNotePhp.php +++ b/app/Http/RequestHandlers/RedirectNotePhp.php @@ -20,12 +20,13 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\NoteNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Note; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; -use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -51,13 +52,13 @@ public function __construct(TreeService $tree_service) * @param ServerRequestInterface $request * * @return ResponseInterface + * @throws HttpNotFoundException */ public function handle(ServerRequestInterface $request): ResponseInterface { - $query = $request->getQueryParams(); - $ged = $query['ged'] ?? Site::getPreference('DEFAULT_GEDCOM'); - $nid = $query['nid'] ?? ''; - $tree = $this->tree_service->all()->get($ged); + $ged = Validator::queryParams($request)->requiredString('ged'); + $nid = Validator::queryParams($request)->isXref()->requiredString('nid'); + $tree = $this->tree_service->all()->get($ged); if ($tree instanceof Tree) { $note = Registry::noteFactory()->make($nid, $tree); @@ -67,6 +68,8 @@ public function handle(ServerRequestInterface $request): ResponseInterface } } - throw new NoteNotFoundException(); + $message = I18N::translate('This note does not exist or you do not have permission to view it.'); + + throw new HttpNotFoundException($message); } } diff --git a/app/Http/RequestHandlers/RedirectPedigreePhp.php b/app/Http/RequestHandlers/RedirectPedigreePhp.php index 31c8e4a7ac0..b02d1921726 100644 --- a/app/Http/RequestHandlers/RedirectPedigreePhp.php +++ b/app/Http/RequestHandlers/RedirectPedigreePhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\PedigreeChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectPlaceListPhp.php b/app/Http/RequestHandlers/RedirectPlaceListPhp.php index 5b0e2a433a2..dba41aabb15 100644 --- a/app/Http/RequestHandlers/RedirectPlaceListPhp.php +++ b/app/Http/RequestHandlers/RedirectPlaceListPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\ModuleListInterface; use Fisharebest\Webtrees\Module\PlaceHierarchyListModule; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/app/Http/RequestHandlers/RedirectRelationshipPhp.php b/app/Http/RequestHandlers/RedirectRelationshipPhp.php index e9bd44b8f54..be0687487c0 100644 --- a/app/Http/RequestHandlers/RedirectRelationshipPhp.php +++ b/app/Http/RequestHandlers/RedirectRelationshipPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\RelationshipsChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RedirectRepoListPhp.php b/app/Http/RequestHandlers/RedirectRepoListPhp.php index 914b89f0126..5c80a52819e 100644 --- a/app/Http/RequestHandlers/RedirectRepoListPhp.php +++ b/app/Http/RequestHandlers/RedirectRepoListPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\ModuleListInterface; use Fisharebest\Webtrees\Module\RepositoryListModule; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/app/Http/RequestHandlers/RedirectReportEnginePhp.php b/app/Http/RequestHandlers/RedirectReportEnginePhp.php index 40edb83b0fe..1558d1c9191 100644 --- a/app/Http/RequestHandlers/RedirectReportEnginePhp.php +++ b/app/Http/RequestHandlers/RedirectReportEnginePhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; diff --git a/app/Http/RequestHandlers/RedirectRepositoryPhp.php b/app/Http/RequestHandlers/RedirectRepositoryPhp.php index d415eb61005..be94daeff09 100644 --- a/app/Http/RequestHandlers/RedirectRepositoryPhp.php +++ b/app/Http/RequestHandlers/RedirectRepositoryPhp.php @@ -20,12 +20,13 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\RepositoryNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Repository; use Fisharebest\Webtrees\Services\TreeService; -use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -51,13 +52,13 @@ public function __construct(TreeService $tree_service) * @param ServerRequestInterface $request * * @return ResponseInterface + * @throws HttpNotFoundException */ public function handle(ServerRequestInterface $request): ResponseInterface { - $query = $request->getQueryParams(); - $ged = $query['ged'] ?? Site::getPreference('DEFAULT_GEDCOM'); - $rid = $query['rid'] ?? ''; - $tree = $this->tree_service->all()->get($ged); + $ged = Validator::queryParams($request)->requiredString('ged'); + $rid = Validator::queryParams($request)->isXref()->requiredString('rid'); + $tree = $this->tree_service->all()->get($ged); if ($tree instanceof Tree) { $repository = Registry::repositoryFactory()->make($rid, $tree); @@ -67,6 +68,8 @@ public function handle(ServerRequestInterface $request): ResponseInterface } } - throw new RepositoryNotFoundException(); + $message = I18N::translate('This repository does not exist or you do not have permission to view it.'); + + throw new HttpNotFoundException($message); } } diff --git a/app/Http/RequestHandlers/RedirectSourceListPhp.php b/app/Http/RequestHandlers/RedirectSourceListPhp.php index 5aff4d96ce2..bffac633845 100644 --- a/app/Http/RequestHandlers/RedirectSourceListPhp.php +++ b/app/Http/RequestHandlers/RedirectSourceListPhp.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\ModuleListInterface; use Fisharebest\Webtrees\Module\SourceListModule; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/app/Http/RequestHandlers/RedirectSourcePhp.php b/app/Http/RequestHandlers/RedirectSourcePhp.php index 49313abe6d1..e4a7410d41e 100644 --- a/app/Http/RequestHandlers/RedirectSourcePhp.php +++ b/app/Http/RequestHandlers/RedirectSourcePhp.php @@ -20,12 +20,13 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\SourceNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; -use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Source; use Fisharebest\Webtrees\Tree; +use Fisharebest\Webtrees\Validator; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; @@ -51,13 +52,13 @@ public function __construct(TreeService $tree_service) * @param ServerRequestInterface $request * * @return ResponseInterface + * @throws HttpNotFoundException */ public function handle(ServerRequestInterface $request): ResponseInterface { - $query = $request->getQueryParams(); - $ged = $query['ged'] ?? Site::getPreference('DEFAULT_GEDCOM'); - $sid = $query['sid'] ?? ''; - $tree = $this->tree_service->all()->get($ged); + $ged = Validator::queryParams($request)->requiredString('ged'); + $sid = Validator::queryParams($request)->isXref()->requiredString('sid'); + $tree = $this->tree_service->all()->get($ged); if ($tree instanceof Tree) { $source = Registry::sourceFactory()->make($sid, $tree); @@ -67,6 +68,8 @@ public function handle(ServerRequestInterface $request): ResponseInterface } } - throw new SourceNotFoundException(); + $message = I18N::translate('This source does not exist or you do not have permission to view it.'); + + throw new HttpNotFoundException($message); } } diff --git a/app/Http/RequestHandlers/RedirectStatisticsPhp.php b/app/Http/RequestHandlers/RedirectStatisticsPhp.php index 3f678bb5101..3834d6b4609 100644 --- a/app/Http/RequestHandlers/RedirectStatisticsPhp.php +++ b/app/Http/RequestHandlers/RedirectStatisticsPhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\StatisticsChartModule; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Site; diff --git a/app/Http/RequestHandlers/RedirectTimeLinePhp.php b/app/Http/RequestHandlers/RedirectTimeLinePhp.php index 6cc0fbe184a..1b1b1c4b996 100644 --- a/app/Http/RequestHandlers/RedirectTimeLinePhp.php +++ b/app/Http/RequestHandlers/RedirectTimeLinePhp.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\TimelineChartModule; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/RegisterAction.php b/app/Http/RequestHandlers/RegisterAction.php index fc9903a0a12..48121ff007e 100644 --- a/app/Http/RequestHandlers/RegisterAction.php +++ b/app/Http/RequestHandlers/RegisterAction.php @@ -21,8 +21,8 @@ use Exception; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Log; diff --git a/app/Http/RequestHandlers/RegisterPage.php b/app/Http/RequestHandlers/RegisterPage.php index 5669b8fafd5..863af2c4972 100644 --- a/app/Http/RequestHandlers/RegisterPage.php +++ b/app/Http/RequestHandlers/RegisterPage.php @@ -19,7 +19,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\CaptchaService; diff --git a/app/Http/RequestHandlers/UpgradeWizardStep.php b/app/Http/RequestHandlers/UpgradeWizardStep.php index 95674af0a99..4ff3811f045 100644 --- a/app/Http/RequestHandlers/UpgradeWizardStep.php +++ b/app/Http/RequestHandlers/UpgradeWizardStep.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Flysystem\Adapter\ChrootAdapter; -use Fisharebest\Webtrees\Exceptions\HttpServerErrorException; +use Fisharebest\Webtrees\Http\Exceptions\HttpServerErrorException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\GedcomExportService; diff --git a/app/Http/RequestHandlers/UserEditAction.php b/app/Http/RequestHandlers/UserEditAction.php index 9d44b044b9c..bb647efb75c 100644 --- a/app/Http/RequestHandlers/UserEditAction.php +++ b/app/Http/RequestHandlers/UserEditAction.php @@ -21,8 +21,8 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\FlashMessages; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\EmailService; use Fisharebest\Webtrees\Services\TreeService; diff --git a/app/Http/RequestHandlers/UserEditPage.php b/app/Http/RequestHandlers/UserEditPage.php index f245afd28ab..ca89496c27d 100644 --- a/app/Http/RequestHandlers/UserEditPage.php +++ b/app/Http/RequestHandlers/UserEditPage.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Http\ViewResponseTrait; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Module\ModuleLanguageInterface; diff --git a/app/Module/FamilyTreeNewsModule.php b/app/Module/FamilyTreeNewsModule.php index 580f8d4a68d..e01278c91c2 100644 --- a/app/Module/FamilyTreeNewsModule.php +++ b/app/Module/FamilyTreeNewsModule.php @@ -21,7 +21,7 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Carbon; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\RequestHandlers\TreePage; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\HtmlService; diff --git a/app/Module/FixSearchAndReplace.php b/app/Module/FixSearchAndReplace.php index 5cf907277c9..f32b0cff87c 100644 --- a/app/Module/FixSearchAndReplace.php +++ b/app/Module/FixSearchAndReplace.php @@ -19,9 +19,9 @@ namespace Fisharebest\Webtrees\Module; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Family; use Fisharebest\Webtrees\GedcomRecord; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Location; diff --git a/app/Module/InteractiveTreeModule.php b/app/Module/InteractiveTreeModule.php index b355e2cb948..3fa2433efd0 100644 --- a/app/Module/InteractiveTreeModule.php +++ b/app/Module/InteractiveTreeModule.php @@ -20,13 +20,11 @@ namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\IndividualAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\IndividualNotFoundException; -use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Menu; use Fisharebest\Webtrees\Module\InteractiveTree\TreeView; +use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Tree; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; @@ -248,13 +246,7 @@ public function getDetailsAction(ServerRequestInterface $request): ResponseInter $pid = $request->getQueryParams()['pid']; $individual = Registry::individualFactory()->make($pid, $tree); - if ($individual === null) { - throw new IndividualNotFoundException(); - } - - if (!$individual->canShow()) { - throw new IndividualAccessDeniedException(); - } + $individual = Auth::checkIndividualAccess($individual); $instance = $request->getQueryParams()['instance']; $treeview = new TreeView($instance); diff --git a/app/Module/ModuleCustomTrait.php b/app/Module/ModuleCustomTrait.php index e61983002b6..822c22975b9 100644 --- a/app/Module/ModuleCustomTrait.php +++ b/app/Module/ModuleCustomTrait.php @@ -20,8 +20,8 @@ namespace Fisharebest\Webtrees\Module; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Mime; use Fisharebest\Webtrees\Registry; use GuzzleHttp\Client; diff --git a/app/Module/ModuleTabTrait.php b/app/Module/ModuleTabTrait.php index 4ec10dd0b8f..4f36fc197b8 100644 --- a/app/Module/ModuleTabTrait.php +++ b/app/Module/ModuleTabTrait.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Tree; use Illuminate\Support\Collection; diff --git a/app/Module/ShareAnniversaryModule.php b/app/Module/ShareAnniversaryModule.php index 94715cb4f60..c23ebe4cdcb 100644 --- a/app/Module/ShareAnniversaryModule.php +++ b/app/Module/ShareAnniversaryModule.php @@ -22,10 +22,10 @@ use Aura\Router\RouterContainer; use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Date\GregorianDate; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Fact; use Fisharebest\Webtrees\Family; use Fisharebest\Webtrees\GedcomRecord; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Registry; diff --git a/app/Module/SiteMapModule.php b/app/Module/SiteMapModule.php index c00554fba1d..5db57b321f1 100644 --- a/app/Module/SiteMapModule.php +++ b/app/Module/SiteMapModule.php @@ -23,16 +23,16 @@ use Aura\Router\RouterContainer; use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; -use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Family; use Fisharebest\Webtrees\FlashMessages; use Fisharebest\Webtrees\GedcomRecord; use Fisharebest\Webtrees\Html; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Media; use Fisharebest\Webtrees\Note; +use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Repository; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Source; diff --git a/app/Module/StatisticsChartModule.php b/app/Module/StatisticsChartModule.php index bce32e253fd..190b809bb3b 100644 --- a/app/Module/StatisticsChartModule.php +++ b/app/Module/StatisticsChartModule.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Module; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; use Fisharebest\Webtrees\Statistics; diff --git a/app/Module/UserJournalModule.php b/app/Module/UserJournalModule.php index b1cc1218dc0..52c32c4fbdb 100644 --- a/app/Module/UserJournalModule.php +++ b/app/Module/UserJournalModule.php @@ -21,7 +21,7 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Carbon; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\Http\RequestHandlers\UserPage; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Services\HtmlService; diff --git a/app/Services/HomePageService.php b/app/Services/HomePageService.php index 99e15c28ca3..4d2662e5175 100644 --- a/app/Services/HomePageService.php +++ b/app/Services/HomePageService.php @@ -21,8 +21,7 @@ use Fisharebest\Webtrees\Auth; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\ModuleBlockInterface; use Fisharebest\Webtrees\Module\ModuleInterface; use Fisharebest\Webtrees\Tree; diff --git a/app/Services/PendingChangesService.php b/app/Services/PendingChangesService.php index 19745445e0e..390f5418900 100644 --- a/app/Services/PendingChangesService.php +++ b/app/Services/PendingChangesService.php @@ -21,7 +21,6 @@ use Fisharebest\Webtrees\Carbon; use Fisharebest\Webtrees\Exceptions\GedcomErrorException; -use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Family; use Fisharebest\Webtrees\Functions\FunctionsImport; use Fisharebest\Webtrees\Gedcom; @@ -31,6 +30,7 @@ use Fisharebest\Webtrees\Location; use Fisharebest\Webtrees\Media; use Fisharebest\Webtrees\Note; +use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Repository; use Fisharebest\Webtrees\Source; use Fisharebest\Webtrees\Submission; diff --git a/app/Services/SearchService.php b/app/Services/SearchService.php index 5f657c2e4e2..4b3e0c228d2 100644 --- a/app/Services/SearchService.php +++ b/app/Services/SearchService.php @@ -21,17 +21,17 @@ use Closure; use Fisharebest\Webtrees\Date; -use Fisharebest\Webtrees\Exceptions\HttpServiceUnavailableException; -use Fisharebest\Webtrees\Location; -use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Family; use Fisharebest\Webtrees\Gedcom; use Fisharebest\Webtrees\GedcomRecord; +use Fisharebest\Webtrees\Http\Exceptions\HttpServiceUnavailableException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Individual; +use Fisharebest\Webtrees\Location; use Fisharebest\Webtrees\Media; use Fisharebest\Webtrees\Note; use Fisharebest\Webtrees\Place; +use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Repository; use Fisharebest\Webtrees\Soundex; use Fisharebest\Webtrees\Source; diff --git a/app/Services/UpgradeService.php b/app/Services/UpgradeService.php index d0a32179f20..980d5a40d36 100644 --- a/app/Services/UpgradeService.php +++ b/app/Services/UpgradeService.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Carbon; -use Fisharebest\Webtrees\Exceptions\HttpServerErrorException; +use Fisharebest\Webtrees\Http\Exceptions\HttpServerErrorException; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Site; use Fisharebest\Webtrees\Webtrees; diff --git a/app/Validator.php b/app/Validator.php index 5012b104183..2c2b3f7e3fd 100644 --- a/app/Validator.php +++ b/app/Validator.php @@ -20,15 +20,18 @@ namespace Fisharebest\Webtrees; use Closure; +use Fisharebest\Webtrees\Http\Exceptions\HttpBadRequestException; use LogicException; use Psr\Http\Message\ServerRequestInterface; use function array_reduce; use function ctype_digit; +use function gettype; use function is_array; use function is_int; use function is_string; use function parse_url; +use function preg_match; use function str_starts_with; /** @@ -80,20 +83,29 @@ public function isBetween(int $minimum, int $maximum): self { $this->rules[] = static function ($value) use ($minimum, $maximum): ?int { if (is_int($value)) { - if ($value < $minimum || $value > $maximum) { - return null; + if ($value >= $minimum && $value <= $maximum) { + return $value; } - return $value; + return null; + } + + if ($value === null) { + return null; } - throw new LogicException('Validator::isBetween() can only be used for integers'); + throw new LogicException(__METHOD__ . ' does not accept ' . gettype($value)); }; return $this; } - public function localUrl(string $base_url): self + /** + * @param string $base_url + * + * @return $this + */ + public function isLocalUrl(string $base_url): self { $this->rules[] = static function ($value) use ($base_url): ?string { if (is_string($value)) { @@ -119,7 +131,45 @@ public function localUrl(string $base_url): self return null; } - throw new LogicException(__METHOD__ . ' can only be used for strings'); + if ($value === null) { + return null; + } + + throw new LogicException(__METHOD__ . ' does not accept ' . gettype($value)); + }; + + return $this; + } + + /** + * @return $this + */ + public function isXref(): self + { + $this->rules[] = static function ($value) { + if (is_string($value)) { + if (preg_match('/^' . Gedcom::REGEX_XREF . '$/', $value)) { + return $value; + } + + return null; + } + + if (is_array($value)) { + foreach ($value as $item) { + if (!preg_match('/^' . Gedcom::REGEX_XREF . '$/', $item)) { + return null; + } + } + + return $value; + } + + if ($value === null) { + return null; + } + + throw new LogicException(__METHOD__ . ' does not accept ' . gettype($value)); }; return $this; @@ -135,7 +185,7 @@ public function array(string $parameter): array $value = $this->parameters[$parameter] ?? null; if (!is_array($value)) { - $value = []; + $value = null; } return array_reduce($this->rules, static fn ($value, $rule) => $rule($value), $value); @@ -174,4 +224,52 @@ public function string(string $parameter): ?string return array_reduce($this->rules, static fn ($value, $rule) => $rule($value), $value); } + + /** + * @param string $parameter + * + * @return array + */ + public function requiredArray(string $parameter): array + { + $value = $this->array($parameter); + + if (is_array($value)) { + return $value; + } + + throw new HttpBadRequestException(I18N::translate('The parameter “%s” is missing.', $parameter)); + } + + /** + * @param string $parameter + * + * @return int + */ + public function requiredInteger(string $parameter): int + { + $value = $this->integer($parameter); + + if (is_int($value)) { + return $value; + } + + throw new HttpBadRequestException(I18N::translate('The parameter “%s” is missing.', $parameter)); + } + + /** + * @param string $parameter + * + * @return string + */ + public function requiredString(string $parameter): string + { + $value = $this->string($parameter); + + if (is_string($value)) { + return $value; + } + + throw new HttpBadRequestException(I18N::translate('The parameter “%s” is missing.', $parameter)); + } } diff --git a/tests/app/Http/Middleware/AuthAdministratorTest.php b/tests/app/Http/Middleware/AuthAdministratorTest.php index 439f39aba9b..200d07c7823 100644 --- a/tests/app/Http/Middleware/AuthAdministratorTest.php +++ b/tests/app/Http/Middleware/AuthAdministratorTest.php @@ -21,8 +21,8 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\GuestUser; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\User; use Psr\Http\Server\RequestHandlerInterface; diff --git a/tests/app/Http/Middleware/AuthEditorTest.php b/tests/app/Http/Middleware/AuthEditorTest.php index e468b686034..eb717a24f48 100644 --- a/tests/app/Http/Middleware/AuthEditorTest.php +++ b/tests/app/Http/Middleware/AuthEditorTest.php @@ -21,8 +21,8 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\GuestUser; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/tests/app/Http/Middleware/AuthManagerTest.php b/tests/app/Http/Middleware/AuthManagerTest.php index 052c0182a18..743b3f930b3 100644 --- a/tests/app/Http/Middleware/AuthManagerTest.php +++ b/tests/app/Http/Middleware/AuthManagerTest.php @@ -21,8 +21,8 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\GuestUser; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/tests/app/Http/Middleware/AuthMemberTest.php b/tests/app/Http/Middleware/AuthMemberTest.php index cce0fdf9326..11a059d6fdd 100644 --- a/tests/app/Http/Middleware/AuthMemberTest.php +++ b/tests/app/Http/Middleware/AuthMemberTest.php @@ -21,8 +21,8 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\GuestUser; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/tests/app/Http/Middleware/AuthModeratorTest.php b/tests/app/Http/Middleware/AuthModeratorTest.php index 915c1bd42a8..74e555b7f83 100644 --- a/tests/app/Http/Middleware/AuthModeratorTest.php +++ b/tests/app/Http/Middleware/AuthModeratorTest.php @@ -21,8 +21,8 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\GuestUser; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\Tree; use Fisharebest\Webtrees\User; diff --git a/tests/app/Http/Middleware/HandleExceptionsTest.php b/tests/app/Http/Middleware/HandleExceptionsTest.php index 8ee4023615d..59bf23cdaf3 100644 --- a/tests/app/Http/Middleware/HandleExceptionsTest.php +++ b/tests/app/Http/Middleware/HandleExceptionsTest.php @@ -20,7 +20,7 @@ namespace Fisharebest\Webtrees\Http\Middleware; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpServerErrorException; +use Fisharebest\Webtrees\Http\Exceptions\HttpServerErrorException; use Fisharebest\Webtrees\Services\ModuleService; use Fisharebest\Webtrees\Services\TreeService; use Fisharebest\Webtrees\Services\UserService; diff --git a/tests/app/Http/RequestHandlers/DeleteUserTest.php b/tests/app/Http/RequestHandlers/DeleteUserTest.php index 03404b6b09f..72092936b85 100644 --- a/tests/app/Http/RequestHandlers/DeleteUserTest.php +++ b/tests/app/Http/RequestHandlers/DeleteUserTest.php @@ -21,8 +21,8 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Contracts\UserInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\TestCase; use Fisharebest\Webtrees\User; diff --git a/tests/app/Http/RequestHandlers/MasqueradeTest.php b/tests/app/Http/RequestHandlers/MasqueradeTest.php index 8b4aee7760a..576593ebef4 100644 --- a/tests/app/Http/RequestHandlers/MasqueradeTest.php +++ b/tests/app/Http/RequestHandlers/MasqueradeTest.php @@ -21,7 +21,7 @@ use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Services\UserService; use Fisharebest\Webtrees\Session; use Fisharebest\Webtrees\TestCase; diff --git a/tests/app/Http/RequestHandlers/ModuleActionTest.php b/tests/app/Http/RequestHandlers/ModuleActionTest.php index 891c3a5ea3b..d327fb73b56 100644 --- a/tests/app/Http/RequestHandlers/ModuleActionTest.php +++ b/tests/app/Http/RequestHandlers/ModuleActionTest.php @@ -20,9 +20,9 @@ namespace Fisharebest\Webtrees\Http\RequestHandlers; use Fig\Http\Message\StatusCodeInterface; -use Fisharebest\Webtrees\Exceptions\HttpAccessDeniedException; -use Fisharebest\Webtrees\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\GuestUser; +use Fisharebest\Webtrees\Http\Exceptions\HttpAccessDeniedException; +use Fisharebest\Webtrees\Http\Exceptions\HttpNotFoundException; use Fisharebest\Webtrees\Module\AbstractModule; use Fisharebest\Webtrees\Module\ModuleInterface; use Fisharebest\Webtrees\Services\ModuleService; diff --git a/tests/app/Http/RequestHandlers/UpgradeWizardStepTest.php b/tests/app/Http/RequestHandlers/UpgradeWizardStepTest.php index 7dcdeb4877c..e3d9e6374e6 100644 --- a/tests/app/Http/RequestHandlers/UpgradeWizardStepTest.php +++ b/tests/app/Http/RequestHandlers/UpgradeWizardStepTest.php @@ -23,7 +23,7 @@ use Fig\Http\Message\RequestMethodInterface; use Fig\Http\Message\StatusCodeInterface; use Fisharebest\Webtrees\Auth; -use Fisharebest\Webtrees\Exceptions\HttpServerErrorException; +use Fisharebest\Webtrees\Http\Exceptions\HttpServerErrorException; use Fisharebest\Webtrees\Services\GedcomExportService; use Fisharebest\Webtrees\Services\TimeoutService; use Fisharebest\Webtrees\Services\TreeService;