Compare commits
26 Commits
5ecc35ddd2
...
7400a9517f
Author | SHA1 | Date | |
---|---|---|---|
|
7400a9517f | ||
|
ef5774110d | ||
4e17efd44c | |||
|
d7881a5def | ||
8acb3b4adf | |||
e173e98702 | |||
|
6beeed2748 | ||
|
aabb974780 | ||
|
9bd85db18e | ||
|
e3803c16c2 | ||
|
55269d531e | ||
|
a39f76961c | ||
|
d8f26001ac | ||
|
d66dc0b25b | ||
|
43ef5e0410 | ||
|
7f2969b55c | ||
|
6fda9ad2e1 | ||
|
ecfc5d5c78 | ||
|
c433bd3449 | ||
|
52db2a7a40 | ||
|
6c13c6947b | ||
|
462aa1b46d | ||
|
c3fdff426b | ||
abda1d75aa | |||
5c9a15ef73 | |||
fb177d0682 |
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -16,6 +16,3 @@
|
|||||||
[submodule "libs/libgit2"]
|
[submodule "libs/libgit2"]
|
||||||
path = libs/libgit2
|
path = libs/libgit2
|
||||||
url = https://github.com/libgit2/libgit2
|
url = https://github.com/libgit2/libgit2
|
||||||
[submodule "libs/git/openssl"]
|
|
||||||
path = libs/git/openssl
|
|
||||||
url = https://github.com/openssl/openssl
|
|
||||||
|
@ -55,8 +55,6 @@ install(
|
|||||||
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
|
||||||
DESTINATION ${BIN_DIR}
|
DESTINATION ${BIN_DIR}
|
||||||
)
|
)
|
||||||
install(FILES /usr/lib/${ARCH_TRIPLET}/libssl.so DESTINATION /lib/${ARCH_TRIPLET})
|
|
||||||
install(FILES /usr/lib/${ARCH_TRIPLET}/libcrypto.so DESTINATION /lib/${ARCH_TRIPLET})
|
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
file(GLOB_RECURSE I18N_SRC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/po qml/*.qml qml/*.js)
|
file(GLOB_RECURSE I18N_SRC_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/po qml/*.qml qml/*.js)
|
||||||
|
@ -21,10 +21,7 @@
|
|||||||
"libgit2": {
|
"libgit2": {
|
||||||
"template": "cmake",
|
"template": "cmake",
|
||||||
"make_jobs": 4,
|
"make_jobs": 4,
|
||||||
"build_args": "-DBUILD_SHARED_LIBS=OFF -DCMAKE_C_FLAGS=-fPIC"
|
"build_args": "-DBUILD_SHARED_LIBS=OFF"
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
"dependencies_target": [
|
|
||||||
"libssl-dev"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
cmake_minimum_required(VERSION 3.5.1)
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
|
|
||||||
include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
|
|
||||||
|
|
||||||
execute_process(
|
|
||||||
COMMAND dpkg-architecture -qDEB_HOST_MULTIARCH
|
|
||||||
OUTPUT_VARIABLE ARCH_TRIPLET
|
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
||||||
)
|
|
||||||
|
|
||||||
execute_process (
|
|
||||||
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/clean.sh ${ARCH_TRIPLET}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(THIRD_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
|
|
||||||
set(OPENSSL_PATH "${THIRD_PATH}/libgit2")
|
|
||||||
set(LIBGIT2_PATH "${THIRD_PATH}/openssl/")
|
|
||||||
|
|
||||||
|
|
||||||
ExternalProject_Add(
|
|
||||||
OPENSSL_PATH
|
|
||||||
INSTALL_DIR ${EXTERNAL_LIBS}
|
|
||||||
DOWNLOAD_COMMAND ""
|
|
||||||
SOURCE_DIR ${OPENSSL_PATH}
|
|
||||||
CONFIGURE_COMMAND <SOURCE_DIR>/configure
|
|
||||||
BUILD_COMMAND make
|
|
||||||
INSTALL_COMMAND make install
|
|
||||||
)
|
|
||||||
|
|
||||||
ExternalProject_Add(
|
|
||||||
LIBGIT2_PATH
|
|
||||||
INSTALL_DIR ${EXTERNAL_LIBS}
|
|
||||||
DOWNLOAD_COMMAND ""
|
|
||||||
SOURCE_DIR ${LIBGIT2_PATH}
|
|
||||||
)
|
|
@ -1 +0,0 @@
|
|||||||
Subproject commit 894da2fb7ed5d314ee5c2fc9fd2d9b8b74111596
|
|
@ -10,7 +10,7 @@
|
|||||||
"content-hub": "UTPass.contenthub"
|
"content-hub": "UTPass.contenthub"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"version": "0.0.3-dev",
|
"version": "0.0.2-dev",
|
||||||
"maintainer": "Quentin Rouland <quentin@qrouland.com>",
|
"maintainer": "Quentin Rouland <quentin@qrouland.com>",
|
||||||
"framework" : "ubuntu-sdk-16.04"
|
"framework" : "ubuntu-sdk-16.04"
|
||||||
}
|
}
|
||||||
|
@ -30,9 +30,7 @@ INCLUDE_DIRECTORIES(${EXTERNAL_LIBS}/include)
|
|||||||
add_library(libgit2 STATIC IMPORTED)
|
add_library(libgit2 STATIC IMPORTED)
|
||||||
set_property(TARGET libgit2 PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgit2.a")
|
set_property(TARGET libgit2 PROPERTY IMPORTED_LOCATION "${EXTERNAL_LIBS}/lib/libgit2.a")
|
||||||
|
|
||||||
|
target_link_libraries(${PLUGIN} libgit2)
|
||||||
find_package(OpenSSL REQUIRED)
|
|
||||||
target_link_libraries(${PLUGIN} libgit2 ${OPENSSL_LIBRARIES})
|
|
||||||
|
|
||||||
|
|
||||||
set(QT_IMPORTS_DIR "/lib/${ARCH_TRIPLET}")
|
set(QT_IMPORTS_DIR "/lib/${ARCH_TRIPLET}")
|
||||||
|
@ -1,68 +1,10 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QStandardPaths>
|
|
||||||
#include <QDir>
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
#include <git2.h>
|
#include <git2.h>
|
||||||
}
|
|
||||||
#include "git.h"
|
#include "git.h"
|
||||||
#include "passphraseprovider.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Git::Git() {
|
Git::Git() {};
|
||||||
git_libgit2_init();
|
|
||||||
};
|
|
||||||
|
|
||||||
Git::~Git() {
|
|
||||||
git_libgit2_shutdown();
|
|
||||||
};
|
|
||||||
|
|
||||||
bool Git::clone(QUrl url, QString dir_out_path) {
|
|
||||||
auto ret = false;
|
|
||||||
auto tmp_dir_path = QStandardPaths::writableLocation(
|
|
||||||
QStandardPaths::CacheLocation).append("/clone");
|
|
||||||
|
|
||||||
auto gitCred = new UTGitCredProvider();
|
|
||||||
pt2cred_acquire_cb = gitCred->cred_acquire_cb;
|
|
||||||
|
|
||||||
QDir tmp_dir(tmp_dir_path);
|
|
||||||
tmp_dir.removeRecursively();
|
|
||||||
|
|
||||||
git_repository *cloned_repo = NULL;
|
|
||||||
git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
|
|
||||||
git_checkout_options checkout_opts = GIT_CHECKOUT_OPTIONS_INIT;
|
|
||||||
|
|
||||||
checkout_opts.checkout_strategy = GIT_CHECKOUT_SAFE;
|
|
||||||
clone_opts.checkout_opts = checkout_opts;
|
|
||||||
clone_opts.fetch_opts.callbacks.credentials = gitCred->*pt2cred_acquire_cb;
|
|
||||||
|
|
||||||
qDebug() << "Cloning " << url << " in " << tmp_dir_path;
|
|
||||||
auto error = git_clone(&cloned_repo, url.toString().toLocal8Bit().constData(), tmp_dir_path.toLocal8Bit().constData(), &clone_opts);
|
|
||||||
if (cloned_repo) {
|
|
||||||
git_repository_free(cloned_repo);
|
|
||||||
}
|
|
||||||
if(error) {
|
|
||||||
const git_error *err = giterr_last();
|
|
||||||
if (err) {
|
|
||||||
qDebug() << "ERROR " << err->klass << ": " << err->message;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
qDebug() << "ERROR " << error << ": no detailed info";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
qDebug() << "Removing destination";
|
|
||||||
QDir dir_out(dir_out_path);
|
|
||||||
dir_out.removeRecursively();
|
|
||||||
|
|
||||||
qDebug() << "Moving cloned dir to destination";
|
|
||||||
QDir dir;
|
|
||||||
qDebug() << tmp_dir_path << " to " << dir_out_path;
|
|
||||||
ret = dir.rename(tmp_dir_path, dir_out_path);
|
|
||||||
}
|
|
||||||
tmp_dir.removeRecursively();
|
|
||||||
delete gitCred;
|
|
||||||
return !error and ret;
|
|
||||||
}
|
|
||||||
|
@ -10,9 +10,7 @@ class Git : public QObject
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
Git();
|
Git();
|
||||||
~Git();
|
~Git() override = default;
|
||||||
|
|
||||||
Q_INVOKABLE bool clone(QUrl clone_url, QString dir_out);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
#ifndef UTGITCREDPROVIDER_H
|
|
||||||
#define UTGITCREDPROVIDER_H
|
|
||||||
|
|
||||||
class UTGitCredProvider : public QObject, public PassphraseProvider
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
private:
|
|
||||||
std::unique_ptr<QEventLoop> m_loop;
|
|
||||||
std::unique_ptr<QSemaphore> m_sem;
|
|
||||||
char *m_user;
|
|
||||||
char *m_password;
|
|
||||||
bool m_canceled;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void handleResponse(bool canceled, QString user, QString password)
|
|
||||||
{
|
|
||||||
if (!canceled) {
|
|
||||||
gpgrt_asprintf(&m_user, "%s", user.toUtf8().constData());
|
|
||||||
gpgrt_asprintf(&m_passphrase, "%s", password.toUtf8().constData());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
m_canceled = true;
|
|
||||||
m_loop->quit();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
UTGitCredProvider():
|
|
||||||
m_loop(std::unique_ptr<QEventLoop>(new QEventLoop)),
|
|
||||||
m_sem(std::unique_ptr<QSemaphore>(new QSemaphore(1))),
|
|
||||||
m_user(nullptr),
|
|
||||||
m_password(nullptr),
|
|
||||||
m_canceled(false)
|
|
||||||
{}
|
|
||||||
|
|
||||||
int cred_acquire_cb(git_cred **out,
|
|
||||||
const char *url,
|
|
||||||
const char *username_from_url,
|
|
||||||
unsigned int allowed_types,
|
|
||||||
void *payload) {
|
|
||||||
if (!m_sem->tryAcquire(1, 3000))
|
|
||||||
{
|
|
||||||
qWarning() << "Cannot acquire UTGitCredProvider semaphore.";
|
|
||||||
canceled = true;
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_passphrase = nullptr;
|
|
||||||
m_canceled = false;
|
|
||||||
|
|
||||||
|
|
||||||
qDebug() << "Call the QML Dialog Cred Provider";
|
|
||||||
QMetaObject::invokeMethod(
|
|
||||||
Gpg::instance()->getWindow(), "callCredDialog",
|
|
||||||
Q_ARG(QVariant, username_from_url)
|
|
||||||
);
|
|
||||||
|
|
||||||
qDebug() << "Waiting for response";
|
|
||||||
|
|
||||||
QObject::connect(
|
|
||||||
Gpg::instance()->getWindow(), SIGNAL(responseCredDialog(bool, QString, QString)),
|
|
||||||
this, SLOT(handleResponse(bool, QString, QString))
|
|
||||||
);
|
|
||||||
m_loop->exec();
|
|
||||||
|
|
||||||
qDebug() << "Set Cred";
|
|
||||||
error = git_cred_userpass_plaintext_new(out, username, password);
|
|
||||||
|
|
||||||
qDebug() << "Clean";
|
|
||||||
if (m_passphrase) free(m_passphrase);
|
|
||||||
if (m_user) free(m_user);
|
|
||||||
m_canceled = false;
|
|
||||||
m_sem->release(1);
|
|
||||||
return ret;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
#endif
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: utpass.qrouland\n"
|
"Project-Id-Version: utpass.qrouland\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2019-09-25 17:36+0000\n"
|
"POT-Creation-Date: 2019-09-21 14:01+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -103,67 +103,63 @@ msgid ""
|
|||||||
"No password found<br>You can import a password store zip in the settings"
|
"No password found<br>You can import a password store zip in the settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/ImportKeyFile.qml:17
|
#: ../qml/pages/settings/ImportKeyFile.qml:17
|
||||||
msgid "GPG Key Import"
|
msgid "GPG Key Import"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/ImportKeyFile.qml:69
|
#: ../qml/pages/settings/ImportKeyFile.qml:69
|
||||||
msgid "Key import failed !"
|
msgid "Key import failed !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/ImportKeyFile.qml:76
|
#: ../qml/pages/settings/ImportKeyFile.qml:76
|
||||||
msgid "Key successfully imported !"
|
msgid "Key successfully imported !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/InfoKeys.qml:16
|
#: ../qml/pages/settings/ImportZip.qml:17
|
||||||
msgid "Info Keys"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/InfoKeys.qml:44
|
|
||||||
msgid "Key id : %1"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/InfoKeys.qml:49
|
|
||||||
msgid "Delete this key"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/InfoKeys.qml:68
|
|
||||||
msgid "You're are about to delete<br>%1<br>Continue ?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/InfoKeys.qml:71
|
|
||||||
msgid "%1<br>will be definitively removed.<br>Continue ?"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/InfoKeys.qml:87
|
|
||||||
msgid "Key removal failed !"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/gpg/InfoKeys.qml:94
|
|
||||||
msgid "Key successfully deleted !"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/passwordstore/ImportGit.qml:13
|
|
||||||
msgid "Git clone"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/passwordstore/ImportZip.qml:17
|
|
||||||
msgid "Zip Password Store Import"
|
msgid "Zip Password Store Import"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/passwordstore/ImportZip.qml:72
|
#: ../qml/pages/settings/ImportZip.qml:72
|
||||||
msgid ""
|
msgid ""
|
||||||
"Importing a new zip will delete<br>any existing password store!<br>Continue ?"
|
"Importing a new zip will delete<br>any existing password store!<br>Continue ?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/passwordstore/ImportZip.qml:82
|
#: ../qml/pages/settings/ImportZip.qml:82
|
||||||
msgid "Password store import failed !"
|
msgid "Password store import failed !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/passwordstore/ImportZip.qml:89
|
#: ../qml/pages/settings/ImportZip.qml:89
|
||||||
msgid "Password store sucessfully imported !"
|
msgid "Password store sucessfully imported !"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../qml/pages/settings/InfoKeys.qml:16
|
||||||
|
msgid "Info Keys"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../qml/pages/settings/InfoKeys.qml:44
|
||||||
|
msgid "Key id : %1"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../qml/pages/settings/InfoKeys.qml:49
|
||||||
|
msgid "Delete this key"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../qml/pages/settings/InfoKeys.qml:68
|
||||||
|
msgid "You're are about to delete<br>%1<br>Continue ?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../qml/pages/settings/InfoKeys.qml:71
|
||||||
|
msgid "%1<br>will be definitively removed.<br>Continue ?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../qml/pages/settings/InfoKeys.qml:87
|
||||||
|
msgid "Key removal failed !"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: ../qml/pages/settings/InfoKeys.qml:94
|
||||||
|
msgid "Key successfully deleted !"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/Settings.qml:28
|
#: ../qml/pages/settings/Settings.qml:28
|
||||||
msgid "GPG"
|
msgid "GPG"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -184,14 +180,6 @@ msgstr ""
|
|||||||
msgid "Import a Password Store Zip"
|
msgid "Import a Password Store Zip"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/Settings.qml:51
|
#: ../qml/pages/settings/Settings.qml:56
|
||||||
msgid "Import a Password Store Git"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: ../qml/pages/settings/Settings.qml:60
|
|
||||||
msgid "Warning: importing delete any exiting Password Store"
|
msgid "Warning: importing delete any exiting Password Store"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: ../qml/pages/settings/Settings.qml:67
|
|
||||||
msgid "Git"
|
|
||||||
msgstr ""
|
|
||||||
|
18
qml/Main.qml
18
qml/Main.qml
@ -38,24 +38,6 @@ MainView {
|
|||||||
passphraseDialog.validated.connect(validated)
|
passphraseDialog.validated.connect(validated)
|
||||||
passphraseDialog.canceled.connect(canceled)
|
passphraseDialog.canceled.connect(canceled)
|
||||||
}
|
}
|
||||||
|
|
||||||
function callCredDialog() {
|
|
||||||
//TODO add parameters to impove passphrase dialog
|
|
||||||
var credDialog = PopupUtils.open(
|
|
||||||
Qt.resolvedUrl("dialogs/CredDialog.qml"))
|
|
||||||
credDialog.activateFocus()
|
|
||||||
|
|
||||||
var validated = function (user, password) {
|
|
||||||
responseCredDialog(false, user, password)
|
|
||||||
}
|
|
||||||
|
|
||||||
var canceled = function () {
|
|
||||||
responseCredDialog(true, "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
credDialog.validated.connect(validated)
|
|
||||||
credDialog.canceled.connect(canceled)
|
|
||||||
}
|
|
||||||
|
|
||||||
PageStack {
|
PageStack {
|
||||||
id: pageStack
|
id: pageStack
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
import QtQuick 2.4
|
|
||||||
import Ubuntu.Components 1.3
|
|
||||||
import Ubuntu.Components.Popups 1.3
|
|
||||||
|
|
||||||
Dialog {
|
|
||||||
id: credProvider
|
|
||||||
title: i18n.tr("Authentication required")
|
|
||||||
text_user: i18n.tr("Enter user :")
|
|
||||||
text_password: i18n.tr("Enter password :")
|
|
||||||
|
|
||||||
signal validated(string user, string password)
|
|
||||||
signal canceled
|
|
||||||
|
|
||||||
function activateFocus() {
|
|
||||||
user.forceActiveFocus()
|
|
||||||
}
|
|
||||||
|
|
||||||
TextField {
|
|
||||||
id: userField
|
|
||||||
|
|
||||||
placeholderText: i18n.tr("user")
|
|
||||||
echoMode: TextInput.Password
|
|
||||||
|
|
||||||
onAccepted: passwordField.forceActiveFocus()
|
|
||||||
}
|
|
||||||
|
|
||||||
TextField {
|
|
||||||
id: passwordField
|
|
||||||
|
|
||||||
placeholderText: i18n.tr("password")
|
|
||||||
echoMode: TextInput.Password
|
|
||||||
|
|
||||||
onAccepted: okButton.clicked(text)
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: okButton
|
|
||||||
|
|
||||||
text: i18n.tr("Ok")
|
|
||||||
color: UbuntuColors.green
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
validated(userField.text, passwordField.text)
|
|
||||||
userField.text = ""
|
|
||||||
passwordField.text = ""
|
|
||||||
PopupUtils.close(credProvider)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
id: cancelButton
|
|
||||||
text: i18n.tr("Cancel")
|
|
||||||
|
|
||||||
color: UbuntuColors.red
|
|
||||||
|
|
||||||
onClicked: {
|
|
||||||
userField.text = ""
|
|
||||||
passwordField.text = ""
|
|
||||||
canceled()
|
|
||||||
PopupUtils.close(credProvider)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -43,7 +43,6 @@ Dialog {
|
|||||||
color: UbuntuColors.red
|
color: UbuntuColors.red
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
passphraseField.text = ""
|
|
||||||
canceled()
|
canceled()
|
||||||
PopupUtils.close(passphraseProvider)
|
PopupUtils.close(passphraseProvider)
|
||||||
}
|
}
|
||||||
|
@ -4,8 +4,8 @@ import Ubuntu.Content 1.3
|
|||||||
import Ubuntu.Components.Popups 1.3
|
import Ubuntu.Components.Popups 1.3
|
||||||
import Pass 1.0
|
import Pass 1.0
|
||||||
import Utils 1.0
|
import Utils 1.0
|
||||||
import "../../headers"
|
import "../headers"
|
||||||
import "../../../dialogs"
|
import "../../dialogs"
|
||||||
|
|
||||||
Page {
|
Page {
|
||||||
id: importKeyFilePage
|
id: importKeyFilePage
|
@ -4,8 +4,8 @@ import Ubuntu.Content 1.3
|
|||||||
import Ubuntu.Components.Popups 1.3
|
import Ubuntu.Components.Popups 1.3
|
||||||
import Pass 1.0
|
import Pass 1.0
|
||||||
import Utils 1.0
|
import Utils 1.0
|
||||||
import "../../headers"
|
import "../headers"
|
||||||
import "../../../dialogs"
|
import "../../dialogs"
|
||||||
|
|
||||||
Page {
|
Page {
|
||||||
id: importZipPage
|
id: importZipPage
|
@ -2,9 +2,9 @@ import QtQuick 2.4
|
|||||||
import Ubuntu.Components 1.3
|
import Ubuntu.Components 1.3
|
||||||
import Ubuntu.Components.Popups 1.3
|
import Ubuntu.Components.Popups 1.3
|
||||||
import Pass 1.0
|
import Pass 1.0
|
||||||
import "../../headers"
|
import "../headers"
|
||||||
import "../../../components"
|
import "../../components"
|
||||||
import "../../../dialogs"
|
import "../../dialogs"
|
||||||
|
|
||||||
Page {
|
Page {
|
||||||
id: infoKeysPage
|
id: infoKeysPage
|
@ -28,11 +28,11 @@ Page {
|
|||||||
text: i18n.tr('GPG')
|
text: i18n.tr('GPG')
|
||||||
}
|
}
|
||||||
PageStackLink {
|
PageStackLink {
|
||||||
page: Qt.resolvedUrl("gpg/ImportKeyFile.qml")
|
page: Qt.resolvedUrl("ImportKeyFile.qml")
|
||||||
text: i18n.tr('Import a GPG key file')
|
text: i18n.tr('Import a GPG key file')
|
||||||
}
|
}
|
||||||
PageStackLink {
|
PageStackLink {
|
||||||
page: Qt.resolvedUrl("gpg/InfoKeys.qml")
|
page: Qt.resolvedUrl("InfoKeys.qml")
|
||||||
text: i18n.tr('Show GPG keys')
|
text: i18n.tr('Show GPG keys')
|
||||||
}
|
}
|
||||||
Text {
|
Text {
|
||||||
@ -43,13 +43,9 @@ Page {
|
|||||||
text: i18n.tr('Password Store')
|
text: i18n.tr('Password Store')
|
||||||
}
|
}
|
||||||
PageStackLink {
|
PageStackLink {
|
||||||
page: Qt.resolvedUrl("passwordstore/ImportZip.qml")
|
page: Qt.resolvedUrl("ImportZip.qml")
|
||||||
text: i18n.tr('Import a Password Store Zip')
|
text: i18n.tr('Import a Password Store Zip')
|
||||||
}
|
}
|
||||||
PageStackLink {
|
|
||||||
page: Qt.resolvedUrl("passwordstore/ImportGit.qml")
|
|
||||||
text: i18n.tr('Import a Password Store Git')
|
|
||||||
}
|
|
||||||
Text {
|
Text {
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
@ -59,12 +55,5 @@ Page {
|
|||||||
text: i18n.tr(
|
text: i18n.tr(
|
||||||
'Warning: importing delete any exiting Password Store')
|
'Warning: importing delete any exiting Password Store')
|
||||||
}
|
}
|
||||||
Text {
|
|
||||||
horizontalAlignment: Text.AlignHCenter
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
|
||||||
width: parent.width
|
|
||||||
height: units.gu(4)
|
|
||||||
text: i18n.tr('Git')
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
import QtQuick 2.4
|
|
||||||
import Ubuntu.Components 1.3
|
|
||||||
import Git 1.0
|
|
||||||
import Pass 1.0
|
|
||||||
import "../../headers"
|
|
||||||
import "../../../styles"
|
|
||||||
|
|
||||||
Page {
|
|
||||||
id: importGit
|
|
||||||
|
|
||||||
header: StackHeader {
|
|
||||||
id: importGitHeader
|
|
||||||
title: i18n.tr('Git clone')
|
|
||||||
}
|
|
||||||
|
|
||||||
Row {
|
|
||||||
anchors.top: importGitHeader.bottom
|
|
||||||
anchors.topMargin: units.gu(1)
|
|
||||||
anchors.right: parent.right
|
|
||||||
anchors.left: parent.left
|
|
||||||
anchors.bottom: parent.bottom
|
|
||||||
height: units.gu(4)
|
|
||||||
|
|
||||||
Rectangle {
|
|
||||||
height: units.gu(4)
|
|
||||||
width: units.gu(2)
|
|
||||||
}
|
|
||||||
TextField {
|
|
||||||
id: gitUrlTextField
|
|
||||||
placeholderText: "https://..."
|
|
||||||
height: units.gu(4)
|
|
||||||
width: parent.width - units.gu(8)
|
|
||||||
}
|
|
||||||
|
|
||||||
Icon {
|
|
||||||
id: ico
|
|
||||||
name: "document-save"
|
|
||||||
color: UbuntuColors.orange
|
|
||||||
height: units.gu(4)
|
|
||||||
width: units.gu(4)
|
|
||||||
|
|
||||||
MouseArea {
|
|
||||||
anchors.fill: parent
|
|
||||||
onPressed: {
|
|
||||||
parent.color = UbuntuColors.warmGrey
|
|
||||||
}
|
|
||||||
onClicked: {
|
|
||||||
Git.clone(gitUrlTextField.text, Pass.getPasswordStore())
|
|
||||||
}
|
|
||||||
onReleased: {
|
|
||||||
parent.color = theme.palette.normal.background
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Component.onCompleted : {
|
|
||||||
gitUrlTextField.forceActiveFocus()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Reference in New Issue
Block a user