diff --git a/src/API/Backends/PlexToken.php b/src/API/Backends/PlexToken.php new file mode 100644 index 00000000..2c16d78a --- /dev/null +++ b/src/API/Backends/PlexToken.php @@ -0,0 +1,117 @@ +request(Method::POST, 'https://plex.tv/api/v2/pins', [ + 'headers' => [ + 'accept' => 'application/json', + ...PlexClient::getHeaders(), + ], + 'json' => [ + 'strong' => true, + ], + ]); + + if (Status::CREATED !== Status::from($req->getStatusCode())) { + $this->logger->error("Request for OAuth PIN returned with unexpected '{status_code}' status code.", [ + 'status_code' => $req->getStatusCode(), + 'parsed' => $req->toArray(false), + 'body' => $req->getContent(false), + ]); + return api_error( + r( + text: "Request for OAuth PIN returned with unexpected '{status_code}' status code.", + context: ['status_code' => $req->getStatusCode()] + ), + Status::from($req->getStatusCode()) + ); + } + + return api_response(Status::OK, $req->toArray()); + } + + /** + * Check if given plex token is valid. + * + * @param iRequest $request The request object containing the parameters. + * @param iHttp&HttpClient $http The HTTP client used to send the request. + * + * @return iResponse The response from the Plex API. + * @throws ExceptionInterface When a network-related exception occurs. + */ + #[Post(self::URL . '/check[/]', name: 'backends.plex.check')] + public function check(iRequest $request, iHttp $http): iResponse + { + $params = DataUtil::fromRequest($request); + + $id = $params->get('id'); + $code = $params->get('code'); + + if (empty($id) || empty($code)) { + return api_error('Missing required parameters.', Status::BAD_REQUEST); + } + + $req = $http->request(Method::GET, r('https://plex.tv/api/v2/pins/{id}', ['id' => $id]), [ + 'headers' => [ + 'accept' => 'application/json', + ...PlexClient::getHeaders(), + ], + 'json' => ['code' => $code], + ]); + + if (Status::OK !== Status::from($req->getStatusCode())) { + $this->logger->error("Request for OAuth PIN check returned with unexpected '{status_code}' status code.", [ + 'status_code' => $req->getStatusCode(), + 'parsed' => $req->toArray(false), + 'body' => $req->getContent(false), + ]); + + return api_error( + r( + text: "Request for OAuth PIN check returned with unexpected '{status_code}' status code.", + context: ['status_code' => $req->getStatusCode()] + ), + Status::from($req->getStatusCode()) + ); + } + + return api_response(Status::OK, $req->toArray()); + } + +}