From fdbdda37e37d51f3832990a7cd0e03b502980375 Mon Sep 17 00:00:00 2001 From: TolaMironcenko Date: Fri, 12 Jul 2024 14:35:47 +0700 Subject: [PATCH] wifi channel get set added --- openrouter/CMakeLists.txt | 1 + openrouter/src/openrouter.cpp | 2 + openrouter/src/settings/wifi/channel.cpp | 123 +++++++++++++++++++++ openrouter/src/settings/wifi/wifi.hpp | 3 + openrouter/src/web/css/form.css | 5 + openrouter/src/web/index.html | 8 ++ openrouter/src/web/js/routes.js | 2 + openrouter/src/web/js/settings/settings.js | 1 + openrouter/src/web/js/settings/wifi.js | 24 ++++ 9 files changed, 169 insertions(+) create mode 100644 openrouter/src/settings/wifi/channel.cpp diff --git a/openrouter/CMakeLists.txt b/openrouter/CMakeLists.txt index 3d2a38b..eae0018 100644 --- a/openrouter/CMakeLists.txt +++ b/openrouter/CMakeLists.txt @@ -24,6 +24,7 @@ add_executable( src/settings/wifi/name.cpp src/settings/wifi/password.cpp src/settings/wifi/qr.cpp + src/settings/wifi/channel.cpp src/settings/ftp/ftp.cpp diff --git a/openrouter/src/openrouter.cpp b/openrouter/src/openrouter.cpp index 6eda2c4..a4f4206 100644 --- a/openrouter/src/openrouter.cpp +++ b/openrouter/src/openrouter.cpp @@ -45,6 +45,8 @@ int main() { srv.Post("/api/settings/wifi/password/get", get_wifi_password); srv.Post("/api/settings/wifi/password/set", set_wifi_password); srv.Post("/api/settings/wifi/qr/get", get_wifi_qr); + srv.Post("/api/settings/wifi/channel/get", get_wifi_channel); + srv.Post("/api/settings/wifi/channel/set", set_wifi_channel); srv.Post("/api/reboot", reboot); diff --git a/openrouter/src/settings/wifi/channel.cpp b/openrouter/src/settings/wifi/channel.cpp new file mode 100644 index 0000000..cb0a341 --- /dev/null +++ b/openrouter/src/settings/wifi/channel.cpp @@ -0,0 +1,123 @@ +#include "wifi.hpp" +#include +#include "../../types.hpp" +#include "../../routes.hpp" +#include +#include +#include +#include +#include +#include + +#define WIFI_CHANNEL_REQUIRED_STRING R"({"required":"[token,channel]"})" + +void get_wifi_channel(const httplib::Request &request, httplib::Response &response) { + std::cout << GREEN << request.path << RESET << " " << request.method << std::endl; + response.set_header("Access-Control-Allow-Origin", "*"); + if (request.body.empty()) { + response.set_content(ACCESS_REQUIRED_STRING, JSON_TYPE); + return; + } + + nlohmann::json json_body = nlohmann::json::parse(request.body); + if (json_body["token"] == nullptr) { + response.set_content(ACCESS_REQUIRED_STRING, JSON_TYPE); + return; + } + + httplib::Client cli(AUTH_SERVICE); + + std::stringstream body; + body << R"({"token":)" << json_body["token"] << R"(})"; + + httplib::Result res = cli.Post("/api/access", body.str().c_str(), JSON_TYPE); + if (res->status == httplib::OK_200) { + nlohmann::json resjson = nlohmann::json::parse(res->body); + if (resjson["access"] == "reject") { + response.set_content(resjson.dump().c_str(), JSON_TYPE); + return; + } + std::ifstream wifisettingsfile(WIFI_SETTINGS_PATH); + std::string wifi_channel; + std::string wifisettingsbuffer; + while (std::getline(wifisettingsfile, wifisettingsbuffer)) { + if (wifisettingsbuffer.find("channel=") == 0) { + wifi_channel = wifisettingsbuffer; + wifi_channel.erase(0, 8); + break; + } + } + wifisettingsfile.close(); + std::stringstream responsedata; + responsedata << R"({"channel":")" << wifi_channel << R"("})"; + response.set_content(responsedata.str(), JSON_TYPE); + } +} + +void set_wifi_channel(const httplib::Request &request, httplib::Response &response) { + std::cout << GREEN << request.path << RESET << " " << request.method << std::endl; + response.set_header("Access-Control-Allow-Origin", "*"); + if (request.body.empty()) { + response.set_content(ACCESS_REQUIRED_STRING, JSON_TYPE); + return; + } + + nlohmann::json json_body = nlohmann::json::parse(request.body); + if (json_body["token"] == nullptr) { + response.set_content(ACCESS_REQUIRED_STRING, JSON_TYPE); + return; + } + + if (json_body["channel"] == nullptr) { + response.set_content(WIFI_CHANNEL_REQUIRED_STRING, JSON_TYPE); + return; + } + + httplib::Client cli(AUTH_SERVICE); + + std::stringstream body; + body << R"({"token":)" << json_body["token"] << R"(})"; + + httplib::Result res = cli.Post("/api/access", body.str().c_str(), JSON_TYPE); + if (res->status == httplib::OK_200) { + nlohmann::json resjson = nlohmann::json::parse(res->body); + if (resjson["access"] == "reject") { + response.set_content(resjson.dump().c_str(), JSON_TYPE); + return; + } + std::ifstream wifisettingsfile(WIFI_SETTINGS_PATH); + std::string old_channel; + std::string wifisettingsbuffer; + while (std::getline(wifisettingsfile, wifisettingsbuffer)) { + if (wifisettingsbuffer.find("channel=") == 0) { + old_channel = wifisettingsbuffer; + old_channel.erase(0, 8); + break; + } + } + wifisettingsfile.close(); + std::string new_channel = json_body["channel"]; + std::stringstream systemrequest; + systemrequest << "sed -i \"/channel=" << old_channel << "/s//channel=" << new_channel << "/\" /etc/hostapd/hostapd.conf"; + std::cout << systemrequest.str() << std::endl; + system(systemrequest.str().c_str()); + system("rc restart hostapd"); + std::string syslogstring = "WIFI channel changed to " + new_channel; + syslog(LOG_INFO, syslogstring.c_str()); + + std::ifstream changedwifisettingsfile(WIFI_SETTINGS_PATH); + std::string wifi_channel; + std::string changedwifisettingsbuffer; + while (std::getline(changedwifisettingsfile, changedwifisettingsbuffer)) { + if (changedwifisettingsbuffer.find("channel=") == 0) { + wifi_channel = changedwifisettingsbuffer; + wifi_channel.erase(0, 8); + break; + } + } + changedwifisettingsfile.close(); + std::stringstream responsedata; + responsedata << R"({"channel":")" << wifi_channel << R"("})"; + response.set_content(responsedata.str(), JSON_TYPE); + } +} diff --git a/openrouter/src/settings/wifi/wifi.hpp b/openrouter/src/settings/wifi/wifi.hpp index 3d85a24..ca01575 100644 --- a/openrouter/src/settings/wifi/wifi.hpp +++ b/openrouter/src/settings/wifi/wifi.hpp @@ -16,4 +16,7 @@ void set_wifi_password(const httplib::Request &request, httplib::Response &respo void get_wifi_qr(const httplib::Request &request, httplib::Response &response); +void get_wifi_channel(const httplib::Request &request, httplib::Response &response); +void set_wifi_channel(const httplib::Request &request, httplib::Response &response); + #endif // WIFI_HPP \ No newline at end of file diff --git a/openrouter/src/web/css/form.css b/openrouter/src/web/css/form.css index 215084f..adff24a 100644 --- a/openrouter/src/web/css/form.css +++ b/openrouter/src/web/css/form.css @@ -77,6 +77,11 @@ background-color: inherit; } +.forminput>option { + background-color: inherit; + color: black; +} + .forminput:focus { border: 5px solid; } diff --git a/openrouter/src/web/index.html b/openrouter/src/web/index.html index 27fd8d8..c1df79b 100644 --- a/openrouter/src/web/index.html +++ b/openrouter/src/web/index.html @@ -153,6 +153,14 @@ +
+ + +
diff --git a/openrouter/src/web/js/routes.js b/openrouter/src/web/js/routes.js index d0fcf34..a9d4afd 100644 --- a/openrouter/src/web/js/routes.js +++ b/openrouter/src/web/js/routes.js @@ -34,6 +34,8 @@ const routes = { wifi_password_get: () => [host, prefix, 'settings', 'wifi', 'password', 'get'].join('/'), wifi_password_set: () => [host, prefix, 'settings', 'wifi', 'password', 'set'].join('/'), wifi_qr_get: () => [host, prefix, 'settings', 'wifi', 'qr', 'get' ].join('/'), + wifi_channel_get: () => [host, prefix, 'settings', 'wifi', 'channel', 'get' ].join('/'), + wifi_channel_set: () => [host, prefix, 'settings', 'wifi', 'channel', 'set' ].join('/'), reboot: () => [host, prefix, 'reboot'].join('/'), syslog: () => [host, prefix, 'syslog'].join('/'), diff --git a/openrouter/src/web/js/settings/settings.js b/openrouter/src/web/js/settings/settings.js index 372f65f..5cdc882 100644 --- a/openrouter/src/web/js/settings/settings.js +++ b/openrouter/src/web/js/settings/settings.js @@ -14,5 +14,6 @@ const get_all_settings = () => { get_wifi_status() get_wifi_name() + get_wifi_channel() // get_wifi_password() } diff --git a/openrouter/src/web/js/settings/wifi.js b/openrouter/src/web/js/settings/wifi.js index 6ffd31b..1fdefc5 100644 --- a/openrouter/src/web/js/settings/wifi.js +++ b/openrouter/src/web/js/settings/wifi.js @@ -8,6 +8,7 @@ const shownewpasswordbutton = document.querySelector('#shownewpasswordbutton') const newwifipassword = document.querySelector('#newwifipassword') const wifiqr = document.querySelector('#wifiqr') const wifiqrimg = document.querySelector("#wifiqrimg") +const channelselect = document.querySelector('#wifichannel') let old_wifi_name = "" @@ -106,6 +107,7 @@ const set_wifi_settings = () => { start_loader() set_wifi_status() if (wifistatus.checked) { + set_wifi_channel() if (old_wifi_name !== wifissid.value) { set_wifi_name() } @@ -164,3 +166,25 @@ wifiqr.addEventListener('click', () => { wifiqrimg.classList.remove('active') wifiqrimg.innerHTML = "" }) + +const get_wifi_channel = () => { + fetch(routes.wifi_channel_get(), { + method: 'POST', + body: `{"token":"${localStorage.getItem('token')}"}` + }).then(data => data.json()).then(jsondata => { + channelselect.value = jsondata.channel + }).catch((error) => { + notification(`Ошибка на сервере: ${error}`, "error") + }) +} + +const set_wifi_channel = () => { + fetch(routes.wifi_channel_set(), { + method: 'POST', + body: `{"token":"${localStorage.getItem('token')}","channel":"${channelselect.value}"}` + }).then(data => data.json()).then(jsondata => { + channelselect.value = jsondata.channel + }).catch((error) => { + notification(`Ошибка на сервере: ${error}`, "error") + }) +}