diff --git a/src/qobuz/qobuzservice.cpp b/src/qobuz/qobuzservice.cpp index d1145208..6892c434 100644 --- a/src/qobuz/qobuzservice.cpp +++ b/src/qobuz/qobuzservice.cpp @@ -230,6 +230,8 @@ void QobuzService::ReloadSettings() { app_id_ = s.value("app_id").toString(); app_secret_ = s.value("app_secret").toString(); + const bool base64_secret = s.value("base64secret", false).toBool();; + username_ = s.value("username").toString(); QByteArray password = s.value("password").toByteArray(); if (password.isEmpty()) password_.clear(); @@ -248,6 +250,29 @@ void QobuzService::ReloadSettings() { s.endGroup(); + if (base64_secret) { + app_secret_ = DecodeAppSecret(app_secret_); + } + +} + +QString QobuzService::DecodeAppSecret(const QString &app_secret_base64) { + + const QByteArray appid = app_id().toUtf8(); + const QByteArray app_secret_binary = QByteArray::fromBase64(app_secret_base64.toUtf8()); + QString app_secret_decoded; + + for (int x = 0, y = 0; x < app_secret_binary.length(); ++x , ++y) { + if (y == appid.length()) y = 0; + const uint rc = app_secret_binary[x] ^ appid[y]; + if (rc > 0xFFFF) { + return app_secret_base64; + } + app_secret_decoded.append(QChar(rc)); + } + + return app_secret_decoded; + } void QobuzService::SendLogin() { diff --git a/src/qobuz/qobuzservice.h b/src/qobuz/qobuzservice.h index 2cbfee1c..82287af2 100644 --- a/src/qobuz/qobuzservice.h +++ b/src/qobuz/qobuzservice.h @@ -145,6 +145,7 @@ class QobuzService : public InternetService { using Param = QPair; using ParamList = QList; + QString DecodeAppSecret(const QString &app_secret_encoded); void SendSearch(); void LoginError(const QString &error = QString(), const QVariant &debug = QVariant()); diff --git a/src/qobuz/qobuzstreamurlrequest.cpp b/src/qobuz/qobuzstreamurlrequest.cpp index 8cd811da..15600a73 100644 --- a/src/qobuz/qobuzstreamurlrequest.cpp +++ b/src/qobuz/qobuzstreamurlrequest.cpp @@ -112,17 +112,6 @@ void QobuzStreamURLRequest::GetStreamURL() { reply_->deleteLater(); } -#if 0 - QByteArray appid = app_id().toUtf8(); - QByteArray secret_decoded = QByteArray::fromBase64(app_secret().toUtf8()); - QString secret; - for (int x = 0, y = 0; x < secret_decoded.length(); ++x , ++y) { - if (y == appid.length()) y = 0; - secret.append(QChar(secret_decoded[x] ^ appid[y])); - } -#endif - - QString secret = app_secret(); quint64 timestamp = QDateTime::currentDateTime().toSecsSinceEpoch(); ParamList params_to_sign = ParamList() << Param("format_id", QString::number(format())) @@ -136,7 +125,7 @@ void QobuzStreamURLRequest::GetStreamURL() { data_to_sign += param.first + param.second; } data_to_sign += QString::number(timestamp); - data_to_sign += secret.toUtf8(); + data_to_sign += app_secret().toUtf8(); QByteArray const digest = QCryptographicHash::hash(data_to_sign.toUtf8(), QCryptographicHash::Md5); QString signature = QString::fromLatin1(digest.toHex()).rightJustified(32, '0').toLower(); diff --git a/src/settings/qobuzsettingspage.cpp b/src/settings/qobuzsettingspage.cpp index 50306252..31e12e62 100644 --- a/src/settings/qobuzsettingspage.cpp +++ b/src/settings/qobuzsettingspage.cpp @@ -89,6 +89,7 @@ void QobuzSettingsPage::Load() { ui_->artistssearchlimit->setValue(s.value("artistssearchlimit", 4).toInt()); ui_->albumssearchlimit->setValue(s.value("albumssearchlimit", 10).toInt()); ui_->songssearchlimit->setValue(s.value("songssearchlimit", 10).toInt()); + ui_->checkbox_base64_secret->setChecked(s.value("base64secret", false).toBool()); ui_->checkbox_download_album_covers->setChecked(s.value("downloadalbumcovers", true).toBool()); s.endGroup(); @@ -117,6 +118,7 @@ void QobuzSettingsPage::Save() { s.setValue("artistssearchlimit", ui_->artistssearchlimit->value()); s.setValue("albumssearchlimit", ui_->albumssearchlimit->value()); s.setValue("songssearchlimit", ui_->songssearchlimit->value()); + s.setValue("base64secret", ui_->checkbox_base64_secret->isChecked()); s.setValue("downloadalbumcovers", ui_->checkbox_download_album_covers->isChecked()); s.endGroup(); diff --git a/src/settings/qobuzsettingspage.ui b/src/settings/qobuzsettingspage.ui index 7c7b5571..82d14b28 100644 --- a/src/settings/qobuzsettingspage.ui +++ b/src/settings/qobuzsettingspage.ui @@ -62,28 +62,28 @@ - + Username - + - + Password - + QLineEdit::Password @@ -119,24 +119,24 @@ Preferences - + Audio format - + - + Search delay - + ms @@ -155,14 +155,14 @@ - + Artists search limit - + 1 @@ -175,14 +175,14 @@ - + Albums search limit - + 1 @@ -195,14 +195,14 @@ - + Songs search limit - + 1 @@ -215,13 +215,20 @@ - + Download album covers + + + + Base64 encoded secret + + + @@ -299,7 +306,6 @@ checkbox_download_album_covers -