Compare commits
2
Commits
4e6341c5d5
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4cc5c405bb
|
||
|
|
c8841a253f
|
@@ -4,6 +4,7 @@ import {GET} from '../route'
|
|||||||
function fakeUpstreamResponse({status = 200, headers = {}, body = 'audio-bytes'} = {}) {
|
function fakeUpstreamResponse({status = 200, headers = {}, body = 'audio-bytes'} = {}) {
|
||||||
return {
|
return {
|
||||||
status,
|
status,
|
||||||
|
ok: status >= 200 && status < 300,
|
||||||
body,
|
body,
|
||||||
headers: {
|
headers: {
|
||||||
get: key => headers[key.toLowerCase()] ?? null
|
get: key => headers[key.toLowerCase()] ?? null
|
||||||
@@ -52,4 +53,16 @@ describe('GET /api/mizik-stream/[id]', () => {
|
|||||||
expect(response.status).toBe(200)
|
expect(response.status).toBe(200)
|
||||||
expect(response.headers.get('content-type')).toBe('audio/mpeg')
|
expect(response.headers.get('content-type')).toBe('audio/mpeg')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('renvoie une erreur JSON si le serveur audio répond en erreur', async () => {
|
||||||
|
global.fetch = vi.fn(async () => fakeUpstreamResponse({status: 401, headers: {'content-type': 'application/json'}, body: '{"error": "unauthorized"}'}))
|
||||||
|
|
||||||
|
const request = new Request('http://localhost/api/mizik-stream/7')
|
||||||
|
const response = await GET(request, {params: Promise.resolve({id: '7'})})
|
||||||
|
|
||||||
|
expect(response.status).toBe(401)
|
||||||
|
expect(response.headers.get('content-type')).toContain('application/json')
|
||||||
|
const json = await response.json()
|
||||||
|
expect(json.error).toContain('401')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
const MIZIK_URL = process.env.NEXT_PUBLIC_OKI_MIZIK_URL || 'https://funkwhale-server.com'
|
const MIZIK_URL = process.env.NEXT_PUBLIC_OKI_MIZIK_URL || 'https://funkwhale-server.com'
|
||||||
const MIZIK_API_USER = process.env.MIZIK_API_USER || 'user'
|
// Les variables publiques sont conservées en fallback pendant la migration
|
||||||
const MIZIK_API_PASSWORD = process.env.MIZIK_API_PASSWORD || 'password'
|
// 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']
|
const FORWARDED_HEADERS = ['content-type', 'content-length', 'content-range', 'accept-ranges']
|
||||||
|
|
||||||
@@ -14,6 +16,12 @@ export async function GET(request, props) {
|
|||||||
headers: range ? {range} : {}
|
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()
|
const headers = new Headers()
|
||||||
for (const key of FORWARDED_HEADERS) {
|
for (const key of FORWARDED_HEADERS) {
|
||||||
const value = upstreamResponse.headers.get(key)
|
const value = upstreamResponse.headers.get(key)
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ const CONTINENTS = ['Afrique', 'Asie', 'Europe']
|
|||||||
|
|
||||||
const TRAD_FIELDS = [
|
const TRAD_FIELDS = [
|
||||||
// Afrique — langues vedettes en premier
|
// Afrique — langues vedettes en premier
|
||||||
|
{field: 'ayisyen', title: 'Ayisyen 🇭🇹', continent: 'Afrique', vedette: true},
|
||||||
{field: 'yoruba', title: 'Yorùbá', continent: 'Afrique', vedette: true},
|
{field: 'yoruba', title: 'Yorùbá', continent: 'Afrique', vedette: true},
|
||||||
{field: 'lingala', title: 'Lingála', continent: 'Afrique', vedette: true},
|
{field: 'lingala', title: 'Lingála', continent: 'Afrique', vedette: true},
|
||||||
{field: 'wolof', title: 'Wolof', continent: 'Afrique', vedette: true},
|
{field: 'wolof', title: 'Wolof', continent: 'Afrique', vedette: true},
|
||||||
|
|||||||
Reference in New Issue
Block a user