From 6e576ce0ec6d36de4f8dded4b1bf7cdaf26416a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ulrich=20Sp=C3=B6rlein?= Date: Wed, 20 Nov 2019 19:03:10 +0100 Subject: [PATCH] Remove trailing slash for LastFM auth URLs to avoid a redirect. Also add better error logging while here. This will at least spit out SSLHandshake errors and avoids parsing an empty reply if the request fails. This is fallout from issue #5993 --- src/internet/lastfm/lastfmservice.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/internet/lastfm/lastfmservice.cpp b/src/internet/lastfm/lastfmservice.cpp index 5f4a3dd50..4523d904d 100644 --- a/src/internet/lastfm/lastfmservice.cpp +++ b/src/internet/lastfm/lastfmservice.cpp @@ -39,6 +39,7 @@ #include #include #include +#include #include #ifdef HAVE_LIBLASTFM1 @@ -76,7 +77,7 @@ const char* LastFMService::kAudioscrobblerClientId = "tng"; const char* LastFMService::kApiKey = "75d20fb472be99275392aefa2760ea09"; const char* LastFMService::kSecret = "d3072b60ae626be12be69448f5c46e70"; const char* LastFMService::kAuthLoginUrl = - "https://www.last.fm/api/auth/?api_key=%1&token=%2"; + "https://www.last.fm/api/auth?api_key=%1&token=%2"; LastFMService::LastFMService(Application* app, QObject* parent) : Scrobbler(parent), @@ -146,7 +147,7 @@ QByteArray SignApiRequest(QList> params) { } // namespace void LastFMService::Authenticate() { - QUrl url("https://www.last.fm/api/auth/"); + QUrl url("https://www.last.fm/api/auth"); LocalRedirectServer* server = new LocalRedirectServer(this); server->Listen(); @@ -174,10 +175,10 @@ void LastFMService::Authenticate() { NewClosure(reply, SIGNAL(finished()), this, SLOT(AuthenticateReplyFinished(QNetworkReply*)), reply); }); + qLog(Debug) << "auth URL:" << url.toString(); if (!QDesktopServices::openUrl(url)) { QMessageBox box(QMessageBox::NoIcon, tr("Last.fm Authentication"), tr("Please open this URL in your browser: %1").arg(url.toString()), QMessageBox::Ok); box.setTextFormat(Qt::RichText); - qLog(Debug) << "Last.fm authentication URL: " << url.toString(); box.exec(); } } @@ -185,9 +186,17 @@ void LastFMService::Authenticate() { void LastFMService::AuthenticateReplyFinished(QNetworkReply* reply) { reply->deleteLater(); + if (reply->error() != QNetworkReply::NoError) { + qLog(Debug) << "request error:" << reply->errorString(); + } + + const QByteArray resp = reply->readAll(); + QTextCodec* codec = QTextCodec::codecForName("UTF-8"); + qLog(Debug) << "auth reply:" << codec->toUnicode(resp); + // Parse the reply lastfm::XmlQuery lfm(lastfm::compat::EmptyXmlQuery()); - if (lastfm::compat::ParseQuery(reply->readAll(), &lfm)) { + if (!resp.isEmpty() && lastfm::compat::ParseQuery(resp, &lfm)) { lastfm::ws::Username = lfm["session"]["name"].text(); lastfm::ws::SessionKey = lfm["session"]["key"].text(); QString subscribed = lfm["session"]["subscriber"].text();