From 6ba2a7d4864510d01d913d0a41af790d7ed521f1 Mon Sep 17 00:00:00 2001 From: "grepwood@sucs.org" Date: Fri, 17 Apr 2020 14:55:43 +0200 Subject: [PATCH 1/2] When run in non-TTY, attempt to recycle cookies and tokens if they exist. --- src/downloader.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/downloader.cpp b/src/downloader.cpp index 6968ab8..4742366 100644 --- a/src/downloader.cpp +++ b/src/downloader.cpp @@ -255,21 +255,27 @@ int Downloader::login() else { if (!isatty(STDIN_FILENO)) { - std::cerr << "Unable to read email and password" << std::endl; - return 0; - } - std::cerr << "Email: "; - std::getline(std::cin,email); + /* Attempt to read this stuff from elsewhere */ + bool cookie_gone = boost::filesystem::exists(Globals::globalConfig.curlConf.sCookiePath); + bool tokens_gone = boost::filesystem::exists(Globals::globalConfig.sConfigDirectory + "/galaxy_tokens.json"); + if(cookie_gone || tokens_gone) { + std::cerr << "Unable to read email and password" << std::endl; + return 0; + } + } else { + std::cerr << "Email: "; + std::getline(std::cin,email); - std::cerr << "Password: "; - struct termios termios_old, termios_new; - tcgetattr(STDIN_FILENO, &termios_old); // Get current terminal attributes - termios_new = termios_old; - termios_new.c_lflag &= ~ECHO; // Set ECHO off - tcsetattr(STDIN_FILENO, TCSANOW, &termios_new); // Set terminal attributes - std::getline(std::cin, password); - tcsetattr(STDIN_FILENO, TCSANOW, &termios_old); // Restore old terminal attributes - std::cerr << std::endl; + std::cerr << "Password: "; + struct termios termios_old, termios_new; + tcgetattr(STDIN_FILENO, &termios_old); // Get current terminal attributes + termios_new = termios_old; + termios_new.c_lflag &= ~ECHO; // Set ECHO off + tcsetattr(STDIN_FILENO, TCSANOW, &termios_new); // Set terminal attributes + std::getline(std::cin, password); + tcsetattr(STDIN_FILENO, TCSANOW, &termios_old); // Restore old terminal attributes + std::cerr << std::endl; + } } if (email.empty() || password.empty()) From 9772e66894d9de77ae08e537ce7b90a725fdcb6a Mon Sep 17 00:00:00 2001 From: "grepwood@sucs.org" Date: Fri, 17 Apr 2020 19:24:28 +0200 Subject: [PATCH 2/2] Confirmed working headless operation. --- src/downloader.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/downloader.cpp b/src/downloader.cpp index 4742366..d7f2870 100644 --- a/src/downloader.cpp +++ b/src/downloader.cpp @@ -246,6 +246,7 @@ int Downloader::login() { std::string email; std::string password; + bool headless = false; if (!Globals::globalConfig.sEmail.empty() && !Globals::globalConfig.sPassword.empty()) { @@ -256,12 +257,14 @@ int Downloader::login() { if (!isatty(STDIN_FILENO)) { /* Attempt to read this stuff from elsewhere */ - bool cookie_gone = boost::filesystem::exists(Globals::globalConfig.curlConf.sCookiePath); - bool tokens_gone = boost::filesystem::exists(Globals::globalConfig.sConfigDirectory + "/galaxy_tokens.json"); + bool cookie_gone = !(boost::filesystem::exists(Globals::globalConfig.curlConf.sCookiePath)); + bool tokens_gone = !(boost::filesystem::exists(Globals::globalConfig.sConfigDirectory + "/galaxy_tokens.json")); + std::cout << Globals::globalConfig.curlConf.sCookiePath << std::endl; + std::cout << (Globals::globalConfig.sConfigDirectory + "/galaxy_tokens.json") << std::endl; if(cookie_gone || tokens_gone) { std::cerr << "Unable to read email and password" << std::endl; return 0; - } + } else headless = true; } else { std::cerr << "Email: "; std::getline(std::cin,email); @@ -278,7 +281,7 @@ int Downloader::login() } } - if (email.empty() || password.empty()) + if ((email.empty() || password.empty()) && !headless) { std::cerr << "Email and/or password empty" << std::endl; return 0;