diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 8e99840..7782e11 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -18,9 +18,12 @@ #include "fs/luks.h" +#include "gui/decryptluksdialog.h" + #include "util/capacity.h" #include "util/externalcommand.h" +#include #include #include #include @@ -83,11 +86,37 @@ qint64 luks::minCapacity() const return 3 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB); } +QString luks::mountTitle() const +{ + return i18nc("@title:menu", "Decrypt"); +} + QString luks::unmountTitle() const { return i18nc("@title:menu", "Deactivate"); } +bool luks::mount(const QString& deviceNode) +{ + QPointer dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0 + + if (dlg->exec() == QDialog::Accepted) + { + std::vector commands; + commands.push_back(QStringLiteral("echo")); + commands.push_back(QStringLiteral("cryptsetup")); + std::vector args; + args.push_back(QStringList() << dlg->luksPassphrase().text()); + args.push_back(QStringList() << QStringLiteral("luksOpen") << deviceNode << dlg->luksName().text()); + ExternalCommand cmd(commands, args); + delete dlg; + return cmd.run(-1) && cmd.exitCode() == 0; + } + + delete dlg; + return false; +} + bool luks::unmount(const QString& deviceNode) { ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksClose") << mapperName(deviceNode)); @@ -111,6 +140,16 @@ bool luks::updateUUID(Report& report, const QString& deviceNode) const return cmd.run(-1) && cmd.exitCode() == 0; } +bool luks::canMount(const QString&) const +{ + return true; +} + +bool luks::canUnmount(const QString&) const +{ + return true; +} + QString luks::mapperName(const QString& deviceNode) { ExternalCommand cmd(QStringLiteral("find"), QStringList() << QStringLiteral("/dev/mapper/") << QStringLiteral("-exec") << QStringLiteral("cryptsetup") << QStringLiteral("status") << QStringLiteral("{}") << QStringLiteral(";")); diff --git a/src/fs/luks.h b/src/fs/luks.h index 9e9d3ae..e2efa60 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -85,11 +85,12 @@ public: virtual QString readUUID(const QString& deviceNode) const; virtual bool updateUUID(Report& report, const QString& deviceNode) const; - virtual bool canUnmount(const QString&) const { - return true; - }; + virtual bool canMount(const QString&) const; + virtual bool canUnmount(const QString&) const; + virtual bool mount(const QString& deviceNode); virtual bool unmount(const QString& deviceNode); + virtual QString mountTitle() const; virtual QString unmountTitle() const; static QString mapperName(const QString& deviceNode);