From d5cbaa8d38b6da9dcc05d61700e97342d3e7484a Mon Sep 17 00:00:00 2001 From: TolaMironcenko Date: Tue, 9 Jul 2024 10:15:23 +0700 Subject: [PATCH] added wifi password ssid status get --- .vscode/settings.json | 3 +- openrouter/CMakeLists.txt | 4 ++ openrouter/src/openrouter.cpp | 5 ++ openrouter/src/settings/wifi/name.cpp | 55 ++++++++++++++++++++++ openrouter/src/settings/wifi/password.cpp | 55 ++++++++++++++++++++++ openrouter/src/settings/wifi/status.cpp | 42 +++++++++++++++++ openrouter/src/settings/wifi/wifi.hpp | 12 +++++ openrouter/src/web/css/settings.css | 3 ++ openrouter/src/web/index.html | 25 +++++++--- openrouter/src/web/js/routes.js | 7 +++ openrouter/src/web/js/settings/settings.js | 4 ++ openrouter/src/web/js/settings/wifi.js | 53 +++++++++++++++++++++ rootfs/etc/init.d/init-functions | 10 ++-- rootfs/etc/init.d/telnet | 2 +- rootfs/etc/openrouter/wifi/status | 1 + 15 files changed, 268 insertions(+), 13 deletions(-) create mode 100644 openrouter/src/settings/wifi/name.cpp create mode 100644 openrouter/src/settings/wifi/password.cpp create mode 100644 openrouter/src/settings/wifi/status.cpp create mode 100644 openrouter/src/settings/wifi/wifi.hpp create mode 100644 openrouter/src/web/js/settings/wifi.js create mode 100644 rootfs/etc/openrouter/wifi/status diff --git a/.vscode/settings.json b/.vscode/settings.json index 5c23b9e..3ffe146 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -74,6 +74,7 @@ "cinttypes": "cpp", "typeinfo": "cpp", "valarray": "cpp", - "variant": "cpp" + "variant": "cpp", + "stdfloat": "cpp" } } \ No newline at end of file diff --git a/openrouter/CMakeLists.txt b/openrouter/CMakeLists.txt index 0327a98..69e9e0a 100644 --- a/openrouter/CMakeLists.txt +++ b/openrouter/CMakeLists.txt @@ -20,6 +20,10 @@ add_executable( src/settings/dns/servers.cpp src/settings/dns/local_domains.cpp + src/settings/wifi/status.cpp + src/settings/wifi/name.cpp + src/settings/wifi/password.cpp + src/settings/ftp/ftp.cpp src/reboot/reboot.cpp diff --git a/openrouter/src/openrouter.cpp b/openrouter/src/openrouter.cpp index b0b7132..02c2b9d 100644 --- a/openrouter/src/openrouter.cpp +++ b/openrouter/src/openrouter.cpp @@ -5,6 +5,7 @@ #include "settings/ssh/ssh.hpp" #include "settings/dns/dns.hpp" #include "settings/ftp/ftp.hpp" +#include "settings/wifi/wifi.hpp" #include "reboot/reboot.hpp" #include "syslog/syslog.hpp" #include @@ -37,6 +38,10 @@ int main() { srv.Post("/api/settings/ftp/get", get_ftp); srv.Post("/api/settings/ftp/set", set_ftp); + srv.Post("/api/settings/wifi/status/get", get_wifi_status); + srv.Post("/api/settings/wifi/name/get", get_wifi_name); + srv.Post("/api/settings/wifi/password/get", get_wifi_password); + srv.Post("/api/reboot", reboot); srv.Get("/api/syslog", get_syslog); diff --git a/openrouter/src/settings/wifi/name.cpp b/openrouter/src/settings/wifi/name.cpp new file mode 100644 index 0000000..a0e78f6 --- /dev/null +++ b/openrouter/src/settings/wifi/name.cpp @@ -0,0 +1,55 @@ +#include "wifi.hpp" +#include +#include "../../types.hpp" +#include "../../routes.hpp" +#include +#include +#include +#include +#include +#include + +#define WIFI_SETTINGS_PATH "/etc/hostapd/hostapd.conf" + +void get_wifi_name(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_name; + std::string wifisettingsbuffer; + while (std::getline(wifisettingsfile, wifisettingsbuffer)) { + if (wifisettingsbuffer.find("ssid=") == 0) { + wifi_name = wifisettingsbuffer; + wifi_name.erase(0, 5); + break; + } + } + wifisettingsfile.close(); + std::stringstream responsedata; + responsedata << R"({"name":")" << wifi_name << R"("})"; + response.set_content(responsedata.str(), JSON_TYPE); + } +} diff --git a/openrouter/src/settings/wifi/password.cpp b/openrouter/src/settings/wifi/password.cpp new file mode 100644 index 0000000..a6d254a --- /dev/null +++ b/openrouter/src/settings/wifi/password.cpp @@ -0,0 +1,55 @@ +#include "wifi.hpp" +#include +#include "../../types.hpp" +#include "../../routes.hpp" +#include +#include +#include +#include +#include +#include + +#define WIFI_SETTINGS_PATH "/etc/hostapd/hostapd.conf" + +void get_wifi_password(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_password; + std::string wifisettingsbuffer; + while (std::getline(wifisettingsfile, wifisettingsbuffer)) { + if (wifisettingsbuffer.find("wpa_passphrase=") == 0) { + wifi_password = wifisettingsbuffer; + wifi_password.erase(0, 15); + break; + } + } + wifisettingsfile.close(); + std::stringstream responsedata; + responsedata << R"({"password":")" << wifi_password << R"("})"; + response.set_content(responsedata.str(), JSON_TYPE); + } +} diff --git a/openrouter/src/settings/wifi/status.cpp b/openrouter/src/settings/wifi/status.cpp new file mode 100644 index 0000000..a86de5b --- /dev/null +++ b/openrouter/src/settings/wifi/status.cpp @@ -0,0 +1,42 @@ +#include "wifi.hpp" +#include +#include +#include "../../routes.hpp" +#include "../../types.hpp" +#include + +void get_wifi_status(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 wifistatusfile("/etc/openrouter/wifi/status"); + int wifi_status; + wifistatusfile >> wifi_status; + wifistatusfile.close(); + std::stringstream responsedata; + responsedata << R"({"status":")" << wifi_status << R"("})"; + response.set_content(responsedata.str(), JSON_TYPE); + } +} diff --git a/openrouter/src/settings/wifi/wifi.hpp b/openrouter/src/settings/wifi/wifi.hpp new file mode 100644 index 0000000..8b09f0d --- /dev/null +++ b/openrouter/src/settings/wifi/wifi.hpp @@ -0,0 +1,12 @@ +#ifndef WIFI_HPP +#define WIFI_HPP + +#include + +void get_wifi_status(const httplib::Request &request, httplib::Response &response); + +void get_wifi_name(const httplib::Request &request, httplib::Response &response); + +void get_wifi_password(const httplib::Request &request, httplib::Response &response); + +#endif // WIFI_HPP \ No newline at end of file diff --git a/openrouter/src/web/css/settings.css b/openrouter/src/web/css/settings.css index 5827a21..7fc3995 100644 --- a/openrouter/src/web/css/settings.css +++ b/openrouter/src/web/css/settings.css @@ -112,6 +112,9 @@ max-height: 0; overflow: auto; transition: 0.3s; + display: flex; + flex-direction: column; + gap: 10px; } .settingrectbody.active { diff --git a/openrouter/src/web/index.html b/openrouter/src/web/index.html index 5d40597..ffc052a 100644 --- a/openrouter/src/web/index.html +++ b/openrouter/src/web/index.html @@ -32,9 +32,9 @@
-
+
-
+

Telnet

@@ -54,7 +54,7 @@
-
+

DNS

@@ -90,7 +90,7 @@
-
+

Ftp

@@ -104,7 +104,7 @@
-
+

SSH

@@ -131,11 +131,21 @@
-
+

WIFI

- + +
+
+
+
+ + +
+
+ +
@@ -244,6 +254,7 @@ + diff --git a/openrouter/src/web/js/routes.js b/openrouter/src/web/js/routes.js index 5d7a5c0..a800213 100644 --- a/openrouter/src/web/js/routes.js +++ b/openrouter/src/web/js/routes.js @@ -27,6 +27,13 @@ const routes = { ftp_status: () => [host, prefix, 'settings', 'ftp', 'get'].join('/'), ftp_status_set: () => [host, prefix, 'settings', 'ftp', 'set'].join('/'), + wifi_status_get: () => [host, prefix, 'settings', 'wifi', 'status', 'get'].join('/'), + wifi_status_set: () => [host, prefix, 'settings', 'wifi', 'status', 'set'].join('/'), + wifi_name_get: () => [host, prefix, 'settings', 'wifi', 'name', 'get'].join('/'), + wifi_name_set: () => [host, prefix, 'settings', 'wifi', 'name', 'set'].join('/'), + wifi_password_get: () => [host, prefix, 'settings', 'wifi', 'password', 'get'].join('/'), + wifi_password_set: () => [host, prefix, 'settings', 'wifi', 'password', 'set'].join('/'), + reboot: () => [host, prefix, 'reboot'].join('/'), syslog: () => [host, prefix, 'syslog'].join('/'), // all_users: () => [host, prefix, 'users', 'all'].join('/'), diff --git a/openrouter/src/web/js/settings/settings.js b/openrouter/src/web/js/settings/settings.js index 5cc4a55..df94451 100644 --- a/openrouter/src/web/js/settings/settings.js +++ b/openrouter/src/web/js/settings/settings.js @@ -11,4 +11,8 @@ const get_all_settings = () => { get_ssh_status() get_ssh_keys() get_ssh_port() + + get_wifi_status() + get_wifi_name() + get_wifi_password() } diff --git a/openrouter/src/web/js/settings/wifi.js b/openrouter/src/web/js/settings/wifi.js new file mode 100644 index 0000000..3baec89 --- /dev/null +++ b/openrouter/src/web/js/settings/wifi.js @@ -0,0 +1,53 @@ +const wifistatus = document.querySelector('#wifistatus') +const wifisettingsbody = document.querySelector('#wifisettingsbody') +const wifissid = document.querySelector('#SSID') +const wifipassword = document.querySelector('#wifipassword') + +const get_wifi_status = () => { + fetch(routes.wifi_status_get(), { + method: 'POST', + body: `{"token":"${localStorage.getItem('token')}"}` + }).then(data => data.json()).then(jsondata => { + console.log(jsondata) + if (jsondata.status == "1") { + wifistatus.checked = true + wifisettingsbody.classList.add('active') + } else { + wifistatus.checked = false + } + }).catch((error) => { + notification(`Ошибка на сервере: ${error}`, "error") + }) +} + +const get_wifi_name = () => { + fetch(routes.wifi_name_get(), { + method: 'POST', + body: `{"token":"${localStorage.getItem('token')}"}` + }).then(data => data.json()).then(jsondata => { + console.log(jsondata) + wifissid.value = jsondata.name + }).catch((error) => { + notification(`Ошибка на сервере: ${error}`, "error") + }) +} + +const get_wifi_password = () => { + fetch(routes.wifi_password_get(), { + method: 'POST', + body: `{"token":"${localStorage.getItem('token')}"}` + }).then(data => data.json()).then(jsondata => { + console.log(jsondata) + wifipassword.value = jsondata.password + }).catch((error) => { + notification(`Ошибка на сервере: ${error}`, "error") + }) +} + +wifistatus.addEventListener('click', () => { + if (wifistatus.checked) { + wifisettingsbody.classList.add('active') + return + } + wifisettingsbody.classList.remove('active') +}) diff --git a/rootfs/etc/init.d/init-functions b/rootfs/etc/init.d/init-functions index 37889e8..94cef35 100755 --- a/rootfs/etc/init.d/init-functions +++ b/rootfs/etc/init.d/init-functions @@ -7,16 +7,18 @@ init () { test -f $DAEMON || exit 0 case "$1" in start) - echo "Starting $DESC..." + notify $NOTIFY_START if [ $LOG ] ; then - $DAEMON $PARAMS 2>>/var/log/$LOG & + $start_command $start_params 2>>/var/log/$LOG & + check $? else - $DAEMON $PARAMS &>/dev/null & + $start_command $start_params &>/dev/null & + check $? fi echo $! > $PIDFILE ;; stop) - printf "\nStopping $DESC..." + notify $NOTIFY_STOP if [ $STOP ] ; then $STOP $PARAMS else diff --git a/rootfs/etc/init.d/telnet b/rootfs/etc/init.d/telnet index 95456ad..6670705 100755 --- a/rootfs/etc/init.d/telnet +++ b/rootfs/etc/init.d/telnet @@ -8,7 +8,7 @@ Red='\033[0;31m' case "$1" in start) notify "Starting telnet " - telnetd -p $(cat /etc/openrouter/telnet/port) + telnetd -S -p $(cat /etc/openrouter/telnet/port) check $? ;; stop) diff --git a/rootfs/etc/openrouter/wifi/status b/rootfs/etc/openrouter/wifi/status new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/rootfs/etc/openrouter/wifi/status @@ -0,0 +1 @@ +0 \ No newline at end of file