From 4769d5bef40d7033f4ec3faec6d24917f5d36617 Mon Sep 17 00:00:00 2001 From: Awilum Date: Fri, 21 Feb 2020 21:26:09 +0300 Subject: [PATCH] feat(core): add Delivery Registry API --- flextype/api/delivery/registry.php | 66 ++++++++++++++++++++++++++++++ flextype/bootstrap.php | 1 + flextype/config/settings.yaml | 3 ++ 3 files changed, 70 insertions(+) create mode 100644 flextype/api/delivery/registry.php diff --git a/flextype/api/delivery/registry.php b/flextype/api/delivery/registry.php new file mode 100644 index 00000000..abac5cdd --- /dev/null +++ b/flextype/api/delivery/registry.php @@ -0,0 +1,66 @@ +getQueryParams()['token'] . '/token.yaml'); +} + +/** + * Fetch registry + * + * endpoint: /api/delivery/registry + */ +$app->get('/api/delivery/registry', function (Request $request, Response $response) use ($flextype) { + + // Get Query Params + $query = $request->getQueryParams(); + + // Set variables + $id = $query['id']; + + if ($flextype['registry']->get('flextype.api.registry.enabled')) { + + // Validate delivery token + if (validate_delivery_registry_token($request, $flextype)) { + $delivery_registry_token_file_path = PATH['tokens'] . '/delivery/registry/' . $request->getQueryParams()['token'] . '/token.yaml'; + + // Set delivery token file + if ($delivery_registry_token_file_data = $flextype['parser']->decode(Filesystem::read($delivery_registry_token_file_path), 'yaml')) { + if ($delivery_registry_token_file_data['state'] == 'disabled' || + ($delivery_registry_token_file_data['limit_calls'] != 0 && $delivery_registry_token_file_data['calls'] >= $delivery_registry_token_file_data['limit_calls'])) { + return $response->withJson(["detail" => "Incorrect authentication credentials."], 401); + } else { + // Fetch registry + $data = $flextype['registry']->get($id); + + // Update calls counter + Filesystem::write($delivery_registry_token_file_path, $flextype['parser']->encode(array_replace_recursive($delivery_registry_token_file_data, ['calls' => $delivery_registry_token_file_data['calls'] + 1]), 'yaml')); + + // Return response + return $response->withJson($data, 200); + } + } else { + return $response->withJson(["detail" => "Incorrect authentication credentials."], 401); + } + } else { + return $response->withJson(["detail" => "Incorrect authentication credentials."], 401); + } + } else { + return $response->withJson(["detail" => "Incorrect authentication credentials."], 401); + } +}); diff --git a/flextype/bootstrap.php b/flextype/bootstrap.php index 3cded7d3..f3ee0105 100755 --- a/flextype/bootstrap.php +++ b/flextype/bootstrap.php @@ -136,6 +136,7 @@ include_once 'middlewares.php'; */ include_once 'api/delivery/images.php'; include_once 'api/delivery/entries.php'; +include_once 'api/delivery/registry.php'; /** * Set internal encoding diff --git a/flextype/config/settings.yaml b/flextype/config/settings.yaml index 039235e6..1ad43848 100644 --- a/flextype/config/settings.yaml +++ b/flextype/config/settings.yaml @@ -216,3 +216,6 @@ api: entries: enabled: true default_token: + registry: + enabled: true + default_token: