Use KPasswordDialog to open LUKS containers.

This commit is contained in:
Andrius Štikonas 2016-05-01 14:17:06 +01:00
parent f1210d0aa7
commit a1026d20be
9 changed files with 7 additions and 234 deletions

View File

@ -57,6 +57,7 @@ find_package(KF5 REQUIRED
IconThemes
KIO
Service
WidgetsAddons
)
# use sane compile flags

View File

@ -45,6 +45,7 @@ target_link_libraries( kpmcore
KF5::IconThemes
KF5::KIOCore
KF5::Service
KF5::WidgetsAddons
)
install(TARGETS kpmcore EXPORT KPMcoreTargets ${INSTALL_TARGETS_DEFAULT_ARGS})

View File

@ -21,8 +21,6 @@
#include "fs/filesystemfactory.h"
#include "gui/decryptluksdialog.h"
#include "util/capacity.h"
#include "util/externalcommand.h"
#include "util/report.h"
@ -34,6 +32,7 @@
#include <QUuid>
#include <KLocalizedString>
#include <KPasswordDialog>
namespace FS
{
@ -246,15 +245,12 @@ bool luks::cryptOpen(QWidget* parent, const QString& deviceNode)
}
}
QPointer<DecryptLuksDialog> dlg = new DecryptLuksDialog(parent, deviceNode);
if (dlg->exec() != QDialog::Accepted)
{
delete dlg;
KPasswordDialog dlg( parent );
dlg.setPrompt(i18n("Enter passphrase for %1:", deviceNode));
if( !dlg.exec() )
return false;
}
QString passphrase = dlg->luksPassphrase().text();
QString passphrase = dlg.password();
std::vector<QString> commands;
commands.push_back(QStringLiteral("echo"));
commands.push_back(QStringLiteral("cryptsetup"));
@ -263,7 +259,6 @@ bool luks::cryptOpen(QWidget* parent, const QString& deviceNode)
args.push_back({ QStringLiteral("open"),
deviceNode,
suggestedMapperName(deviceNode) });
delete dlg;
ExternalCommand cmd(commands, args);
if (!(cmd.run(-1) && cmd.exitCode() == 0))

View File

@ -1,19 +1,11 @@
set(GUI_SRC
gui/decryptluksdialog.cpp
gui/decryptluksdialogwidget.cpp
gui/partresizerwidget.cpp
gui/partwidget.cpp
gui/partwidgetbase.cpp
)
set(GUI_LIB_HDRS
gui/decryptluksdialog.h
gui/decryptluksdialogwidget.h
gui/partresizerwidget.h
gui/partwidget.h
gui/partwidgetbase.h
)
set(gui_UIFILES
gui/decryptluksdialogwidgetbase.ui
)

View File

@ -1,46 +0,0 @@
/*************************************************************************
* Copyright (C) 2013 by Andrius Štikonas <andrius@stikonas.eu> *
* *
* 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 3 of *
* the License, or (at your option) any later version. *
* *
* 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 <http://www.gnu.org/licenses/>.*
*************************************************************************/
#include "gui/decryptluksdialog.h"
#include "gui/decryptluksdialogwidget.h"
#include "core/device.h"
#include "core/partitiontable.h"
#include <KLocalizedString>
#include <QDialogButtonBox>
#include <QPushButton>
DecryptLuksDialog::DecryptLuksDialog(QWidget* parent, const QString& deviceNode) :
QDialog(parent),
m_DialogWidget(new DecryptLuksDialogWidget(this)),
m_DeviceNode(deviceNode)
{
QVBoxLayout *mainLayout = new QVBoxLayout(this);
setLayout(mainLayout);
mainLayout->addWidget(&widget());
setWindowTitle(xi18nc("@title:window", "Decrypt LUKS partition on <filename>%1</filename>", this->deviceNode()));
QDialogButtonBox* dialogButtonBox = new QDialogButtonBox;
QPushButton* decryptButton = new QPushButton;
decryptButton->setText(i18nc("@action:button", "&Decrypt"));
decryptButton->setIcon(QIcon::fromTheme(QStringLiteral("object-unlocked")));
dialogButtonBox->addButton(decryptButton, QDialogButtonBox::AcceptRole);
mainLayout->addWidget(dialogButtonBox);
connect(dialogButtonBox, SIGNAL(accepted()), this, SLOT(accept()));
}

View File

@ -1,50 +0,0 @@
/*************************************************************************
* Copyright (C) 2013 by Andrius Štikonas <andrius@stikonas.eu> *
* *
* 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 3 of *
* the License, or (at your option) any later version. *
* *
* 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 <http://www.gnu.org/licenses/>.*
*************************************************************************/
#if !defined(DECRYPTLUKSDIALOG__H)
#define DECRYPTLUKSDIALOG__H
#include "gui/decryptluksdialogwidget.h"
#include <QDialog>
class Device;
class DecryptLuksDialog : public QDialog
{
Q_OBJECT
public:
DecryptLuksDialog(QWidget* parent, const QString& deviceNode);
protected:
DecryptLuksDialogWidget& widget() { return *m_DialogWidget; }
const DecryptLuksDialogWidget& widget() const { return *m_DialogWidget; }
const QString& deviceNode() const { return m_DeviceNode; }
private:
DecryptLuksDialogWidget* m_DialogWidget;
const QString& m_DeviceNode;
public:
QLineEdit& luksPassphrase() { return widget().luksPassphrase(); }
const QLineEdit& luksPassphrase() const { return widget().luksPassphrase(); }
};
#endif

View File

@ -1,24 +0,0 @@
/*************************************************************************
* Copyright (C) 2013 by Andrius Štikonas <andrius@stikonas.eu> *
* *
* 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 3 of *
* the License, or (at your option) any later version. *
* *
* 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 <http://www.gnu.org/licenses/>.*
*************************************************************************/
#include "gui/decryptluksdialogwidget.h"
DecryptLuksDialogWidget::DecryptLuksDialogWidget(QWidget* parent) :
QWidget(parent)
{
setupUi(this);
}

View File

@ -1,38 +0,0 @@
/*************************************************************************
* Copyright (C) 2013 by Andrius Štikonas <andrius@stikonas.eu> *
* *
* 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 3 of *
* the License, or (at your option) any later version. *
* *
* 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 <http://www.gnu.org/licenses/>.*
*************************************************************************/
#if !defined(DECRYPTLUKSDIALOGWIDGET__H)
#define DECRYPTLUKSDIALOGWIDGET__H
#include "ui_decryptluksdialogwidgetbase.h"
#include <QLabel>
#include <QLineEdit>
class DecryptLuksDialogWidget : public QWidget, public Ui::DecryptLuksDialogWidgetBase
{
Q_OBJECT
public:
DecryptLuksDialogWidget(QWidget* parent);
QLineEdit& luksPassphrase() { return *m_LineEditPassphrase; }
const QLineEdit& luksPassphrase() const { return *m_LineEditPassphrase; }
};
#endif

View File

@ -1,58 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DecryptLuksDialogWidgetBase</class>
<widget class="QWidget" name="DecryptLuksDialogWidgetBase">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>377</width>
<height>122</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>10</number>
</property>
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<widget class="QLabel" name="label_Pass">
<property name="text">
<string>&amp;Passphrase:</string>
</property>
<property name="buddy">
<cstring>m_LineEditPassphrase</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="m_LineEditPassphrase">
<property name="echoMode">
<enum>QLineEdit::Password</enum>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>