From 3cbd834787f3ded52c60f42fb7191de6b978b006 Mon Sep 17 00:00:00 2001 From: Quentin Rouland Date: Mon, 18 Mar 2019 08:10:58 +0100 Subject: [PATCH] Inital base for use GPG && GpgmE --- .gitmodules | 3 + CMakeLists.txt | 27 ++++- README.md | 8 +- UTPass.apparmor | 1 + assets/logo.svg | 164 ++++++++++++++++++++++---- clickable.json | 15 ++- gpghome/.gitkeep | 0 password-store/public.key | 30 +++++ plugins/CMakeLists.txt | 2 +- plugins/FileSystem/CMakeLists.txt | 25 ---- plugins/FileSystem/filesystem.cpp | 11 -- plugins/FileSystem/filesystem.h | 16 --- plugins/FileSystem/plugin.cpp | 10 -- plugins/FileSystem/qmldir | 2 - plugins/Gpg/CMakeLists.txt | 48 ++++++++ plugins/Gpg/gpg.cpp | 166 +++++++++++++++++++++++++++ plugins/Gpg/gpg.h | 23 ++++ plugins/Gpg/plugin.cpp | 10 ++ plugins/{FileSystem => Gpg}/plugin.h | 0 plugins/Gpg/qmldir | 2 + plugins/Pass/CMakeLists.txt | 22 ---- plugins/Pass/pass.cpp | 59 +--------- plugins/Pass/pass.h | 4 - po/utpass.qrouland.pot | 2 +- qml/Main.qml | 4 +- third/CMakeLists.txt | 26 +++-- third/clean.sh | 16 +-- third/gnupg | 1 + 28 files changed, 492 insertions(+), 205 deletions(-) create mode 100644 gpghome/.gitkeep create mode 100644 password-store/public.key delete mode 100644 plugins/FileSystem/CMakeLists.txt delete mode 100644 plugins/FileSystem/filesystem.cpp delete mode 100644 plugins/FileSystem/filesystem.h delete mode 100644 plugins/FileSystem/plugin.cpp delete mode 100644 plugins/FileSystem/qmldir create mode 100644 plugins/Gpg/CMakeLists.txt create mode 100644 plugins/Gpg/gpg.cpp create mode 100644 plugins/Gpg/gpg.h create mode 100644 plugins/Gpg/plugin.cpp rename plugins/{FileSystem => Gpg}/plugin.h (100%) create mode 100644 plugins/Gpg/qmldir create mode 160000 third/gnupg diff --git a/.gitmodules b/.gitmodules index d0319ec..a3823e9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,6 @@ [submodule "third/libgpg-error"] path = third/libgpg-error url = https://github.com/gpg/libgpg-error +[submodule "third/gnupg"] + path = third/gnupg + url = https://github.com/gpg/gnupg diff --git a/CMakeLists.txt b/CMakeLists.txt index 086da58..19b05fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,6 +4,19 @@ include(${CMAKE_ROOT}/Modules/ExternalProject.cmake) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +execute_process( + COMMAND dpkg-architecture -qDEB_HOST_ARCH + OUTPUT_VARIABLE CLICK_ARCH + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +execute_process( + COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH + OUTPUT_VARIABLE ARCH_TRIPLET + OUTPUT_STRIP_TRAILING_WHITESPACE +) + find_package(Qt5Core) find_package(Qt5Qml) find_package(Qt5Quick) @@ -19,10 +32,12 @@ set(PROJECT_NAME "UTPass") set(FULL_PROJECT_NAME "utpass.qrouland") set(CMAKE_INSTALL_PREFIX /) set(DATA_DIR /) +set(BIN_DIR ${DATA_DIR}lib/${ARCH_TRIPLET}/bin) set(DESKTOP_FILE_NAME ${PROJECT_NAME}.desktop) add_executable(${PROJECT_NAME} main.cpp) + qt5_use_modules(${PROJECT_NAME} Gui Qml Quick) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}) @@ -32,7 +47,15 @@ install(FILES ${PROJECT_NAME}.apparmor DESTINATION ${DATA_DIR}) install(DIRECTORY qml DESTINATION ${DATA_DIR}) install(DIRECTORY assets DESTINATION ${DATA_DIR}) install(DIRECTORY password-store DESTINATION ${DATA_DIR}) - +install(DIRECTORY gpghome DESTINATION ${DATA_DIR}) +install(DIRECTORY local/bin DESTINATION ${DATA_DIR}) +file(GLOB_RECURSE BIN_FILES + "local/bin/*") +install( + FILES ${BIN_FILES} + PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + DESTINATION ${BIN_DIR} +) # Translations file(GLOB_RECURSE I18N_SRC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/po qml/*.qml qml/*.js) @@ -59,6 +82,8 @@ add_subdirectory(third) add_subdirectory(po) add_subdirectory(plugins) +add_dependencies(${PROJECT_NAME} Gnupg) + # Make source files visible in qtcreator # We don't need to add plugin sources here as they get exposed # via the library target. diff --git a/README.md b/README.md index 721eb08..6473a6c 100644 --- a/README.md +++ b/README.md @@ -12,10 +12,10 @@ For more options/details see the [clickable documentation](http://clickable.bhdo ## Custom clickable command * ```clickable c ``` : clean third directory and run ```clickable clean``` -* ```clickable crun ``` : clean third directory and run ```clickable``` -* ```clickable run``` : run ```clickable --dirty``` -* ```clickable crund ``` : clean third directory and run ```clickable desktop``` -* ```clickable rund ``` : run ```clickable desktop --dirty ``` +* ```clickable cr ``` : clean third directory and run ```clickable``` +* ```clickable r``` : run ```clickable --dirty``` +* ```clickable crd ``` : clean third directory and run ```clickable desktop``` +* ```clickable rd ``` : run ```clickable desktop --dirty ``` # Contributing diff --git a/UTPass.apparmor b/UTPass.apparmor index 7a6cbd5..e1ec6b5 100644 --- a/UTPass.apparmor +++ b/UTPass.apparmor @@ -1,4 +1,5 @@ { + template": "unconfined", "policy_groups": [], "policy_version": 16.04 } diff --git a/assets/logo.svg b/assets/logo.svg index 89a5124..3024c4a 100644 --- a/assets/logo.svg +++ b/assets/logo.svg @@ -1,24 +1,144 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/clickable.json b/clickable.json index 6c291d2..c3e1a6f 100644 --- a/clickable.json +++ b/clickable.json @@ -3,16 +3,15 @@ "kill": "UTPass", "scripts": { "c": "third/clean.sh && clickable clean", - "crun": "third/clean.sh && clickable", - "run": "clickable --dirty", - "crund": "third/clean.sh && clickable desktop", - "rund": "clickable desktop --dirty" + "cr": "third/clean.sh && clickable", + "r": "clickable --dirty", + "crd": "third/clean.sh && clickable desktop", + "rd": "clickable desktop --dirty" }, "dependencies_build": [ "texinfo", - "gpgsm" + "gpgsm", + "bison" ], - "dependencies_target": [ - - ] + "dependencies_target": [] } diff --git a/gpghome/.gitkeep b/gpghome/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/password-store/public.key b/password-store/public.key new file mode 100644 index 0000000..30d6554 --- /dev/null +++ b/password-store/public.key @@ -0,0 +1,30 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFyNdOEBCADl2oWeYkmVBDWoWgZdkpbV5VRJJFATLsu5aHBuQO/C1mn2RlL2 +jIpIzI5mwviAw9RN0KnLdHvp3n3JkJPZ8tB3Sk9SD8qhr6ae2DbIpySMscYC9+Go +t0mrGyB3w+Y5etfZ/1dRNx6/vYaWYIG6bKfJettt/zLJcjpkIKcrN4OKyN2wXz3y +EiAiJvMntdgLslURl93RyNuVR6UaE4TchtDqRc2KvXAxrf6NUYd4KxvUgUd0TFPs +s3SRs+cAcRmTzxv/c40sBw3z0B9rBB7T7oPgGUA6NhErvBwpF9MLN+6ucZ1HHLLH +dmCd7q2OT7wZ9L6zILmKvJcK13V4FyO9zOALABEBAAG0I1Rlc3QgKFRlc3QgZ3Bn +IGtleSkgPHRlc3RAdGVzdC5vcmc+iQFOBBMBCAA4FiEE6JXydyCXAQnkfMmTuV1W +R67EDnIFAlyNdOECGwMFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQuV1WR67E +DnIchAgAvV5q4/Hktlu3RIgo8KkGksMOS5XhJrr6fZ8bUgqpwL3oEfZ3Se5aS7yN +5M7NT8foB2zK2moBICMYpxBxQoGjxFosv94FqX9+XMiRc2Di6MwLwKkWfu0HoPEi +e701iTo53r6K84TIKNrRsKyg6C/pRqNNwSp1YcvG11eUnG5teZMcb1xsMfx4O2/s +mcrySo0ZjAfYnh2poxf4yy9xTryPrDnaY/EFj+4uBMLH8jG3QQiAH1N6wHhi/vwj +FaaaBtRxcVU/obGDg2LHTVxItv81xzSbLf8JdIGOKjwFed+DjaoSlEzPnuaEZf/M +7mE6fiGbIhFgUlwEGomptZDC1fg3M7kBDQRcjXThAQgAmuSsbRoLfiSoij5CWiP4 +UUvhIEt5d4KkMRRvuWXkJo4FWs2tmNWIb1tiXuKhX+puLjP06LwfEyNT1jz75pgO +tSQ0Yz55Hn25CWOcyWF/iIoIjjw3WhQ0a59Ajk8tVdVrTEhlcQ+m7dH1igyMO1vv +iH1eTu+TXqWDF1+oYTZH0iTMYreCNbz2RcFHZQKdWK8GI1DE/qeKLHf+XYGTVQH4 +fRnGaX7T5DdnklHKVGi4iILOKn5aofTIg14roS9yfDMK6vmNr7BkzqAe9+WfYC0K +TU3hX1z5SrjnYnBb531MaaCotUEI3DbNeoNsuH3Hx0WLHR1Q55Hh+KAxhMUKTR4P +uwARAQABiQE2BBgBCAAgFiEE6JXydyCXAQnkfMmTuV1WR67EDnIFAlyNdOECGwwA +CgkQuV1WR67EDnKjKwgA3yexUAoTe9sDRKO710MSWhPAn3DZ8qMo8EqmNegG86PO +/mD6BPKo9503pqGGXYoFBcqsmFX07uvy0evCsqO15xuDWwOhNX5fm2LeSsNEkhhC +2wvJVQPdekj9KmOrRRRcr6DlR0Yl7+BJX1+zF8tYwtU4tiY+bCOVRoa1KvTXUwcy +sRTQ9xWguCP8Ai1GyZS0P8lEU0nCS2KrgU/XKQVW7o2OtBiywJbmVCDw15vIq3kN +akRrU5DvYCelUjjzgj+HC3MEE5fV4UsuFLKw3QMmekzFfa6OagRb/FYYZ5ZL+tGI +cf2W57AJOHpgYvxqrY5M1UfKLf8kCYPt3AG0XiD5mw== +=OHyE +-----END PGP PUBLIC KEY BLOCK----- diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 69dbd3a..40b39c2 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -1,3 +1,3 @@ -add_subdirectory(FileSystem) +add_subdirectory(Gpg) add_subdirectory(Pass) diff --git a/plugins/FileSystem/CMakeLists.txt b/plugins/FileSystem/CMakeLists.txt deleted file mode 100644 index 273a357..0000000 --- a/plugins/FileSystem/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") -set(PLUGIN "FileSystem") - -set( - SRC - plugin.cpp - filesystem.cpp -) - -set(CMAKE_AUTOMOC ON) - -add_library(${PLUGIN} MODULE ${SRC}) -set_target_properties(${PLUGIN} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PLUGIN}) -qt5_use_modules(${PLUGIN} Qml Quick DBus) - -execute_process( - COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH - OUTPUT_VARIABLE ARCH_TRIPLET - OUTPUT_STRIP_TRAILING_WHITESPACE -) - -set(QT_IMPORTS_DIR "/lib/${ARCH_TRIPLET}") - -install(TARGETS ${PLUGIN} DESTINATION ${QT_IMPORTS_DIR}/${PLUGIN}/) -install(FILES qmldir DESTINATION ${QT_IMPORTS_DIR}/${PLUGIN}/) diff --git a/plugins/FileSystem/filesystem.cpp b/plugins/FileSystem/filesystem.cpp deleted file mode 100644 index a147655..0000000 --- a/plugins/FileSystem/filesystem.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include - -#include "filesystem.h" - -FileSystem::FileSystem() { - -} - -void FileSystem::list_dir() { - qDebug() << "hello world!"; -} diff --git a/plugins/FileSystem/filesystem.h b/plugins/FileSystem/filesystem.h deleted file mode 100644 index 795a02d..0000000 --- a/plugins/FileSystem/filesystem.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef PASS_H -#define PASS_H - -#include - -class FileSystem: public QObject { - Q_OBJECT - -public: - FileSystem(); - ~FileSystem() = default; - - Q_INVOKABLE void list_dir(); -}; - -#endif diff --git a/plugins/FileSystem/plugin.cpp b/plugins/FileSystem/plugin.cpp deleted file mode 100644 index 68f2b3c..0000000 --- a/plugins/FileSystem/plugin.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include - -#include "plugin.h" -#include "filesystem.h" - -void FileSystemPlugin::registerTypes(const char *uri) { - //@uri Pass - qmlRegisterSingletonType(uri, 1, 0, "FileSystem", [](QQmlEngine*, QJSEngine*) -> QObject* { return new FileSystem; }); -} diff --git a/plugins/FileSystem/qmldir b/plugins/FileSystem/qmldir deleted file mode 100644 index 8d210a5..0000000 --- a/plugins/FileSystem/qmldir +++ /dev/null @@ -1,2 +0,0 @@ -module FileSystem -plugin FileSystem diff --git a/plugins/Gpg/CMakeLists.txt b/plugins/Gpg/CMakeLists.txt new file mode 100644 index 0000000..3aa139c --- /dev/null +++ b/plugins/Gpg/CMakeLists.txt @@ -0,0 +1,48 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +set(PLUGIN "Gpg") + +set( + SRC + plugin.cpp + gpg.cpp +) + +set(CMAKE_AUTOMOC ON) + +add_library(${PLUGIN} MODULE ${SRC}) +set_target_properties(${PLUGIN} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PLUGIN}) +qt5_use_modules(${PLUGIN} Qml Quick DBus) + +set(EXTERNAL_LIBS "${CMAKE_SOURCE_DIR}/local") +set(THIRD_PATH "${CMAKE_CURRENT_SOURCE_DIR}") + +INCLUDE_DIRECTORIES(${EXTERNAL_LIBS}/include) +add_dependencies(${PLUGIN} LibGpgme) + +add_library(GpgError STATIC IMPORTED) +set_property(TARGET GpgError PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgpg-error.a") + +add_library(GpgAssuan STATIC IMPORTED) +set_property(TARGET GpgAssuan PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libassuan.a") + +add_library(Gpgme STATIC IMPORTED) +set_property(TARGET Gpgme PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgpgme.a") + +add_library(Gpgmepp STATIC IMPORTED) +set_property(TARGET Gpgmepp PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgpgmepp.a") + +add_library(QGpgme STATIC IMPORTED) +set_property(TARGET QGpgme PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libqgpgme.a") + +target_link_libraries(${PLUGIN} QGpgme Gpgmepp Gpgme GpgAssuan GpgError) + +execute_process( + COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH + OUTPUT_VARIABLE ARCH_TRIPLET + OUTPUT_STRIP_TRAILING_WHITESPACE +) + +set(QT_IMPORTS_DIR "/lib/${ARCH_TRIPLET}") + +install(TARGETS ${PLUGIN} DESTINATION ${QT_IMPORTS_DIR}/${PLUGIN}/) +install(FILES qmldir DESTINATION ${QT_IMPORTS_DIR}/${PLUGIN}/) diff --git a/plugins/Gpg/gpg.cpp b/plugins/Gpg/gpg.cpp new file mode 100644 index 0000000..1d5ae41 --- /dev/null +++ b/plugins/Gpg/gpg.cpp @@ -0,0 +1,166 @@ +#include +#include +#include +#include +#include + +#include "gpg.h" +#include "gpgme++/global.h" +#include "gpgme++/context.h" +#include "gpgme++/engineinfo.h" +#include "qgpgme/protocol.h" +#include "qgpgme/keylistjob.h" +#include "gpgme++/keylistresult.h" +#include "qgpgme/importjob.h" +#include "gpgme++/importresult.h" +#include "qgpgme/decryptjob.h" + +using namespace GpgME; +using namespace QGpgME; + +Gpg::Gpg() { + auto error = initializeLibrary(OpenPGP); + if (error) { + qDebug() << "Code Error : " << error.code(); + qDebug() << "Error str : " << error.asString(); + qFatal("GpgME init fail"); + } + + QString gnuhome = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation).append("/gpghome"); + QDir dir(gnuhome); + if (!dir.exists()) dir.mkpath("."); + qputenv("GNUPGHOME", gnuhome.toStdString().c_str()); + qDebug() << "GNUPGHOME is :" << qgetenv("GNUPGHOME"); + + error = checkEngine(OpenPGP); + if (error) { + qDebug() << "Code Error : " << error.code(); + qDebug() << "Error str : " << error.asString(); + qFatal("Engine check Fail"); + + } + qDebug() << "GpgME Engine Version :" << engineInfo(OpenPGP).version(); +} + +void Gpg::list_dir() { + qDebug() << "hello world!"; +} + +QString Gpg::decrypt(const QByteArray cipherText) { + /*auto decJob = openpgp()->decryptJob(); + auto ctx = DecryptJob::context(decJob);*/ + + /* TODO + * TestPassphraseProvider provider; + ctx->setPassphraseProvider(&provider); + ctx->setPinentryMode(Context::PinentryLoopback);*/ + + /*QByteArray plainText; + decJob->exec(cipherText, plainText); + + return QString::fromUtf8(plainText);*/ +} + +QString Gpg::decrypt_file(const QString path) { + /*QFile file(path); + if (!file.open(QIODevice::ReadOnly)) { + qErrnoWarning("Can't open the File"); + return nullptr; + } + QByteArray plainText = file.readAll(); + return this->decrypt(plainText);*/ +} + +QByteArray Gpg::encrypt(const QString str) { + /*auto listjob = openpgp()->keyListJob(false, false, false); + std::vector keys; + auto keylistresult = listjob->exec(QStringList() << QStringLiteral("alfa@example.net"), false, keys); + + auto job = openpgp() + ->encryptJob( + true, //ASCII Armor + true //Textmode + ); + QByteArray cipherText; + auto result = job->exec(keys, QStringLiteral("Hello World").toUtf8(), Context::AlwaysTrust, cipherText); + return cipherText;*/ +} + +bool Gpg::encrypt_file(const QString str, const QString path) { + /*QFile file(path); + if (!file.open(QIODevice::WriteOnly)) { + qErrnoWarning("Can't open the File"); + return false; + } + file.write(Pass::encrypt(str)); + return true;*/ +} + + + +QString Gpg::get_key_id(QString uid) { + qDebug() << "Getting the key id " << uid; + auto *job = openpgp()->keyListJob(false, false, false); + std::vector keys; + auto result = job->exec(QStringList() << uid, false, keys); + delete job; + + if (keys.empty()) { + qDebug() << "No key found for" << uid; + return nullptr; + } + const QString kId = QLatin1String(keys.front().keyID()); + qDebug() << "Id key for " << uid << "is : " << kId; + return kId; +} + +QStringList Gpg::get_all_keys_id() { + qDebug() << "Show all available key"; + auto job = openpgp()->keyListJob(false, false, false); + std::vector keys; + auto result = job->exec(QStringList(""), false, keys); + delete job; + + if (keys.empty()) { + qDebug() << "No key found" ; + return QStringList(); + } + + auto r = QStringList(); + for(const auto &key: keys) { + r.append(QLatin1String(key.keyID())); + qDebug() << "Key" << QLatin1String(key.keyID()); + } + return r; +} + +bool Gpg::import_key(QString path) { + qDebug() << "Importing the key file" << path; + QFile file(path); + if (!file.open(QIODevice::ReadOnly)) { + qWarning() << "Can't open the File"; + return false; + } + + auto job = openpgp()->importJob(); + auto result = job->exec(file.readAll()); + + delete job; + file.close(); + + if(result.error()) { + qWarning() << "Import go wrong"; + return false; + } + + qDebug() << "Key imported" << result.numImported(); + qDebug() << "Key not imported" << result.notImported(); + qDebug() << "Key unchanged" << result.numUnchanged(); + qDebug() << "Result null" << result.isNull(); + qDebug() << "newUserIDs" << result.newUserIDs(); + + for(const auto &key: result.imports()) + qDebug() << "Key" << key.fingerprint(); + + return true; +} \ No newline at end of file diff --git a/plugins/Gpg/gpg.h b/plugins/Gpg/gpg.h new file mode 100644 index 0000000..8714b78 --- /dev/null +++ b/plugins/Gpg/gpg.h @@ -0,0 +1,23 @@ +#ifndef PASS_H +#define PASS_H + +#include + +class Gpg: public QObject { + Q_OBJECT + +public: + Gpg(); + ~Gpg() = default; + + Q_INVOKABLE void list_dir(); + Q_INVOKABLE QString get_key_id(QString uid); + Q_INVOKABLE QStringList get_all_keys_id(); + Q_INVOKABLE bool import_key(QString path); + Q_INVOKABLE QString decrypt(QByteArray plainText); + Q_INVOKABLE QString decrypt_file(QString path); + Q_INVOKABLE QByteArray encrypt(QString str); + Q_INVOKABLE bool encrypt_file(QString str, QString path); +}; + +#endif diff --git a/plugins/Gpg/plugin.cpp b/plugins/Gpg/plugin.cpp new file mode 100644 index 0000000..23ef464 --- /dev/null +++ b/plugins/Gpg/plugin.cpp @@ -0,0 +1,10 @@ +#include +#include + +#include "plugin.h" +#include "gpg.h" + +void FileSystemPlugin::registerTypes(const char *uri) { + //@uri Pass + qmlRegisterSingletonType(uri, 1, 0, "Gpg", [](QQmlEngine*, QJSEngine*) -> QObject* { return new Gpg; }); +} diff --git a/plugins/FileSystem/plugin.h b/plugins/Gpg/plugin.h similarity index 100% rename from plugins/FileSystem/plugin.h rename to plugins/Gpg/plugin.h diff --git a/plugins/Gpg/qmldir b/plugins/Gpg/qmldir new file mode 100644 index 0000000..da374a6 --- /dev/null +++ b/plugins/Gpg/qmldir @@ -0,0 +1,2 @@ +module Gpg +plugin Gpg diff --git a/plugins/Pass/CMakeLists.txt b/plugins/Pass/CMakeLists.txt index f44da68..5a05fcc 100644 --- a/plugins/Pass/CMakeLists.txt +++ b/plugins/Pass/CMakeLists.txt @@ -13,28 +13,6 @@ add_library(${PLUGIN} MODULE ${SRC}) set_target_properties(${PLUGIN} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PLUGIN}) qt5_use_modules(${PLUGIN} Qml Quick DBus) -set(EXTERNAL_LIBS "${CMAKE_SOURCE_DIR}/local") -set(THIRD_PATH "${CMAKE_CURRENT_SOURCE_DIR}") - -INCLUDE_DIRECTORIES(${EXTERNAL_LIBS}/include) -add_dependencies(${PLUGIN} LibGpgme) - -add_library(GpgError STATIC IMPORTED) -set_property(TARGET GpgError PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgpg-error.a") - -add_library(GpgAssuan STATIC IMPORTED) -set_property(TARGET GpgAssuan PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libassuan.a") - -add_library(Gpgme STATIC IMPORTED) -set_property(TARGET Gpgme PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgpgme.a") - -add_library(Gpgmepp STATIC IMPORTED) -set_property(TARGET Gpgmepp PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgpgmepp.a") - -add_library(QGpgme STATIC IMPORTED) -set_property(TARGET QGpgme PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libqgpgme.a") - -target_link_libraries(${PLUGIN} QGpgme Gpgmepp Gpgme GpgAssuan GpgError) execute_process( COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH diff --git a/plugins/Pass/pass.cpp b/plugins/Pass/pass.cpp index 941a54d..1e85c21 100644 --- a/plugins/Pass/pass.cpp +++ b/plugins/Pass/pass.cpp @@ -1,71 +1,16 @@ #include #include -#include "pass.h" -#include "gpgme++/global.h" -#include "gpgme++/engineinfo.h" -#include "qgpgme/protocol.h" -#include "qgpgme/encryptjob.h" +#include "pass.h" Pass::Pass() { - qDebug() << "Initializing GpgMe"; - if(GpgME::initializeLibrary(GpgME::OpenPGP)) - qFatal("Fatal error when initializing GpgMe"); - qDebug() << "GpgME Engine Version :" << GpgME::engineInfo(GpgME::GpgEngine).version(); + } void Pass::speak() { qDebug() << "Starting app from main.cpp"; } -QString Pass::decrypt(const QByteArray cipherText) { - /*auto decJob = QGpgME::openpgp()->decryptJob(); - auto ctx = QGpgME::Job::context(decJob); - - TestPassphraseProvider provider; - ctx->setPassphraseProvider(&provider); - ctx->setPinentryMode(Context::PinentryLoopback); - - QByteArray plainText; - decJob->exec(cipherText, plainText); - - return QString::fromUtf8(plainText);*/ -} - -QString Pass::decrypt_file(const QString path) { - /*QFile file(path); - if (!file.open(QIODevice::ReadOnly)) { - qErrnoWarning("Can't open the File"); - return nullptr; - } - QByteArray plainText = file.readAll(); - return Pass::decrypt(plainText);*/ -} - -QByteArray Pass::encrypt(const QString str) { - /*auto listjob = QGpgME::openpgp()->keyListJob(false, false, false); - std::vector keys; - auto keylistresult = listjob->exec(QStringList() << QStringLiteral("alfa@example.net"), false, keys); - - auto job = QGpgME::openpgp() - ->encryptJob( - true, //ASCII Armor - true //Textmode - ); - QByteArray cipherText; - auto result = job->exec(keys, QStringLiteral("Hello World").toUtf8(), GpgME::Context::AlwaysTrust, cipherText); - return cipherText;*/ -} - -bool Pass::encrypt_file(const QString str, const QString path) { - /*QFile file(path); - if (!file.open(QIODevice::WriteOnly)) { - qErrnoWarning("Can't open the File"); - return false; - } - file.write(Pass::encrypt(str)); - return true;*/ -} diff --git a/plugins/Pass/pass.h b/plugins/Pass/pass.h index 58c95e6..97afe17 100644 --- a/plugins/Pass/pass.h +++ b/plugins/Pass/pass.h @@ -12,10 +12,6 @@ public: ~Pass() override = default; Q_INVOKABLE void speak(); - Q_INVOKABLE QString decrypt(QByteArray plainText); - Q_INVOKABLE QString decrypt_file(QString path); - Q_INVOKABLE QByteArray encrypt(QString str); - Q_INVOKABLE bool encrypt_file(QString str, QString path); }; #endif diff --git a/po/utpass.qrouland.pot b/po/utpass.qrouland.pot index 926c8ea..18efdb7 100644 --- a/po/utpass.qrouland.pot +++ b/po/utpass.qrouland.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: utpass.qrouland\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-16 17:03+0000\n" +"POT-Creation-Date: 2019-03-20 22:15+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/qml/Main.qml b/qml/Main.qml index 35c6959..4d635ec 100644 --- a/qml/Main.qml +++ b/qml/Main.qml @@ -1,7 +1,7 @@ import QtQuick 2.4 import QtQuick.Layouts 1.1 import Ubuntu.Components 1.3 -import Pass 1.0 +import Gpg 1.0 import "components" @@ -20,5 +20,5 @@ MainView { Component.onCompleted: push(pageStack.push(Qt.resolvedUrl("pages/PasswordList.qml"))) } - Component.onCompleted: Pass.speak() + Component.onCompleted: { Gpg.import_key("password-store/public.key"); Gpg.get_all_keys_id();} } diff --git a/third/CMakeLists.txt b/third/CMakeLists.txt index 81d949e..8984e4e 100644 --- a/third/CMakeLists.txt +++ b/third/CMakeLists.txt @@ -9,20 +9,18 @@ execute_process( set(EXTERNAL_LIBS "${CMAKE_SOURCE_DIR}/local") set(THIRD_PATH "${CMAKE_CURRENT_SOURCE_DIR}") -set(ENV{PATH} "${EXTERNAL_LIBS}/bin") set(LIBGPGERROR_PATH "${THIRD_PATH}/libgpg-error") -set(LIBASSUANSRC_PATH "${THIRD_PATH}/libassuan") +set(LIBASSUAN_PATH "${THIRD_PATH}/libassuan") set(LIBGPGME_PATH "${THIRD_PATH}/gpgme") +set(GNUPG_PATH "${THIRD_PATH}/gnupg") -#INCLUDE_DIRECTORIES(${EXTERNAL_LIBS}/include) -#LINK_DIRECTORIES(${EXTERNAL_LIBS}/lib) ExternalProject_Add( LibGpgError INSTALL_DIR ${EXTERNAL_LIBS} DOWNLOAD_COMMAND "" SOURCE_DIR ${LIBGPGERROR_PATH} - CONFIGURE_COMMAND /autogen.sh && /configure --prefix=${EXTERNAL_LIBS} --enable-static=yes --enable-shared=no --with-pic=yes --enable-maintainer-mode --host ${ARCH_TRIPLET} + CONFIGURE_COMMAND /autogen.sh && /configure --prefix=${EXTERNAL_LIBS} --enable-static=yes --enable-shared=no --with-pic=yes --enable-maintainer-mode --host ${ARCH_TRIPLET} --disable-doc BUILD_IN_SOURCE 1 BUILD_COMMAND make INSTALL_COMMAND make install @@ -33,8 +31,8 @@ ExternalProject_Add( DEPENDS LibGpgError INSTALL_DIR ${EXTERNAL_LIBS} DOWNLOAD_COMMAND "" - SOURCE_DIR ${LIBASSUANSRC_PATH} - CONFIGURE_COMMAND /autogen.sh && /configure --prefix=${EXTERNAL_LIBS} --enable-static=yes --enable-shared=no --with-pic=yes --enable-maintainer-mode --with-libgpg-error-prefix=${EXTERNAL_LIBS} --host ${ARCH_TRIPLET} + SOURCE_DIR ${LIBASSUAN_PATH} + CONFIGURE_COMMAND /autogen.sh && /configure --prefix=${EXTERNAL_LIBS} --enable-static=yes --enable-shared=no --with-pic=yes --enable-maintainer-mode --with-libgpg-error-prefix=${EXTERNAL_LIBS} --host ${ARCH_TRIPLET} --disable-doc BUILD_IN_SOURCE 1 BUILD_COMMAND make INSTALL_COMMAND make install @@ -46,7 +44,19 @@ ExternalProject_Add( INSTALL_DIR ${EXTERNAL_LIBS} DOWNLOAD_COMMAND "" SOURCE_DIR ${LIBGPGME_PATH} - CONFIGURE_COMMAND /autogen.sh && /configure --enable-languages=cpp,qt --enable-static=yes --enable-shared=no --with-pic=yes --prefix=${EXTERNAL_LIBS} --enable-maintainer-mode --with-libgpg-error-prefix=${EXTERNAL_LIBS} --with-libassuan-prefix=${EXTERNAL_LIBS} --host ${ARCH_TRIPLET} + CONFIGURE_COMMAND /autogen.sh && /configure --enable-languages=cpp,qt --enable-static=yes --enable-shared=no --with-pic=yes --prefix=${EXTERNAL_LIBS} --enable-maintainer-mode --with-libgpg-error-prefix=${EXTERNAL_LIBS} --with-libassuan-prefix=${EXTERNAL_LIBS} --host ${ARCH_TRIPLET} --disable-doc + BUILD_IN_SOURCE 1 + BUILD_COMMAND make + INSTALL_COMMAND make install +) + + +ExternalProject_Add( + Gnupg + INSTALL_DIR ${EXTERNAL_LIBS} + DOWNLOAD_COMMAND "" + SOURCE_DIR ${GNUPG_PATH} + CONFIGURE_COMMAND /autogen.sh && /configure --prefix=${EXTERNAL_LIBS} --enable-maintainer-mode --host ${ARCH_TRIPLET} --disable-doc BUILD_IN_SOURCE 1 BUILD_COMMAND make INSTALL_COMMAND make install diff --git a/third/clean.sh b/third/clean.sh index 1118e2d..8f90b10 100755 --- a/third/clean.sh +++ b/third/clean.sh @@ -2,16 +2,10 @@ SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )" -cd $SCRIPTPATH/gpgme -git clean -xdf -git reset --hard HEAD - -cd $SCRIPTPATH/libassuan -git clean -xdf -git reset --hard HEAD - -cd $SCRIPTPATH/libgpg-error -git clean -xdf -git reset --hard HEAD +for LIB in "gnupg" "gpgme" "libassuan" "libgpg-error" +do + echo $LIB + cd $SCRIPTPATH/$LIB && git clean -xdf && git reset --hard HEAD +done rm -rf $SCRIPTPATH/../local diff --git a/third/gnupg b/third/gnupg new file mode 160000 index 0000000..8ae6a24 --- /dev/null +++ b/third/gnupg @@ -0,0 +1 @@ +Subproject commit 8ae6a246bef5b5eb0684e9fb1c933a4f8441dadd