diff --git a/src/network-web/networkfactory.cpp b/src/network-web/networkfactory.cpp index e19698357..41a82cf33 100755 --- a/src/network-web/networkfactory.cpp +++ b/src/network-web/networkfactory.cpp @@ -58,10 +58,15 @@ QStringList NetworkFactory::extractFeedLinksFromHtmlPage(const QUrl& url, const } QPair NetworkFactory::generateBasicAuthHeader(const QString& username, const QString& password) { - QString basic_value = username + ":" + password; - QString header_value = QString("Basic ") + QString(basic_value.toUtf8().toBase64()); + if (username.isEmpty()) { + return QPair(QByteArray(), QByteArray()); + } + else { + QString basic_value = username + ":" + password; + QString header_value = QString("Basic ") + QString(basic_value.toUtf8().toBase64()); - return QPair(HTTP_HEADERS_AUTHORIZATION, header_value.toLocal8Bit()); + return QPair(HTTP_HEADERS_AUTHORIZATION, header_value.toLocal8Bit()); + } } QString NetworkFactory::networkErrorText(QNetworkReply::NetworkError error_code) { @@ -180,7 +185,9 @@ Downloader* NetworkFactory::performAsyncNetworkOperation(const QString& url, int QObject::connect(downloader, &Downloader::completed, downloader, &Downloader::deleteLater); foreach (const auto& header, additional_headers) { - downloader->appendRawHeader(header.first, header.second); + if (!header.first.isEmpty()) { + downloader->appendRawHeader(header.first, header.second); + } } downloader->manipulateData(url, operation, input_data, timeout, protected_contents, username, password); @@ -200,7 +207,9 @@ NetworkResult NetworkFactory::performNetworkOperation(const QString& url, int ti QObject::connect(&downloader, &Downloader::completed, &loop, &QEventLoop::quit); foreach (const auto& header, additional_headers) { - downloader.appendRawHeader(header.first, header.second); + if (!header.first.isEmpty()) { + downloader.appendRawHeader(header.first, header.second); + } } downloader.manipulateData(url, operation, input_data, timeout, protected_contents, username, password); diff --git a/src/services/standard/standardfeed.cpp b/src/services/standard/standardfeed.cpp index a33181330..344f17a1a 100755 --- a/src/services/standard/standardfeed.cpp +++ b/src/services/standard/standardfeed.cpp @@ -173,17 +173,17 @@ QPair StandardFeed::guessFeed(const QPair result; result.first = nullptr; QByteArray feed_contents; + + QList> headers; + headers << NetworkFactory::generateBasicAuthHeader(username, password); + NetworkResult network_result = NetworkFactory::performNetworkOperation(url, qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(), QByteArray(), - QString(), feed_contents, QNetworkAccessManager::GetOperation, - !username.isEmpty(), - username, - password, - true); + headers); result.second = network_result.first; @@ -435,16 +435,15 @@ QList StandardFeed::obtainNewMessages(bool* error_during_obtaining) { QByteArray feed_contents; int download_timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); + QList> headers; + headers << NetworkFactory::generateBasicAuthHeader(username(), password()); + m_networkError = NetworkFactory::performNetworkOperation(url(), download_timeout, QByteArray(), - QString(), feed_contents, QNetworkAccessManager::GetOperation, - !username().isEmpty(), - username(), - password(), - true).first; + headers).first; if (m_networkError != QNetworkReply::NoError) { qWarning("Error during fetching of new messages for feed '%s' (id %d).", qPrintable(url()), id()); diff --git a/src/services/tt-rss/network/ttrssnetworkfactory.cpp b/src/services/tt-rss/network/ttrssnetworkfactory.cpp index 38918b477..dbd9a6d80 100755 --- a/src/services/tt-rss/network/ttrssnetworkfactory.cpp +++ b/src/services/tt-rss/network/ttrssnetworkfactory.cpp @@ -97,17 +97,19 @@ TtRssLoginResponse TtRssNetworkFactory::login() { json["password"] = m_password; QByteArray result_raw; + + QList> headers; + headers << QPair(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON); + headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword); + NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, qApp->settings()->value(GROUP(Feeds), SETTING( Feeds::UpdateTimeout)).toInt(), QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, - m_authUsername, - m_authPassword); + headers); TtRssLoginResponse login_response(QString::fromUtf8(result_raw)); if (network_reply.first == QNetworkReply::NoError) { @@ -129,17 +131,19 @@ TtRssResponse TtRssNetworkFactory::logout() { json["op"] = QSL("logout"); json["sid"] = m_sessionId; QByteArray result_raw; + + QList> headers; + headers << QPair(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON); + headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword); + NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, qApp->settings()->value(GROUP(Feeds), SETTING( Feeds::UpdateTimeout)).toInt(), QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, - m_authUsername, - m_authPassword); + headers); m_lastError = network_reply.first; @@ -167,11 +171,16 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() { json["include_empty"] = true; const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray result_raw; + + QList> headers; + headers << QPair(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON); + headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword); + NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); TtRssGetFeedsCategoriesResponse result(QString::fromUtf8(result_raw)); if (result.isNotLoggedIn()) { @@ -179,9 +188,9 @@ TtRssGetFeedsCategoriesResponse TtRssNetworkFactory::getFeedsCategories() { login(); json["sid"] = m_sessionId; network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); result = TtRssGetFeedsCategoriesResponse(QString::fromUtf8(result_raw)); } @@ -209,11 +218,16 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim json["sanitize"] = sanitize; const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray result_raw; + + QList> headers; + headers << QPair(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON); + headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword); + NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); TtRssGetHeadlinesResponse result(QString::fromUtf8(result_raw)); if (result.isNotLoggedIn()) { @@ -221,9 +235,9 @@ TtRssGetHeadlinesResponse TtRssNetworkFactory::getHeadlines(int feed_id, int lim login(); json["sid"] = m_sessionId; network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); result = TtRssGetHeadlinesResponse(QString::fromUtf8(result_raw)); } @@ -249,11 +263,16 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList json["field"] = (int) field; const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray result_raw; + + QList> headers; + headers << QPair(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON); + headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword); + NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); TtRssUpdateArticleResponse result(QString::fromUtf8(result_raw)); if (result.isNotLoggedIn()) { @@ -261,9 +280,9 @@ TtRssUpdateArticleResponse TtRssNetworkFactory::updateArticles(const QStringList login(); json["sid"] = m_sessionId; network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); result = TtRssUpdateArticleResponse(QString::fromUtf8(result_raw)); } @@ -292,11 +311,16 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString& const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray result_raw; + + QList> headers; + headers << QPair(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON); + headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword); + NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); TtRssSubscribeToFeedResponse result(QString::fromUtf8(result_raw)); if (result.isNotLoggedIn()) { @@ -304,9 +328,9 @@ TtRssSubscribeToFeedResponse TtRssNetworkFactory::subscribeToFeed(const QString& login(); json["sid"] = m_sessionId; network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); result = TtRssSubscribeToFeedResponse(QString::fromUtf8(result_raw)); } @@ -326,15 +350,17 @@ TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) { json["feed_id"] = feed_id; const int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray result_raw; + + QList> headers; + headers << QPair(HTTP_HEADERS_CONTENT_TYPE, TTRSS_CONTENT_TYPE_JSON); + headers << NetworkFactory::generateBasicAuthHeader(m_authUsername, m_authPassword); + NetworkResult network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, - m_authUsername, - m_authPassword); + headers); TtRssUnsubscribeFeedResponse result(QString::fromUtf8(result_raw)); if (result.isNotLoggedIn()) { @@ -342,9 +368,9 @@ TtRssUnsubscribeFeedResponse TtRssNetworkFactory::unsubscribeFeed(int feed_id) { login(); json["sid"] = m_sessionId; network_reply = NetworkFactory::performNetworkOperation(m_fullUrl, timeout, QJsonDocument(json).toJson(QJsonDocument::Compact), - TTRSS_CONTENT_TYPE_JSON, result_raw, + result_raw, QNetworkAccessManager::PostOperation, - m_authIsUsed, m_authUsername, m_authPassword); + headers); result = TtRssUnsubscribeFeedResponse(QString::fromUtf8(result_raw)); } @@ -529,7 +555,7 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, QS QByteArray icon_data; if (NetworkFactory::performNetworkOperation(full_icon_address, DOWNLOAD_TIMEOUT, - QByteArray(), QString(), icon_data, + QByteArray(), icon_data, QNetworkAccessManager::GetOperation).first == QNetworkReply::NoError) { // Icon downloaded, set it up. QPixmap icon_pixmap; @@ -569,7 +595,7 @@ QList TtRssGetHeadlinesResponse::messages() const { // Multiply by 1000 because Tiny Tiny RSS API does not include miliseconds in Unix // date/time number. - message.m_created = TextFactory::parseDateTime(mapped["updated"].toDouble() * 1000); + message.m_created = TextFactory::parseDateTime(int(mapped["updated"].toDouble()) * 1000); message.m_createdFromFeed = true; message.m_customId = QString::number(mapped["id"].toInt()); message.m_feedId = mapped["feed_id"].toString();