From 9e937c1d987d407d974c9a2840a9b0581e43dcd0 Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 24 Nov 2017 15:48:43 +0100 Subject: Support unlocking the keyring from the commandline --- applications/kube/CMakeLists.txt | 1 + applications/kube/main.cpp | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'applications') diff --git a/applications/kube/CMakeLists.txt b/applications/kube/CMakeLists.txt index 2d4c9da7..c206f22a 100644 --- a/applications/kube/CMakeLists.txt +++ b/applications/kube/CMakeLists.txt @@ -22,6 +22,7 @@ target_link_libraries(${PROJECT_NAME} Qt5::WebEngine KF5::Package ${CMAKE_DL_LIBS} + kubeframework ) install(TARGETS ${PROJECT_NAME} DESTINATION ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/applications/kube/main.cpp b/applications/kube/main.cpp index a6b51c38..88e44eac 100644 --- a/applications/kube/main.cpp +++ b/applications/kube/main.cpp @@ -32,6 +32,8 @@ #include #include +#include +#include #include #include @@ -40,6 +42,7 @@ #include #include +#include "framework/src/keyring.h" //Print a demangled stacktrace void printStacktrace() @@ -169,14 +172,39 @@ public: int main(int argc, char *argv[]) { - std::signal(SIGSEGV, crashHandler); std::signal(SIGABRT, crashHandler); std::set_terminate(terminateHandler); QApplication app(argc, argv); + app.setApplicationName("kube"); app.setFont(QFont{"Noto Sans", app.font().pointSize(), QFont::Normal}); + QCommandLineParser parser; + parser.setApplicationDescription("A communication and collaboration client."); + parser.addHelpOption(); + parser.addOption({{"k", "keyring"}, + QCoreApplication::translate("main", "To automatically unlock the keyring pass in a keyring in the form of {\"accountId\": {\"resourceId\": \"secret\", *}}"), + "keyring dictionary"} + ); + parser.process(app); + + if (parser.isSet("keyring")) { + auto keyringDict = parser.value("keyring"); + auto json = QJsonDocument::fromJson(keyringDict.toUtf8()); + if (!json.isObject()) { + qWarning() << "Not a valid keyring dict " << keyringDict; + return -1; + } + auto object = json.object(); + for (const auto accountId : object.keys()) { + auto dict = object.value(accountId).toObject(); + for (const auto resourceId : dict.keys()) { + Kube::AccountKeyring{accountId.toUtf8()}.storePassword(resourceId.toUtf8(), dict.value(resourceId).toString().toUtf8()); + } + } + } + QtWebEngine::initialize(); QIcon::setThemeName("kube"); -- cgit v1.2.3