{"record":{"id":"1330fc04268c37ef","repo":"Jackett/Jackett","slug":"errormessage-login-failed-1330fc","errorCode":null,"errorMessage":"errorMessage ?? \"Login failed.\"","messagePattern":"errorMessage \\?\\? \"Login failed\\.\"","errorType":"exception","errorClass":"ExceptionWithConfigData","httpStatus":null,"severity":"error","filePath":"src/Jackett.Common/Indexers/Definitions/ImmortalSeed.cs","lineNumber":173,"sourceCode":"\n        public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)\n        {\n            LoadValuesFromJson(configJson);\n\n            var pairs = new Dictionary<string, string> {\n                { \"username\", configData.Username.Value },\n                { \"password\", configData.Password.Value }\n            };\n\n            var response = await RequestLoginAndFollowRedirect(LoginUrl, pairs, null, true, null, LoginUrl);\n\n            await ConfigureIfOK(response.Cookies, response.ContentString.Contains(\"logout.php\"), () =>\n            {\n                var parser = new HtmlParser();\n                using var document = parser.ParseDocument(response.ContentString);\n                var errorMessage = document.QuerySelector(\"#main table td:contains(\\\"ERROR\\\")\")?.TextContent.Trim();\n\n                throw new ExceptionWithConfigData(errorMessage ?? \"Login failed.\", configData);\n            });\n\n            return IndexerConfigurationStatus.RequiresTesting;\n        }\n\n        protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)\n        {\n            var searchParams = new Dictionary<string, string>\n            {\n                { \"category\", \"0\" },\n                { \"include_dead_torrents\", \"yes\" },\n                { \"sort\", GetSortBy },\n                { \"order\", GetOrder }\n            };\n\n            var searchString = Regex.Replace(query.GetQueryString(), @\"[ -._]+\", \" \").Trim();\n\n            if (!string.IsNullOrWhiteSpace(searchString))","sourceCodeStart":155,"sourceCodeEnd":191,"githubUrl":"https://github.com/Jackett/Jackett/blob/adff1941476d8057a430cf55360356c1d23e971e/src/Jackett.Common/Indexers/Definitions/ImmortalSeed.cs#L155-L191","documentation":"Thrown by ImmortalSeed.ApplyConfiguration when login fails. The code posts credentials and checks for 'logout.php' in the response; if absent, it parses the page for an error cell matching '#main table td:contains(\"ERROR\")'. If a specific error is found it is used as the message; otherwise the fallback 'Login failed.' is thrown. This is an ExceptionWithConfigData, surfaced to the user as a configuration problem.","triggerScenarios":"POST to LoginUrl returns a page without 'logout.php' — wrong username/password, account disabled, IP ban, or a captcha/error block on the login page that the td:contains('ERROR') selector may or may not catch.","commonSituations":"Password changed; account disabled for inactivity/ratio; ImmortalSeed added a captcha or changed its error CSS class so the selector misses the message; wrong tracker credentials entered.","solutions":["Log in to ImmortalSeed manually with the same credentials to verify they work.","If the browser login works, check for a captcha or new error element on the login page.","Re-enter username and password in the Jackett indexer configuration.","Confirm the account is active (not disabled/banned) on the website.","Verify the ImmortalSeed site link is current."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Validate credentials before login\nif (string.IsNullOrWhiteSpace(configData.Username?.Value) || string.IsNullOrWhiteSpace(configData.Password?.Value))\n    throw new InvalidOperationException(\"ImmortalSeed username and password are required.\");","typeGuard":null,"tryCatchPattern":"try\n{\n    await indexer.ApplyConfiguration(configJson);\n}\ncatch (ExceptionWithConfigData ex)\n{\n    // ex.Message is the site error or 'Login failed.'\n    logger.Error(\"ImmortalSeed login failed: {Message}\", ex.Message);\n    // Prompt user to verify credentials\n}","preventionTips":["Log in to ImmortalSeed manually to confirm credentials before configuring.","Check for account disablement due to inactivity or ratio.","Watch for captcha/error blocks that change the login page CSS.","Keep the site link current."],"tags":["login","authentication","immortalseed","config","html-scraping"],"backgroundTag":null,"analyzedSha":"adff1941476d8057a430cf55360356c1d23e971e","analyzedAt":"2026-08-13T15:06:32.872Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}