From 299376abe50b9645928eb93e06765671bf50c36a Mon Sep 17 00:00:00 2001 From: Brieuc Dubois <git@bhasher.com> Date: Sat, 7 Dec 2024 22:49:47 +0200 Subject: [PATCH] Fix docker build & technical-debt --- backend/app/main.py | 2 +- docker-compose.yaml | 6 ++++-- frontend/global.d.ts | 6 ++++++ frontend/package.json | 2 +- frontend/src/hooks.server.ts | 14 +++++++++++--- frontend/src/lib/config.ts | 16 ++++++++++++---- frontend/tailwind.config.js | 5 +++-- 7 files changed, 38 insertions(+), 13 deletions(-) diff --git a/backend/app/main.py b/backend/app/main.py index 77902752..77c75c3b 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -65,7 +65,7 @@ app.add_middleware( allow_headers=["*"], ) -apiRouter = APIRouter(prefix="/api") +apiRouter = APIRouter(prefix="/tmp-api") v1Router = APIRouter(prefix="/v1") authRouter = APIRouter(prefix="/auth", tags=["auth"]) usersRouter = APIRouter(prefix="/users", tags=["users"]) diff --git a/docker-compose.yaml b/docker-compose.yaml index 747c14f5..b2cc191a 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -11,6 +11,7 @@ services: - external labels: - "traefik.enable=true" + #- "traefik.http.routers.frontend.rule=Host(`languagelab.be`)" - "traefik.http.routers.frontend.rule=Host(`languagelab.sipr.ucl.ac.be`)" - "traefik.http.routers.frontend.tls=true" - "traefik.http.services.frontend.loadbalancer.server.port=8080" @@ -25,7 +26,7 @@ services: - ADMIN_EMAIL=${LANGUAGELAB_ADMIN_EMAIL} - ADMIN_PASSWORD=${LANGUAGELAB_ADMIN_PASSWORD} - CALCOM_SECRET=${LANGUAGELAB_CALCOM_SECRET} - - ALLOWED_ORIGINS=https://languagelab.sipr.ucl.ac.be + - ALLOWED_ORIGINS=https://languagelab.be,https://api.languagelab.be volumes: - /mnt/data/languagelab/backend:/data - /etc/timezone:/etc/timezone:ro @@ -36,7 +37,8 @@ services: - "traefik.enable=true" - "traefik.http.routers.backend.tls=true" - "traefik.http.services.backend.loadbalancer.server.port=8000" - - "traefik.http.routers.backend.rule=Host(`languagelab.sipr.ucl.ac.be`) && (PathPrefix(`/api`) || PathPrefix(`/docs`) || PathPrefix(`/openapi.json`))" + #- "traefik.http.routers.backend.rule=Host(`languagelab.be`) && (PathPrefix(`/tmp-api`) || PathPrefix(`/docs`) || PathPrefix(`/openapi.json`))" + - "traefik.http.routers.backend.rule=Host(`languagelab.sipr.ucl.ac.be`) && (PathPrefix(`/tmp-api`) || PathPrefix(`/docs`) || PathPrefix(`/openapi.json`))" traefik: container_name: traefik diff --git a/frontend/global.d.ts b/frontend/global.d.ts index a95b876f..f7cd09ec 100644 --- a/frontend/global.d.ts +++ b/frontend/global.d.ts @@ -6,3 +6,9 @@ declare module 'emoji-picker-element'; interface ImportMetaEnv { VITE_API_URL: string; } + +declare global { + interface RequestInit { + duplex?: string; + } +} diff --git a/frontend/package.json b/frontend/package.json index bb074c8d..f0a6699c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "scripts": { - "dev": "VITE_API_URL=http://127.0.0.1:5173/api VITE_APP_URL=http://127.0.0.1:5173 VITE_WS_URL=ws://127.0.0.1:8000/api/v1/ws vite dev --host 127.0.0.1", + "dev": "VITE_API_URL=http://127.0.0.1:8000/tmp-api VITE_APP_URL=http://127.0.0.1:5173 VITE_WS_URL=ws://127.0.0.1:8000/tmp-api/v1/ws vite dev --host 127.0.0.1", "build": "vite build", "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", diff --git a/frontend/src/hooks.server.ts b/frontend/src/hooks.server.ts index 1d4d7ef2..a600a147 100644 --- a/frontend/src/hooks.server.ts +++ b/frontend/src/hooks.server.ts @@ -1,20 +1,27 @@ import { type Handle, type RequestEvent } from '@sveltejs/kit'; import { jwtDecode } from 'jwt-decode'; import { type JWTContent } from '$lib/utils/login'; +import config from '$lib/config'; -const API_BASE_URL = 'http://127.0.0.1:8000/api/v1'; const PROXY_PATH = '/api'; const handleApiProxy = async (event: RequestEvent, cookies: { name: string; value: string }[]) => { const strippedPath = event.url.pathname.substring(PROXY_PATH.length); - const urlPath = `${API_BASE_URL}${strippedPath}${event.url.search}`; + console.log('redirect to ', `${config.API_URL}/v1${strippedPath}${event.url.search}`); + const urlPath = `${config.API_URL}/v1${strippedPath}${event.url.search}`; const proxiedUrl = new URL(urlPath); event.request.headers.delete('connection'); event.request.headers.set('cookie', cookies.map((c) => `${c.name}=${c.value}`).join('; ')); - return event.fetch(proxiedUrl.toString(), event.request).catch((err: any) => { + return fetch(proxiedUrl.toString(), { + body: event.request.body, + method: event.request.method, + headers: event.request.headers, + // @ts-ignore: Duplex is missing + duplex: 'half' + }).catch((err: any) => { console.log('Could not proxy API request: ', err); throw err; }); @@ -28,6 +35,7 @@ export const handle: Handle = async ({ event, resolve }) => { const cookies = event.cookies.getAll(); if (event.url.pathname.startsWith(PROXY_PATH)) { + console.log(event.url.pathname); return await handleApiProxy(event, cookies); } diff --git a/frontend/src/lib/config.ts b/frontend/src/lib/config.ts index ca3b4dd9..9e42973b 100644 --- a/frontend/src/lib/config.ts +++ b/frontend/src/lib/config.ts @@ -1,8 +1,16 @@ export default { - API_URL: import.meta.env.VITE_API_URL || 'https://languagelab.sipr.ucl.ac.be/api', - API_PROXY: import.meta.env.VITE_API_PROXY || 'https://languagelab.sipr.ucl.ac.be:8000', - APP_URL: import.meta.env.VITE_APP_URL || 'https://languagelab.sipr.ucl.ac.be', - WS_URL: import.meta.env.VITE_WS_URL || 'wss://languagelab.sipr.ucl.ac.be/api/v1/ws', + API_URL: import.meta.env.VITE_API_URL || 'https://languagelab.sipr.ucl.ac.be/tmp-api', + API_PROXY: import.meta.env.VITE_API_PROXY || 'https://languagelab.sipr.ucl.ac.be/tmp-api', + APP_URL: import.meta.env.VITE_APP_URL || 'https://languagelab.be', + WS_URL: import.meta.env.VITE_WS_URL || 'wss://languagelab.sipr.ucl.ac.be/tmp-api/v1/ws', + //API_URL: import.meta.env.VITE_API_URL || 'https://languagelab.be/tmp-api', + //API_PROXY: import.meta.env.VITE_API_PROXY || 'https://languagelab.be/tmp-api', + //WS_URL: import.meta.env.VITE_WS_URL || 'wss://languagelab.be/tmp-api/v1/ws', + // + //API_URL: import.meta.env.VITE_API_URL || 'https://api.languagelab.be/api', + //API_PROXY: import.meta.env.VITE_API_PROXY || 'https://api.languagelab.be', + //WS_URL: import.meta.env.VITE_WS_URL || 'wss://api.languagelab.be/api/v1/ws', + // // 1 week - 2 hours WEEKLY_SURVEY_INTERVAL: (7 * 24 - 2) * 60 * 60 * 1000, LEARNING_LANGUAGES: { diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js index a29c48b7..0bf64d16 100644 --- a/frontend/tailwind.config.js +++ b/frontend/tailwind.config.js @@ -1,4 +1,5 @@ -/** @type {import('tailwindcss').Config} */ +import daisyui from 'daisyui'; + export default { content: ['./src/**/*.{html,js,svelte,ts}'], theme: { @@ -8,7 +9,7 @@ export default { } } }, - plugins: [require('daisyui')], + plugins: [daisyui], daisyui: { themes: [ 'bumblebee', -- GitLab