Decentralised Art Server
High-performance C++ backend that exposes HTML interface and a secure REST API for managing Performative Transactions entities
 
Loading...
Searching...
No Matches
api.hpp
Go to the documentation of this file.
1#pragma once
2#include <ranges>
3
4#include "native.h"
5#include <asio.hpp>
6#include <asio/experimental/awaitable_operators.hpp>
7using namespace asio::experimental::awaitable_operators;
8
9#include <spdlog/spdlog.h>
10
11#include "utils.hpp"
12#include "config.hpp"
13#include "route.hpp"
14#include "parser.hpp"
15#include "pt.hpp"
16#include "auth.hpp"
17#include "evm.hpp"
18#include "file.hpp"
19#include "version.hpp"
20#include "loader.hpp"
21
22namespace dcn
23{
27 asio::awaitable<std::expected<evm::Address, auth::AuthError>> authenticate(const http::Request & request, const auth::AuthManager & auth_manager);
28
29
39 asio::awaitable<http::Response> GET_version(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, const std::string & build_timestamp);
40
41
50 asio::awaitable<http::Response> HEAD_serveFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
51
60 asio::awaitable<http::Response> OPTIONS_serveFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
61
72 asio::awaitable<http::Response> GET_serveFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, const std::string mime_type, const std::string & file_content);
73
84 asio::awaitable<http::Response> GET_serveBinaryFile(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, const std::string mime_type, const std::vector<std::byte> & file_content);
85
86
96 asio::awaitable<http::Response> GET_nonce(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, auth::AuthManager & auth_manager);
97
98
107 asio::awaitable<http::Response> OPTIONS_auth(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
108
118 asio::awaitable<http::Response> POST_auth(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, auth::AuthManager & auth_manager);
119
120
129 asio::awaitable<http::Response> OPTIONS_accountInfo(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
130
140 asio::awaitable<http::Response> GET_accountInfo(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
141
142
152 asio::awaitable<http::Response> HEAD_particle(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
153
162 asio::awaitable<http::Response> OPTIONS_particle(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
163
173 asio::awaitable<http::Response> GET_particle(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry, evm::EVM & evm);
174
184 asio::awaitable<http::Response> POST_particle(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args,
185 auth::AuthManager & auth_manager, registry::Registry & registry, evm::EVM & evm, const config::Config & config);
186
187
188
198 asio::awaitable<http::Response> HEAD_feature(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
199
208 asio::awaitable<http::Response> OPTIONS_feature(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
209
219 asio::awaitable<http::Response> GET_feature(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry, evm::EVM & evm);
220
230 asio::awaitable<http::Response> POST_feature(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args,
231 auth::AuthManager & auth_manager, registry::Registry & registry, evm::EVM & evm, const config::Config & config);
232
233
243 asio::awaitable<http::Response> HEAD_transformation(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
244
253 asio::awaitable<http::Response> OPTIONS_transformation(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
254
267 asio::awaitable<http::Response> GET_transformation(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry, evm::EVM & evm);
268
282 asio::awaitable<http::Response> POST_transformation(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args,
283 auth::AuthManager & auth_manager, registry::Registry & registry, evm::EVM & evm, const config::Config & config);
284
285
295 asio::awaitable<http::Response> HEAD_condition(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry);
296
305 asio::awaitable<http::Response> OPTIONS_condition(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
306
319 asio::awaitable<http::Response> GET_condition(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, registry::Registry & registry, evm::EVM & evm);
320
334 asio::awaitable<http::Response> POST_condition(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args,
335 auth::AuthManager & auth_manager, registry::Registry & registry, evm::EVM & evm, const config::Config & config);
336
345 asio::awaitable<http::Response> OPTIONS_execute(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args);
346
359 asio::awaitable<http::Response> POST_execute(const http::Request & request, std::vector<server::RouteArg> route_args, server::QueryArgsList query_args, const auth::AuthManager & auth_manager, evm::EVM & evm);
360}
absl::flat_hash_map< std::string, RouteArg > QueryArgsList
Definition route.hpp:23
Definition decentralised_art.hpp:30
asio::awaitable< http::Response > OPTIONS_serveFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for a file by returning a response with CORS headers.
Definition api_file.cpp:17
asio::awaitable< http::Response > OPTIONS_particle(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests by returning a response with CORS headers.
Definition api_particle.cpp:67
asio::awaitable< http::Response > HEAD_feature(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles HEAD requests for the feature endpoint.
Definition api_feature.cpp:10
asio::awaitable< http::Response > GET_nonce(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager)
Handle a GET request to /auth/nonce.
Definition api_auth.cpp:55
asio::awaitable< http::Response > HEAD_serveFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles HEAD requests for a file.
Definition api_file.cpp:6
asio::awaitable< http::Response > GET_serveBinaryFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const std::string mime_type, const std::vector< std::byte > &file_content)
Handles GET requests for a binary file.
Definition api_file.cpp:44
asio::awaitable< http::Response > POST_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handles POST requests for the transformation endpoint.
Definition api_transformation.cpp:240
asio::awaitable< http::Response > POST_feature(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handle a POST request to /features.
Definition api_feature.cpp:231
asio::awaitable< http::Response > GET_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry, evm::EVM &evm)
Handles GET requests for the transformation endpoint.
Definition api_transformation.cpp:90
asio::awaitable< http::Response > POST_particle(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handle a POST request to /particles.
Definition api_particle.cpp:231
asio::awaitable< http::Response > GET_feature(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry, evm::EVM &evm)
Handle a GET request to /features.
Definition api_feature.cpp:81
asio::awaitable< http::Response > OPTIONS_auth(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles a OPTIONS request to /auth.
Definition api_auth.cpp:106
asio::awaitable< std::expected< evm::Address, auth::AuthError > > authenticate(const http::Request &request, const auth::AuthManager &auth_manager)
Helper function to handle authentication.
Definition api_auth.cpp:32
asio::awaitable< http::Response > HEAD_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles HEAD requests for the transformation endpoint.
Definition api_transformation.cpp:11
asio::awaitable< http::Response > GET_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry, evm::EVM &evm)
Handles GET requests for the condition endpoint.
Definition api_condition.cpp:90
asio::awaitable< http::Response > OPTIONS_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for the condition endpoint by returning a response with CORS headers.
Definition api_condition.cpp:76
asio::awaitable< http::Response > POST_auth(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager)
Handles a POST request to /auth.
Definition api_auth.cpp:120
asio::awaitable< http::Response > HEAD_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles HEAD requests for the condition endpoint.
Definition api_condition.cpp:11
asio::awaitable< http::Response > HEAD_particle(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles HEAD requests for the particle endpoint.
Definition api_particle.cpp:10
asio::awaitable< http::Response > GET_particle(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry, evm::EVM &evm)
Handle a GET request to /particles.
Definition api_particle.cpp:81
asio::awaitable< http::Response > OPTIONS_transformation(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for the transformation endpoint by returning a response with CORS headers.
Definition api_transformation.cpp:76
asio::awaitable< http::Response > POST_condition(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, auth::AuthManager &auth_manager, registry::Registry &registry, evm::EVM &evm, const config::Config &config)
Handles POST requests for the condition endpoint.
Definition api_condition.cpp:240
asio::awaitable< http::Response > POST_execute(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const auth::AuthManager &auth_manager, evm::EVM &evm)
Handles POST requests for the execute endpoint.
Definition api_execute.cpp:24
asio::awaitable< http::Response > OPTIONS_accountInfo(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles a OPTIONS request to /account.
Definition api_account.cpp:5
asio::awaitable< http::Response > GET_version(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const std::string &build_timestamp)
Handles GET requests for the version endpoint.
Definition api.cpp:5
asio::awaitable< http::Response > OPTIONS_feature(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests by returning a response with CORS headers.
Definition api_feature.cpp:67
asio::awaitable< http::Response > OPTIONS_execute(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args)
Handles OPTIONS requests for the execute endpoint by returning a response with CORS headers.
Definition api_execute.cpp:10
asio::awaitable< http::Response > GET_accountInfo(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, registry::Registry &registry)
Handles a GET request to /account.
Definition api_account.cpp:19
asio::awaitable< http::Response > GET_serveFile(const http::Request &request, std::vector< server::RouteArg > route_args, server::QueryArgsList query_args, const std::string mime_type, const std::string &file_content)
Handles GET requests for a file.
Definition api_file.cpp:31