diff --git a/src/openrouter.cpp b/src/openrouter.cpp index 7e1cc1f..f9f0a7d 100644 --- a/src/openrouter.cpp +++ b/src/openrouter.cpp @@ -15,6 +15,7 @@ int main() { srv.Post("/api/settings/telnet/get", get_telnet); srv.Post("/api/settings/telnet/set", set_telnet); srv.Post("/api/settings/telnet/port/get", get_telnet_port); + srv.Post("/api/settings/telnet/port/set", set_telnet_port); srv.Post("/api/settings/dns/get", get_dns); srv.Post("/api/settings/dns/set", set_dns); diff --git a/src/settings/telnet/enabled.cpp b/src/settings/telnet/enabled.cpp index 0fd0818..55858de 100644 --- a/src/settings/telnet/enabled.cpp +++ b/src/settings/telnet/enabled.cpp @@ -88,7 +88,7 @@ void set_telnet(const httplib::Request &request, httplib::Response &response) { } telnetfileout << stoi(new_telnet_enabled); telnetfileout.close(); - std::ifstream telnetfile("/etc/openrouter/telnet"); + std::ifstream telnetfile("/etc/openrouter/telnet/enabled"); int telnet_enabled; telnetfile >> telnet_enabled; telnetfile.close(); diff --git a/src/settings/telnet/port.cpp b/src/settings/telnet/port.cpp index 0f8afa7..f8cdd6a 100644 --- a/src/settings/telnet/port.cpp +++ b/src/settings/telnet/port.cpp @@ -8,6 +8,8 @@ #include #include +#define TELNET_PORT_REQUIRED_STRING R"({"required":"[token,port]"})" + void get_telnet_port(const httplib::Request &request, httplib::Response &response) { std::cout << GREEN << request.path << RESET << " " << request.method << std::endl; response.set_header("Access-Control-Allow-Origin", "*"); @@ -42,4 +44,50 @@ void get_telnet_port(const httplib::Request &request, httplib::Response &respons responsedata << R"({"port":")" << telnet_port << R"("})"; response.set_content(responsedata.str(), JSON_TYPE); } -} \ No newline at end of file +} + +void set_telnet_port(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["port"] == nullptr) { + response.set_content(TELNET_PORT_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::ofstream telnetportfileout("/etc/openrouter/telnet/port"); + std::string new_telnet_port = json_body["port"]; + telnetportfileout << stoi(new_telnet_port); + telnetportfileout.close(); + system("/etc/init.d/telnet restart"); + std::ifstream telnetportfile("/etc/openrouter/telnet/port"); + int telnet_port; + telnetportfile >> telnet_port; + telnetportfile.close(); + std::stringstream responsedata; + responsedata << R"({"port":")" << telnet_port << R"("})"; + response.set_content(responsedata.str(), JSON_TYPE); + } +} diff --git a/src/settings/telnet/telnet.hpp b/src/settings/telnet/telnet.hpp index 11e1a27..dccc2c2 100644 --- a/src/settings/telnet/telnet.hpp +++ b/src/settings/telnet/telnet.hpp @@ -7,5 +7,6 @@ void get_telnet(const httplib::Request &request, httplib::Response &response); void set_telnet(const httplib::Request &request, httplib::Response &response); void get_telnet_port(const httplib::Request &request, httplib::Response &response); +void set_telnet_port(const httplib::Request &request, httplib::Response &response); #endif // SETTINGS_TELNET_HPP diff --git a/src/web/js/routes.js b/src/web/js/routes.js index f8e110d..7560c54 100644 --- a/src/web/js/routes.js +++ b/src/web/js/routes.js @@ -9,6 +9,7 @@ const routes = { telnet_status: () => [host, prefix, 'settings', 'telnet', 'get'].join('/'), telnet_status_set: () => [host, prefix, 'settings', 'telnet', 'set'].join('/'), telnet_port_get: () => [host, prefix, 'settings', 'telnet', 'port', 'get'].join('/'), + telnet_port_set: () => [host, prefix, 'settings', 'telnet', 'port', 'set'].join('/'), dns_status: () => [host, prefix, 'settings', 'dns', 'get'].join('/'), dns_status_set: () => [host, prefix, 'settings', 'dns', 'set'].join('/'), diff --git a/src/web/js/settings/settings.js b/src/web/js/settings/settings.js index 2bef13d..bc027ae 100644 --- a/src/web/js/settings/settings.js +++ b/src/web/js/settings/settings.js @@ -1,7 +1,6 @@ const get_all_settings = () => { get_dns_enabled_status() get_dns_server() - get_local_domains() get_ftp_enabled_status() diff --git a/src/web/js/settings/telnet.js b/src/web/js/settings/telnet.js index 80aca12..d80fb78 100644 --- a/src/web/js/settings/telnet.js +++ b/src/web/js/settings/telnet.js @@ -43,7 +43,7 @@ telnetenabled.addEventListener('click', () => { if (telnetenabled.checked) { addtelnetuserbutton.classList.add('active') addtelnetuserbutton.parentElement.classList.remove('onebutton') - // telnetsettingbody.classList.add('active') + telnetsettingbody.classList.add('active') } else { telnetsettingbody.classList.remove('active') addtelnetuserbutton.classList.remove('active') @@ -51,8 +51,15 @@ telnetenabled.addEventListener('click', () => { } }) +const set_telnet_settings = () => { + set_telnet_enabled_status() + if (telnetenabled.checked) { + set_telnet_port() + } +} + settelnetsettingsbutton.addEventListener('click', () => { - get_confirm_form("Confirm telnet settings?", set_telnet_enabled_status) + get_confirm_form("Confirm telnet settings?", set_telnet_settings) }) const get_telnet_port = () => { @@ -65,3 +72,17 @@ const get_telnet_port = () => { notification(`Ошибка на сервере: ${error}`, "error") }) } + +const set_telnet_port = () => { + start_loader() + fetch(routes.telnet_port_set(), { + method: 'POST', + body: `{"token":"${localStorage.getItem("token")}","port":"${telnetportinput.value}"}` + }).then(data => data.json()).then(jsondata => { + stop_loader() + telnetportinput.value = jsondata.port + }).catch((error) => { + stop_loader() + notification(`Ошибка на сервере: ${error}`, "error") + }) +}