From 7e4d2c73cd1edf884620541e9b7543ace9589208 Mon Sep 17 00:00:00 2001 From: WipedLifePotato Date: Fri, 20 Sep 2024 12:49:25 +0700 Subject: [PATCH] [AutoConf] Fix multiply input, regex pre-init --- autoconf.cpp | 85 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 51 insertions(+), 34 deletions(-) diff --git a/autoconf.cpp b/autoconf.cpp index 45c8d47..1ed6596 100644 --- a/autoconf.cpp +++ b/autoconf.cpp @@ -6,9 +6,18 @@ #include #include #include +#include + #define CIN_CLEAR std::cin.clear(); std::cin.ignore(std::numeric_limits::max(), '\n'); namespace AutoConf { + namespace Regexps { + //const std::regex port("\\d{1,5}"); + std::regex path(R"([a-zA-Z0-9_\.\/\\]+)"); // (\w|\.|\\|\/)+ + std::regex proxy("\\w+:\\/\\/(\\w|\\d|\\.|\\-)+\\:\\d+"); + std::regex any(".*"); + + } namespace PreInitConfigs { constexpr const char * yggOnlyConf = "ipv4=false\r\n" "ipv6=false\r\n" @@ -41,22 +50,22 @@ const std::map Texts = // maybe vector better {"loglevel","Введите уровень лога(warn,info,none,critical,error,debug)"}, {"logCFLYN", "Использовать полный CFL-форму даты в логах? ПО умолчанию только время"}, {"daemonYN", "Использовать режим демона?"}, - {"FamilyUsing", "Введите название фамилии или enter просто"}, + {"FamilyUsing", "Введите название фамилии или -"}, //TODO: an another {"UseIPv6", "Использовать ipv6?"}, {"UseIPv4", "Использовать ipv4?"}, {"BeFloodfillYN", "Быть флудфиллом?"}, {"NoTransitYN", "Отключить транзит? (это уменьшит анонимность)"}, - {"Bandwidth", "Напиши пропускную способность (Enter для по умолчанию) [L-32kbs,O-256kbs,P-2048kbs,X-unlimited]"}, - {"Share", "Процент шары (Enter для по умолчанию) [0-100]"}, + {"Bandwidth", "Напиши пропускную способность (- для по умолчанию) [L-32kbs,O-256kbs,P-2048kbs,X-unlimited]"}, + {"Share", "Процент шары (- для по умолчанию) [0-100]"}, // {"NTCPEnabledYN", "Использовать NTCP?"}, {"NTCPPublishedYN", "Опубликовать IP В NTCP?"}, - {"NTCPPPort", "NTCP Порт. Либо энтер для пропуска"}, - {"NTCPPProxy", "NTCP Proxy, пример (socks://localhost:4545) или энтер для поумолчанию (неиспользуется)"}, + {"NTCPPPort", "NTCP Порт. Либо - для пропуска"}, + {"NTCPPProxy", "NTCP Proxy, пример (socks://localhost:4545) или - для по умолчанию (неиспользуется)"}, {"SSUEnabledYN", "Использовать SSU?"}, - {"SSUPPort", "SSU Порт. Либо энтер для пропуска"}, - {"SSUProxy", "SSU Proxy, пример (socks://localhost:4545) или энтер для поумолчанию (неиспользуется)"} + {"SSUPPort", "SSU Порт. Либо - для пропуска"}, + {"SSUProxy", "SSU Proxy, пример (socks://localhost:4545) или - для по умолчанию (неиспользуется)"} }}, {"en", { @@ -77,22 +86,22 @@ const std::map Texts = // maybe vector better {"loglevel", "Enter log level (warn, info, none, critical, error, debug)"}, {"logCFLYN", "Use full CFL format for date in logs? Default is only time."}, {"daemonYN", "Use daemon mode?"}, - {"FamilyUsing", "Enter your netfamily or just hit enter."}, + {"FamilyUsing", "Enter your netfamily or just hit -."}, //TODO: an another {"UseIPv6", "Use ipv6?"}, {"UseIPv4", "Use ipv4?"}, {"BeFloodfillYN", "Be a floodfill?"}, {"NoTransitYN", "Disable transit? (this will reduce anonymity)"}, - {"Bandwidth", "Write bandwidth (enter for default) [L-32kbs,O-256kbs,P-2048kbs,X-unlimited]"}, - {"Share", "Share percents (enter for default) [0-100]"}, + {"Bandwidth", "Write bandwidth (- for default) [L-32kbs,O-256kbs,P-2048kbs,X-unlimited]"}, + {"Share", "Share percents (- for default) [0-100]"}, // {"NTCPEnabledYN", "Use NTCP?"}, {"NTCPPublishedYN", "Publish IP in NTCP?"}, - {"NTCPPPort", "NTCP Port or enter for auto port (random)"}, - {"NTCPPProxy", "NTCP Proxy, example (socks://localhost:4545) or enter for default"}, + {"NTCPPPort", "NTCP Port or - for auto port (random)"}, + {"NTCPPProxy", "NTCP Proxy, example (socks://localhost:4545) or - for default"}, {"SSUEnabledYN", "Use SSU?"}, - {"SSUPPort", "SSU Port or enter for auto port (random)"}, - {"SSUProxy", "SSU Proxy, example (socks://localhost:4545) or enter for default"} + {"SSUPPort", "SSU Port or - for auto port (random)"}, + {"SSUProxy", "SSU Proxy, example (socks://localhost:4545) or - for default"} }} }; @@ -101,8 +110,9 @@ const std::map Texts = // maybe vector better bool AskYN(void) noexcept { char answ; std::cout << " ? (y/n) "; - CIN_CLEAR; std::cin >> answ; + CIN_CLEAR; + std::cout <<"answ: " << answ<> lang; + CIN_CLEAR; if (Texts.find(lang) != Texts.end()) { return lang; } else { @@ -130,6 +141,7 @@ bool IsOnlyYggdrasil(const std::string & lang) noexcept { unsigned short answ; std::cout << AutoConf::Texts.at(lang).at("WelcomeText") << std::endl; std::cin >> answ; + CIN_CLEAR; switch(answ) { case 1: return false; @@ -144,6 +156,7 @@ bool IsOnlyYggdrasil(const std::string & lang) noexcept { int main(void) { + std::cout << "RUn Program" << std::endl; std::cout << "https://i2pd.readthedocs.io/en/latest/user-guide/configuration/\r\nhttps://github.com/PurpleI2P/i2pd/blob/openssl/contrib/i2pd.conf\r\n"; std::ostringstream conf; auto lang = AutoConf::GetLanguage(); @@ -157,28 +170,32 @@ main(void) { // Asks using namespace AutoConf; [](std::ostringstream &conf, const std::string &lang) { - #define ASKYN_MACRO(A,B,C) { \ - std::cout << AutoConf::Texts.at(lang).at(A) << std::endl; \ + #define ASKYN_MACRO(A,B,C, REGEX) { \ + std::cout << "Cycle" << std::endl;\ + std::cout << AutoConf::Texts.at(lang).at(A); \ if(AskYN()) { \ + while(1) {\ + std::cout << "Cycle1" << std::endl;\ std::cout << AutoConf::Texts.at(lang).at(B) << "\r\n"; \ std::string inp; \ + std::cin >> inp;\ CIN_CLEAR; \ - std::getline(std::cin, inp); \ - conf << C "=" << inp << "\r\n"; \ - } \ + std::smatch bmatch;\ + std::regex_match(inp, bmatch, REGEX);\ + if (bmatch.length() > 0) {\ + conf << C "=" << inp << "\r\n"; \ + break;\ + }else {std::cerr<<"No correct input"< 0) {\ + std::string inp; std::cin >> inp;CIN_CLEAR; if (inp != "-") {\ conf << B "=" << inp << "\r\n";\ }\ } @@ -209,7 +227,6 @@ main(void) { ASK_BOOL("SSUEnabledYN", "enabled"); ASK_TEXT("SSUPPort", "port"); ASK_TEXT("SSUProxy", "proxy"); - #undef ASK_TEXT #undef ASK_BOOL #undef ASKYN_MACRO