diff --git a/src/api/subsonic/SubsonicResource.cpp b/src/api/subsonic/SubsonicResource.cpp index 42be4104..0d68c5d5 100644 --- a/src/api/subsonic/SubsonicResource.cpp +++ b/src/api/subsonic/SubsonicResource.cpp @@ -642,12 +642,11 @@ static Response handleDeletePlaylistRequest(RequestContext& context) { - // Optional params Id id {getMandatoryParameterAs(context.parameters, "id")}; if (id.type != Id::Type::Playlist) throw Error {Error::CustomType::BadIdFormat}; - auto transaction {context.dbSession.createSharedTransaction()}; + auto transaction {context.dbSession.createUniqueTransaction()}; User::pointer user {User::getByLoginName(context.dbSession, context.userName)}; if (!user) @@ -666,6 +665,26 @@ handleDeletePlaylistRequest(RequestContext& context) return Response::createOkResponse(); } +static +Response +handleDeleteUserRequest(RequestContext& context) +{ + std::string username {getMandatoryParameterAs(context.parameters, "username")}; + + if (username == context.userName) + throw Error {Error::Code::UserNotAuthorized}; + + auto transaction {context.dbSession.createUniqueTransaction()}; + + User::pointer user {User::getByLoginName(context.dbSession, username)}; + if (!user) + throw Error {Error::Code::RequestedDataNotFound}; + + user.remove(); + + return Response::createOkResponse(); +} + static Response handleGetLicenseRequest(RequestContext& context) @@ -1731,6 +1750,7 @@ static std::map requestEntryPoints {"/rest/createUser.view", {handleCreateUserRequest, true}}, {"/rest/deletePlaylist.view", {handleDeletePlaylistRequest, false}}, {"/rest/deleteShare.view", {handleNotImplementedRequest, false}}, + {"/rest/deleteUser.view", {handleDeleteUserRequest, true}}, {"/rest/getAvatar.view", {handleNotImplementedRequest, false}}, {"/rest/getAlbumList.view", {handleGetAlbumListRequest, false}}, {"/rest/getAlbumList2.view", {handleGetAlbumList2Request, false}},