Skip to content
This repository has been archived by the owner on Dec 26, 2022. It is now read-only.

Commit

Permalink
feat(server): Add Server name in header
Browse files Browse the repository at this point in the history
Add "tangle-accelerator" as server name and version to the header.
Versioning is also added to config header file. Future releases require
update this macro.
  • Loading branch information
Yu Wei Wu committed Mar 19, 2019
1 parent c8ea48f commit 5672d82
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 32 deletions.
1 change: 1 addition & 0 deletions accelerator/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ extern "C" {

/** @name tangle-accelerator config */
/** @{ */
#define TA_VERSION "tangle-accelerator/0.3.0"
#define TA_HOST "localhost" /**< Binding address of tangle-acclerator */
#define TA_PORT "8000" /**< Binding port of tangle-acclerator */
#define TA_THREAD_COUNT 10 /**< Thread count of tangle-acclerator instance */
Expand Down
6 changes: 6 additions & 0 deletions accelerator/errors.h
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,12 @@ typedef enum {
/**< Error in mam response */
} status_t;

typedef enum {
HTTP_METHOD_GET = 0, /**< HTTP GET method */
HTTP_METHOD_POST = 1, /**< HTTP POST method */
HTTP_METHOD_OPTIONS = 2, /**< HTTP OPTIONS method */
} http_method_t;

#ifdef __cplusplus
}
#endif
Expand Down
64 changes: 32 additions & 32 deletions accelerator/server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,21 @@
#include "accelerator/errors.h"
#include "cJSON.h"

void set_options_method_header(served::response& res) {
void set_method_header(served::response& res, http_method_t method) {
res.set_header("Server", TA_VERSION);
res.set_header("Access-Control-Allow-Origin", "*");
res.set_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
res.set_header("Access-Control-Allow-Headers",
"Origin, Content-Type, Accept");
res.set_header("Access-Control-Max-Age", "86400");

switch (method) {
case HTTP_METHOD_OPTIONS:
res.set_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
res.set_header("Access-Control-Allow-Headers",
"Origin, Content-Type, Accept");
res.set_header("Access-Control-Max-Age", "86400");
break;
default:
res.set_header("Content-Type", "application/json");
break;
}
}

status_t set_response_content(status_t ret, char** json_result) {
Expand Down Expand Up @@ -53,7 +62,7 @@ int main(int, char const**) {
mux.handle("/mam/{bundle:[A-Z9]{81}}")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
Expand All @@ -63,8 +72,7 @@ int main(int, char const**) {
&json_result);
ret = set_response_content(ret, &json_result);

res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res.set_status(ret);
res << json_result;
});
Expand All @@ -79,7 +87,7 @@ int main(int, char const**) {
mux.handle("/tag/{tag:[A-Z9]{1,27}}/hashes")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
Expand All @@ -88,8 +96,7 @@ int main(int, char const**) {
ret = api_find_transactions_by_tag(&service, req.params["tag"].c_str(),
&json_result);
ret = set_response_content(ret, &json_result);
res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res.set_status(ret);
res << json_result;
});
Expand All @@ -104,7 +111,7 @@ int main(int, char const**) {
mux.handle("/transaction/{tx:[A-Z9]{81}}")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
Expand All @@ -113,8 +120,7 @@ int main(int, char const**) {
ret = api_get_transaction_object(&service, req.params["tx"].c_str(),
&json_result);
ret = set_response_content(ret, &json_result);
res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res.set_status(ret);
res << json_result;
});
Expand All @@ -129,7 +135,7 @@ int main(int, char const**) {
mux.handle("/tag/{tag:[A-Z9]{1,27}}")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
Expand All @@ -138,8 +144,7 @@ int main(int, char const**) {
ret = api_find_transactions_obj_by_tag(
&service, req.params["tag"].c_str(), &json_result);
ret = set_response_content(ret, &json_result);
res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res.set_status(ret);
res << json_result;
});
Expand All @@ -152,16 +157,15 @@ int main(int, char const**) {
mux.handle("/tips/pair")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
char* json_result;

ret = api_get_tips_pair(&service, &json_result);
ret = set_response_content(ret, &json_result);
res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res.set_status(ret);
res << json_result;
});
Expand All @@ -174,16 +178,15 @@ int main(int, char const**) {
mux.handle("/tips")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
char* json_result;

ret = api_get_tips(&service, &json_result);
ret = set_response_content(ret, &json_result);
res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res.set_status(ret);
res << json_result;
});
Expand All @@ -196,16 +199,15 @@ int main(int, char const**) {
mux.handle("/address")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
char* json_result;

ret = api_generate_address(&service, &json_result);
ret = set_response_content(ret, &json_result);
res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res.set_status(ret);
res << json_result;
});
Expand All @@ -218,7 +220,7 @@ int main(int, char const**) {
mux.handle("/transaction")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.post([&](served::response& res, const served::request& req) {
status_t ret = SC_OK;
Expand All @@ -239,8 +241,7 @@ int main(int, char const**) {
res.set_status(ret);
}

res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_POST);
res << json_result;
});

Expand All @@ -253,16 +254,15 @@ int main(int, char const**) {
mux.handle("{*}")
.method(served::method::OPTIONS,
[&](served::response& res, const served::request& req) {
set_options_method_header(res);
set_method_header(res, HTTP_METHOD_OPTIONS);
})
.get([](served::response& res, const served::request&) {
cJSON* json_obj = cJSON_CreateObject();
cJSON_AddStringToObject(json_obj, "message", "Invalid path");
const char* json = cJSON_PrintUnformatted(json_obj);

res.set_status(SC_HTTP_BAD_REQUEST);
res.set_header("Content-Type", "application/json");
res.set_header("Access-Control-Allow-Origin", "*");
set_method_header(res, HTTP_METHOD_GET);
res << json;

cJSON_Delete(json_obj);
Expand Down

0 comments on commit 5672d82

Please sign in to comment.