TrevTV / Lidarr.Plugin.Deezer

Lidarr plugin adding Deezer as an indexer and downloader without Deemix
1 stars 0 forks source link

Someone (likely not Deezer?) disabling accounts of some Firehawk ARLs #3

Closed formeo14 closed 2 months ago

formeo14 commented 2 months ago

I extensively tested the plugin using numerous songs. Eventually, Lidarr indicated an issue with the indexer and disabled it. I attempted to resolve this by restarting Lidarr, but it began indexing without processing the releases. Consequently, I decided to reinstall your plugin. However, now the plugin is unable to connect to the indexer, and I am encountering the following error: Newtonsoft.Json.JsonReaderException: Error reading JObject from JsonReader.

2024-08-25 09:55:05.9|Warn|IndexerRepository|Skipping provider of unknown type DeemixIndexerSettings 2024-08-25 09:55:08.8|Warn|Deezer|Unable to connect to indexer [v2.5.2.4317] Newtonsoft.Json.JsonReaderException: Error reading JObject from JsonReader. Path '', line 0, position 0. at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings) at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings) at DeezNET.GWApi.Call(String method, JObject args, Dictionary`2 parameters, Boolean needsArl, CancellationToken token) at DeezNET.GWApi.GetUserData(CancellationToken token) at DeezNET.GWApi.SetToken(CancellationToken token) at DeezNET.DeezerClient.SetARL(String arl) 2024-08-25 09:55:08.8|Warn|LidarrErrorPipeline|FluentValidation.ValidationException: Validation failed: -- : Unable to connect to indexer, check the log for more details [v2.5.2.4317] FluentValidation.ValidationException: Validation failed: -- : Unable to connect to indexer, check the log for more details at Lidarr.Api.V1.ProviderControllerBase`4.VerifyValidationResult(ValidationResult validationResult, Boolean includeWarnings) in ./Lidarr.Api.V1/ProviderControllerBase.cs:line 277 at Lidarr.Api.V1.ProviderControllerBase`4.Test(TProviderDefinition definition, Boolean includeWarnings) in ./Lidarr.Api.V1/ProviderControllerBase.cs:line 268 at Lidarr.Api.V1.ProviderControllerBase`4.CreateProvider(TProviderResource providerResource, Boolean forceSave) in ./Lidarr.Api.V1/ProviderControllerBase.cs:line 78 at lambda_method173(Closure , Object , Object[] ) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Lidarr.Http.Middleware.BufferingMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/BufferingMiddleware.cs:line 28 at Lidarr.Http.Middleware.IfModifiedMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/IfModifiedMiddleware.cs:line 41 at Lidarr.Http.Middleware.CacheHeaderMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/CacheHeaderMiddleware.cs:line 33 at Lidarr.Http.Middleware.StartingUpMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/StartingUpMiddleware.cs:line 38 at Lidarr.Http.Middleware.UrlBaseMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/UrlBaseMiddleware.cs:line 27 at Lidarr.Http.Middleware.VersionMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/VersionMiddleware.cs:line 29 at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context) at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task) 2024-08-25 09:55:08.8|Warn|LidarrErrorPipeline|Invalid request Validation failed: -- : Unable to connect to indexer, check the log for more details 2024-08-25 09:55:08.8|Debug|Api|[POST] /api/v1/indexer: 400.BadRequest (2935 ms) 2024-08-25 09:55:11.5|Debug|Lidarr.Http.Authentication.ApiKeyAuthenticationHandler|AuthenticationScheme: API was successfully authenticated. 2024-08-25 09:55:11.5|Warn|IndexerRepository|Skipping provider of unknown type DeemixIndexerSettings 2024-08-25 09:55:12.9|Warn|Deezer|Unable to connect to indexer [v2.5.2.4317] Newtonsoft.Json.JsonReaderException: Error reading JObject from JsonReader. Path '', line 0, position 0. at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader, JsonLoadSettings settings) at Newtonsoft.Json.Linq.JObject.Parse(String json, JsonLoadSettings settings) at DeezNET.GWApi.Call(String method, JObject args, Dictionary`2 parameters, Boolean needsArl, CancellationToken token) at DeezNET.GWApi.GetUserData(CancellationToken token) at DeezNET.GWApi.SetToken(CancellationToken token) at DeezNET.DeezerClient.SetARL(String arl) 2024-08-25 09:55:12.9|Warn|LidarrErrorPipeline|FluentValidation.ValidationException: Validation failed: -- : Unable to connect to indexer, check the log for more details [v2.5.2.4317] FluentValidation.ValidationException: Validation failed: -- : Unable to connect to indexer, check the log for more details at Lidarr.Api.V1.ProviderControllerBase`4.VerifyValidationResult(ValidationResult validationResult, Boolean includeWarnings) in ./Lidarr.Api.V1/ProviderControllerBase.cs:line 277 at Lidarr.Api.V1.ProviderControllerBase`4.Test(TProviderDefinition definition, Boolean includeWarnings) in ./Lidarr.Api.V1/ProviderControllerBase.cs:line 268 at Lidarr.Api.V1.ProviderControllerBase`4.Test(TProviderResource providerResource, Boolean forceTest) in ./Lidarr.Api.V1/ProviderControllerBase.cs:line 213 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync() at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Lidarr.Http.Middleware.BufferingMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/BufferingMiddleware.cs:line 28 at Lidarr.Http.Middleware.IfModifiedMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/IfModifiedMiddleware.cs:line 41 at Lidarr.Http.Middleware.CacheHeaderMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/CacheHeaderMiddleware.cs:line 33 at Lidarr.Http.Middleware.StartingUpMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/StartingUpMiddleware.cs:line 38 at Lidarr.Http.Middleware.UrlBaseMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/UrlBaseMiddleware.cs:line 27 at Lidarr.Http.Middleware.VersionMiddleware.InvokeAsync(HttpContext context) in ./Lidarr.Http/Middleware/VersionMiddleware.cs:line 29 at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context) at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task) 2024-08-25 09:55:12.9|Warn|LidarrErrorPipeline|Invalid request Validation failed: -- : Unable to connect to indexer, check the log for more details 2024-08-25 09:55:12.9|Debug|Api|[POST] /api/v1/indexer/test: 400.BadRequest (1389 ms)
TrevTV commented 2 months ago

It seems the way the internal Deezer authentication API works was changed or something? Will look into it

TrevTV commented 2 months ago

My current assumption is that they are attempting to prevent ARL sharing, I'm not sure if you're using a personal account or not, but it seems like only personal/non-shared accounts work?

formeo14 commented 2 months ago

I think you are right. With these ARL's Deezer only returns an empty line as response and also the Deemix GUI seems like it does not work any longer with shared ARL's. Sad but it they took a long time to prevent this. I always wondered when they will close it. Other public ARL's still work, that are not from firehawk, so it could also be that they only blocked these ARL's

TrevTV commented 2 months ago

Seems like it was just a limited account deletion, Firehawk seeks to have already updated the ARLs with functional ones. To fix the plugin, clearing the ARL in the indexer settings then saving should refresh it fine.

formeo14 commented 2 months ago

Great 👍

TrevTV commented 2 months ago

Another minor update, seems like it likely wasn't Deezer doing it, at least judging by the wording of this message from Firehawk firehawk message

formeo14 commented 2 months ago

Now I would really like to know what happened. That's really weird, how can someone else deactivate or invalidate the ARLs on deezer?

TrevTV commented 2 months ago

ARLs are effectively an email and password. When testing ARLs for stuff, I've logged into them on the Deezer website by replacing my ARL in the cookies with one of those public ones. I assume from there you could potentially delete the account or change stuff to cause an ARL change.

formeo14 commented 2 months ago

Ah oh that makes sense. I would never have thought of simply replacing the ARL in the cookie. Thanks for clarifying that. I thought the ARL was like an API key that is generated independently of the account. That means Account -> ARL key and ARL --x--> Account, but that doesn't seem to be the case.