summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnne Jan Brouwer <brouwer@annejan.com>2018-05-25 12:01:59 +0200
committerGitHub <noreply@github.com>2018-05-25 12:01:59 +0200
commitcc297302286a7e48d446531fe23224efb393cb5c (patch)
treeecdbdcf8f92ea75d437174d7ffabd38cddf1d068
parenteea0c7d2273a3bfd761121d9b4c86c68d27dcb06 (diff)
parent85f3b3b880e031b9277e0e645d7d0aa2835f51f2 (diff)
Merge pull request #394 from Noettore/feature/otp
Add support for OTP code generation on Linux as requested in #327
-rw-r--r--.gitignore1
-rw-r--r--src/configdialog.cpp15
-rw-r--r--src/configdialog.h1
-rw-r--r--src/configdialog.ui31
-rw-r--r--src/enums.h3
-rw-r--r--src/imitatepass.cpp7
-rw-r--r--src/imitatepass.h1
-rw-r--r--src/mainwindow.cpp37
-rw-r--r--src/mainwindow.h3
-rw-r--r--src/mainwindow.ui12
-rw-r--r--src/pass.cpp3
-rw-r--r--src/pass.h2
-rw-r--r--src/qtpasssettings.cpp8
-rw-r--r--src/qtpasssettings.h3
-rw-r--r--src/realpass.cpp9
-rw-r--r--src/realpass.h1
-rw-r--r--src/settingsconstants.cpp1
-rw-r--r--src/settingsconstants.h1
18 files changed, 137 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index a641ca33..0121d8d1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@ ui_*.h
localization/*.qm
build/
.idea
+.vscode
diff --git a/src/configdialog.cpp b/src/configdialog.cpp
index e7ba895e..92a90053 100644
--- a/src/configdialog.cpp
+++ b/src/configdialog.cpp
@@ -45,6 +45,11 @@ ConfigDialog::ConfigDialog(MainWindow *parent)
ui->checkBoxAutoPush->setChecked(QtPassSettings::isAutoPush());
ui->checkBoxAlwaysOnTop->setChecked(QtPassSettings::isAlwaysOnTop());
+ #if defined(Q_OS_WIN ) || defined(__APPLE__)
+ ui->checkBoxUseOtp->hide();
+ ui->label_10->hide();
+ #endif
+
setProfiles(QtPassSettings::getProfiles(), QtPassSettings::getProfile());
setPwgenPath(QtPassSettings::getPwgenExecutable());
setPasswordConfiguration(QtPassSettings::getPasswordConfiguration());
@@ -54,6 +59,7 @@ ConfigDialog::ConfigDialog(MainWindow *parent)
useAutoclearPanel(QtPassSettings::isUseAutoclearPanel());
useTrayIcon(QtPassSettings::isUseTrayIcon());
useGit(QtPassSettings::isUseGit());
+ useOtp(QtPassSettings::isUseOtp());
usePwgen(QtPassSettings::isUsePwgen());
useTemplate(QtPassSettings::isUseTemplate());
@@ -137,6 +143,7 @@ void ConfigDialog::on_accepted() {
QtPassSettings::setStartMinimized(ui->checkBoxStartMinimized->isChecked());
QtPassSettings::setProfiles(getProfiles());
QtPassSettings::setUseGit(ui->checkBoxUseGit->isChecked());
+ QtPassSettings::setUseOtp(ui->checkBoxUseOtp->isChecked());
QtPassSettings::setPwgenExecutable(ui->pwgenPath->text());
QtPassSettings::setUsePwgen(ui->checkBoxUsePwgen->isChecked());
QtPassSettings::setAvoidCapitals(ui->checkBoxAvoidCapitals->isChecked());
@@ -559,6 +566,14 @@ void ConfigDialog::useGit(bool useGit) {
}
/**
+ * @brief ConfigDialog::useOtp set preference for using otp plugin.
+ * @param useOtp
+ */
+void ConfigDialog::useOtp(bool useOtp) {
+ ui->checkBoxUseOtp->setChecked(useOtp);
+}
+
+/**
* @brief ConfigDialog::on_checkBoxUseGit_clicked enable or disable related
* checkboxes.
*/
diff --git a/src/configdialog.h b/src/configdialog.h
index af1767df..4db4f24c 100644
--- a/src/configdialog.h
+++ b/src/configdialog.h
@@ -36,6 +36,7 @@ public:
bool hideOnClose();
void useTrayIcon(bool useTrayIdon);
void useGit(bool useGit);
+ void useOtp(bool useOtp);
void setPwgenPath(QString);
void usePwgen(bool usePwgen);
void setPasswordConfiguration(const PasswordConfiguration &config);
diff --git a/src/configdialog.ui b/src/configdialog.ui
index 5c7d3b5e..80ae5da6 100644
--- a/src/configdialog.ui
+++ b/src/configdialog.ui
@@ -503,6 +503,37 @@
</layout>
</item>
<item>
+ <layout class="QVBoxLayout" name="Extensions">
+ <item>
+ <widget class="QLabel" name="label_10">
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="text">
+ <string>Extensions:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_14">
+ <item>
+ <widget class="QCheckBox" name="checkBoxUseOtp">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="text">
+ <string>Use pass otp extension</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
<layout class="QVBoxLayout" name="Layout_System">
<property name="topMargin">
<number>0</number>
diff --git a/src/enums.h b/src/enums.h
index 49014bba..1551cb77 100644
--- a/src/enums.h
+++ b/src/enums.h
@@ -30,7 +30,8 @@ enum PROCESS {
GIT_MOVE,
GIT_COPY,
PROCESS_COUNT,
- INVALID
+ INVALID,
+ PASS_OTP_GENERATE,
};
} // namespace Enums
diff --git a/src/imitatepass.cpp b/src/imitatepass.cpp
index 9a9b7e6f..783fb250 100644
--- a/src/imitatepass.cpp
+++ b/src/imitatepass.cpp
@@ -42,15 +42,20 @@ void ImitatePass::GitPush() {
/**
* @brief ImitatePass::Show shows content of file
*/
-
void ImitatePass::Show(QString file) {
file = QtPassSettings::getPassStore() + file + ".gpg";
QStringList args = {"-d", "--quiet", "--yes", "--no-encrypt-to",
"--batch", "--use-agent", file};
executeGpg(PASS_SHOW, args);
+
}
/**
+ * @brief ImitatePass::OtpGenerate generates an otp code
+ */
+void ImitatePass::OtpGenerate(QString file) {}
+
+/**
* @brief ImitatePass::Insert create new file with encrypted content
*
* @param file file to be created
diff --git a/src/imitatepass.h b/src/imitatepass.h
index 32f5a639..7c402aa6 100644
--- a/src/imitatepass.h
+++ b/src/imitatepass.h
@@ -51,6 +51,7 @@ public:
virtual void GitPull_b() Q_DECL_OVERRIDE;
virtual void GitPush() Q_DECL_OVERRIDE;
virtual void Show(QString file) Q_DECL_OVERRIDE;
+ virtual void OtpGenerate(QString file) Q_DECL_OVERRIDE;
virtual void Insert(QString file, QString value,
bool overwrite = false) Q_DECL_OVERRIDE;
virtual void Remove(QString file, bool isDir = false) Q_DECL_OVERRIDE;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index bc913ccf..e894b312 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -103,6 +103,7 @@ void MainWindow::initToolBarButtons() {
connect(ui->actionUpdate, SIGNAL(triggered()), this, SLOT(onUpdate()));
connect(ui->actionUsers, SIGNAL(triggered()), this, SLOT(onUsers()));
connect(ui->actionConfig, SIGNAL(triggered()), this, SLOT(onConfig()));
+ connect(ui->actionOtp, SIGNAL(triggered()), this, SLOT(onOtp()));
ui->actionAddPassword->setIcon(
QIcon::fromTheme("document-new", QIcon(":/icons/document-new.svg")));
@@ -196,6 +197,7 @@ void MainWindow::connectPassSignalHandlers(Pass *pass) {
connect(pass, &Pass::finishedGitPull, this, &MainWindow::processFinished);
connect(pass, &Pass::finishedGitPush, this, &MainWindow::processFinished);
connect(pass, &Pass::finishedShow, this, &MainWindow::passShowHandler);
+ connect(pass, &Pass::finishedOtpGenerate, this, &MainWindow::passOtpHandler);
connect(pass, &Pass::finishedInsert, this, &MainWindow::finishedInsert);
connect(pass, &Pass::finishedRemove, this, &MainWindow::passStoreChanged);
connect(pass, &Pass::finishedInit, this, &MainWindow::passStoreChanged);
@@ -377,6 +379,7 @@ bool MainWindow::checkConfig() {
QtPassSettings::getAutoclearPanelSeconds());
clearClipboardTimer.setInterval(1000 * QtPassSettings::getAutoclearSeconds());
updateGitButtonVisibility();
+ updateOtpButtonVisibility();
startupPhase = false;
return true;
@@ -419,6 +422,7 @@ void MainWindow::config() {
QtPassSettings::getAutoclearSeconds());
updateGitButtonVisibility();
+ updateOtpButtonVisibility();
if (QtPassSettings::isUseTrayIcon() && tray == NULL)
initTrayIcon();
else if (!QtPassSettings::isUseTrayIcon() && tray != NULL) {
@@ -592,6 +596,17 @@ void MainWindow::passShowHandler(const QString &p_output) {
enableUiElements(true);
}
+void MainWindow::passOtpHandler(const QString &p_output) {
+ if (!p_output.isEmpty()) {
+ addToGridLayout(ui->gridLayout->count()+1, tr("OTP Code"), p_output);
+ copyTextToClipboard(p_output);
+ }
+ if (QtPassSettings::isUseAutoclearPanel()) {
+ clearPanelTimer.start();
+ }
+ enableUiElements(true);
+}
+
void MainWindow::passStoreChanged(const QString &p_out, const QString &p_err) {
processFinished(p_out, p_err);
doGitPush();
@@ -723,6 +738,7 @@ void MainWindow::enableUiElements(bool state) {
ui->actionDelete->setEnabled(state);
ui->actionEdit->setEnabled(state);
updateGitButtonVisibility();
+ updateOtpButtonVisibility();
}
void MainWindow::restoreWindow() {
@@ -916,6 +932,17 @@ void MainWindow::onDelete() {
}
/**
+ * @brief MainWindow::onOTP try and generate (selected) OTP code.
+ */
+void MainWindow::onOtp() {
+ QString file = getFile(ui->treeView->currentIndex(), true);
+ if (!file.isEmpty()) {
+ if (QtPassSettings::isUseOtp())
+ QtPassSettings::getPass()->OtpGenerate(file);
+ }
+}
+
+/**
* @brief MainWindow::onEdit try and edit (selected) password.
*/
void MainWindow::onEdit() {
@@ -1428,6 +1455,16 @@ void MainWindow::updateGitButtonVisibility() {
}
}
+void MainWindow::updateOtpButtonVisibility() {
+ #if defined(Q_OS_WIN ) || defined(__APPLE__)
+ ui->actionOtp->setVisible(false);
+ #endif
+ if (!QtPassSettings::isUseOtp())
+ ui->actionOtp->setEnabled(false);
+ else
+ ui->actionOtp->setEnabled(true);
+}
+
void MainWindow::enableGitButtons(const bool &state) {
// Following GNOME guidelines is preferable disable buttons instead of hide
ui->actionPush->setEnabled(state);
diff --git a/src/mainwindow.h b/src/mainwindow.h
index d93e3b85..ab8911bb 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -63,6 +63,7 @@ private slots:
void addFolder();
void onEdit();
void onDelete();
+ void onOtp();
void onPush();
void onUpdate(bool block = false);
void onUsers();
@@ -92,6 +93,7 @@ private slots:
void endReencryptPath();
void critical(QString, QString);
void passShowHandler(const QString &);
+ void passOtpHandler(const QString &);
void passStoreChanged(const QString &, const QString &);
void doGitPush();
@@ -139,6 +141,7 @@ private:
void connectPassSignalHandlers(Pass *pass);
void updateGitButtonVisibility();
+ void updateOtpButtonVisibility();
void enableGitButtons(const bool &);
};
diff --git a/src/mainwindow.ui b/src/mainwindow.ui
index 62a194e3..d24a66ce 100644
--- a/src/mainwindow.ui
+++ b/src/mainwindow.ui
@@ -291,6 +291,7 @@ p, li { white-space: pre-wrap; }
<addaction name="separator"/>
<addaction name="actionEdit"/>
<addaction name="actionDelete"/>
+ <addaction name="actionOtp"/>
<addaction name="separator"/>
<addaction name="actionPush"/>
<addaction name="actionUpdate"/>
@@ -333,6 +334,17 @@ p, li { white-space: pre-wrap; }
<string>Delete</string>
</property>
</action>
+ <action name="actionOtp">
+ <property name="text">
+ <string>OTP</string>
+ </property>
+ <property name="toolTip">
+ <string>Generate OTP and copy to clipboard</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+G</string>
+ </property>
+ </action>
<action name="actionPush">
<property name="text">
<string>Push</string>
diff --git a/src/pass.cpp b/src/pass.cpp
index 99216c54..24b371c4 100644
--- a/src/pass.cpp
+++ b/src/pass.cpp
@@ -181,6 +181,9 @@ void Pass::finished(int id, int exitCode, const QString &out,
case PASS_SHOW:
emit finishedShow(out);
break;
+ case PASS_OTP_GENERATE:
+ emit finishedOtpGenerate(out);
+ break;
case PASS_INSERT:
emit finishedInsert(out, err);
break;
diff --git a/src/pass.h b/src/pass.h
index 25f246cc..ed1b08c5 100644
--- a/src/pass.h
+++ b/src/pass.h
@@ -43,6 +43,7 @@ public:
virtual void GitPull_b() = 0;
virtual void GitPush() = 0;
virtual void Show(QString file) = 0;
+ virtual void OtpGenerate(QString file) = 0;
virtual void Insert(QString file, QString value, bool force) = 0;
virtual void Remove(QString file, bool isDir) = 0;
virtual void Move(const QString srcDir, const QString dest,
@@ -87,6 +88,7 @@ signals:
void finishedGitPull(const QString &, const QString &);
void finishedGitPush(const QString &, const QString &);
void finishedShow(const QString &);
+ void finishedOtpGenerate(const QString &);
void finishedInsert(const QString &, const QString &);
void finishedRemove(const QString &, const QString &);
void finishedInit(const QString &, const QString &);
diff --git a/src/qtpasssettings.cpp b/src/qtpasssettings.cpp
index ab1400f5..14b0c250 100644
--- a/src/qtpasssettings.cpp
+++ b/src/qtpasssettings.cpp
@@ -380,6 +380,14 @@ void QtPassSettings::setUseGit(const bool &useGit) {
getInstance()->setValue(SettingsConstants::useGit, useGit);
}
+bool QtPassSettings::isUseOtp(const bool &defaultValue) {
+ return getInstance()->value(SettingsConstants::useOtp, defaultValue).toBool();
+}
+
+void QtPassSettings::setUseOtp(const bool &useOtp) {
+ getInstance()->setValue(SettingsConstants::useOtp, useOtp);
+}
+
bool QtPassSettings::isUsePwgen(const bool &defaultValue) {
return getInstance()
->value(SettingsConstants::usePwgen, defaultValue)
diff --git a/src/qtpasssettings.h b/src/qtpasssettings.h
index 197f80c5..5d787277 100644
--- a/src/qtpasssettings.h
+++ b/src/qtpasssettings.h
@@ -141,6 +141,9 @@ public:
static bool isUseGit(const bool &defaultValue = QVariant().toBool());
static void setUseGit(const bool &useGit);
+ static bool isUseOtp(const bool &defaultValue = QVariant().toBool());
+ static void setUseOtp(const bool &useOtp);
+
static bool isUsePwgen(const bool &defaultValue = QVariant().toBool());
static void setUsePwgen(const bool &usePwgen);
diff --git a/src/realpass.cpp b/src/realpass.cpp
index 5684eccd..798ebb83 100644
--- a/src/realpass.cpp
+++ b/src/realpass.cpp
@@ -45,6 +45,15 @@ void RealPass::Show(QString file) {
}
/**
+ * @brief RealPass::OtpGenerate pass otp
+ * @param file file containig OTP uri
+ */
+void RealPass::OtpGenerate(QString file) {
+ executePass(PASS_OTP_GENERATE, {"otp", file}, "", true);
+}
+
+
+/**
* @brief RealPass::Insert pass insert
*/
void RealPass::Insert(QString file, QString newValue, bool overwrite) {
diff --git a/src/realpass.h b/src/realpass.h
index 2c17a0f2..abf96f1a 100644
--- a/src/realpass.h
+++ b/src/realpass.h
@@ -20,6 +20,7 @@ public:
virtual void GitPull_b() Q_DECL_OVERRIDE;
virtual void GitPush() Q_DECL_OVERRIDE;
virtual void Show(QString file) Q_DECL_OVERRIDE;
+ virtual void OtpGenerate(QString file) Q_DECL_OVERRIDE;
virtual void Insert(QString file, QString value,
bool overwrite = false) Q_DECL_OVERRIDE;
virtual void Remove(QString file, bool isDir = false) Q_DECL_OVERRIDE;
diff --git a/src/settingsconstants.cpp b/src/settingsconstants.cpp
index 8b8c31ce..066931f3 100644
--- a/src/settingsconstants.cpp
+++ b/src/settingsconstants.cpp
@@ -43,6 +43,7 @@ const QString SettingsConstants::webDavPassword = "webDavPassword";
const QString SettingsConstants::profile = "profile";
const QString SettingsConstants::groupProfiles = "profiles";
const QString SettingsConstants::useGit = "useGit";
+const QString SettingsConstants::useOtp = "useOtp";
const QString SettingsConstants::useClipboard = "useClipboard";
const QString SettingsConstants::usePwgen = "usePwgen";
const QString SettingsConstants::avoidCapitals = "avoidCapitals";
diff --git a/src/settingsconstants.h b/src/settingsconstants.h
index 0f436085..1b719c8e 100644
--- a/src/settingsconstants.h
+++ b/src/settingsconstants.h
@@ -40,6 +40,7 @@ public:
const static QString profile;
const static QString groupProfiles;
const static QString useGit;
+ const static QString useOtp;
const static QString useClipboard;
const static QString usePwgen;
const static QString avoidCapitals;