/ firmware / src / services / http / api / email.cpp
email.cpp
 1  #include "api.h"
 2  #include "services/email.h"
 3  #include <config.h>
 4  
 5  #include <ArduinoJson.h>
 6  
 7  void services::http::api::email::registerRoutes(AsyncWebServer &server) {
 8  #if CERATINA_SMTP_ENABLED
 9    server.on("/api/smtp/config", HTTP_GET,
10              [](AsyncWebServerRequest *request) {
11      char host[128] = {0};
12      uint16_t port = 0;
13      bool ok = ::services::email::accessEndpoint(host, sizeof(host), &port);
14  
15      JsonDocument doc;
16      doc["ok"] = ok;
17      JsonObject data = doc["data"].to<JsonObject>();
18      data["smtp_enabled"] = true;
19      data["smtp_test_enabled"] = config::smtp::TEST_ENABLED == 1;
20      if (ok) {
21        data["smtp_host"] = host;
22        data["smtp_port"] = port;
23      }
24  
25      String json;
26      serializeJson(doc, json);
27      request->send(200, asyncsrv::T_application_json, json);
28    });
29  
30    server.on("/api/smtp/send", HTTP_POST,
31              [](AsyncWebServerRequest *request) {
32      char host[128] = {0};
33      uint16_t port = 0;
34      if (!::services::email::accessEndpoint(host, sizeof(host), &port)) {
35        request->send(400, asyncsrv::T_application_json,
36                      "{\"ok\":false,\"error\":\"SMTP not configured\"}");
37        return;
38      }
39  
40      bool sent = ::services::email::sendTest();
41      JsonDocument doc;
42      doc["ok"] = sent;
43      JsonObject data = doc["data"].to<JsonObject>();
44      data["smtp_host"] = host;
45      data["smtp_port"] = port;
46      data["sent"] = sent;
47  
48      String json;
49      serializeJson(doc, json);
50      request->send(sent ? 200 : 500, asyncsrv::T_application_json, json);
51    });
52  #else
53    (void)server;
54  #endif
55  }