forked from sqlitebrowser/sqlitebrowser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRemoteDatabase.h
More file actions
97 lines (79 loc) · 3.7 KB
/
Copy pathRemoteDatabase.h
File metadata and controls
97 lines (79 loc) · 3.7 KB
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
#ifndef REMOTEDATABASE_H
#define REMOTEDATABASE_H
#include <QObject>
#include <QSslConfiguration>
class QNetworkAccessManager;
class QString;
class QNetworkReply;
class QSslError;
class QProgressDialog;
class QNetworkRequest;
class QHttpMultiPart;
class QFile;
struct sqlite3;
class RemoteDatabase : public QObject
{
Q_OBJECT
public:
RemoteDatabase();
virtual ~RemoteDatabase();
void reloadSettings();
enum CertInfo
{
CertInfoUser,
CertInfoServer,
};
const QList<QSslCertificate>& caCertificates() const;
const QMap<QString, QSslCertificate>& clientCertificates() const { return m_clientCertFiles; }
QString getInfoFromClientCert(const QString& cert, CertInfo info) const;
enum RequestType
{
RequestTypeDatabase,
RequestTypeDirectory,
RequestTypeNewVersionCheck,
RequestTypePush,
RequestTypeLicenceList,
RequestTypeBranchList,
};
void fetch(const QString& url, RequestType type, const QString& clientCert = QString(), QVariant userdata = QVariant());
void push(const QString& filename, const QString& url, const QString& clientCert, const QString& remotename,
const QString& commitMessage = QString(), const QString& licence = QString(), bool isPublic = false,
const QString& branch = QString("master"), bool forcePush = false);
signals:
// The openFile signal is emitted whenever a remote database file shall be opened in the main window. This happens when the
// fetch() call for a database is finished, either by actually downloading the database or opening the local clone.
void openFile(QString path);
// These signals are emitted when the fetch() calls are finished that are not requesting a remote database but other data, like
// a directory listing or the licence list.
void gotDirList(QString json, QVariant userdata);
void gotCurrentVersion(QString version, QString url);
void gotLicenceList(QMap<QString, QString> licences);
void gotBranchList(QStringList branches, QString default_branch);
// The uploadFinished() signal is emitted when a push() call is finished, i.e. a database upload has completed.
void uploadFinished(QString url);
private:
void gotEncrypted(QNetworkReply* reply);
void gotReply(QNetworkReply* reply);
void gotError(QNetworkReply* reply, const QList<QSslError>& errors);
void updateProgress(qint64 bytesTransmitted, qint64 bytesTotal);
bool prepareSsl(QNetworkRequest* request, const QString& clientCert);
void prepareProgressDialog(QNetworkReply* reply, bool upload, const QString& url);
// Helper functions for managing the list of locally available databases
void localAssureOpened();
QString localAdd(QString filename, QString identity, const QUrl& url, const QString& new_commit_id);
QString localExists(const QUrl& url, QString identity);
QString localCheckFile(const QString& local_file);
QString localLastCommitId(QString clientCert, const QUrl& url);
// Helper functions for building multi-part HTTP requests
void addPart(QHttpMultiPart* multipart, const QString& name, const QString& value);
void addPart(QHttpMultiPart* multipart, const QString& name, QFile* file, const QString& filename);
// Before using a new client certificate we need to clear the access and authentication cache of the network manager
// object. Otherwise Qt might reuse the old certificate if the requested URL has been used before.
void clearAccessCache(const QString& clientCert);
QNetworkAccessManager* m_manager;
QProgressDialog* m_progress;
QSslConfiguration m_sslConfiguration;
QMap<QString, QSslCertificate> m_clientCertFiles;
sqlite3* m_dbLocal;
};
#endif