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

BrowserService.h « browser « src - github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 81d3ed317a5418f49a74848f31a1aa714dbd943c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/*
 *  Copyright (C) 2013 Francois Ferrand
 *  Copyright (C) 2017 Sami Vänttinen <sami.vanttinen@protonmail.com>
 *  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/>.
 */

#ifndef BROWSERSERVICE_H
#define BROWSERSERVICE_H

#include "core/Entry.h"
#include "gui/DatabaseTabWidget.h"
#include <QObject>
#include <QtCore>

typedef QPair<QString, QString> StringPair;
typedef QList<StringPair> StringPairList;

enum
{
    max_length = 16 * 1024
};

class BrowserService : public QObject
{
    Q_OBJECT

public:
    enum ReturnValue
    {
        Success,
        Error,
        Canceled
    };

    explicit BrowserService(DatabaseTabWidget* parent);

    bool isDatabaseOpened() const;
    bool openDatabase(bool triggerUnlock);
    QString getDatabaseRootUuid();
    QString getDatabaseRecycleBinUuid();
    QJsonObject getDatabaseGroups(const QSharedPointer<Database>& selectedDb = {});
    QJsonObject createNewGroup(const QString& groupName);
    QString getKey(const QString& id);
    void addEntry(const QString& id,
                  const QString& login,
                  const QString& password,
                  const QString& url,
                  const QString& submitUrl,
                  const QString& realm,
                  const QString& group,
                  const QString& groupUuid,
                  const QSharedPointer<Database>& selectedDb = {});
    QList<Entry*> searchEntries(const QSharedPointer<Database>& db, const QString& hostname, const QString& url);
    QList<Entry*> searchEntries(const QString& url, const StringPairList& keyList);
    void convertAttributesToCustomData(const QSharedPointer<Database>& currentDb = {});

public:
    static const QString KEEPASSXCBROWSER_NAME;
    static const QString KEEPASSXCBROWSER_OLD_NAME;
    static const QString ASSOCIATE_KEY_PREFIX;
    static const QString LEGACY_ASSOCIATE_KEY_PREFIX;
    static const QString OPTION_SKIP_AUTO_SUBMIT;
    static const QString OPTION_HIDE_ENTRY;
    static const QString ADDITIONAL_URL;

public slots:
    QJsonArray findMatchingEntries(const QString& id,
                                   const QString& url,
                                   const QString& submitUrl,
                                   const QString& realm,
                                   const StringPairList& keyList,
                                   const bool httpAuth = false);
    QString storeKey(const QString& key);
    ReturnValue updateEntry(const QString& id,
                            const QString& uuid,
                            const QString& login,
                            const QString& password,
                            const QString& url,
                            const QString& submitUrl);
    void databaseLocked(DatabaseWidget* dbWidget);
    void databaseUnlocked(DatabaseWidget* dbWidget);
    void activateDatabaseChanged(DatabaseWidget* dbWidget);
    void lockDatabase();

signals:
    void databaseLocked();
    void databaseUnlocked();
    void databaseChanged();

private:
    enum Access
    {
        Denied,
        Unknown,
        Allowed
    };

    enum WindowState
    {
        Normal,
        Minimized,
        Hidden
    };

private:
    QList<Entry*> sortEntries(QList<Entry*>& pwEntries, const QString& host, const QString& submitUrl);
    bool confirmEntries(QList<Entry*>& pwEntriesToConfirm,
                        const QString& url,
                        const QString& host,
                        const QString& submitUrl,
                        const QString& realm,
                        const bool httpAuth);
    QJsonObject prepareEntry(const Entry* entry);
    Access checkAccess(const Entry* entry, const QString& host, const QString& submitHost, const QString& realm);
    Group* getDefaultEntryGroup(const QSharedPointer<Database>& selectedDb = {});
    int
    sortPriority(const Entry* entry, const QString& host, const QString& submitUrl, const QString& baseSubmitUrl) const;
    bool matchUrlScheme(const QString& url);
    bool removeFirstDomain(QString& hostname);
    bool handleURL(const QString& entryUrl, const QString& hostname, const QString& url);
    QString baseDomain(const QString& url) const;
    QSharedPointer<Database> getDatabase();
    QSharedPointer<Database> selectedDatabase();
    QJsonArray getChildrenFromGroup(Group* group);
    bool moveSettingsToCustomData(Entry* entry, const QString& name) const;
    int moveKeysToCustomData(Entry* entry, const QSharedPointer<Database>& db) const;
    bool checkLegacySettings();
    void hideWindow() const;
    void raiseWindow(const bool force = false);

private:
    DatabaseTabWidget* const m_dbTabWidget;
    bool m_dialogActive;
    bool m_bringToFrontRequested;
    WindowState m_prevWindowState;
    QUuid m_keepassBrowserUUID;

    friend class TestBrowser;
};

#endif // BROWSERSERVICE_H