|
16 | 16 | #define CORS_HEADERS "Access-Control-Allow-Origin: *\r\nAccess-Control-Allow-Headers:Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers\r\nAccess-Control-Allow-Methods: GET,HEAD,OPTIONS,POST,PUT\r\n" |
17 | 17 |
|
18 | 18 | MicroOcpp::MOcppMongooseClient *ao_sock = nullptr; |
| 19 | +const char *api_cert = ""; |
| 20 | +const char *api_key = ""; |
| 21 | +const char *api_user = ""; |
| 22 | +const char *api_pass = ""; |
19 | 23 |
|
20 | | -void server_initialize(MicroOcpp::MOcppMongooseClient *osock) { |
21 | | - ao_sock = osock; |
| 24 | +void server_initialize(MicroOcpp::MOcppMongooseClient *osock, const char *cert, const char *key, const char *user, const char *pass) { |
| 25 | + ao_sock = osock; |
| 26 | + api_cert = cert; |
| 27 | + api_key = key; |
| 28 | + api_user = user; |
| 29 | + api_pass = pass; |
22 | 30 | } |
23 | 31 |
|
24 | | -char* toStringPtr(std::string cppString){ |
25 | | - char *cstr = new char[cppString.length() + 1]; |
26 | | - strcpy(cstr, cppString.c_str()); |
27 | | - return cstr; |
| 32 | +bool api_check_basic_auth(const char *user, const char *pass) { |
| 33 | + if (strcmp(api_user, user)) { |
| 34 | + return false; |
| 35 | + } |
| 36 | + if (strcmp(api_pass, pass)) { |
| 37 | + return false; |
| 38 | + } |
| 39 | + return true; |
28 | 40 | } |
29 | 41 |
|
30 | 42 | void http_serve(struct mg_connection *c, int ev, void *ev_data) { |
31 | | - if (ev == MG_EV_HTTP_MSG) { |
| 43 | + if (ev == MG_EV_ACCEPT) { |
| 44 | + if (mg_url_is_ssl((const char*)c->fn_data)) { // TLS listener! |
| 45 | + struct mg_tls_opts opts = {0}; |
| 46 | + opts.cert = mg_str(api_cert); |
| 47 | + opts.key = mg_str(api_key); |
| 48 | + mg_tls_init(c, &opts); |
| 49 | + } |
| 50 | + } else if (ev == MG_EV_HTTP_MSG) { |
32 | 51 | //struct mg_http_message *message_data = (struct mg_http_message *) ev_data; |
33 | 52 | struct mg_http_message *message_data = reinterpret_cast<struct mg_http_message *>(ev_data); |
34 | 53 | const char *final_headers = DEFAULT_HEADER CORS_HEADERS; |
| 54 | + |
| 55 | + char user[64], pass[64]; |
| 56 | + mg_http_creds(message_data, user, sizeof(user), pass, sizeof(pass)); |
| 57 | + if (!api_check_basic_auth(user, pass)) { |
| 58 | + mg_http_reply(c, 403, final_headers, "Not Authorised\n"); |
| 59 | + return; |
| 60 | + } |
| 61 | + |
35 | 62 | struct mg_str json = message_data->body; |
36 | 63 |
|
37 | 64 | MO_DBG_VERBOSE("%.*s", 20, message_data->uri.buf); |
|
0 commit comments