mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-24 07:42:40 +01:00
1fc60a9a6e
Summary: Ref T1806. Ref T7173. Depends on D14047. Currently, all exception handling is in this big messy clump in `AphrontDefaultApplicationConfiguration`. Split it out into modular classes. This will let a future change add new classes in the Phacility cluster which intercept particular exceptions we care about and replaces the default, generic responses with more useful, tailored responses. Test Plan: {F777391} - Hit a Conduit error (made a method throw). - Hit an Ajax error (made comment preview throw). - Hit a high security error (tried to edit TOTP). - Hit a rate limiting error (added a bunch of email addresses). - Hit a policy error (tried to look at something with no permission). - Hit an arbitrary exception (made a randomc ontroller throw). Reviewers: chad Reviewed By: chad Maniphest Tasks: T1806, T7173 Differential Revision: https://secure.phabricator.com/D14049
33 lines
798 B
PHP
33 lines
798 B
PHP
<?php
|
|
|
|
final class PhabricatorConduitRequestExceptionHandler
|
|
extends PhabricatorRequestExceptionHandler {
|
|
|
|
public function getRequestExceptionHandlerPriority() {
|
|
return 100000;
|
|
}
|
|
|
|
public function getRequestExceptionHandlerDescription() {
|
|
return pht('Responds to requests made by Conduit clients.');
|
|
}
|
|
|
|
public function canHandleRequestException(
|
|
AphrontRequest $request,
|
|
Exception $ex) {
|
|
return $request->isConduit();
|
|
}
|
|
|
|
public function handleRequestException(
|
|
AphrontRequest $request,
|
|
Exception $ex) {
|
|
|
|
$response = id(new ConduitAPIResponse())
|
|
->setErrorCode(get_class($ex))
|
|
->setErrorInfo($ex->getMessage());
|
|
|
|
return id(new AphrontJSONResponse())
|
|
->setAddJSONShield(false)
|
|
->setContent($response->toDictionary());
|
|
}
|
|
|
|
}
|