Compare commits
No commits in common. "404f29e6ea0e1b944a8c79c2a1472ddc565360f2" and "1ec71728de29660e69e12d2d8bdedec6cc57cace" have entirely different histories.
404f29e6ea
...
1ec71728de
25 changed files with 63 additions and 104 deletions
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM node:23-alpine AS nodebuild
|
FROM node:23-alpine as nodebuild
|
||||||
|
|
||||||
WORKDIR /ui
|
WORKDIR /ui
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM node:23-alpine AS nodebuild
|
FROM node:23-alpine as nodebuild
|
||||||
|
|
||||||
WORKDIR /ui
|
WORKDIR /ui
|
||||||
|
|
||||||
|
|
@ -10,16 +10,9 @@ RUN npm install --network-timeout=100000 && \
|
||||||
|
|
||||||
FROM nginx:stable-alpine-slim
|
FROM nginx:stable-alpine-slim
|
||||||
|
|
||||||
ENV FIC_BASEURL /
|
ENV FIC_BASEURL=/ \
|
||||||
ENV HOST_RECEIVER receiver:8080
|
HOST_RECEIVER=receiver:8080 HOST_ADMIN=admin:8081 HOST_DASHBOARD=dashboard:8082 HOST_QA=qa:8083 \
|
||||||
ENV HOST_ADMIN admin:8081
|
PATH_FILES=/srv/FILES PATH_STARTINGBLOCK=/srv/STARTINGBLOCK PATH_STATIC=/srv/htdocs-frontend PATH_SETTINGS=/srv/SETTINGSDIST PATH_TEAMS=/srv/TEAMS
|
||||||
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
|
EXPOSE 80
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM node:23-alpine AS nodebuild
|
FROM node:23-alpine as nodebuild
|
||||||
|
|
||||||
WORKDIR /ui
|
WORKDIR /ui
|
||||||
|
|
||||||
|
|
@ -8,7 +8,7 @@ RUN npm install --network-timeout=100000 && \
|
||||||
npm run build
|
npm run build
|
||||||
|
|
||||||
|
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
FROM golang:1-alpine AS gobuild
|
FROM golang:1-alpine as gobuild
|
||||||
|
|
||||||
RUN apk add --no-cache git
|
RUN apk add --no-cache git
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
style:filter={theme.locked ? "grayscale(60%)":null}
|
style:filter={theme.locked ? "grayscale(60%)":null}
|
||||||
></div>
|
></div>
|
||||||
{/if}
|
{/if}
|
||||||
<CardBody>
|
<CardBody class="text-indent">
|
||||||
{#if exercice}
|
{#if exercice}
|
||||||
{#if $exercices_idx[exercice.id].tags.includes("Reverse") || $exercices_idx[exercice.id].tags.includes("Reverse Engineering")}
|
{#if $exercices_idx[exercice.id].tags.includes("Reverse") || $exercices_idx[exercice.id].tags.includes("Reverse Engineering")}
|
||||||
<Badge class="float-end">#Reverse</Badge>
|
<Badge class="float-end">#Reverse</Badge>
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@
|
||||||
bind:value={filter}
|
bind:value={filter}
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
{#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}
|
{#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.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().indexOf(filter.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()) >= 0)}
|
{#if (filter === "" && $tags[itag].count > 1) || (filter !== "" && itag.toLowerCase().indexOf(filter.toLowerCase()) >= 0)}
|
||||||
<DropdownItem href="tags/{itag}">
|
<DropdownItem href="tags/{itag}">
|
||||||
#{itag}
|
#{itag}
|
||||||
<Badge>
|
<Badge>
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,6 @@
|
||||||
partJ = true;
|
partJ = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
function JchangeTeam() {
|
|
||||||
value = { };
|
|
||||||
|
|
||||||
partJ = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function submit(event) {
|
function submit(event) {
|
||||||
if (!partJ) {
|
if (!partJ) {
|
||||||
JvalidateTeam();
|
JvalidateTeam();
|
||||||
|
|
@ -68,11 +62,7 @@
|
||||||
</option>
|
</option>
|
||||||
{/each}
|
{/each}
|
||||||
</select>
|
</select>
|
||||||
{#if partJ}
|
<Button color="info" type="button" on:click={JvalidateTeam} disabled={partJ}>Valider</Button>
|
||||||
<Button color="info" type="button" on:click={JchangeTeam}>Changer</Button>
|
|
||||||
{:else}
|
|
||||||
<Button color="info" type="button" on:click={JvalidateTeam} disabled={partJ}>Valider</Button>
|
|
||||||
{/if}
|
|
||||||
<div class="invalid-feedback">
|
<div class="invalid-feedback">
|
||||||
Veuillez indiquer une équipe valide.
|
Veuillez indiquer une équipe valide.
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,6 @@ function createMyStore() {
|
||||||
});
|
});
|
||||||
} else if (res_my.status === 404) {
|
} else if (res_my.status === 404) {
|
||||||
update((m) => (null));
|
update((m) => (null));
|
||||||
if (cb) {
|
|
||||||
cb(null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,6 @@ export const tags = derived([my, themesStore], ([$my, $themesStore]) => {
|
||||||
for (const key in $themesStore) {
|
for (const key in $themesStore) {
|
||||||
for (const exercice of $themesStore[key].exercices) {
|
for (const exercice of $themesStore[key].exercices) {
|
||||||
exercice.tags.forEach((tag) => {
|
exercice.tags.forEach((tag) => {
|
||||||
tag = tag.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase();
|
|
||||||
if (!tags[tag])
|
if (!tags[tag])
|
||||||
tags[tag] = {count: 1, solved: 0};
|
tags[tag] = {count: 1, solved: 0};
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,7 @@
|
||||||
import "bootstrap-icons/font/bootstrap-icons.css";
|
import "bootstrap-icons/font/bootstrap-icons.css";
|
||||||
|
|
||||||
import { base } from '$app/paths';
|
import { base } from '$app/paths';
|
||||||
import { page } from '$app/stores';
|
|
||||||
import {
|
import {
|
||||||
Alert,
|
|
||||||
Container,
|
Container,
|
||||||
//Styles,
|
//Styles,
|
||||||
} from '@sveltestrap/sveltestrap';
|
} from '@sveltestrap/sveltestrap';
|
||||||
|
|
@ -13,7 +11,6 @@
|
||||||
import Header from '$lib/components/Header.svelte';
|
import Header from '$lib/components/Header.svelte';
|
||||||
|
|
||||||
import { challengeInfo } from '$lib/stores/challengeinfo';
|
import { challengeInfo } from '$lib/stores/challengeinfo';
|
||||||
import { my } from '$lib/stores/my.js';
|
|
||||||
import { settings } from '$lib/stores/settings';
|
import { settings } from '$lib/stores/settings';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
@ -35,21 +32,6 @@
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
<Header />
|
<Header />
|
||||||
|
|
||||||
{#if !$my && $page.route.id != "/register"}
|
|
||||||
<Container class="mt-3 mb-3">
|
|
||||||
{#if $settings.allowRegistration}
|
|
||||||
<Alert color="warning" class="text-justify" fade={false}>
|
|
||||||
<strong>Votre équipe n'est pas encore enregistrée.</strong> Rendez-vous sur <a href="register">cette page</a> pour procéder à votre inscription.
|
|
||||||
</Alert>
|
|
||||||
{:else}
|
|
||||||
<Alert color="danger" class="text-justify" fade={false}>
|
|
||||||
<strong>Il semblerait qu'il y ait eu un problème lors de l'attribution de votre certificat.</strong> Veuillez vous signaler auprès de notre équipe afin de corriger ce problème.
|
|
||||||
</Alert>
|
|
||||||
{/if}
|
|
||||||
</Container>
|
|
||||||
{/if}
|
|
||||||
|
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
|
|
|
||||||
|
|
@ -77,12 +77,21 @@
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Container class="mt-3 mb-5">
|
<Container class="mt-3 mb-5">
|
||||||
{#if $my}
|
{#if !$my}
|
||||||
{#if !($my.team_id)}
|
{#if $settings.allowRegistration}
|
||||||
|
<Alert color="warning" class="text-justify" fade={false}>
|
||||||
|
<strong>Votre équipe n'est pas encore enregistrée.</strong> Rendez-vous sur <a href="register">cette page</a> pour procéder à votre inscription.
|
||||||
|
</Alert>
|
||||||
|
{:else}
|
||||||
|
<Alert color="danger" class="text-justify" fade={false}>
|
||||||
|
<strong>Il semblerait qu'il y ait eu un problème lors de l'attribution de votre certificat.</strong> Veuillez vous signaler auprès de notre équipe afin de corriger ce problème.
|
||||||
|
</Alert>
|
||||||
|
{/if}
|
||||||
|
{:else if !($my.team_id)}
|
||||||
<Alert color="danger" fade={false}>
|
<Alert color="danger" fade={false}>
|
||||||
<strong>Attention :</strong> puisqu'il s'agit de captures effectuées dans le but de découvrir si des actes malveillants ont été commis sur différents systèmes d'information, les contenus qui sont téléchargeables <em>peuvent</em> contenir du contenu malveillant !
|
<strong>Attention :</strong> puisqu'il s'agit de captures effectuées dans le but de découvrir si des actes malveillants ont été commis sur différents systèmes d'information, les contenus qui sont téléchargeables <em>peuvent</em> contenir du contenu malveillant !
|
||||||
</Alert>
|
</Alert>
|
||||||
{:else if $teams[$my.team_id]}
|
{:else if $teams[$my.team_id]}
|
||||||
<Alert color="info" class="text-justify" fade={false}>
|
<Alert color="info" class="text-justify" fade={false}>
|
||||||
<strong>Félicitations {#if $my.members}{#each $my.members as member, index (member.id)}{#if member.id !== $my.members[0].id}{#if member.id === $my.members[$my.members.length - 1].id} et {:else}, {/if}{/if}{member.firstname} {member.lastname}{/each} {/if}!</strong> vous êtes maintenant connecté à l'espace de votre équipe <em>{$teams[$my.team_id].name}</em>.
|
<strong>Félicitations {#if $my.members}{#each $my.members as member, index (member.id)}{#if member.id !== $my.members[0].id}{#if member.id === $my.members[$my.members.length - 1].id} et {:else}, {/if}{/if}{member.firstname} {member.lastname}{/each} {/if}!</strong> vous êtes maintenant connecté à l'espace de votre équipe <em>{$teams[$my.team_id].name}</em>.
|
||||||
{#if !$settings.denyNameChange}Vous pouvez changer ce nom dès maintenant en vous rendant sur la page de <a href="edit">votre équipe</a>.{/if}
|
{#if !$settings.denyNameChange}Vous pouvez changer ce nom dès maintenant en vous rendant sur la page de <a href="edit">votre équipe</a>.{/if}
|
||||||
|
|
@ -93,9 +102,9 @@
|
||||||
<strong>Les membres de votre équipe ne sont pas encore enregistrés.</strong> Passez voir l'équipe serveur pour corriger cela.
|
<strong>Les membres de votre équipe ne sont pas encore enregistrés.</strong> Passez voir l'équipe serveur pour corriger cela.
|
||||||
</Alert>
|
</Alert>
|
||||||
{/if}
|
{/if}
|
||||||
{/if}
|
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
|
||||||
<Masonry
|
<Masonry
|
||||||
{items}
|
{items}
|
||||||
let:item
|
let:item
|
||||||
|
|
|
||||||
|
|
@ -84,27 +84,24 @@
|
||||||
</Col>
|
</Col>
|
||||||
<Col lg={6} xl={5}>
|
<Col lg={6} xl={5}>
|
||||||
{#if $current_theme.exercices && $current_theme.exercices.length}
|
{#if $current_theme.exercices && $current_theme.exercices.length}
|
||||||
<ul class="list-group h-100 d-flex flex-column">
|
<ul class="list-group">
|
||||||
{#each $current_theme.exercices as exercice, index}
|
{#each $current_theme.exercices as exercice, index}
|
||||||
<li
|
<li
|
||||||
class="list-group-item flex-fill border-0 rounded-0"
|
class="list-group-item"
|
||||||
class:list-group-item-action={$my && $my.exercices[exercice.id]}
|
class:list-group-item-action={$my && $my.exercices[exercice.id]}
|
||||||
on:click={goto(`${$current_theme.urlid}/${exercice.urlid}`)}
|
on:click={goto(`${$current_theme.urlid}/${exercice.urlid}`)}
|
||||||
on:keypress={goto(`${$current_theme.urlid}/${exercice.urlid}`)}
|
on:keypress={goto(`${$current_theme.urlid}/${exercice.urlid}`)}
|
||||||
>
|
>
|
||||||
<div class="row h-100">
|
<div class="row">
|
||||||
{#if index + 1 == $current_theme.exercices.length}
|
<div class="col-1" style="margin-top: -0.5rem; margin-bottom: -0.5rem; text-align: right; border-right: 5px solid #{$my && $my.exercices[exercice.id] && $my.exercices[exercice.id].solved_rank ? '62c462' : 'bbb'}">
|
||||||
<div class="col-1"></div>
|
</div>
|
||||||
{:else}
|
|
||||||
<div class="col-1" style="margin-top: -0.5rem; margin-bottom: -0.5rem; text-align: right; border-right: 5px solid #{$my && $my.exercices[exercice.id] && $my.exercices[exercice.id].solved_rank ? '62c462' : 'bbb'}"></div>
|
|
||||||
{/if}
|
|
||||||
<div class="col-10">
|
<div class="col-10">
|
||||||
<div style="position: absolute; margin-left: calc(var(--bs-gutter-x) * -.5 - 15px); margin-top: -0.5rem;">
|
<div style="position: absolute; margin-left: calc(var(--bs-gutter-x) * -.5 - 15px); margin-top: -0.5rem;">
|
||||||
<svg style="height: 50px; width: 23px;">
|
<svg style="height: 50px; width: 23px;">
|
||||||
<rect
|
<rect
|
||||||
style="fill:#{$my && $my.exercices[exercice.id] && (index < 1 || ($my.exercices[$current_theme.exercices[index-1].id] && $my.exercices[$current_theme.exercices[index-1].id].solved_rank)) ? '62c462' : 'bbb'}"
|
style="fill:#{$my && $my.exercices[exercice.id] && (index < 1 || ($my.exercices[$current_theme.exercices[index-1].id] && $my.exercices[$current_theme.exercices[index-1].id].solved_rank)) ? '62c462' : 'bbb'}"
|
||||||
width="5"
|
width="5"
|
||||||
height="27"
|
height="30"
|
||||||
x="10"
|
x="10"
|
||||||
y="0" />
|
y="0" />
|
||||||
<path
|
<path
|
||||||
|
|
@ -114,17 +111,24 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex justify-content-between flex-wrap">
|
<div class="d-flex justify-content-between flex-wrap">
|
||||||
<h5 class="fw-bold text-truncate">
|
<h5 class="fw-bold text-truncate">
|
||||||
<span style="white-space: nowrap">
|
{#if $my && $my.exercices[exercice.id]}
|
||||||
{#if $my && $my.exercices[exercice.id] && $my.exercices[exercice.id].wip}
|
<span style="white-space: nowrap">
|
||||||
<Icon name="cone-striped" aria-hidden="true" title="Cette étape est encore en construction." />
|
{#if $my.exercices[exercice.id].wip}
|
||||||
{/if}
|
<Icon name="cone-striped" aria-hidden="true" title="Cette étape est encore en construction." />
|
||||||
{exercice.title}
|
{/if}
|
||||||
</span>
|
{exercice.title}
|
||||||
|
</span>
|
||||||
|
{:else}
|
||||||
|
<span style="white-space: nowrap">
|
||||||
|
<Icon name="lock-fill" aria-hidden="true" title="Vous n'avez pas encore accès à ce défi" />
|
||||||
|
{exercice.title}
|
||||||
|
</span>
|
||||||
|
{/if}
|
||||||
{#if exercice.curcoeff > 1.0}
|
{#if exercice.curcoeff > 1.0}
|
||||||
<Icon name="gift" aria-hidden="true" title="Un bonus est actuellement appliqué lors de la résolution de ce défi" />
|
<Icon name="gift" aria-hidden="true" title="Un bonus est actuellement appliqué lors de la résolution de ce défi" />
|
||||||
{/if}
|
{/if}
|
||||||
</h5>
|
</h5>
|
||||||
<div class="mb-2">
|
<div>
|
||||||
{#each exercice.tags as tag, idx}
|
{#each exercice.tags as tag, idx}
|
||||||
<Badge href="tags/{tag}" pill color="secondary" class="mx-1 float-end">#{tag}</Badge>
|
<Badge href="tags/{tag}" pill color="secondary" class="mx-1 float-end">#{tag}</Badge>
|
||||||
{/each}
|
{/each}
|
||||||
|
|
@ -132,14 +136,14 @@
|
||||||
</div>
|
</div>
|
||||||
<p>{@html exercice.headline}</p>
|
<p>{@html exercice.headline}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-none d-md-flex flex-column h-100 justify-content-center align-items-end col-1 pe-0">
|
<div class="d-none d-md-block col-1 pe-0">
|
||||||
{#if $my && $my.exercices[exercice.id]}
|
{#if $my && $my.exercices[exercice.id]}
|
||||||
<a href="{$current_theme.urlid}/{exercice.urlid}" style="font-size: 3rem">
|
<a class="float-end" href="{$current_theme.urlid}/{exercice.urlid}" style="font-size: 3rem">
|
||||||
<Icon name="chevron-right" aria-hidden="true" />
|
<Icon name="chevron-right" aria-hidden="true" />
|
||||||
</a>
|
</a>
|
||||||
{:else}
|
{:else}
|
||||||
<span style="font-size: 3rem">
|
<span class="float-end" style="font-size: 3rem">
|
||||||
<Icon name="lock-fill" aria-hidden="true" title="Vous n'avez pas encore accès à ce défi" />
|
<Icon name="chevron-right" aria-hidden="true" />
|
||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@
|
||||||
Container,
|
Container,
|
||||||
Icon,
|
Icon,
|
||||||
Row,
|
Row,
|
||||||
Spinner,
|
|
||||||
} from '@sveltestrap/sveltestrap';
|
} from '@sveltestrap/sveltestrap';
|
||||||
|
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
|
|
@ -24,10 +23,8 @@
|
||||||
let partJ = false;
|
let partJ = false;
|
||||||
let messageClass;
|
let messageClass;
|
||||||
let message;
|
let message;
|
||||||
let registrationInProgress = false;
|
|
||||||
|
|
||||||
function gotoHomeOnDiff(i) {
|
function gotoHomeOnDiff(i) {
|
||||||
registrationInProgress = true;
|
|
||||||
my.refresh((my) => {
|
my.refresh((my) => {
|
||||||
if (my && my.team_id) {
|
if (my && my.team_id) {
|
||||||
themesStore.refresh(() => {
|
themesStore.refresh(() => {
|
||||||
|
|
@ -35,10 +32,6 @@
|
||||||
});
|
});
|
||||||
} else if (i > 0) {
|
} else if (i > 0) {
|
||||||
setTimeout(gotoHomeOnDiff, 650, i-1);
|
setTimeout(gotoHomeOnDiff, 650, i-1);
|
||||||
} else {
|
|
||||||
registrationInProgress = false;
|
|
||||||
messageClass = 'danger';
|
|
||||||
message = "Temps d'attente dépassé.";
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
@ -113,13 +106,9 @@
|
||||||
<strong>Oups, il semblerait qu'il y ait eu un problème lors de l'attribution de votre certificat.</strong>
|
<strong>Oups, il semblerait qu'il y ait eu un problème lors de l'attribution de votre certificat.</strong>
|
||||||
Veuillez vous signaler auprès de notre équipe afin de corriger ce problème.
|
Veuillez vous signaler auprès de notre équipe afin de corriger ce problème.
|
||||||
</Alert>
|
</Alert>
|
||||||
{:else if registrationInProgress}
|
|
||||||
<div class="d-flex justify-content-center align-items-center gap-4 mt-5 fw-bold text-primary">
|
|
||||||
<Spinner size="lg" color="primary" /> Inscription en cours…
|
|
||||||
</div>
|
|
||||||
{:else}
|
{:else}
|
||||||
{#if !$settings.denyTeamCreation && !partJ}
|
{#if !$settings.denyTeamCreation && !partJ}
|
||||||
<Card body class="niceborder my-3 text-white">
|
<Card body class="niceborder my-3">
|
||||||
<p>
|
<p>
|
||||||
Votre équipe n'est pas encore enregistrée sur notre serveur. Afin de
|
Votre équipe n'est pas encore enregistrée sur notre serveur. Afin de
|
||||||
pouvoir participer au challenge, nous vous remercions de bien vouloir
|
pouvoir participer au challenge, nous vous remercions de bien vouloir
|
||||||
|
|
@ -129,7 +118,7 @@
|
||||||
</Card>
|
</Card>
|
||||||
{/if}
|
{/if}
|
||||||
{#if $settings.canJoinTeam && !partR}
|
{#if $settings.canJoinTeam && !partR}
|
||||||
<Card body class="niceborder my-3 text-white">
|
<Card body class="niceborder my-3">
|
||||||
<p>
|
<p>
|
||||||
{#if !$settings.denyTeamCreation}
|
{#if !$settings.denyTeamCreation}
|
||||||
Si votre équipe est déjà créée, rejoignez-là !
|
Si votre équipe est déjà créée, rejoignez-là !
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,4 @@
|
||||||
import { set_current_theme } from '$lib/stores/themes';
|
|
||||||
|
|
||||||
export async function load({ params }) {
|
export async function load({ params }) {
|
||||||
set_current_theme.set(null);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tag: params.tag,
|
tag: params.tag,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -25,8 +25,8 @@
|
||||||
for (let k in $themes) {
|
for (let k in $themes) {
|
||||||
const th = $themes[k];
|
const th = $themes[k];
|
||||||
for (const ex of th.exercices) {
|
for (const ex of th.exercices) {
|
||||||
if (ex.tags.map(t => t.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()).indexOf(data.tag.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase()) >= 0) {
|
if (ex.tags.indexOf(data.tag) >= 0) {
|
||||||
tmp_exercices.push({theme: th, exercice: ex, index: k + "," + ex.id});
|
tmp_exercices.push({theme: th, exercice: ex, index: k + "," + ex});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ const config = {
|
||||||
fallback: 'index.html'
|
fallback: 'index.html'
|
||||||
}),
|
}),
|
||||||
paths: {
|
paths: {
|
||||||
relative: false
|
relative: true
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Reference in a new issue