Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/sshagent/KeeAgentSettings.cpp')
-rw-r--r--src/sshagent/KeeAgentSettings.cpp278
1 files changed, 278 insertions, 0 deletions
diff --git a/src/sshagent/KeeAgentSettings.cpp b/src/sshagent/KeeAgentSettings.cpp
new file mode 100644
index 000000000..218e98acb
--- /dev/null
+++ b/src/sshagent/KeeAgentSettings.cpp
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2017 Toni Spets <toni.spets@iki.fi>
+ * Copyright (C) 2017 KeePassXC Team <team@keepassxc.org>
+ *
+ * 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 2 or (at your option)
+ * version 3 of the License.
+ *
+ * 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 "KeeAgentSettings.h"
+
+KeeAgentSettings::KeeAgentSettings()
+ : m_allowUseOfSshKey(false)
+ , m_addAtDatabaseOpen(false)
+ , m_removeAtDatabaseClose(false)
+ , m_useConfirmConstraintWhenAdding(false)
+ , m_useLifetimeConstraintWhenAdding(false)
+ , m_lifetimeConstraintDuration(600)
+ , m_selectedType(QString("file"))
+ , m_attachmentName(QString())
+ , m_saveAttachmentToTempFile(false)
+ , m_fileName(QString())
+{
+
+}
+
+bool KeeAgentSettings::operator==(KeeAgentSettings& other)
+{
+ return (m_allowUseOfSshKey == other.m_allowUseOfSshKey
+ && m_addAtDatabaseOpen == other.m_addAtDatabaseOpen
+ && m_removeAtDatabaseClose == other.m_removeAtDatabaseClose
+ && m_useConfirmConstraintWhenAdding == other.m_useConfirmConstraintWhenAdding
+ && m_useLifetimeConstraintWhenAdding == other.m_useLifetimeConstraintWhenAdding
+ && m_lifetimeConstraintDuration == other.m_lifetimeConstraintDuration
+ && m_selectedType == other.m_selectedType
+ && m_attachmentName == other.m_attachmentName
+ && m_saveAttachmentToTempFile == other.m_saveAttachmentToTempFile
+ && m_fileName == other.m_fileName);
+}
+
+bool KeeAgentSettings::operator!=(KeeAgentSettings& other)
+{
+ return !(*this == other);
+}
+
+bool KeeAgentSettings::isDefault()
+{
+ KeeAgentSettings defaultSettings;
+ return (*this == defaultSettings);
+}
+
+bool KeeAgentSettings::allowUseOfSshKey() const
+{
+ return m_allowUseOfSshKey;
+}
+
+bool KeeAgentSettings::addAtDatabaseOpen() const
+{
+ return m_addAtDatabaseOpen;
+}
+
+bool KeeAgentSettings::removeAtDatabaseClose() const
+{
+ return m_removeAtDatabaseClose;
+}
+
+bool KeeAgentSettings::useConfirmConstraintWhenAdding() const
+{
+ return m_useConfirmConstraintWhenAdding;
+}
+
+bool KeeAgentSettings::useLifetimeConstraintWhenAdding() const
+{
+ return m_useLifetimeConstraintWhenAdding;
+}
+
+int KeeAgentSettings::lifetimeConstraintDuration() const
+{
+ return m_lifetimeConstraintDuration;
+}
+
+const QString KeeAgentSettings::selectedType() const
+{
+ return m_selectedType;
+}
+
+const QString KeeAgentSettings::attachmentName() const
+{
+ return m_attachmentName;
+}
+
+bool KeeAgentSettings::saveAttachmentToTempFile() const
+{
+ return m_saveAttachmentToTempFile;
+}
+
+const QString KeeAgentSettings::fileName() const
+{
+ return m_fileName;
+}
+
+void KeeAgentSettings::setAllowUseOfSshKey(bool allowUseOfSshKey)
+{
+ m_allowUseOfSshKey = allowUseOfSshKey;
+}
+
+void KeeAgentSettings::setAddAtDatabaseOpen(bool addAtDatabaseOpen)
+{
+ m_addAtDatabaseOpen = addAtDatabaseOpen;
+}
+
+void KeeAgentSettings::setRemoveAtDatabaseClose(bool removeAtDatabaseClose)
+{
+ m_removeAtDatabaseClose = removeAtDatabaseClose;
+}
+
+void KeeAgentSettings::setUseConfirmConstraintWhenAdding(bool useConfirmConstraintWhenAdding)
+{
+ m_useConfirmConstraintWhenAdding = useConfirmConstraintWhenAdding;
+}
+
+void KeeAgentSettings::setUseLifetimeConstraintWhenAdding(bool useLifetimeConstraintWhenAdding)
+{
+ m_useLifetimeConstraintWhenAdding = useLifetimeConstraintWhenAdding;
+}
+
+void KeeAgentSettings::setLifetimeConstraintDuration(int lifetimeConstraintDuration)
+{
+ m_lifetimeConstraintDuration = lifetimeConstraintDuration;
+}
+
+void KeeAgentSettings::setSelectedType(const QString& selectedType)
+{
+ m_selectedType = selectedType;
+}
+
+void KeeAgentSettings::setAttachmentName(const QString& attachmentName)
+{
+ m_attachmentName = attachmentName;
+}
+
+void KeeAgentSettings::setSaveAttachmentToTempFile(bool saveAttachmentToTempFile)
+{
+ m_saveAttachmentToTempFile = saveAttachmentToTempFile;
+}
+
+void KeeAgentSettings::setFileName(const QString& fileName)
+{
+ m_fileName = fileName;
+}
+
+bool KeeAgentSettings::readBool(QXmlStreamReader& reader)
+{
+ reader.readNext();
+ bool ret = (reader.text().startsWith("t", Qt::CaseInsensitive));
+ reader.readNext(); // tag end
+ return ret;
+}
+
+int KeeAgentSettings::readInt(QXmlStreamReader& reader)
+{
+ reader.readNext();
+ int ret = reader.text().toInt();
+ reader.readNext(); // tag end
+ return ret;
+}
+
+bool KeeAgentSettings::fromXml(const QByteArray& ba)
+{
+ QXmlStreamReader reader;
+ reader.addData(ba);
+
+ if (reader.error() || !reader.readNextStartElement()) {
+ return false;
+ }
+
+ if (reader.qualifiedName() != "EntrySettings") {
+ return false;
+ }
+
+ while (!reader.error() && reader.readNextStartElement()) {
+ if (reader.name() == "AllowUseOfSshKey") {
+ m_allowUseOfSshKey = readBool(reader);
+ } else if (reader.name() == "AddAtDatabaseOpen") {
+ m_addAtDatabaseOpen = readBool(reader);
+ } else if (reader.name() == "RemoveAtDatabaseClose") {
+ m_removeAtDatabaseClose = readBool(reader);
+ } else if (reader.name() == "UseConfirmConstraintWhenAdding") {
+ m_useConfirmConstraintWhenAdding = readBool(reader);
+ } else if (reader.name() == "UseLifetimeConstraintWhenAdding") {
+ m_useLifetimeConstraintWhenAdding = readBool(reader);
+ } else if (reader.name() == "LifetimeConstraintDuration") {
+ m_lifetimeConstraintDuration = readInt(reader);
+ } else if (reader.name() == "Location") {
+ while (!reader.error() && reader.readNextStartElement()) {
+ if (reader.name() == "SelectedType") {
+ reader.readNext();
+ m_selectedType = reader.text().toString();
+ reader.readNext();
+ } else if (reader.name() == "AttachmentName") {
+ reader.readNext();
+ m_attachmentName = reader.text().toString();
+ reader.readNext();
+ } else if (reader.name() == "SaveAttachmentToTempFile") {
+ m_saveAttachmentToTempFile = readBool(reader);
+ } else if (reader.name() == "FileName") {
+ reader.readNext();
+ m_fileName = reader.text().toString();
+ reader.readNext();
+ } else {
+ qWarning() << "Skipping location element" << reader.name();
+ reader.skipCurrentElement();
+ }
+ }
+ } else {
+ qWarning() << "Skipping element" << reader.name();
+ reader.skipCurrentElement();
+ }
+ }
+
+ return true;
+}
+
+QByteArray KeeAgentSettings::toXml()
+{
+ QByteArray ba;
+ QXmlStreamWriter writer(&ba);
+
+ // real KeeAgent can only read UTF-16
+ writer.setCodec(QTextCodec::codecForName("UTF-16"));
+ writer.setAutoFormatting(true);
+ writer.setAutoFormattingIndent(2);
+
+ writer.writeStartDocument();
+
+ writer.writeStartElement("EntrySettings");
+ writer.writeAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
+ writer.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
+
+ writer.writeTextElement("AllowUseOfSshKey", m_allowUseOfSshKey ? "true" : "false");
+ writer.writeTextElement("AddAtDatabaseOpen", m_addAtDatabaseOpen ? "true" : "false");
+ writer.writeTextElement("RemoveAtDatabaseClose", m_removeAtDatabaseClose ? "true" : "false");
+ writer.writeTextElement("UseConfirmConstraintWhenAdding", m_useConfirmConstraintWhenAdding ? "true" : "false");
+ writer.writeTextElement("UseLifetimeConstraintWhenAdding", m_useLifetimeConstraintWhenAdding ? "true" : "false");
+ writer.writeTextElement("LifetimeConstraintDuration", QString::number(m_lifetimeConstraintDuration));
+
+ writer.writeStartElement("Location");
+ writer.writeTextElement("SelectedType", m_selectedType);
+
+ if (!m_attachmentName.isEmpty()) {
+ writer.writeTextElement("AttachmentName", m_attachmentName);
+ } else {
+ writer.writeEmptyElement("AttachmentName");
+ }
+
+ writer.writeTextElement("SaveAttachmentToTempFile", m_saveAttachmentToTempFile ? "true" : "false");
+
+ if (!m_fileName.isEmpty()) {
+ writer.writeTextElement("FileName", m_fileName);
+ } else {
+ writer.writeEmptyElement("FileName");
+ }
+
+ writer.writeEndElement(); // Location
+ writer.writeEndElement(); // EntrySettings
+ writer.writeEndDocument();
+
+ return ba;
+}