38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
const MIZIK_URL = process.env.NEXT_PUBLIC_OKI_MIZIK_URL || 'https://funkwhale-server.com'
|
||
// Les variables publiques sont conservées en fallback pendant la migration
|
||
// des déploiements qui utiliseraient encore l’ancien nommage.
|
||
const MIZIK_API_USER = process.env.MIZIK_API_USER || process.env.NEXT_PUBLIC_MIZIK_API_USER || 'user'
|
||
const MIZIK_API_PASSWORD = process.env.MIZIK_API_PASSWORD || process.env.NEXT_PUBLIC_MIZIK_API_PASSWORD || 'password'
|
||
|
||
const FORWARDED_HEADERS = ['content-type', 'content-length', 'content-range', 'accept-ranges']
|
||
|
||
export async function GET(request, props) {
|
||
const {id} = await props.params
|
||
|
||
const upstreamUrl = `${MIZIK_URL}/rest/stream?u=${encodeURIComponent(MIZIK_API_USER)}&p=${encodeURIComponent(MIZIK_API_PASSWORD)}&id=${encodeURIComponent(id)}`
|
||
const range = request.headers.get('range')
|
||
|
||
const upstreamResponse = await fetch(upstreamUrl, {
|
||
headers: range ? {range} : {}
|
||
})
|
||
|
||
if (!upstreamResponse.ok) {
|
||
const message = `Le serveur audio a répondu ${upstreamResponse.status}`
|
||
console.error(message, upstreamUrl.replace(/p=[^&]+/, 'p=***'))
|
||
return Response.json({error: message}, {status: upstreamResponse.status})
|
||
}
|
||
|
||
const headers = new Headers()
|
||
for (const key of FORWARDED_HEADERS) {
|
||
const value = upstreamResponse.headers.get(key)
|
||
if (value) {
|
||
headers.set(key, value)
|
||
}
|
||
}
|
||
|
||
return new Response(upstreamResponse.body, {
|
||
status: upstreamResponse.status,
|
||
headers
|
||
})
|
||
}
|