1 /*
2    SPDX-FileCopyrightText: 2016-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #pragma once
8 
9 #include <QNetworkReply>
10 #include <QObject>
11 #include <QSslError>
12 
13 #include "webengineviewer_export.h"
14 namespace WebEngineViewer
15 {
16 struct UpdateDataBaseInfo;
17 class CreatePhishingUrlDataBaseJobPrivate;
18 /* https://developers.google.com/safe-browsing/v4/update-api */
19 /**
20  * @brief The CreatePhishingUrlDataBaseJob class
21  * @author Laurent Montel <montel@kde.org>
22  */
23 class WEBENGINEVIEWER_EXPORT CreatePhishingUrlDataBaseJob : public QObject
24 {
25     Q_OBJECT
26 public:
27     enum DataBaseDownloadType { FullDataBase = 0, UpdateDataBase = 1 };
28 
29     enum DataBaseDownloadResult { InvalidData = 0, ValidData = 1, UnknownError = 2, BrokenNetwork = 3 };
30 
31     enum ContraintsCompressionType { RawCompression = 0, RiceCompression = 1 };
32 
33     explicit CreatePhishingUrlDataBaseJob(QObject *parent = nullptr);
34     ~CreatePhishingUrlDataBaseJob() override;
35 
36     void start();
37 
38     void setDataBaseState(const QString &value);
39 
40     void setDataBaseDownloadNeeded(WebEngineViewer::CreatePhishingUrlDataBaseJob::DataBaseDownloadType type);
41 
42     Q_REQUIRED_RESULT QByteArray jsonRequest() const;
43 
44     void parseResult(const QByteArray &value);
45 
46     void setContraintsCompressionType(CreatePhishingUrlDataBaseJob::ContraintsCompressionType type);
47 
48 Q_SIGNALS:
49     void finished(const WebEngineViewer::UpdateDataBaseInfo &infoDataBase, WebEngineViewer::CreatePhishingUrlDataBaseJob::DataBaseDownloadResult status);
50     void debugJsonResult(const QByteArray &ba);
51     void debugJson(const QByteArray &ba);
52 
53 private:
54     void slotDownloadDataBaseFinished(QNetworkReply *reply);
55     void slotSslErrors(QNetworkReply *reply, const QList<QSslError> &error);
56     void slotError(QNetworkReply::NetworkError error);
57 
58     std::unique_ptr<CreatePhishingUrlDataBaseJobPrivate> const d;
59 };
60 }
61 Q_DECLARE_METATYPE(WebEngineViewer::CreatePhishingUrlDataBaseJob::DataBaseDownloadType)
62 Q_DECLARE_METATYPE(WebEngineViewer::CreatePhishingUrlDataBaseJob::DataBaseDownloadResult)
63 Q_DECLARE_METATYPE(WebEngineViewer::CreatePhishingUrlDataBaseJob::ContraintsCompressionType)
64