diff options
Diffstat (limited to 'src/libs/installer/globals.cpp')
-rw-r--r-- | src/libs/installer/globals.cpp | 70 |
1 files changed, 63 insertions, 7 deletions
diff --git a/src/libs/installer/globals.cpp b/src/libs/installer/globals.cpp index 0da4bc3b6..3fd084768 100644 --- a/src/libs/installer/globals.cpp +++ b/src/libs/installer/globals.cpp @@ -1,6 +1,6 @@ /************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2024 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Installer Framework. @@ -30,10 +30,17 @@ #include "globals.h" +#if defined(Q_OS_MACOS) || defined(Q_OS_LINUX) +#include <termios.h> +#include <unistd.h> +#elif defined(Q_OS_WIN) +#include <conio.h> +#endif +#include <iostream> + const char IFW_SERVER[] = "ifw.server"; const char IFW_INSTALLER_INSTALLLOG[] = "ifw.installer.installlog"; const char IFW_DEVELOPER_BUILD[] = "ifw.developer.build"; -const char IFW_PACKAGE_INFO[] = "ifw.package.info"; // Internal-only, hidden in --help text const char IFW_PROGRESS_INDICATOR[] = "ifw.progress.indicator"; @@ -62,7 +69,8 @@ namespace QInstaller */ /*! - \fn QInstaller::lcPackageInfo() + \fn inline QInstaller::splitStringWithComma(const QString &value()) + Splits \a value into substrings wherever comma occurs, and returns the list of those strings. \internal */ @@ -70,7 +78,6 @@ Q_LOGGING_CATEGORY(lcServer, IFW_SERVER) Q_LOGGING_CATEGORY(lcInstallerInstallLog, IFW_INSTALLER_INSTALLLOG) Q_LOGGING_CATEGORY(lcProgressIndicator, IFW_PROGRESS_INDICATOR) Q_LOGGING_CATEGORY(lcDeveloperBuild, IFW_DEVELOPER_BUILD) -Q_LOGGING_CATEGORY(lcPackageInfo, IFW_PACKAGE_INFO) /*! Returns available logging categories. @@ -79,17 +86,19 @@ QStringList loggingCategories() { static QStringList categories = QStringList() << QLatin1String(IFW_INSTALLER_INSTALLLOG) - << QLatin1String(IFW_SERVER); + << QLatin1String(IFW_SERVER) + << QLatin1String(IFW_DEVELOPER_BUILD) + << QLatin1String("js"); return categories; } -Q_GLOBAL_STATIC_WITH_ARGS(QRegExp, staticCommaRegExp, (QLatin1String("(, |,)"))); +Q_GLOBAL_STATIC_WITH_ARGS(QRegularExpression, staticCommaRegExp, (QLatin1String("(, |,)"))); /*! \internal */ -QRegExp commaRegExp() +QRegularExpression commaRegExp() { return *staticCommaRegExp(); } @@ -118,5 +127,52 @@ QString enumToString(const QMetaObject& metaObject, const char *enumerator, int return value; } +void askForCredentials(QString *username, QString *password, const QString &usernameTitle, const QString &passwordTitle) +{ + std::string usernameStdStr; + std::string passwordStdStr; + + std::cout << qPrintable(usernameTitle); + std::cin >> usernameStdStr; + + std::cout << qPrintable(passwordTitle); +#if defined(Q_OS_MACOS) || defined(Q_OS_LINUX) + termios oldTerm; + termios term; + + // Turn off echoing + tcgetattr(STDIN_FILENO, &oldTerm); + term = oldTerm; + term.c_lflag &= ~ECHO; + tcsetattr(STDIN_FILENO, TCSANOW, &term); + + std::cin >> passwordStdStr; + + // Clear input buffer + std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); + + // Restore old attributes + tcsetattr(STDIN_FILENO, TCSANOW, &oldTerm); +#elif defined(Q_OS_WIN) + char ch; + while ((ch = _getch()) != '\r') { // Return key + if (ch == '\b') { // Backspace key + if (!passwordStdStr.empty()) + passwordStdStr.pop_back(); + } else { + passwordStdStr.push_back(ch); + } + } + // Clear input buffer + int c; + while ((c = getchar()) != '\n' && c != EOF); + +#endif + std::cout << "\n"; + + *username = username->fromStdString(usernameStdStr); + *password = password->fromStdString(passwordStdStr); +} + } // namespace QInstaller |