diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5d01721b7..cc9334842 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -59,6 +59,8 @@ set(keepassx_SOURCES core/Tools.cpp core/Translator.cpp core/Uuid.cpp + cli/PasswordInput.cpp + cli/PasswordInput.h crypto/Crypto.cpp crypto/CryptoHash.cpp crypto/Random.cpp diff --git a/src/cli/Extract.cpp b/src/cli/Extract.cpp index 0c8a39602..36dde473b 100644 --- a/src/cli/Extract.cpp +++ b/src/cli/Extract.cpp @@ -29,6 +29,7 @@ #include "core/Database.h" #include "format/KeePass2Reader.h" #include "keys/CompositeKey.h" +#include "cli/PasswordInput.h" int Extract::execute(int argc, char** argv) { @@ -50,8 +51,7 @@ int Extract::execute(int argc, char** argv) out << "Insert the database password\n> "; out.flush(); - static QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QString line = inputTextStream.readLine(); + QString line = PasswordInput::getPassword(); CompositeKey key = CompositeKey::readFromLine(line); QString databaseFilename = args.at(0); diff --git a/src/cli/PasswordInput.cpp b/src/cli/PasswordInput.cpp new file mode 100644 index 000000000..9436f4918 --- /dev/null +++ b/src/cli/PasswordInput.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2017 KeePassXC Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "PasswordInput.h" + +#ifdef Q_OS_WIN +#include +#else +#include +#include +#endif + +#include + + +PasswordInput::PasswordInput() +{ +} + +void PasswordInput::setStdinEcho(bool enable = true) +{ +#ifdef Q_OS_WIN + HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); + DWORD mode; + GetConsoleMode(hIn, &mode); + + if (enable) { + mode |= ENABLE_ECHO_INPUT; + } else { + mode &= ~ENABLE_ECHO_INPUT; + } + + SetConsoleMode(hIn, mode); + +#else + struct termios t; + tcgetattr(STDIN_FILENO, &t); + + if (enable) { + t.c_lflag |= ECHO; + } else { + t.c_lflag &= ~ECHO; + } + + tcsetattr(STDIN_FILENO, TCSANOW, &t); +#endif +} + +QString PasswordInput::getPassword() +{ + static QTextStream inputTextStream(stdin, QIODevice::ReadOnly); + + setStdinEcho(false); + QString line = inputTextStream.readLine(); + setStdinEcho(true); + + return line; +} diff --git a/src/cli/PasswordInput.h b/src/cli/PasswordInput.h new file mode 100644 index 000000000..b76061864 --- /dev/null +++ b/src/cli/PasswordInput.h @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2017 KeePassXC Team + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 or (at your option) + * version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#ifndef KEEPASSXC_PASSWORDINPUT_H +#define KEEPASSXC_PASSWORDINPUT_H + +#include + +class PasswordInput +{ +public: + PasswordInput(); + static void setStdinEcho(bool enable); + static QString getPassword(); +}; + +#endif // KEEPASSXC_PASSWORDINPUT_H diff --git a/src/cli/Show.cpp b/src/cli/Show.cpp index b9d6bed0f..680f7a452 100644 --- a/src/cli/Show.cpp +++ b/src/cli/Show.cpp @@ -29,6 +29,7 @@ #include "core/Entry.h" #include "core/Group.h" #include "keys/CompositeKey.h" +#include "cli/PasswordInput.h" int Show::execute(int argc, char** argv) { @@ -50,8 +51,7 @@ int Show::execute(int argc, char** argv) out << "Insert the database password\n> "; out.flush(); - static QTextStream inputTextStream(stdin, QIODevice::ReadOnly); - QString line = inputTextStream.readLine(); + QString line = PasswordInput::getPassword(); CompositeKey key = CompositeKey::readFromLine(line); Database* db = Database::openDatabaseFile(args.at(0), key); diff --git a/src/core/Database.cpp b/src/core/Database.cpp index e1a8610a2..d1c0fea4d 100644 --- a/src/core/Database.cpp +++ b/src/core/Database.cpp @@ -24,6 +24,7 @@ #include #include +#include "cli/PasswordInput.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Random.h" @@ -398,13 +399,12 @@ Database* Database::openDatabaseFile(QString fileName, CompositeKey key) Database* Database::unlockFromStdin(QString databaseFilename) { - static QTextStream inputTextStream(stdin, QIODevice::ReadOnly); QTextStream outputTextStream(stdout); outputTextStream << QString("Insert password to unlock " + databaseFilename + "\n> "); outputTextStream.flush(); - QString line = inputTextStream.readLine(); + QString line = PasswordInput::getPassword(); CompositeKey key = CompositeKey::readFromLine(line); return Database::openDatabaseFile(databaseFilename, key); } diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index 6204e5c8c..0e0f2960a 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -37,7 +37,7 @@ AboutDialog::AboutDialog(QWidget* parent) setWindowFlags(Qt::Sheet); setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint); - m_ui->nameLabel->setText(m_ui->nameLabel->text() + " " + KEEPASSX_VERSION); + m_ui->nameLabel->setText(m_ui->nameLabel->text().replace("${VERSION}", KEEPASSX_VERSION)); QFont nameLabelFont = m_ui->nameLabel->font(); nameLabelFont.setPointSize(nameLabelFont.pointSize() + 4); m_ui->nameLabel->setFont(nameLabelFont); diff --git a/src/gui/AboutDialog.ui b/src/gui/AboutDialog.ui index 5f20cf430..5bea301aa 100644 --- a/src/gui/AboutDialog.ui +++ b/src/gui/AboutDialog.ui @@ -6,10 +6,22 @@ 0 0 - 479 - 478 + 450 + 450 + + + 0 + 0 + + + + + 450 + 450 + + About KeePassXC @@ -59,7 +71,13 @@ - KeePassXC + <span style="font-size: 24pt"> KeePassXC v${VERSION}</span> + + + 0 + + + 11 @@ -84,7 +102,7 @@ - <p>Website: <a href="https://keepassxc.org/">https://keepassxc.org/</a></p> + <html><head/><body><p>Website: <a href="https://keepassxc.org/"><span style="text-decoration: underline; color:#0000ff;">https://keepassxc.org</span></a></p></body></html> true @@ -94,7 +112,7 @@ - <p>Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues">https://github.com/</a></p> + <html><head/><body><p>Report bugs at: <a href="https://github.com/keepassxreboot/keepassxc/issues"><span style="text-decoration: underline; color:#0000ff;">https://github.com</span></a></p></body></html> true @@ -126,7 +144,7 @@ - KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3. + <html><head/><body><p>KeePassXC is distributed under the terms of the GNU General Public License (GPL) version 2 or (at your option) version 3.</p></body></html> true @@ -158,14 +176,7 @@ - <p>Main contributors:</p> -<ul> -<li>debfx (KeePassX)</li> -<li>droidmonkey</li> -<li>louib</li> -<li>phoerious</li> -<li>thezero</li> -</ul> + <html><head><style>li {font-size: 10pt}</style></head><body><p><span style=" font-size:10pt;">Project Maintainers:</span></p><ul><li>droidmonkey</li><li>phoerious</li><li>TheZ3ro</li><li>louib</li><li>Weslly</li><li>debfx (KeePassX)</li></ul></body></html> @@ -184,6 +195,65 @@ + + + Contributors + + + + + + <html><body> + <p style="font-size:x-large; font-weight:600;">Code:</p> + <ul> + <li style="font-size:10pt">debfx (KeePassX)</li> + <li style="font-size:10pt">BlueIce (KeePassX)</li> + <li style="font-size:10pt">droidmonkey</li> + <li style="font-size:10pt">phoerious</li> + <li style="font-size:10pt">TheZ3ro</li> + <li style="font-size:10pt">louib</li> + <li style="font-size:10pt">weslly</li> + <li style="font-size:10pt">keithbennett (KeePassHTTP)</li> + <li style="font-size:10pt">Typz (KeePassHTTP)</li> + <li style="font-size:10pt">denk-mal (KeePassHTTP)</li> + <li style="font-size:10pt">kylemanna (YubiKey)</li> + <li style="font-size:10pt">seatedscribe (CSV Importer)</li> + <li style="font-size:10pt">pgalves (Inline Messages)</li> + </ul> + <p style="font-size:x-large; font-weight:600;">Translations:</p> + <ul> + <li style="font-size:10pt"><span style="font-weight:600;">Chinese:</span> Biggulu, ligyxy, BestSteve</li> + <li style="font-size:10pt"><span style="font-weight:600;">Czech:</span> pavelb, JosefVitu</li> + <li style="font-size:10pt"><span style="font-weight:600;">Dutch:</span> Vistaus, KnooL, apie</li> + <li style="font-size:10pt"><span style="font-weight:600;">Finnish:</span> MawKKe</li> + <li style="font-size:10pt"><span style="font-weight:600;">French:</span> Scrat15, frgnca, gilbsgilbs, gtalbot, iannick, kyodev, logut</li> + <li style="font-size:10pt"><span style="font-weight:600;">German:</span> Calyrx, DavidHamburg, antsas, codejunky, jensrutschmann, montilo, omnisome4, origin_de, pcrcoding, phoerious, rgloor, vlenzer</li> + <li style="font-size:10pt"><span style="font-weight:600;">Greek:</span> nplatis</li> + <li style="font-size:10pt"><span style="font-weight:600;">Italian:</span> TheZ3ro, FranzMari, Mte90, tosky</li> + <li style="font-size:10pt"><span style="font-weight:600;">Kazakh:</span> sotrud_nik</li> + <li style="font-size:10pt"><span style="font-weight:600;">Lithuanian:</span> Moo</li> + <li style="font-size:10pt"><span style="font-weight:600;">Polish:</span> konradmb, mrerexx</li> + <li style="font-size:10pt"><span style="font-weight:600;">Portuguese: </span>vitor895, weslly, American_Jesus, mihai.ile</li> + <li style="font-size:10pt"><span style="font-weight:600;">Russian:</span> vsvyatski, KekcuHa, wkill95</li> + <li style="font-size:10pt"><span style="font-weight:600;">Spanish:</span> EdwardNavarro, antifaz, piegope, pquin, vsvyatski</li> + <li style="font-size:10pt"><span style="font-weight:600;">Swedish:</span> henziger</li> + </ul> + </body></html> + + + + + + + <html><head/><body><p align="center"><a href="https://github.com/keepassxreboot/keepassxc/graphs/contributors"><span style=" font-size:10pt; text-decoration: underline; color:#0000ff;">See Contributions on GitHub</span></a></p></body></html> + + + true + + + + + Debug Info @@ -198,7 +268,7 @@ - Include the following information whenever you report a bug: + <html><head/><body><p>Include the following information whenever you report a bug:</p></body></html> diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp index 4b9e85009..c65d52f54 100644 --- a/src/gui/DatabaseWidget.cpp +++ b/src/gui/DatabaseWidget.cpp @@ -94,7 +94,8 @@ DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) m_searchingLabel = new QLabel(); m_searchingLabel->setText(tr("Searching...")); m_searchingLabel->setAlignment(Qt::AlignCenter); - m_searchingLabel->setStyleSheet("background-color: rgb(255, 253, 160);" + m_searchingLabel->setStyleSheet("color: rgb(0, 0, 0);" + "background-color: rgb(255, 253, 160);" "border: 2px solid rgb(190, 190, 190);" "border-radius: 5px;");