[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [messagelib] webengineviewer/src/checkphishingurl: Now it works
From: Montel Laurent <montel () kde ! org>
Date: 2016-12-10 7:23:31
Message-ID: E1cFc0J-0002no-GP () code ! kde ! org
[Download RAW message or body]
Git commit d06c82c55886865ab72d7b948388f4b36e13778b by Montel Laurent.
Committed on 10/12/2016 at 07:14.
Pushed by mlaurent into branch 'master'.
Now it works
M +11 -8 webengineviewer/src/checkphishingurl/autotests/searchfullhashjobtest.cpp
M +1 -1 webengineviewer/src/checkphishingurl/localdatabasefile.cpp
M +17 -4 webengineviewer/src/checkphishingurl/localdatabasemanager.cpp
M +12 -4 webengineviewer/src/checkphishingurl/searchfullhashjob.cpp
M +1 -1 webengineviewer/src/checkphishingurl/searchfullhashjob.h
M +6 -1 webengineviewer/src/checkphishingurl/tests/searchfullhashgui.cpp
M +6 -6 webengineviewer/src/checkphishingurl/urlhashing.cpp
M +2 -1 webengineviewer/src/checkphishingurl/urlhashing.h
https://commits.kde.org/messagelib/d06c82c55886865ab72d7b948388f4b36e13778b
diff --git a/webengineviewer/src/checkphishingurl/autotests/searchfullhashjobtest.cpp \
b/webengineviewer/src/checkphishingurl/autotests/searchfullhashjobtest.cpp index \
e9f1570e..aa72d829 100644
--- a/webengineviewer/src/checkphishingurl/autotests/searchfullhashjobtest.cpp
+++ b/webengineviewer/src/checkphishingurl/autotests/searchfullhashjobtest.cpp
@@ -41,25 +41,28 @@ void SearchFullHashJobTest::shouldNotBeAbleToStartWithEmptyUrl()
void SearchFullHashJobTest::shouldCreateRequest_data()
{
- QTest::addColumn<QByteArray>("hash");
+ QTest::addColumn<QHash<QByteArray,QByteArray> >("hash");
QTest::addColumn<QStringList>("databaseHash");
QTest::addColumn<QString>("request");
QTest::addColumn<QUrl>("url");
QTest::addColumn<bool>("canStart");
- QTest::newRow("no hash") << QByteArray() << QStringList() << QString() << QUrl() \
<< false;
- QTest::newRow("database hash but not hash and not url") << QByteArray() << \
QStringList{QStringLiteral("boo")} << QString() << QUrl() << false;
- QTest::newRow("database hash but hash and not url") << QByteArrayLiteral("bla") \
<< QStringList{QStringLiteral("boo")} << QString() << QUrl() << \
false;
- QTest::newRow("database hash and hash") << QByteArrayLiteral("bla") << \
QStringList{QStringLiteral("boo")} + QTest::newRow("no hash") << \
QHash<QByteArray,QByteArray>() << QStringList() << QString() << QUrl() << false; + \
QTest::newRow("database hash but not hash and not url") << \
QHash<QByteArray,QByteArray>() << QStringList{QStringLiteral("boo")} << QString() << \
QUrl() << false; + QHash<QByteArray,QByteArray> hashs;
+ hashs.insert(QByteArrayLiteral("bla"), QByteArrayLiteral("bla"));
+ QTest::newRow("database hash but hash and not url") << hashs << \
QStringList{QStringLiteral("boo")} << QString() << QUrl() << false; + \
QTest::newRow("database hash and hash") << hashs << \
QStringList{QStringLiteral("boo")} << \
QStringLiteral("{\"client\":{\"clientId\":\"KDE\",\"clientVersion\":\"%1\"},\"clientSt \
ates\":[\"boo\"],\"threatInfo\":{\"platformTypes\":[\"WINDOWS\"],\"threatEntries\":[{\ \
"hash\":\"bla\"}],\"threatEntryTypes\":[\"URL\"],\"threatTypes\":[\"MALWARE\"]}}").arg(WebEngineViewer::CheckPhishingUrlUtil::versionApps())
<< \
QUrl(QStringLiteral("http://www.kde.org")) << true;
- QTest::newRow("multi database hash and hash") << QByteArrayLiteral("bla") << \
(QStringList() << QStringLiteral("boo") << QStringLiteral("bli")) + \
QTest::newRow("multi database hash and hash") << hashs << (QStringList() << \
QStringLiteral("boo") << QStringLiteral("bli")) << \
QStringLiteral("{\"client\":{\"clientId\":\"KDE\",\"clientVersion\":\"%1\"},\"clientSt \
ates\":[\"boo\",\"bli\"],\"threatInfo\":{\"platformTypes\":[\"WINDOWS\"],\"threatEntri \
es\":[{\"hash\":\"bla\"}],\"threatEntryTypes\":[\"URL\"],\"threatTypes\":[\"MALWARE\"]}}").arg(WebEngineViewer::CheckPhishingUrlUtil::versionApps())
<< QUrl(QStringLiteral("http://www.kde.org")) << true;
}
void SearchFullHashJobTest::shouldCreateRequest()
{
- QFETCH(QByteArray, hash);
+ typedef QHash<QByteArray,QByteArray> hashdef;
+ QFETCH(hashdef , hash);
QFETCH(QStringList, databaseHash);
QFETCH(QString, request);
QFETCH(QUrl, url);
@@ -68,7 +71,7 @@ void SearchFullHashJobTest::shouldCreateRequest()
job.setDatabaseState(databaseHash);
job.setSearchFullHashForUrl(url);
if (!hash.isEmpty()) {
- job.setSearchHashs(QList<QByteArray>() << hash);
+ job.setSearchHashs(hash);
}
QCOMPARE(job.canStart(), canStart);
if (canStart) {
diff --git a/webengineviewer/src/checkphishingurl/localdatabasefile.cpp \
b/webengineviewer/src/checkphishingurl/localdatabasefile.cpp index 8140dabc..ee26ee20 \
100644
--- a/webengineviewer/src/checkphishingurl/localdatabasefile.cpp
+++ b/webengineviewer/src/checkphishingurl/localdatabasefile.cpp
@@ -154,7 +154,7 @@ QByteArray LocalDataBaseFile::searchHash(const QByteArray \
&hashToSearch) const char *hashCharStar = getCharStar(hashOffset);
const int cmp = qstrcmp(hashCharStar, hashToSearch.constData());
currentValue = QByteArray(hashCharStar);
- //qCWarning(WEBENGINEVIEWER_LOG) << "search " << hashToSearch << " begin \
" << begin << " end " << end << " hashCharStar" << hashCharStar; + \
qCWarning(WEBENGINEVIEWER_LOG) << "search " << hashToSearch.toBase64() << " begin " \
<< begin << " end " << end << " hashCharStar" << currentValue.toBase64(); if (end == \
begin) { return currentValue;
}
diff --git a/webengineviewer/src/checkphishingurl/localdatabasemanager.cpp \
b/webengineviewer/src/checkphishingurl/localdatabasemanager.cpp index \
67db1e8f..27432e46 100644
--- a/webengineviewer/src/checkphishingurl/localdatabasemanager.cpp
+++ b/webengineviewer/src/checkphishingurl/localdatabasemanager.cpp
@@ -223,14 +223,27 @@ void LocalDataBaseManager::checkUrl(const QUrl &url)
if (d->mDataBaseOk) {
//TODO fixme short hash! we don't need to use it.
WebEngineViewer::UrlHashing urlHashing(url);
- QList<QByteArray> hashList = urlHashing.hashList();
- QList<QByteArray> conflictHashs;
- Q_FOREACH(const QByteArray &ba, hashList) {
+ QHash<QByteArray, QByteArray> hashList = urlHashing.hashList();
+ QHash<QByteArray, QByteArray> conflictHashs;
+
+ QHashIterator<QByteArray, QByteArray> i(hashList);
+ while (i.hasNext()) {
+ i.next();
+ QByteArray ba = i.value();
+ QByteArray result = d->mFile.searchHash(ba);
+ if (ba.contains(result)) {
+ conflictHashs.insert(i.key().toBase64(), i.value().toBase64());
+ }
+ }
+ qDebug() << "conflictHashs "<< conflictHashs;
+ /*
+ Q_FOREACH(const QByteArray &ba, hashList.values()) {
QByteArray result = d->mFile.searchHash(ba);
- if (ba == result) {
+ if (ba.contains(result)) {
conflictHashs << ba.toBase64();
}
}
+ */
if (conflictHashs.isEmpty()) {
Q_EMIT checkUrlFinished(url, \
WebEngineViewer::LocalDataBaseManager::UrlOk); } else {
diff --git a/webengineviewer/src/checkphishingurl/searchfullhashjob.cpp \
b/webengineviewer/src/checkphishingurl/searchfullhashjob.cpp index b08e33b2..0b216a21 \
100644
--- a/webengineviewer/src/checkphishingurl/searchfullhashjob.cpp
+++ b/webengineviewer/src/checkphishingurl/searchfullhashjob.cpp
@@ -39,7 +39,7 @@ public:
}
bool foundExactHash(const QList<QByteArray> &listLongHash);
- QList<QByteArray> mHashs;
+ QHash<QByteArray, QByteArray> mHashs;
QUrl mUrl;
QStringList mDatabaseHashes;
QNetworkAccessManager *mNetworkAccessManager;
@@ -154,6 +154,12 @@ void SearchFullHashJob::parse(const QByteArray &replyStr)
bool SearchFullHashJobPrivate::foundExactHash(const QList<QByteArray> &listLongHash)
{
+ QList<QByteArray> lstLongHash = mHashs.keys();
+ Q_FOREACH(const QByteArray &ba, lstLongHash) {
+ if (listLongHash.contains(ba)) {
+ return true;
+ }
+ }
return false;
}
@@ -163,7 +169,7 @@ void SearchFullHashJob::slotCheckUrlFinished(QNetworkReply \
*reply) reply->deleteLater();
}
-void SearchFullHashJob::setSearchHashs(const QList<QByteArray> &hash)
+void SearchFullHashJob::setSearchHashs(const QHash<QByteArray, QByteArray> &hash)
{
d->mHashs = hash;
}
@@ -221,8 +227,10 @@ QByteArray SearchFullHashJob::jsonRequest() const
QVariantList threatEntriesList;
QVariantMap hashUrlMap;
- Q_FOREACH(const QByteArray &hash, d->mHashs) {
- hashUrlMap.insert(QStringLiteral("hash"), hash);
+ QHashIterator<QByteArray, QByteArray> i(d->mHashs);
+ while (i.hasNext()) {
+ i.next();
+ hashUrlMap.insert(QStringLiteral("hash"), i.value());
}
threatEntriesList.append(hashUrlMap);
diff --git a/webengineviewer/src/checkphishingurl/searchfullhashjob.h \
b/webengineviewer/src/checkphishingurl/searchfullhashjob.h index 2f4965fb..e96e4ab4 \
100644
--- a/webengineviewer/src/checkphishingurl/searchfullhashjob.h
+++ b/webengineviewer/src/checkphishingurl/searchfullhashjob.h
@@ -53,7 +53,7 @@ public:
QByteArray jsonRequest() const;
void parse(const QByteArray &replyStr);
- void setSearchHashs(const QList<QByteArray> &hash);
+ void setSearchHashs(const QHash<QByteArray, QByteArray> &hash);
Q_SIGNALS:
void result(WebEngineViewer::SearchFullHashJob::UrlStatus status, const QUrl \
&url); void debugJson(const QByteArray &ba);
diff --git a/webengineviewer/src/checkphishingurl/tests/searchfullhashgui.cpp \
b/webengineviewer/src/checkphishingurl/tests/searchfullhashgui.cpp index \
80de2702..c04b4cb6 100644
--- a/webengineviewer/src/checkphishingurl/tests/searchfullhashgui.cpp
+++ b/webengineviewer/src/checkphishingurl/tests/searchfullhashgui.cpp
@@ -84,7 +84,12 @@ void SearchFullHashGui::slotCheckUrl()
connect(job, &WebEngineViewer::SearchFullHashJob::result, this, \
&SearchFullHashGui::slotGetResult);
connect(job, &WebEngineViewer::SearchFullHashJob::debugJson, this, \
&SearchFullHashGui::slotJSonDebug); job->setDatabaseState(QStringList() << \
databaseHashStr);
- job->setSearchHashs(QList<QByteArray>() << hashStr.toLatin1());
+ QByteArray ba = hashStr.toLatin1();
+ QByteArray baShort = ba;
+ baShort.truncate(4);
+ QHash<QByteArray, QByteArray> lst;
+ lst.insert(ba, baShort);
+ job->setSearchHashs(lst);
job->start();
}
diff --git a/webengineviewer/src/checkphishingurl/urlhashing.cpp \
b/webengineviewer/src/checkphishingurl/urlhashing.cpp index e5a97015..09e7a56c 100644
--- a/webengineviewer/src/checkphishingurl/urlhashing.cpp
+++ b/webengineviewer/src/checkphishingurl/urlhashing.cpp
@@ -132,9 +132,9 @@ QStringList UrlHashing::generateHostsToCheck(const QString &str)
return hostToCheck;
}
-QList<QByteArray> UrlHashing::hashList()
+QHash<QByteArray, QByteArray> UrlHashing::hashList()
{
- QList<QByteArray> lst;
+ QHash<QByteArray, QByteArray> lst;
if (mUrl.isValid()) {
const QString result = WebEngineViewer::UrlHashing::canonicalizeUrl(mUrl);
const QUrl url(result);
@@ -145,10 +145,10 @@ QList<QByteArray> UrlHashing::hashList()
Q_FOREACH(const QString &path, paths) {
const QString str = host + path;
QByteArray ba = QCryptographicHash::hash(str.toLatin1(), \
QCryptographicHash::Sha256);
- qDebug() << " ba " << ba.toBase64();
- //We need to keep 4
- ba.truncate(4);
- lst << ba;
+ QByteArray baShort = ba;
+ baShort.truncate(4);
+ lst.insert(ba, baShort);
+ //qDebug() << " ba " << ba.toBase64();
}
}
}
diff --git a/webengineviewer/src/checkphishingurl/urlhashing.h \
b/webengineviewer/src/checkphishingurl/urlhashing.h index 25999c58..f3a7bfbb 100644
--- a/webengineviewer/src/checkphishingurl/urlhashing.h
+++ b/webengineviewer/src/checkphishingurl/urlhashing.h
@@ -37,7 +37,8 @@ public:
static QStringList generatePathsToCheck(const QString &str, const QString \
&query); static QStringList generateHostsToCheck(const QString &str);
- QList<QByteArray> hashList();
+ /*long hash, short hash*/
+ QHash<QByteArray, QByteArray> hashList();
private:
QUrl mUrl;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic