Ver código fonte

DK-20 implement /unpair endpoint

Bence Balint 3 anos atrás
pai
commit
5e3ca8e472

+ 3 - 1
components/dk/CMakeLists.txt

@@ -5,8 +5,10 @@ idf_component_register(
         "src/dk.cpp"
         "src/settings_manager.cpp"
 
+        "src/api/pairing_id_middleware.cpp"
+        "src/api/unpair_controller.cpp"
+
         "src/pairing_service/pair_controller.cpp"
-        "src/pairing_manager.cpp"
         "src/pairing_service/scan_controller.cpp"
         "src/pairing_service/settings_controller.cpp"
         "src/pairing_service/verify_controller.cpp"

+ 11 - 0
components/dk/include/api/pairing_id_middleware.h

@@ -0,0 +1,11 @@
+#ifndef DOORKEEPER_DEV_PAIRING_ID_MIDDLEWARE_H
+#define DOORKEEPER_DEV_PAIRING_ID_MIDDLEWARE_H
+
+#include <kbf/web_service.h>
+
+class PairingIdMiddleware : public kbf::WebService::Middleware {
+public:
+    kbf::http::Response run(const kbf::http::Request &request, kbf::WebService &webService) override;
+};
+
+#endif //DOORKEEPER_DEV_PAIRING_ID_MIDDLEWARE_H

+ 18 - 0
components/dk/include/api/unpair_controller.h

@@ -0,0 +1,18 @@
+#ifndef DOORKEEPER_DEV_UNPAIR_CONTROLLER_H
+#define DOORKEEPER_DEV_UNPAIR_CONTROLLER_H
+
+#include <kbf/web_service.h>
+
+class UnpairController : public kbf::WebService::Controller {
+    static constexpr const char *const TAG = "UnpairController";
+
+    kbf::http::Response get(const kbf::http::Request &request) override;
+
+public:
+    UnpairController() : kbf::WebService::Controller("/unpair") {};
+
+protected:
+    void onResponseSent(const kbf::http::Response &response) override;
+};
+
+#endif //DOORKEEPER_DEV_UNPAIR_CONTROLLER_H

+ 0 - 11
components/dk/include/pairing_manager.h

@@ -1,11 +0,0 @@
-#ifndef DOORKEEPER_DEV_PAIRING_MANAGER_H
-#define DOORKEEPER_DEV_PAIRING_MANAGER_H
-
-class PairingManager {
-public:
-    PairingManager();
-
-
-};
-
-#endif //DOORKEEPER_DEV_PAIRING_MANAGER_H

+ 0 - 0
components/dk/include/controllers/pair_controller.h → components/dk/include/pairing_service/pair_controller.h


+ 0 - 0
components/dk/include/controllers/scan_controller.h → components/dk/include/pairing_service/scan_controller.h


+ 0 - 0
components/dk/include/controllers/settings_controller.h → components/dk/include/pairing_service/settings_controller.h


+ 0 - 0
components/dk/include/controllers/verify_controller.h → components/dk/include/pairing_service/verify_controller.h


+ 9 - 0
components/dk/src/api/pairing_id_middleware.cpp

@@ -0,0 +1,9 @@
+#include "api/pairing_id_middleware.h"
+
+using namespace kbf;
+using http::Request;
+using http::Response;
+
+Response PairingIdMiddleware::run(const Request &request, WebService &webService) {
+    return Response();
+}

+ 15 - 0
components/dk/src/api/unpair_controller.cpp

@@ -0,0 +1,15 @@
+#include "api/unpair_controller.h"
+
+#include "dk.h"
+
+using namespace kbf;
+using http::Request;
+using http::Response;
+
+Response UnpairController::get(const Request &request) {
+    return Response("OK");
+}
+
+void UnpairController::onResponseSent(const Response &response) {
+    dk::clearPairing();
+}

+ 6 - 6
components/dk/src/dk.cpp

@@ -11,9 +11,9 @@
 #include <kbf/http/client.h>
 
 #include "settings_manager.h"
-#include "controllers/pair_controller.h"
-#include "controllers/settings_controller.h"
-#include "controllers/verify_controller.h"
+#include "pairing_service/pair_controller.h"
+#include "pairing_service/settings_controller.h"
+#include "pairing_service/verify_controller.h"
 
 
 #define MESSAGE_TIMEOUT 1000 // TODO use Kconfig
@@ -62,9 +62,9 @@ namespace dk {
             clearPairing();
         }};
 
-        pairingService.attach<PairController>();
-        pairingService.attach<SettingsController>();
-        pairingService.attach<VerifyController>();
+        pairingService.controller<PairController>();
+        pairingService.controller<SettingsController>();
+        pairingService.controller<VerifyController>();
 
         if (paired()) {
             wifi::start();

+ 0 - 1
components/dk/src/pairing_manager.cpp

@@ -1 +0,0 @@
-#include "pairing_manager.h"

+ 1 - 1
components/dk/src/pairing_service/pair_controller.cpp

@@ -1,4 +1,4 @@
-#include "controllers/pair_controller.h"
+#include "pairing_service/pair_controller.h"
 
 #include <esp_log.h>
 #include <freertos/FreeRTOS.h>

+ 1 - 1
components/dk/src/pairing_service/scan_controller.cpp

@@ -1,4 +1,4 @@
-#include "controllers/scan_controller.h"
+#include "pairing_service/scan_controller.h"
 
 #include <vector>
 #include <nlohmann_json/json.hpp>

+ 1 - 1
components/dk/src/pairing_service/settings_controller.cpp

@@ -1,4 +1,4 @@
-#include "controllers/settings_controller.h"
+#include "pairing_service/settings_controller.h"
 
 #include <atomic>
 

+ 1 - 1
components/dk/src/pairing_service/verify_controller.cpp

@@ -1,4 +1,4 @@
-#include "controllers/verify_controller.h"
+#include "pairing_service/verify_controller.h"
 
 #include <esp_log.h>
 #include <kbf.h>

+ 2 - 2
components/dk/test/test_scan_controller.cpp

@@ -7,7 +7,7 @@
 #include <kbf/http/client.h>
 #include <kbf/web_service.h>
 
-#include "controllers/scan_controller.h"
+#include "pairing_service/scan_controller.h"
 
 #include <unity.h>
 
@@ -31,7 +31,7 @@ void scanControllerSlave() {
     wifi::start();
 
     auto webService = WebService();
-    webService.attach<ScanController>();
+    webService.controller<ScanController>();
     webService.start();
 
     auto client   = http::Client();

+ 2 - 2
components/dk/test/test_settings_controller.cpp

@@ -7,7 +7,7 @@
 #include <kbf/http/client.h>
 #include <kbf/web_service.h>
 
-#include "controllers/settings_controller.h"
+#include "pairing_service/settings_controller.h"
 
 #include <unity.h>
 
@@ -30,7 +30,7 @@ void testSettingsControllerMaster() {
     wifi::start(ap, sta);
 
     auto webService = WebService();
-    webService.attach<SettingsController>();
+    webService.controller<SettingsController>();
     webService.start();
 
     eventGroup.waitForBit(0);

+ 63 - 0
components/dk/test/test_unpair_controller.cpp

@@ -0,0 +1,63 @@
+#include <atomic>
+
+#include <kbf.h>
+#include <kbf/nvs.h>
+#include <kbf/rtos.h>
+#include <kbf/wifi.h>
+#include <kbf/http/client.h>
+#include <kbf/web_service.h>
+
+#include "api/unpair_controller.h"
+
+#include <unity.h>
+#include <settings_manager.h>
+
+using namespace kbf;
+using namespace std;
+
+static const char *const url           = "http://192.168.4.1/unpair";
+static const char *const ssid          = "doorkeeper_test_master";
+static const char *const testPassword  = "mg4drg9ss9e8t";
+static const char *const testPairingId = "1647daae-d4cf-4023-82e7-da57cb14106c";
+
+static rtos::EventGroup eventGroup;
+
+void unpairControllerMaster() {
+    nvs::erase();
+    SettingsManager::instance()->setPairingId(testPairingId);
+
+    auto ap = wifi::AP::create(ssid, testPassword);
+    ap->onDisconnect = {[](wifi::AP::STA &) { eventGroup.setBit(0); }};
+
+    auto sta = wifi::STA::create();
+    wifi::start(ap, sta);
+
+    auto webService = WebService();
+    webService.controller<UnpairController>();
+    webService.start();
+
+    eventGroup.waitForBit(0);
+
+    TEST_ASSERT_EQUAL_STRING("", SettingsManager::instance()->pairingId().c_str());
+
+    kbf::sleep(500);
+    webService.stop();
+    wifi::stop();
+}
+
+void unpairControllerSlave() {
+    auto sta = wifi::STA::create();
+    sta->onIp = {[](){ eventGroup.setBit(0); }};
+    wifi::start(sta);
+    sta->connect(ssid, testPassword);
+    eventGroup.waitForBit(0);
+
+    auto client   = http::Client();
+    auto response = client.get(url);
+    TEST_ASSERT_EQUAL(200, response->status);
+
+    kbf::sleep(500);
+    wifi::stop();
+}
+
+TEST_CASE_MULTIPLE_DEVICES("UnpairController", "[controller]", unpairControllerMaster, unpairControllerSlave)

+ 1 - 1
components/dk/test_app/CMakeLists.txt

@@ -5,7 +5,7 @@ set(CMAKE_CXX_STANDARD 17)
 
 # Include the components directory of the main application:
 #
-set(EXTRA_COMPONENT_DIRS "../..")
+set(EXTRA_COMPONENT_DIRS "../.." "../../kbf/lib/esp-idf-lib/components")
 
 # Set the components to include the tests for.
 # This can be overridden from CMake cache:

+ 1 - 1
components/kbf

@@ -1 +1 @@
-Subproject commit 7340cb64c001a3b63633347fe654a1eba8ca03ce
+Subproject commit a4db17df6dd46ef9085e895d4976cad9040f6cc5