MFH: r466574

Fix 301 redirects in the UrlBuilder class
- http scheme redirects to https
- Mobile website (m.last.fm) redirects to www.last.fm
- Localized hosts redirect e.g. www.lastfm.de to www.last.fm/de
- New localePath() function has been added to handle the localized
  base path since the library was localizing using the host before.
  This is not an official fix, but upstream is pretty dead.
Move USES upward
Convert CMAKE_ARGS to CMAKE_ON

Approved by:	ports-secteam (blanket)
This commit is contained in:
Jason E. Hale 2018-04-05 17:22:58 +00:00
parent f704ee1ae6
commit 06b1e5b8a5
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/branches/2018Q2/; revision=466575
5 changed files with 171 additions and 5 deletions

View File

@ -3,7 +3,7 @@
PORTNAME= liblastfm
PORTVERSION= 1.0.9
PORTREVISION= 1
PORTREVISION= 2
CATEGORIES= audio
MAINTAINER= jhale@FreeBSD.org
@ -12,15 +12,14 @@ COMMENT= Qt C++ library for the Last.fm webservices
LICENSE= GPLv3+
LICENSE_FILE= ${WRKSRC}/COPYING
USES= cmake pkgconfig
USE_GITHUB= yes
GH_ACCOUNT= lastfm
USES= cmake pkgconfig
USE_LDCONFIG= yes
USE_QT4= corelib dbus network sql xml \
moc_build qmake_build rcc_build
CMAKE_ARGS= -DBUILD_WITH_QT4:BOOL=ON
CMAKE_ON= BUILD_WITH_QT4
OPTIONS_DEFINE= FINGERPRINT TEST
OPTIONS_DEFAULT= FINGERPRINT

View File

@ -0,0 +1,123 @@
url():
- Use https scheme to avoid 301 redirects
- Override default QUrl::TolerantMode with QUrl::StrictMode for Qt 5.x to
prevent overprocessing the already encoded input URL
localePath():
- New function to return the base path of the localized website
host():
- Just return www.last.fm since the localized hosts 301 redirect there
localize():
- Set the path of the url instead of the host since the localized
hosts 301 redirect to the main website with a localized path
mobilize():
- Mobile website 301 redirects to main website, so just return the url as-is
--- src/UrlBuilder.cpp.orig 2014-10-02 14:05:46 UTC
+++ src/UrlBuilder.cpp
@@ -32,7 +32,7 @@ class lastfm::UrlBuilderPrivate (public)
lastfm::UrlBuilder::UrlBuilder( const QString& base )
: d( new UrlBuilderPrivate )
{
- d->path = '/' + base.toLatin1();
+ d->path = localePath().toLatin1() + '/' + base.toLatin1();
}
@@ -60,10 +60,10 @@ QUrl
lastfm::UrlBuilder::url() const
{
QUrl url;
- url.setScheme( "http" );
+ url.setScheme( "https" );
url.setHost( host() );
#if QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 )
- url.setPath( d->path );
+ url.setPath( d->path, QUrl::StrictMode );
#else
url.setEncodedPath( d->path );
#endif
@@ -85,49 +85,50 @@ lastfm::UrlBuilder::encode( QString s )
QString //static
-lastfm::UrlBuilder::host( const QLocale& locale )
+lastfm::UrlBuilder::localePath( const QLocale& locale )
{
switch (locale.language())
{
- case QLocale::Portuguese: return "www.lastfm.com.br";
- case QLocale::Turkish: return "www.lastfm.com.tr";
- case QLocale::French: return "www.lastfm.fr";
- case QLocale::Italian: return "www.lastfm.it";
- case QLocale::German: return "www.lastfm.de";
- case QLocale::Spanish: return "www.lastfm.es";
- case QLocale::Polish: return "www.lastfm.pl";
- case QLocale::Russian: return "www.lastfm.ru";
- case QLocale::Japanese: return "www.lastfm.jp";
- case QLocale::Swedish: return "www.lastfm.se";
- case QLocale::Chinese: return "cn.last.fm";
- default: return "www.last.fm";
+ case QLocale::Chinese: return "/zh";
+ case QLocale::French: return "/fr";
+ case QLocale::German: return "/de";
+ case QLocale::Italian: return "/it";
+ case QLocale::Japanese: return "/ja";
+ case QLocale::Polish: return "/pl";
+ case QLocale::Portuguese: return "/pt";
+ case QLocale::Russian: return "/ru";
+ case QLocale::Spanish: return "/es";
+ case QLocale::Swedish: return "/sv";
+ case QLocale::Turkish: return "/tr";
+ default: return "";
}
}
+QString //static
+lastfm::UrlBuilder::host( const QLocale& locale )
+{
+ return "www.last.fm";
+}
+
+
bool // static
lastfm::UrlBuilder::isHost( const QUrl& url )
{
- QStringList hosts = QStringList() << "www.lastfm.com.br"
- << "www.lastfm.com.tr"
- << "www.lastfm.fr"
- << "www.lastfm.it"
- << "www.lastfm.de"
- << "www.lastfm.es"
- << "www.lastfm.pl"
- << "www.lastfm.ru"
- << "www.lastfm.jp"
- << "www.lastfm.se"
- << "cn.last.fm"
- << "www.last.fm";
+ QStringList hosts = QStringList() << "www.last.fm";
return hosts.contains( url.host() );
}
+
QUrl //static
lastfm::UrlBuilder::localize( QUrl url)
{
- url.setHost( url.host().replace( QRegExp("^(www.)?last.fm"), host() ) );
+#if QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 )
+ url.setPath( url.path().prepend( localePath() ), QUrl::DecodedMode );
+#else
+ url.setPath( url.path().prepend( localePath() ) );
+#endif
return url;
}
@@ -135,7 +136,6 @@ lastfm::UrlBuilder::localize( QUrl url)
QUrl //static
lastfm::UrlBuilder::mobilize( QUrl url )
{
- url.setHost( url.host().replace( QRegExp("^(www.)?last"), "m.last" ) );
return url;
}

View File

@ -0,0 +1,31 @@
Add prototype for localePath() and adjust comments to reflect current
website layout
--- src/UrlBuilder.h.orig 2014-10-02 14:05:46 UTC
+++ src/UrlBuilder.h
@@ -44,9 +44,11 @@ namespace lastfm
QUrl url() const;
- /** www.last.fm becomes the local version, eg www.lastfm.de */
+ /** www.last.fm becomes the local version, e.g. www.last.fm/de */
static QUrl localize( QUrl );
- /** www.last.fm becomes m.last.fm, localisation is preserved */
+
+ /** DEPRECATED: Returns url as-is since the mobile website redirects
+ * to the main website */
static QUrl mobilize( QUrl );
/** Use this to URL encode any database item (artist, track, album). It
@@ -60,7 +62,10 @@ namespace lastfm
*/
static QByteArray encode( QString );
- /** returns eg. www.lastfm.de */
+ /** returns the base path of the localized website e.g. /de */
+ static QString localePath ( const QLocale& = QLocale() );
+
+ /** returns www.last.fm */
static QString host( const QLocale& = QLocale() );
/** return true if url is a last.fm url */

View File

@ -4,7 +4,7 @@ warning: logical not is only applied to the left hand side of this comparison [-
--- src/mbid_mp3.c.orig 2014-10-02 14:05:46 UTC
+++ src/mbid_mp3.c
@@ -94,7 +94,7 @@ int getMP3_MBID(const char *path, char m
@@ -94,7 +94,7 @@ int getMP3_MBID(const char *path, char mbid[MBID_BUFFE
while (s) {
mfile(3,head,fp,&s);

View File

@ -0,0 +1,13 @@
http://www.last.fm 301 redirects to https://www.last.fm causing test to fail
--- tests/TestUrlBuilder.h.orig 2018-03-31 12:04:00 UTC
+++ tests/TestUrlBuilder.h
@@ -81,7 +81,7 @@ private slots:
void test404() /** @author <max@last.fm> */
{
- QCOMPARE( getResponseCode( QUrl("http://www.last.fm/404") ), 404 );
+ QCOMPARE( getResponseCode( QUrl("https://www.last.fm/404") ), 404 );
}
};