call([$this, 'handle']); } } /** * Return the resource name for the JSONAPI output. */ abstract public function getResourceName(): string; /** * Sets the request on the instance. * * @return static */ public function setRequest(Request $request): self { $this->request = $request; return $this; } /** * Returns a new transformer instance with the request set on the instance. * * @return \Pterodactyl\Transformers\Api\Application\BaseTransformer */ public static function fromRequest(Request $request) { return app(static::class)->setRequest($request); } /** * Determine if the API key loaded onto the transformer has permission * to access a different resource. This is used when including other * models on a transformation request. * * @deprecated — prefer $user->can/cannot methods */ protected function authorize(string $resource): bool { $token = $this->request->user()->currentAccessToken(); if (!$token instanceof ApiKey || $token->key_type !== ApiKey::TYPE_APPLICATION) { return false; } return AdminAcl::check($token, $resource, AdminAcl::READ); } /** * Create a new instance of the transformer and pass along the currently * set API key. * * @template T of \Pterodactyl\Transformers\Api\Application\BaseTransformer * * @param class-string $abstract * * @return T * * @throws \Pterodactyl\Exceptions\Transformer\InvalidTransformerLevelException * * @noinspection PhpUndefinedClassInspection * @noinspection PhpDocSignatureInspection */ protected function makeTransformer(string $abstract) { Assert::subclassOf($abstract, self::class); return $abstract::fromRequest($this->request); } /** * Return an ISO-8601 formatted timestamp to use in the API response. */ protected function formatTimestamp(string $timestamp): string { return CarbonImmutable::createFromFormat(CarbonImmutable::DEFAULT_TO_STRING_FORMAT, $timestamp) ->setTimezone(self::RESPONSE_TIMEZONE) ->toIso8601String(); } }