From 7a62cb4dcf783fe49e68f4316ddb9fb5d94be6b9 Mon Sep 17 00:00:00 2001 From: Florian <52180080+florianjs@users.noreply.github.com> Date: Thu, 8 Jan 2026 15:23:59 +0100 Subject: [PATCH] Add HEAD handler for Torznab API to fix Prowlarr connection --- package.json | 2 +- server/api/torznab/index.head.ts | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 server/api/torznab/index.head.ts diff --git a/package.json b/package.json index 8604f8a..497264d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "trackarr", - "version": "0.5.4", + "version": "0.5.5", "type": "module", "private": true, "scripts": { diff --git a/server/api/torznab/index.head.ts b/server/api/torznab/index.head.ts new file mode 100644 index 0000000..5fc6db9 --- /dev/null +++ b/server/api/torznab/index.head.ts @@ -0,0 +1,26 @@ +/** + * Torznab API - HEAD handler + * HEAD /api/torznab + * + * Returns proper headers for HEAD requests (used by Prowlarr/Sonarr/Radarr to test connection) + * Without this, Nuxt SSR middleware intercepts HEAD requests and redirects to login + */ + +import { getTorznabEnabled } from '../../utils/torznabSettings'; + +export default defineEventHandler(async (event) => { + // Check if Torznab API is enabled + const enabled = await getTorznabEnabled(); + + if (!enabled) { + setHeader(event, 'Content-Type', 'application/xml; charset=utf-8'); + setResponseStatus(event, 503); + return ''; + } + + // Return headers that indicate this is a valid Torznab endpoint + setHeader(event, 'Content-Type', 'application/xml; charset=utf-8'); + setHeader(event, 'Cache-Control', 'public, max-age=3600'); + setResponseStatus(event, 200); + return ''; +});