diff --git a/app/Api/V1/Controllers/Autocomplete/AccountController.php b/app/Api/V1/Controllers/Autocomplete/AccountController.php index 971aa434b8..6074a705ef 100644 --- a/app/Api/V1/Controllers/Autocomplete/AccountController.php +++ b/app/Api/V1/Controllers/Autocomplete/AccountController.php @@ -41,6 +41,7 @@ use Illuminate\Http\JsonResponse; class AccountController extends Controller { use AccountFilter; + protected array $accepts = ['application/json']; /** @var array */ private array $balanceTypes; @@ -123,6 +124,6 @@ class AccountController extends Controller } ); - return response()->json($return); + return response()->api($return); } } diff --git a/app/Api/V1/Controllers/Autocomplete/BillController.php b/app/Api/V1/Controllers/Autocomplete/BillController.php index 36904d1a89..224a899076 100644 --- a/app/Api/V1/Controllers/Autocomplete/BillController.php +++ b/app/Api/V1/Controllers/Autocomplete/BillController.php @@ -74,6 +74,6 @@ class BillController extends Controller } ); - return response()->json($filtered->toArray()); + return response()->api($filtered->toArray()); } } diff --git a/app/Api/V1/Controllers/Autocomplete/BudgetController.php b/app/Api/V1/Controllers/Autocomplete/BudgetController.php index 4620955a22..ed09d195c4 100644 --- a/app/Api/V1/Controllers/Autocomplete/BudgetController.php +++ b/app/Api/V1/Controllers/Autocomplete/BudgetController.php @@ -73,6 +73,6 @@ class BudgetController extends Controller } ); - return response()->json($filtered); + return response()->api($filtered); } } diff --git a/app/Api/V1/Controllers/Autocomplete/CategoryController.php b/app/Api/V1/Controllers/Autocomplete/CategoryController.php index a91a2231ed..6c0e281236 100644 --- a/app/Api/V1/Controllers/Autocomplete/CategoryController.php +++ b/app/Api/V1/Controllers/Autocomplete/CategoryController.php @@ -73,6 +73,6 @@ class CategoryController extends Controller } ); - return response()->json($filtered); + return response()->api($filtered); } } diff --git a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php index 2170b5dd5a..adf4e3b223 100644 --- a/app/Api/V1/Controllers/Autocomplete/CurrencyController.php +++ b/app/Api/V1/Controllers/Autocomplete/CurrencyController.php @@ -77,7 +77,7 @@ class CurrencyController extends Controller ]; } - return response()->json($result); + return response()->api($result); } /** @@ -103,6 +103,6 @@ class CurrencyController extends Controller ]; } - return response()->json($result); + return response()->api($result); } } diff --git a/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php b/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php index 5f1014502b..3b41ebcecf 100644 --- a/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php +++ b/app/Api/V1/Controllers/Autocomplete/ObjectGroupController.php @@ -75,6 +75,6 @@ class ObjectGroupController extends Controller ]; } - return response()->json($return); + return response()->api($return); } } diff --git a/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php b/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php index 6565ba78f8..f077d3df00 100644 --- a/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php +++ b/app/Api/V1/Controllers/Autocomplete/PiggyBankController.php @@ -87,7 +87,7 @@ class PiggyBankController extends Controller ]; } - return response()->json($response); + return response()->api($response); } /** @@ -124,6 +124,6 @@ class PiggyBankController extends Controller ]; } - return response()->json($response); + return response()->api($response); } } diff --git a/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php b/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php index c9c6f2d4f1..2aca073dd5 100644 --- a/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php +++ b/app/Api/V1/Controllers/Autocomplete/RecurrenceController.php @@ -73,6 +73,6 @@ class RecurrenceController extends Controller ]; } - return response()->json($response); + return response()->api($response); } } diff --git a/app/Api/V1/Controllers/Autocomplete/RuleController.php b/app/Api/V1/Controllers/Autocomplete/RuleController.php index 5a727f0ee9..bc9996dcfb 100644 --- a/app/Api/V1/Controllers/Autocomplete/RuleController.php +++ b/app/Api/V1/Controllers/Autocomplete/RuleController.php @@ -72,6 +72,6 @@ class RuleController extends Controller ]; } - return response()->json($response); + return response()->api($response); } } diff --git a/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php b/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php index cd77505b8b..7315de68d8 100644 --- a/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php +++ b/app/Api/V1/Controllers/Autocomplete/RuleGroupController.php @@ -72,6 +72,6 @@ class RuleGroupController extends Controller ]; } - return response()->json($response); + return response()->api($response); } } diff --git a/app/Api/V1/Controllers/Autocomplete/TagController.php b/app/Api/V1/Controllers/Autocomplete/TagController.php index c086b6b71b..dabc0a1c85 100644 --- a/app/Api/V1/Controllers/Autocomplete/TagController.php +++ b/app/Api/V1/Controllers/Autocomplete/TagController.php @@ -75,6 +75,6 @@ class TagController extends Controller ]; } - return response()->json($array); + return response()->api($array); } } diff --git a/app/Api/V1/Controllers/Autocomplete/TransactionController.php b/app/Api/V1/Controllers/Autocomplete/TransactionController.php index 1624d89d47..b6746339a9 100644 --- a/app/Api/V1/Controllers/Autocomplete/TransactionController.php +++ b/app/Api/V1/Controllers/Autocomplete/TransactionController.php @@ -84,7 +84,7 @@ class TransactionController extends Controller ]; } - return response()->json($array); + return response()->api($array); } /** @@ -122,6 +122,6 @@ class TransactionController extends Controller ]; } - return response()->json($array); + return response()->api($array); } } diff --git a/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php b/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php index b34924b6d8..abc0e11553 100644 --- a/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php +++ b/app/Api/V1/Controllers/Autocomplete/TransactionTypeController.php @@ -72,6 +72,6 @@ class TransactionTypeController extends Controller ]; } - return response()->json($array); + return response()->api($array); } } diff --git a/app/Api/V1/Controllers/Controller.php b/app/Api/V1/Controllers/Controller.php index 5d31228bbc..a6bbeec865 100644 --- a/app/Api/V1/Controllers/Controller.php +++ b/app/Api/V1/Controllers/Controller.php @@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Controllers; use Carbon\Carbon; use Carbon\Exceptions\InvalidFormatException; +use FireflyIII\Exceptions\BadHttpHeaderException; use FireflyIII\Models\Preference; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Support\Facades\Amount; @@ -60,11 +61,13 @@ abstract class Controller extends BaseController use ValidatesRequests; protected const string CONTENT_TYPE = 'application/vnd.api+json'; + protected const string JSON_CONTENT_TYPE = 'application/json'; /** @var array */ protected array $allowedSort; protected ParameterBag $parameters; protected bool $convertToNative = false; + protected array $accepts = ['application/json']; protected TransactionCurrency $nativeCurrency; /** @@ -82,9 +85,15 @@ abstract class Controller extends BaseController $this->convertToNative = Amount::convertToNative(); $this->nativeCurrency = Amount::getNativeCurrency(); app()->setLocale($language); - } + + // filter down what this endpoint accepts. + if (!$request->accepts($this->accepts)) { + throw new BadHttpHeaderException(sprintf('Sorry, Accept header "%s" is not something this endpoint can provide.', $request->header('Accept'))); + } + + return $next($request); } ); diff --git a/app/Api/V1/Controllers/System/AboutController.php b/app/Api/V1/Controllers/System/AboutController.php index cb82d4fe1b..ead54d675b 100644 --- a/app/Api/V1/Controllers/System/AboutController.php +++ b/app/Api/V1/Controllers/System/AboutController.php @@ -58,7 +58,7 @@ class AboutController extends Controller 'driver' => $currentDriver, ]; - return response()->api(['data' => $data])->header('Content-Type', self::CONTENT_TYPE); + return response()->api(['data' => $data])->header('Content-Type', self::JSON_CONTENT_TYPE); } /** diff --git a/app/Api/V1/Controllers/System/ConfigurationController.php b/app/Api/V1/Controllers/System/ConfigurationController.php index 2eb893b96b..661b6e457e 100644 --- a/app/Api/V1/Controllers/System/ConfigurationController.php +++ b/app/Api/V1/Controllers/System/ConfigurationController.php @@ -86,7 +86,7 @@ class ConfigurationController extends Controller ]; } - return response()->json($return); + return response()->api($return); } /** @@ -142,7 +142,7 @@ class ConfigurationController extends Controller ]; } - return response()->json(['data' => $data])->header('Content-Type', self::CONTENT_TYPE); + return response()->api(['data' => $data])->header('Content-Type', self::JSON_CONTENT_TYPE); } /** @@ -173,6 +173,6 @@ class ConfigurationController extends Controller 'editable' => true, ]; - return response()->json(['data' => $data])->header('Content-Type', self::CONTENT_TYPE); + return response()->api(['data' => $data])->header('Content-Type', self::CONTENT_TYPE); } }