From ac5772008b55c44e34abc7a873997e4a3be7b962 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 29 Mar 2025 10:46:48 +0100 Subject: [PATCH 1/8] fix warning Docker build --- Dockerfile-admin | 2 +- Dockerfile-checker | 2 +- Dockerfile-dashboard | 2 +- Dockerfile-evdist | 2 +- Dockerfile-frontend-ui | 2 +- Dockerfile-generator | 2 +- Dockerfile-get-remote-files | 2 +- Dockerfile-nginx | 15 +++++++++++---- Dockerfile-qa | 4 ++-- Dockerfile-receiver | 2 +- Dockerfile-remote-challenge-sync-airbus | 2 +- Dockerfile-remote-scores-sync-zqds | 2 +- Dockerfile-repochecker | 2 +- 13 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Dockerfile-admin b/Dockerfile-admin index d43c2888..f2c285f2 100644 --- a/Dockerfile-admin +++ b/Dockerfile-admin @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-checker b/Dockerfile-checker index 1343fbd2..144ac0a7 100644 --- a/Dockerfile-checker +++ b/Dockerfile-checker @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-dashboard b/Dockerfile-dashboard index 7c24e279..b8291bba 100644 --- a/Dockerfile-dashboard +++ b/Dockerfile-dashboard @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-evdist b/Dockerfile-evdist index 1b9bffec..45a2c506 100644 --- a/Dockerfile-evdist +++ b/Dockerfile-evdist @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-frontend-ui b/Dockerfile-frontend-ui index 7226e1d8..a14b0c58 100644 --- a/Dockerfile-frontend-ui +++ b/Dockerfile-frontend-ui @@ -1,4 +1,4 @@ -FROM node:23-alpine as nodebuild +FROM node:23-alpine AS nodebuild WORKDIR /ui diff --git a/Dockerfile-generator b/Dockerfile-generator index 6b4c6a1d..2574e614 100644 --- a/Dockerfile-generator +++ b/Dockerfile-generator @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-get-remote-files b/Dockerfile-get-remote-files index 6a71caa4..95e1c5f3 100644 --- a/Dockerfile-get-remote-files +++ b/Dockerfile-get-remote-files @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-nginx b/Dockerfile-nginx index 74da7700..41326840 100644 --- a/Dockerfile-nginx +++ b/Dockerfile-nginx @@ -1,4 +1,4 @@ -FROM node:23-alpine as nodebuild +FROM node:23-alpine AS nodebuild WORKDIR /ui @@ -10,9 +10,16 @@ RUN npm install --network-timeout=100000 && \ FROM nginx:stable-alpine-slim -ENV FIC_BASEURL=/ \ - HOST_RECEIVER=receiver:8080 HOST_ADMIN=admin:8081 HOST_DASHBOARD=dashboard:8082 HOST_QA=qa:8083 \ - PATH_FILES=/srv/FILES PATH_STARTINGBLOCK=/srv/STARTINGBLOCK PATH_STATIC=/srv/htdocs-frontend PATH_SETTINGS=/srv/SETTINGSDIST PATH_TEAMS=/srv/TEAMS +ENV FIC_BASEURL / +ENV HOST_RECEIVER receiver:8080 +ENV HOST_ADMIN admin:8081 +ENV HOST_DASHBOARD dashboard:8082 +ENV HOST_QA qa:8083 +ENV PATH_FILES /srv/FILES +ENV PATH_STARTINGBLOCK /srv/STARTINGBLOCK +ENV PATH_STATIC /srv/htdocs-frontend +ENV PATH_SETTINGS /srv/SETTINGSDIST +ENV PATH_TEAMS /srv/TEAMS EXPOSE 80 diff --git a/Dockerfile-qa b/Dockerfile-qa index 7e2e6488..37f3a1b0 100644 --- a/Dockerfile-qa +++ b/Dockerfile-qa @@ -1,4 +1,4 @@ -FROM node:23-alpine as nodebuild +FROM node:23-alpine AS nodebuild WORKDIR /ui @@ -8,7 +8,7 @@ RUN npm install --network-timeout=100000 && \ npm run build -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-receiver b/Dockerfile-receiver index 49d15871..f2cac038 100644 --- a/Dockerfile-receiver +++ b/Dockerfile-receiver @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-remote-challenge-sync-airbus b/Dockerfile-remote-challenge-sync-airbus index 516dd6d1..47a5e167 100644 --- a/Dockerfile-remote-challenge-sync-airbus +++ b/Dockerfile-remote-challenge-sync-airbus @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-remote-scores-sync-zqds b/Dockerfile-remote-scores-sync-zqds index 1a5c68f8..e5ff87fb 100644 --- a/Dockerfile-remote-scores-sync-zqds +++ b/Dockerfile-remote-scores-sync-zqds @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git diff --git a/Dockerfile-repochecker b/Dockerfile-repochecker index 8f74b1ad..d02bc1de 100644 --- a/Dockerfile-repochecker +++ b/Dockerfile-repochecker @@ -1,4 +1,4 @@ -FROM golang:1-alpine as gobuild +FROM golang:1-alpine AS gobuild RUN apk add --no-cache git From 7af23ed297aa2abfd73f6c0c5fe95228f933913a Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 29 Mar 2025 11:54:35 +0100 Subject: [PATCH 2/8] frontend: Remove text indentation on cards --- frontend/fic/src/lib/components/CardTheme.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/fic/src/lib/components/CardTheme.svelte b/frontend/fic/src/lib/components/CardTheme.svelte index 086a3bc1..d32c51b9 100644 --- a/frontend/fic/src/lib/components/CardTheme.svelte +++ b/frontend/fic/src/lib/components/CardTheme.svelte @@ -44,7 +44,7 @@ style:filter={theme.locked ? "grayscale(60%)":null} > {/if} - + {#if exercice} {#if $exercices_idx[exercice.id].tags.includes("Reverse") || $exercices_idx[exercice.id].tags.includes("Reverse Engineering")} #Reverse From 698e69d132e6ff80e783b96a81f50571053b21bd Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 29 Mar 2025 12:02:44 +0100 Subject: [PATCH 3/8] frontend: Fix indexes of tags --- frontend/fic/src/routes/tags/[tag]/+page.svelte | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/fic/src/routes/tags/[tag]/+page.svelte b/frontend/fic/src/routes/tags/[tag]/+page.svelte index a16a5704..acba8de4 100644 --- a/frontend/fic/src/routes/tags/[tag]/+page.svelte +++ b/frontend/fic/src/routes/tags/[tag]/+page.svelte @@ -26,7 +26,7 @@ const th = $themes[k]; for (const ex of th.exercices) { if (ex.tags.indexOf(data.tag) >= 0) { - tmp_exercices.push({theme: th, exercice: ex, index: k + "," + ex}); + tmp_exercices.push({theme: th, exercice: ex, index: k + "," + ex.id}); } } } From 42b9e54ec715a700182100faabefac2530ba6b14 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 29 Mar 2025 12:14:16 +0100 Subject: [PATCH 4/8] frontend: Avoid relative paths --- frontend/fic/svelte.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/fic/svelte.config.js b/frontend/fic/svelte.config.js index 13b2b0a0..f83b5ae2 100644 --- a/frontend/fic/svelte.config.js +++ b/frontend/fic/svelte.config.js @@ -7,7 +7,7 @@ const config = { fallback: 'index.html' }), paths: { - relative: true + relative: false }, } }; From eaca60e5e0e818d56fa7e6969bf80c20a3082d04 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 29 Mar 2025 12:14:41 +0100 Subject: [PATCH 5/8] frontend: Normalize tags --- frontend/fic/src/lib/components/NavTags.svelte | 4 ++-- frontend/fic/src/lib/stores/mythemes.js | 1 + frontend/fic/src/routes/tags/[tag]/+page.svelte | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/frontend/fic/src/lib/components/NavTags.svelte b/frontend/fic/src/lib/components/NavTags.svelte index ae160056..0bb644ba 100644 --- a/frontend/fic/src/lib/components/NavTags.svelte +++ b/frontend/fic/src/lib/components/NavTags.svelte @@ -29,8 +29,8 @@ bind:value={filter} >
- {#each Object.keys($tags).sort(function (a, b) { return a.toLowerCase().localeCompare(b.toLowerCase()); }) as itag, index} - {#if (filter === "" && $tags[itag].count > 1) || (filter !== "" && itag.toLowerCase().indexOf(filter.toLowerCase()) >= 0)} + {#each Object.keys($tags).sort(function (a, b) { return a.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().localeCompare(b.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()); }) as itag, index} + {#if (filter === "" && $tags[itag].count > 1) || (filter !== "" && itag.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().indexOf(filter.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()) >= 0)} #{itag} diff --git a/frontend/fic/src/lib/stores/mythemes.js b/frontend/fic/src/lib/stores/mythemes.js index 26c96831..e1744866 100644 --- a/frontend/fic/src/lib/stores/mythemes.js +++ b/frontend/fic/src/lib/stores/mythemes.js @@ -59,6 +59,7 @@ export const tags = derived([my, themesStore], ([$my, $themesStore]) => { for (const key in $themesStore) { for (const exercice of $themesStore[key].exercices) { exercice.tags.forEach((tag) => { + tag = tag.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase(); if (!tags[tag]) tags[tag] = {count: 1, solved: 0}; else diff --git a/frontend/fic/src/routes/tags/[tag]/+page.svelte b/frontend/fic/src/routes/tags/[tag]/+page.svelte index acba8de4..a7f0fd53 100644 --- a/frontend/fic/src/routes/tags/[tag]/+page.svelte +++ b/frontend/fic/src/routes/tags/[tag]/+page.svelte @@ -25,7 +25,7 @@ for (let k in $themes) { const th = $themes[k]; for (const ex of th.exercices) { - if (ex.tags.indexOf(data.tag) >= 0) { + if (ex.tags.map(t => t.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()).indexOf(data.tag.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()) >= 0) { tmp_exercices.push({theme: th, exercice: ex, index: k + "," + ex.id}); } } From f05664e2e3f45fc71b864c7014d9bdb73eb7625d Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 29 Mar 2025 12:17:03 +0100 Subject: [PATCH 6/8] frontend: Reset current theme when going to tag page --- frontend/fic/src/routes/tags/[tag]/+page.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/fic/src/routes/tags/[tag]/+page.js b/frontend/fic/src/routes/tags/[tag]/+page.js index 8d47825a..b3c0d650 100644 --- a/frontend/fic/src/routes/tags/[tag]/+page.js +++ b/frontend/fic/src/routes/tags/[tag]/+page.js @@ -1,4 +1,8 @@ +import { set_current_theme } from '$lib/stores/themes'; + export async function load({ params }) { + set_current_theme.set(null); + return { tag: params.tag, }; From 7da127ecb0bc94c48c1c50159186b536e3e38880 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 29 Mar 2025 12:46:16 +0100 Subject: [PATCH 7/8] frontend: Improve team registration processus --- .../components/RegistrationFormJoinTeam.svelte | 12 +++++++++++- frontend/fic/src/lib/stores/my.js | 3 +++ frontend/fic/src/routes/+layout.svelte | 18 ++++++++++++++++++ frontend/fic/src/routes/+page.svelte | 17 ++++------------- frontend/fic/src/routes/register/+page.svelte | 15 +++++++++++++-- 5 files changed, 49 insertions(+), 16 deletions(-) diff --git a/frontend/fic/src/lib/components/RegistrationFormJoinTeam.svelte b/frontend/fic/src/lib/components/RegistrationFormJoinTeam.svelte index 75a3e395..81f43702 100644 --- a/frontend/fic/src/lib/components/RegistrationFormJoinTeam.svelte +++ b/frontend/fic/src/lib/components/RegistrationFormJoinTeam.svelte @@ -30,6 +30,12 @@ partJ = true; } + function JchangeTeam() { + value = { }; + + partJ = false; + } + function submit(event) { if (!partJ) { JvalidateTeam(); @@ -62,7 +68,11 @@ {/each} - + {#if partJ} + + {:else} + + {/if}
Veuillez indiquer une équipe valide.
diff --git a/frontend/fic/src/lib/stores/my.js b/frontend/fic/src/lib/stores/my.js index 2272dada..3dfe3ac9 100644 --- a/frontend/fic/src/lib/stores/my.js +++ b/frontend/fic/src/lib/stores/my.js @@ -37,6 +37,9 @@ function createMyStore() { }); } else if (res_my.status === 404) { update((m) => (null)); + if (cb) { + cb(null); + } } } diff --git a/frontend/fic/src/routes/+layout.svelte b/frontend/fic/src/routes/+layout.svelte index 940da811..bec2495b 100644 --- a/frontend/fic/src/routes/+layout.svelte +++ b/frontend/fic/src/routes/+layout.svelte @@ -3,7 +3,9 @@ import "bootstrap-icons/font/bootstrap-icons.css"; import { base } from '$app/paths'; + import { page } from '$app/stores'; import { + Alert, Container, //Styles, } from '@sveltestrap/sveltestrap'; @@ -11,6 +13,7 @@ import Header from '$lib/components/Header.svelte'; import { challengeInfo } from '$lib/stores/challengeinfo'; + import { my } from '$lib/stores/my.js'; import { settings } from '$lib/stores/settings'; @@ -32,6 +35,21 @@
{/if}
+ +{#if !$my && $page.route.id != "/register"} + + {#if $settings.allowRegistration} + + Votre équipe n'est pas encore enregistrée. Rendez-vous sur cette page pour procéder à votre inscription. + + {:else} + + Il semblerait qu'il y ait eu un problème lors de l'attribution de votre certificat. Veuillez vous signaler auprès de notre équipe afin de corriger ce problème. + + {/if} + +{/if} +