diff --git a/src/app/api/komga/images/books/[bookId]/thumbnail/route.ts b/src/app/api/komga/images/books/[bookId]/thumbnail/route.ts index 7b98a70..2b07c93 100644 --- a/src/app/api/komga/images/books/[bookId]/thumbnail/route.ts +++ b/src/app/api/komga/images/books/[bookId]/thumbnail/route.ts @@ -1,54 +1,18 @@ -import { NextResponse } from "next/server"; -import { cookies } from "next/headers"; +import { NextRequest, NextResponse } from "next/server"; +import { ImageService } from "@/lib/services/image.service"; -export async function GET(request: Request, { params }: { params: { bookId: string } }) { +export async function GET(request: NextRequest, { params }: { params: { bookId: string } }) { try { - // Récupérer les credentials Komga depuis le cookie - const configCookie = cookies().get("komgaCredentials"); - if (!configCookie) { - return NextResponse.json({ error: "Configuration Komga manquante" }, { status: 401 }); - } + const { buffer, contentType } = await ImageService.getImage(`books/${params.bookId}/thumbnail`); - let config; - try { - config = JSON.parse(atob(configCookie.value)); - } catch (error) { - return NextResponse.json({ error: "Configuration Komga invalide" }, { status: 401 }); - } - - if (!config.credentials?.username || !config.credentials?.password) { - return NextResponse.json({ error: "Credentials Komga manquants" }, { status: 401 }); - } - - // Appel à l'API Komga - const response = await fetch(`${config.serverUrl}/api/v1/books/${params.bookId}/thumbnail`, { - headers: { - Authorization: `Basic ${Buffer.from( - `${config.credentials.username}:${config.credentials.password}` - ).toString("base64")}`, - }, - }); - - if (!response.ok) { - return NextResponse.json( - { error: "Erreur lors de la récupération de l'image" }, - { status: response.status } - ); - } - - // Récupérer le type MIME de l'image - const contentType = response.headers.get("content-type"); - const imageBuffer = await response.arrayBuffer(); - - // Retourner l'image avec le bon type MIME - return new NextResponse(imageBuffer, { + return new NextResponse(buffer, { headers: { "Content-Type": contentType || "image/jpeg", "Cache-Control": "public, max-age=31536000, immutable", }, }); } catch (error) { - console.error("Erreur lors de la récupération de l'image:", error); - return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); + console.error("Erreur lors de la récupération de la miniature du livre:", error); + return new NextResponse("Erreur lors de la récupération de la miniature", { status: 500 }); } } diff --git a/src/app/api/komga/images/series/[seriesId]/thumbnail/route.ts b/src/app/api/komga/images/series/[seriesId]/thumbnail/route.ts index 557c448..f0b27ee 100644 --- a/src/app/api/komga/images/series/[seriesId]/thumbnail/route.ts +++ b/src/app/api/komga/images/series/[seriesId]/thumbnail/route.ts @@ -1,50 +1,20 @@ -import { NextResponse } from "next/server"; -import { cookies } from "next/headers"; +import { NextRequest, NextResponse } from "next/server"; +import { ImageService } from "@/lib/services/image.service"; -export async function GET(request: Request, { params }: { params: { seriesId: string } }) { +export async function GET(request: NextRequest, { params }: { params: { seriesId: string } }) { try { - // Récupérer les credentials Komga depuis le cookie - const configCookie = cookies().get("komga_credentials"); - if (!configCookie) { - return NextResponse.json({ error: "Configuration Komga manquante" }, { status: 401 }); - } + const { buffer, contentType } = await ImageService.getImage( + `/api/v1/series/${params.seriesId}/thumbnail` + ); - let config; - try { - config = JSON.parse(atob(configCookie.value)); - } catch (error) { - return NextResponse.json({ error: "Configuration Komga invalide" }, { status: 401 }); - } - - // Appel à l'API Komga - const response = await fetch(`${config.serverUrl}/api/v1/series/${params.seriesId}/thumbnail`, { - headers: { - Authorization: `Basic ${Buffer.from( - `${config.credentials?.username}:${config.credentials?.password}` - ).toString("base64")}`, - }, - }); - - if (!response.ok) { - return NextResponse.json( - { error: "Erreur lors de la récupération de l'image" }, - { status: response.status } - ); - } - - // Récupérer le type MIME de l'image - const contentType = response.headers.get("content-type"); - const imageBuffer = await response.arrayBuffer(); - - // Retourner l'image avec le bon type MIME - return new NextResponse(imageBuffer, { + return new NextResponse(buffer, { headers: { "Content-Type": contentType || "image/jpeg", "Cache-Control": "public, max-age=31536000, immutable", }, }); } catch (error) { - console.error("Erreur lors de la récupération de l'image:", error); - return NextResponse.json({ error: "Erreur serveur" }, { status: 500 }); + console.error("Erreur lors de la récupération de la miniature de la série:", error); + return new NextResponse("Erreur lors de la récupération de la miniature", { status: 500 }); } } diff --git a/src/app/api/komga/test/route.ts b/src/app/api/komga/test/route.ts index 872128b..13f39a7 100644 --- a/src/app/api/komga/test/route.ts +++ b/src/app/api/komga/test/route.ts @@ -1,70 +1,25 @@ import { NextResponse } from "next/server"; +import { TestService } from "@/lib/services/test.service"; +import { AuthConfig } from "@/types/auth"; export async function POST(request: Request) { try { const { serverUrl, username, password } = await request.json(); - // Vérification des paramètres requis - if (!serverUrl || !username || !password) { - return NextResponse.json({ error: "Tous les champs sont requis" }, { status: 400 }); - } + const config: AuthConfig = { + serverUrl, + credentials: { username, password }, + }; - // Test de connexion à Komga en utilisant la route /api/v1/libraries - const response = await fetch(`${serverUrl}/api/v1/libraries`, { - headers: { - Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString("base64")}`, - }, - }); - - // Log de la réponse pour le debug - console.log("Komga response status:", response.status); - console.log("Komga response headers:", Object.fromEntries(response.headers.entries())); - - if (!response.ok) { - let errorMessage = "Impossible de se connecter au serveur Komga"; - let errorDetails = null; - - try { - errorDetails = await response.json(); - } catch (e) { - // Si on ne peut pas parser la réponse, on utilise le texte brut - try { - errorDetails = await response.text(); - } catch (e) { - // Si on ne peut pas récupérer le texte non plus, on garde le message par défaut - } - } - - // Personnalisation du message d'erreur en fonction du status - if (response.status === 401) { - errorMessage = "Identifiants Komga invalides"; - } else if (response.status === 404) { - errorMessage = "Le serveur Komga n'est pas accessible à cette adresse"; - } - - return NextResponse.json( - { - error: errorMessage, - details: { - status: response.status, - statusText: response.statusText, - errorDetails, - }, - }, - { status: response.status } - ); - } - - const libraries = await response.json(); - return NextResponse.json({ success: true, libraries }); + const result = await TestService.testConnection(config); + return NextResponse.json(result); } catch (error) { console.error("Erreur lors du test de connexion:", error); return NextResponse.json( { - error: "Le serveur Komga est inaccessible", - details: error instanceof Error ? error.message : "Erreur inconnue", + error: error instanceof Error ? error.message : "Erreur inconnue", }, - { status: 500 } + { status: 400 } ); } }