Removed UUID constraint on listenbrainz token, fixes #825
This commit is contained in:
@@ -27,7 +27,6 @@
|
||||
#include <Wt/WDateTime.h>
|
||||
|
||||
#include "core/EnumSet.hpp"
|
||||
#include "core/UUID.hpp"
|
||||
|
||||
#include "database/Object.hpp"
|
||||
#include "database/Types.hpp"
|
||||
@@ -118,7 +117,7 @@ namespace lms::db
|
||||
void setSubsonicArtistListMode(SubsonicArtistListMode mode) { _subsonicArtistListMode = mode; }
|
||||
void setFeedbackBackend(FeedbackBackend feedbackBackend) { _feedbackBackend = feedbackBackend; }
|
||||
void setScrobblingBackend(ScrobblingBackend scrobblingBackend) { _scrobblingBackend = scrobblingBackend; }
|
||||
void setListenBrainzToken(const std::optional<core::UUID>& MBID) { _listenbrainzToken = MBID ? MBID->getAsString() : ""; }
|
||||
void setListenBrainzToken(std::string_view token) { _listenbrainzToken = token; }
|
||||
|
||||
// read
|
||||
bool isAdmin() const { return _type == UserType::ADMIN; }
|
||||
@@ -134,7 +133,7 @@ namespace lms::db
|
||||
SubsonicArtistListMode getSubsonicArtistListMode() const { return _subsonicArtistListMode; }
|
||||
FeedbackBackend getFeedbackBackend() const { return _feedbackBackend; }
|
||||
ScrobblingBackend getScrobblingBackend() const { return _scrobblingBackend; }
|
||||
std::optional<core::UUID> getListenBrainzToken() const { return core::UUID::fromString(_listenbrainzToken); }
|
||||
std::string_view getListenBrainzToken() const { return _listenbrainzToken; }
|
||||
|
||||
template<class Action>
|
||||
void persist(Action& a)
|
||||
|
||||
@@ -118,13 +118,13 @@ namespace lms::feedback::listenBrainz
|
||||
return;
|
||||
}
|
||||
|
||||
const std::optional<core::UUID> listenBrainzToken{ starredTrack->getUser()->getListenBrainzToken() };
|
||||
if (!listenBrainzToken)
|
||||
const std::string listenBrainzToken{ starredTrack->getUser()->getListenBrainzToken() };
|
||||
if (listenBrainzToken.empty())
|
||||
return;
|
||||
|
||||
core::http::ClientPOSTRequestParameters request;
|
||||
request.relativeUrl = "/1/feedback/recording-feedback";
|
||||
request.message.addHeader("Authorization", "Token " + std::string{ listenBrainzToken->getAsString() });
|
||||
request.message.addHeader("Authorization", "Token " + listenBrainzToken);
|
||||
|
||||
Wt::Json::Object root;
|
||||
root["recording_mbid"] = Wt::Json::Value{ std::string{ recordingMBID->getAsString() } };
|
||||
@@ -310,8 +310,8 @@ namespace lms::feedback::listenBrainz
|
||||
{
|
||||
assert(context.listenBrainzUserName.empty());
|
||||
|
||||
const std::optional<core::UUID> listenBrainzToken{ utils::getListenBrainzToken(_db.getTLSSession(), context.userId) };
|
||||
if (!listenBrainzToken)
|
||||
const std::string listenBrainzToken{ utils::getListenBrainzToken(_db.getTLSSession(), context.userId) };
|
||||
if (listenBrainzToken.empty())
|
||||
{
|
||||
onSyncEnded(context);
|
||||
return;
|
||||
@@ -320,7 +320,7 @@ namespace lms::feedback::listenBrainz
|
||||
core::http::ClientGETRequestParameters request;
|
||||
request.priority = core::http::ClientRequestParameters::Priority::Low;
|
||||
request.relativeUrl = "/1/validate-token";
|
||||
request.headers = { { "Authorization", "Token " + std::string{ listenBrainzToken->getAsString() } } };
|
||||
request.headers = { { "Authorization", "Token " + listenBrainzToken } };
|
||||
request.onSuccessFunc = [this, &context](const Wt::Http::Message& msg) {
|
||||
context.listenBrainzUserName = utils::parseValidateToken(msg.body());
|
||||
if (context.listenBrainzUserName.empty())
|
||||
|
||||
@@ -27,15 +27,18 @@
|
||||
|
||||
namespace lms::feedback::listenBrainz::utils
|
||||
{
|
||||
std::optional<core::UUID> getListenBrainzToken(db::Session& session, db::UserId userId)
|
||||
std::string getListenBrainzToken(db::Session& session, db::UserId userId)
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
std::string res;
|
||||
|
||||
const db::User::pointer user{ db::User::find(session, userId) };
|
||||
if (!user)
|
||||
return std::nullopt;
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
return user->getListenBrainzToken();
|
||||
if (const db::User::pointer user{ db::User::find(session, userId) })
|
||||
res = std::string{ user->getListenBrainzToken() };
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
std::string parseValidateToken(std::string_view msgBody)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "core/ILogger.hpp"
|
||||
#include "core/UUID.hpp"
|
||||
|
||||
#include "database/objects/UserId.hpp"
|
||||
|
||||
#define LOG(sev, message) LMS_LOG(FEEDBACK, sev, "[listenbrainz] " << message)
|
||||
@@ -32,6 +32,6 @@ namespace lms::db
|
||||
|
||||
namespace lms::feedback::listenBrainz::utils
|
||||
{
|
||||
std::optional<core::UUID> getListenBrainzToken(db::Session& session, db::UserId userId);
|
||||
std::string getListenBrainzToken(db::Session& session, db::UserId userId);
|
||||
std::string parseValidateToken(std::string_view msgBody);
|
||||
} // namespace lms::feedback::listenBrainz::utils
|
||||
|
||||
@@ -291,34 +291,32 @@ namespace lms::scrobbling::listenBrainz
|
||||
return;
|
||||
}
|
||||
|
||||
const std::optional<core::UUID> listenBrainzToken{ utils::getListenBrainzToken(_db.getTLSSession(), listen.userId) };
|
||||
if (!listenBrainzToken)
|
||||
const std::string listenBrainzToken{ utils::getListenBrainzToken(_db.getTLSSession(), listen.userId) };
|
||||
if (listenBrainzToken.empty())
|
||||
{
|
||||
LOG(DEBUG, "No listenbrainz token found: skipping");
|
||||
return;
|
||||
}
|
||||
|
||||
request.message.addBodyText(bodyText);
|
||||
request.message.addHeader("Authorization", "Token " + std::string{ listenBrainzToken->getAsString() });
|
||||
request.message.addHeader("Authorization", "Token " + listenBrainzToken);
|
||||
request.message.addHeader("Content-Type", "application/json");
|
||||
_client.sendPOSTRequest(std::move(request));
|
||||
}
|
||||
|
||||
bool ListensSynchronizer::saveListen(const TimedListen& listen, db::SyncState scrobblingState)
|
||||
{
|
||||
using namespace db;
|
||||
|
||||
Session& session{ _db.getTLSSession() };
|
||||
db::Session& session{ _db.getTLSSession() };
|
||||
auto transaction{ session.createWriteTransaction() }; // TODO: unique only if needed
|
||||
|
||||
db::Listen::pointer dbListen{ db::Listen::find(session, listen.userId, listen.trackId, db::ScrobblingBackend::ListenBrainz, listen.listenedAt) };
|
||||
if (!dbListen)
|
||||
{
|
||||
const User::pointer user{ User::find(session, listen.userId) };
|
||||
const db::User::pointer user{ db::User::find(session, listen.userId) };
|
||||
if (!user)
|
||||
return false;
|
||||
|
||||
const Track::pointer track{ Track::find(session, listen.trackId) };
|
||||
const db::Track::pointer track{ db::Track::find(session, listen.trackId) };
|
||||
if (!track)
|
||||
return false;
|
||||
|
||||
@@ -464,8 +462,8 @@ namespace lms::scrobbling::listenBrainz
|
||||
{
|
||||
assert(context.listenBrainzUserName.empty());
|
||||
|
||||
const std::optional<core::UUID> listenBrainzToken{ utils::getListenBrainzToken(_db.getTLSSession(), context.userId) };
|
||||
if (!listenBrainzToken)
|
||||
const std::string listenBrainzToken{ utils::getListenBrainzToken(_db.getTLSSession(), context.userId) };
|
||||
if (listenBrainzToken.empty())
|
||||
{
|
||||
onSyncEnded(context);
|
||||
return;
|
||||
@@ -474,7 +472,7 @@ namespace lms::scrobbling::listenBrainz
|
||||
core::http::ClientGETRequestParameters request;
|
||||
request.priority = core::http::ClientRequestParameters::Priority::Low;
|
||||
request.relativeUrl = "/1/validate-token";
|
||||
request.headers = { { "Authorization", "Token " + std::string{ listenBrainzToken->getAsString() } } };
|
||||
request.headers = { { "Authorization", "Token " + listenBrainzToken } };
|
||||
request.onSuccessFunc = [this, &context](const Wt::Http::Message& msg) {
|
||||
context.listenBrainzUserName = utils::parseValidateToken(msg.body());
|
||||
if (context.listenBrainzUserName.empty())
|
||||
|
||||
@@ -55,7 +55,7 @@ namespace lms::scrobbling::listenBrainz
|
||||
|
||||
private:
|
||||
void enqueListen(const Listen& listen, const Wt::WDateTime& timePoint);
|
||||
bool saveListen(const TimedListen& listen, db::SyncState scrobblinState);
|
||||
bool saveListen(const TimedListen& listen, db::SyncState scrobblingState);
|
||||
|
||||
void enquePendingListens();
|
||||
|
||||
|
||||
@@ -27,15 +27,18 @@
|
||||
|
||||
namespace lms::scrobbling::listenBrainz::utils
|
||||
{
|
||||
std::optional<core::UUID> getListenBrainzToken(db::Session& session, db::UserId userId)
|
||||
std::string getListenBrainzToken(db::Session& session, db::UserId userId)
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
std::string res;
|
||||
|
||||
const db::User::pointer user{ db::User::find(session, userId) };
|
||||
if (!user)
|
||||
return std::nullopt;
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
return user->getListenBrainzToken();
|
||||
if (const db::User::pointer user{ db::User::find(session, userId) })
|
||||
res = user->getListenBrainzToken();
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
std::string parseValidateToken(std::string_view msgBody)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "core/ILogger.hpp"
|
||||
#include "core/UUID.hpp"
|
||||
|
||||
#include "database/objects/UserId.hpp"
|
||||
|
||||
#define LOG(sev, message) LMS_LOG(SCROBBLING, sev, "[listenbrainz] " << message)
|
||||
@@ -32,6 +32,6 @@ namespace lms::db
|
||||
|
||||
namespace lms::scrobbling::listenBrainz::utils
|
||||
{
|
||||
std::optional<core::UUID> getListenBrainzToken(db::Session& session, db::UserId userId);
|
||||
std::string getListenBrainzToken(db::Session& session, db::UserId userId);
|
||||
std::string parseValidateToken(std::string_view msgBody);
|
||||
} // namespace lms::scrobbling::listenBrainz::utils
|
||||
|
||||
Reference in New Issue
Block a user