mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-26 07:49:50 -05:00
Rewrote resolveUrl function to conform to various test cases
This commit is contained in:
parent
91d746c5c0
commit
5098866413
@ -801,28 +801,31 @@ QString Entry::resolvePlaceholder(const QString& str) const
|
||||
|
||||
QString Entry::resolveUrl(const QString& url) const
|
||||
{
|
||||
#ifdef WITH_XC_HTTP
|
||||
QString newUrl = url;
|
||||
if (!url.contains("://")) {
|
||||
if (!url.isEmpty() && !url.contains("://")) {
|
||||
// URL doesn't have a protocol, add https by default
|
||||
newUrl.prepend("https://");
|
||||
}
|
||||
QUrl tempUrl = QUrl(newUrl);
|
||||
|
||||
if (tempUrl.isValid()) {
|
||||
if (tempUrl.scheme() == "cmd") {
|
||||
// URL is a cmd, hopefully the second argument is an URL
|
||||
QStringList cmd = newUrl.split(" ");
|
||||
if (cmd.size() > 1) {
|
||||
return resolveUrl(cmd[1].remove("'").remove("\""));
|
||||
if (newUrl.startsWith("cmd://")) {
|
||||
QStringList cmdList = newUrl.split(" ");
|
||||
for (int i=1; i < cmdList.size(); ++i) {
|
||||
// Don't pass arguments to the resolveUrl function (they look like URL's)
|
||||
if (!cmdList[i].startsWith("-") && !cmdList[i].startsWith("/")) {
|
||||
return resolveUrl(cmdList[i].remove(QRegExp("'|\"")));
|
||||
}
|
||||
} else if (tempUrl.scheme() == "http" || tempUrl.scheme() == "https") {
|
||||
// URL is nice
|
||||
return tempUrl.url();
|
||||
}
|
||||
|
||||
// No URL in this command
|
||||
return QString("");
|
||||
}
|
||||
#else
|
||||
Q_UNUSED(url);
|
||||
#endif
|
||||
|
||||
// Validate the URL
|
||||
QUrl tempUrl = QUrl(newUrl);
|
||||
if (tempUrl.isValid() && (tempUrl.scheme() == "http" || tempUrl.scheme() == "https")) {
|
||||
return tempUrl.url();
|
||||
}
|
||||
|
||||
// No valid http URL's found
|
||||
return QString("");
|
||||
}
|
||||
|
@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
#include "TestEntry.h"
|
||||
#include "config-keepassx-tests.h"
|
||||
|
||||
#include <QTest>
|
||||
|
||||
@ -130,3 +131,30 @@ void TestEntry::testClone()
|
||||
|
||||
delete entryOrg;
|
||||
}
|
||||
|
||||
void TestEntry::testResolveUrl()
|
||||
{
|
||||
Entry* entry = new Entry();
|
||||
QString testUrl("www.google.com");
|
||||
QString testCmd("cmd://firefox " + testUrl);
|
||||
QString testComplexCmd("cmd://firefox --start-now --url 'http://" + testUrl + "' --quit");
|
||||
QString nonHttpUrl("ftp://google.com");
|
||||
QString noUrl("random text inserted here");
|
||||
|
||||
// Test standard URL's
|
||||
QCOMPARE(entry->resolveUrl(""), QString(""));
|
||||
QCOMPARE(entry->resolveUrl(testUrl), "https://" + testUrl);
|
||||
QCOMPARE(entry->resolveUrl("http://" + testUrl), "http://" + testUrl);
|
||||
// Test cmd:// with no URL
|
||||
QCOMPARE(entry->resolveUrl("cmd://firefox"), QString(""));
|
||||
QCOMPARE(entry->resolveUrl("cmd://firefox --no-url"), QString(""));
|
||||
// Test cmd:// with URL's
|
||||
QCOMPARE(entry->resolveUrl(testCmd), "https://" + testUrl);
|
||||
QCOMPARE(entry->resolveUrl(testComplexCmd), "http://" + testUrl);
|
||||
// Test non-http URL
|
||||
QCOMPARE(entry->resolveUrl(nonHttpUrl), QString(""));
|
||||
// Test no URL
|
||||
QCOMPARE(entry->resolveUrl(noUrl), QString(""));
|
||||
|
||||
delete entry;
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ private slots:
|
||||
void testHistoryItemDeletion();
|
||||
void testCopyDataFrom();
|
||||
void testClone();
|
||||
void testResolveUrl();
|
||||
};
|
||||
|
||||
#endif // KEEPASSX_TESTENTRY_H
|
||||
|
Loading…
Reference in New Issue
Block a user