Compare commits

...

13 Commits

Author SHA1 Message Date
Serreau Jovann
518e941be9 init
All checks were successful
Symfony CI - Install, Test, Build, Attest & Deploy / 🚀 Deploy to Production (push) Successful in 54s
2026-04-10 18:33:52 +02:00
Serreau Jovann
7d3824830b ♻️ refactor(hosting): Remplace l'hébergement Google Cloud Platform par OVHcloud (datacenters France) sur les pages légales et hébergement.
Some checks failed
Symfony CI - Install, Test, Build, Attest & Deploy / 🚀 Deploy to Production (push) Has been cancelled
- legal.twig (section 3 Hébergement du Site) : Google Cloud Platform → OVHcloud, adresse Mountain View → 2 rue Kellermann Roubaix.
- hosting.twig (section 1) : renomme Infrastructure Cloud → Hébergement du Site, badge eu-west4 → France.
- Traductions (fr/en/es/cn/ger) : hosting_infrastructure_title, hosting_cloud_provider, hosting_location_detail, legal_host_address, legal_host_data_location, hosting_compliance_desc, et nettoyage des clés orphelines hosting_section1_p1, hosting_data_location_details, hosting_contact_details.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 18:33:05 +02:00
Serreau Jovann
808c3814cb 🔥 chore(siteconseil): Retire toutes les références à SARL SITECONSEIL et bascule l'OAuth Keycloak sur auth.e-cosplay.fr.
All checks were successful
Symfony CI - Install, Test, Build, Attest & Deploy / 🚀 Deploy to Production (push) Successful in 54s
- Templates : retire les blocs partenaire SITECONSEIL (home, prestation), le DPO SITECONSEIL (rgpd), la SECTION 1 Opérateur Technique (hosting), et les mentions DEV BY/Développé par dans les footers.
- Traductions (fr/en/es/cn/ger) : supprime les clés siteconseil_partner, siteconseil_referral, hosting_tech_operator_*, et bascule hosting_signalement_email vers signalement@e-cosplay.fr.
- AmazonSesClient : passe l'expéditeur à no-reply@e-cosplay.fr.
- SitemapSubscriber : retire l'image siteconseil.png et supprime l'asset associé.
- Keycloak : URL auth.e-cosplay.fr, realm ecosplay, client ecosplay_web (env + nelmio_security CSP).
- Notifuse : NOTIFUSE_CLIENT_EMAIL=contact@e-cosplay.fr.
- CONTRIBUTING.md : remplace l'entité par l'association E-Cosplay.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 18:29:17 +02:00
Serreau Jovann
47209eac41 🔥 chore(navbar): Retire l'entrée e-page du menu de navigation.
All checks were successful
Symfony CI - Install, Test, Build, Attest & Deploy / 🚀 Deploy to Production (push) Successful in 54s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 16:04:20 +02:00
Serreau Jovann
293c5f2fa3 🔥 chore(ansible): Retire la tâche ecosplay:abonement du playbook.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:28:46 +02:00
Serreau Jovann
66fdd5250f ♻️ refactor(migration): Retire l'usage de docker dans backup.sh et restore.sh, utilise pg_dump/psql et tar directement sur l'hôte avec DATABASE_URL.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:25:44 +02:00
Serreau Jovann
8b4ae992f8 feat(migration): Ajoute les scripts backup.sh et restore.sh pour migrer la stack vers un autre serveur.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 14:17:10 +02:00
Serreau Jovann
dbf422a543 feat(nelmio_security): Ajoute cdnjs.cloudflare.com aux sources de contenu autorisées. 2026-03-30 13:43:32 +02:00
Serreau Jovann
d5563aa4db feat(nelmio_security): Ajoute cdnjs.cloudflare.com aux sources de contenu autorisées. 2026-03-30 13:42:42 +02:00
Serreau Jovann
73e4d40b4d feat(nelmio_security): Ajoute cdnjs.cloudflare.com aux sources de contenu autorisées. 2026-03-30 13:38:26 +02:00
Serreau Jovann
0233338224 🔧 fix(cloudflare): Corrige l'authentification API Cloudflare avec Global API Key et nouvelle zone ID.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 11:59:20 +02:00
Serreau Jovann
b0a725dd37 feat(nelmio_security): Ajoute cdnjs.cloudflare.com aux sources de contenu autorisées. 2026-03-30 11:43:44 +02:00
Serreau Jovann
767c533023 feat(nelmio_security): Ajoute cdnjs.cloudflare.com aux sources de contenu autorisées. 2026-03-30 11:39:19 +02:00
23 changed files with 423 additions and 230 deletions

15
.env
View File

@@ -56,8 +56,9 @@ PROD_URL=https://www.e-cosplay.fr
VAPID_PK=DsOg7jToRSD-VpNSV1Gt3YAhSwz4l-nqeu7yFvzbSxg
VAPID_PC=BKz0kdcsG6kk9KxciPpkfP8kEDAd408inZecij5kBDbQ1ZGZSNwS4KZ8FerC28LFXvgSqpDXtor3ePo0zBCdNqo
CLOUDFLARE_ZONE_ID=a26d2ecd33d18c984f348eeb060ed5b3
CLOUDFLARE_API_TOKEN=Kq_hpaH_ng-hAeGsJo6KhQb2TxYW1v6lRGE84aOR
CLOUDFLARE_ZONE_ID=f9e2a44aa512b455c99286d2ae845862
CLOUDFLARE_API_EMAIL=contact@e-cosplay.fr
CLOUDFLARE_API_KEY=cfk_wXHshV0AmOoKbWE19CIPoWJBeUCtSDUXo2mgkGuNe99eeac8
MARCHAND_ID=5685183792
###> google/apiclient ###
GOOGLE_API_KEY=
@@ -79,15 +80,15 @@ TURNSTILE_SECRET=1x0000000000000000000000000000000AA
###> stripe/stripe-php ###
STRIPE_SECRET_KEY=sk_test_***
###< stripe/stripe-php ###
NOTIFUSE_CLIENT_EMAIL=jovann@siteconseil.fr
NOTIFUSE_CLIENT_EMAIL=contact@e-cosplay.fr
NOTIFUSE_CLIENT_SECRET=d04zCk3Fa45oOjDWHpAvc1AZxnLdGffOnNWK+Jt2yXf37+FTfuMMHb8flcfPMqLluRR3rvhbr555r6j1DEigrA==
NOTIFUSE_WORKSPACE_ID=ecosplay
KEYCLOAK_URL=https://auth.esy-web.dev
KEYCLOAK_REALM=master
KEYCLOAK_CLIENT_ID=ecosplay
KEYCLOAK_CLIENT_SECRET=Cr2WycUH1Vti6xKYMOQSs0etO4tfHj1Q
KEYCLOAK_URL=https://auth.e-cosplay.fr
KEYCLOAK_REALM=ecosplay
KEYCLOAK_CLIENT_ID=ecosplay_web
KEYCLOAK_CLIENT_SECRET=TQfTHqfHBZSddXid1enwyPCs8Hqahw1U
DISCORD_CLIENT_ID=1392734559099158549
DISCORD_CLIENT_SECRET=upafzLsVMvwX_VC0Jw6Thy7d8lPpQGts

View File

@@ -3,10 +3,10 @@
Ce projet est strictement confidentiel et **n'accepte aucune contribution externe**.
Aucune demande d'accès, pull request ou proposition de modification ne sera acceptée.
L'accès au code source est limité aux membres autorisés explicitement par SARL SITECONSEIL.
L'accès au code source est limité aux membres autorisés explicitement par l'association E-Cosplay.
Toute tentative d'accès non autorisé ou de diffusion du contenu de ce projet pourra faire l'objet de poursuites légales.
---
Pour toute question, veuillez contacter : [s.com@siteconseil.fr]
Pour toute question, veuillez contacter : [contact@e-cosplay.fr]

View File

@@ -240,11 +240,6 @@
- "{{ path }}/public/pwa"
- "{{ path }}/public/idb"
- "{{ path }}/public/workbox"
- name: Exécuter ecosplay:abonement dans le répertoire de l application
ansible.builtin.command: php bin/console ecosplay:abonement
become: false
args:
chdir: "{{ path }}"
- name: Exécuter app:cloudflare:purge dans le répertoire de l application
ansible.builtin.command: php bin/console app:cloudflare:purge
become: false

View File

@@ -1,6 +1,6 @@
www.e-cosplay.fr {
tls {
dns cloudflare cfut_2WvRdf8MffLcQxNKuLbikhvJVAPzfqNAoWhgWCBS289868ec
dns cloudflare cfat_rIHZqzCm9GKK3xVnQDNGfu6J91TseIDdTKeuWSFUdf6ccd31
}
root * {{ path }}/public
encode zstd gzip
@@ -31,7 +31,6 @@ www.e-cosplay.fr {
write_timeout 300s
dial_timeout 100s
env HTTP_PROXY ""
header_up X-Forwarded-For {http.request.header.CF-Connecting-IP}
}
}
handle {
@@ -39,10 +38,8 @@ www.e-cosplay.fr {
}
}
datas.e-cosplay.fr {
tls {
dns cloudflare Kq_hpaH_ng-hAeGsJo6KhQb2TxYW1v6lRGE84aOR
}
tls {
dns cloudflare cfat_rIHZqzCm9GKK3xVnQDNGfu6J91TseIDdTKeuWSFUdf6ccd31
}
reverse_proxy localhost:27502
}

144
backup.sh Executable file
View File

@@ -0,0 +1,144 @@
#!/bin/sh
set -eu
# ============================================================================
# E-COSPLAY - Script de sauvegarde pour migration vers un autre serveur
# ----------------------------------------------------------------------------
# N'UTILISE PAS DOCKER. S'appuie sur les binaires installés sur l'hôte
# (pg_dump, psql, tar, gzip) et lit DATABASE_URL depuis .env.local.
#
# Sauvegarde :
# - Base PostgreSQL distante via DATABASE_URL (pg_dump logique)
# - Fichiers uploadés (public/storage)
# - Fichiers d'environnement et credentials (.env.local, google.json, ...)
#
# Le tout est empaqueté dans une archive tar.gz horodatée.
# ============================================================================
RED='\033[0;31m'
ORANGE='\033[0;33m'
GREEN='\033[0;32m'
CYAN='\033[0;36m'
RESET='\033[0m'
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$PROJECT_DIR"
TIMESTAMP="$(date +%Y%m%d_%H%M%S)"
BACKUP_DIR="${BACKUP_DIR:-$PROJECT_DIR/var/backups}"
WORK_DIR="$BACKUP_DIR/tmp_$TIMESTAMP"
ARCHIVE="$BACKUP_DIR/e-cosplay_backup_$TIMESTAMP.tar.gz"
STORAGE_DIR="${STORAGE_DIR:-public/storage}"
echo "${CYAN}############################${RESET}"
echo "${CYAN}# E-COSPLAY BACKUP START #${RESET}"
echo "${CYAN}############################${RESET}"
echo "${CYAN}Destination : ${ARCHIVE}${RESET}"
mkdir -p "$WORK_DIR"
# ---------------------------------------------------------------------------
# 1) Vérifications
# ---------------------------------------------------------------------------
for bin in pg_dump tar gzip; do
if ! command -v "$bin" >/dev/null 2>&1; then
echo "${RED}Binaire introuvable : $bin${RESET}" >&2
exit 1
fi
done
# ---------------------------------------------------------------------------
# 2) Récupération de DATABASE_URL
# Priorité : variable d'env existante > .env.local > .env.prod.local > .env
# ---------------------------------------------------------------------------
get_database_url() {
if [ -n "${DATABASE_URL:-}" ]; then
echo "$DATABASE_URL"
return 0
fi
for f in .env.local .env.prod.local .env.prod .env; do
if [ -f "$PROJECT_DIR/$f" ]; then
url="$(grep -E '^DATABASE_URL=' "$PROJECT_DIR/$f" | tail -n1 | sed -E 's/^DATABASE_URL=//; s/^"(.*)"$/\1/; s/^'"'"'(.*)'"'"'$/\1/')"
if [ -n "$url" ]; then
echo "$url"
return 0
fi
fi
done
return 1
}
DATABASE_URL_RAW="$(get_database_url || true)"
if [ -z "$DATABASE_URL_RAW" ]; then
echo "${RED}DATABASE_URL introuvable (ni en env, ni dans .env.local/.env)${RESET}" >&2
exit 1
fi
# Strip des paramètres Doctrine (serverVersion, charset, ...) que libpq ignore
DATABASE_URL_CLEAN="$(echo "$DATABASE_URL_RAW" | sed -E 's/\?.*$//')"
# Affiche une URL masquée (cache le mot de passe)
DATABASE_URL_MASKED="$(echo "$DATABASE_URL_CLEAN" | sed -E 's#(://[^:]+:)[^@]+(@)#\1***\2#')"
echo "${CYAN}> DATABASE_URL : ${DATABASE_URL_MASKED}${RESET}"
# ---------------------------------------------------------------------------
# 3) Dump PostgreSQL
# ---------------------------------------------------------------------------
echo "${CYAN}> Dump PostgreSQL...${RESET}"
pg_dump "$DATABASE_URL_CLEAN" \
--clean --if-exists --no-owner --no-privileges \
| gzip -9 > "$WORK_DIR/database.sql.gz"
echo "${GREEN} ✓ database.sql.gz ($(du -h "$WORK_DIR/database.sql.gz" | cut -f1))${RESET}"
# ---------------------------------------------------------------------------
# 4) Fichiers uploadés
# ---------------------------------------------------------------------------
if [ -d "$PROJECT_DIR/$STORAGE_DIR" ]; then
echo "${CYAN}> Sauvegarde de ${STORAGE_DIR}...${RESET}"
tar -C "$PROJECT_DIR" -czf "$WORK_DIR/storage.tar.gz" "$STORAGE_DIR"
echo "${GREEN} ✓ storage.tar.gz ($(du -h "$WORK_DIR/storage.tar.gz" | cut -f1))${RESET}"
else
echo "${ORANGE} ! ${STORAGE_DIR} introuvable, étape ignorée${RESET}"
fi
# ---------------------------------------------------------------------------
# 5) Fichiers d'environnement et credentials
# ---------------------------------------------------------------------------
echo "${CYAN}> Copie des fichiers d'environnement et credentials...${RESET}"
mkdir -p "$WORK_DIR/env"
for f in .env .env.local .env.prod .env.prod.local google.json account.json; do
if [ -f "$PROJECT_DIR/$f" ]; then
cp -a "$PROJECT_DIR/$f" "$WORK_DIR/env/$f"
echo "${GREEN}$f${RESET}"
fi
done
# ---------------------------------------------------------------------------
# 6) Métadonnées
# ---------------------------------------------------------------------------
{
echo "timestamp=$TIMESTAMP"
echo "hostname=$(hostname)"
echo "git_commit=$(git -C "$PROJECT_DIR" rev-parse HEAD 2>/dev/null || echo unknown)"
echo "git_branch=$(git -C "$PROJECT_DIR" rev-parse --abbrev-ref HEAD 2>/dev/null || echo unknown)"
echo "database_url=$DATABASE_URL_MASKED"
echo "storage_dir=$STORAGE_DIR"
} > "$WORK_DIR/manifest.txt"
# ---------------------------------------------------------------------------
# 7) Empaquetage final
# ---------------------------------------------------------------------------
echo "${CYAN}> Empaquetage de l'archive finale...${RESET}"
tar -C "$BACKUP_DIR" -czf "$ARCHIVE" "tmp_$TIMESTAMP"
rm -rf "$WORK_DIR"
echo "${GREEN}############################${RESET}"
echo "${GREEN}# BACKUP TERMINÉ #${RESET}"
echo "${GREEN}############################${RESET}"
echo "${GREEN}Archive : ${ARCHIVE}${RESET}"
echo "${GREEN}Taille : $(du -h "$ARCHIVE" | cut -f1)${RESET}"
echo
echo "${CYAN}Pour transférer vers le nouveau serveur :${RESET}"
echo " scp \"$ARCHIVE\" user@nouveau-serveur:/chemin/vers/e-cosplay/var/backups/"
echo " ssh user@nouveau-serveur 'cd /chemin/vers/e-cosplay && ./restore.sh \"var/backups/$(basename "$ARCHIVE")\"'"

View File

@@ -31,7 +31,7 @@ nelmio_security:
- "'self'"
- "https://sentry.esy-web.dev"
- "https://chat.esy-web.dev"
- "https://auth.esy-web.dev"
- "https://auth.e-cosplay.fr"
- "https://cloudflareinsights.com"
- "https://challenges.cloudflare.com"
- "https://tools-security.esy-web.dev"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

184
restore.sh Executable file
View File

@@ -0,0 +1,184 @@
#!/bin/sh
set -eu
# ============================================================================
# E-COSPLAY - Script de restauration sur un nouveau serveur
# ----------------------------------------------------------------------------
# N'UTILISE PAS DOCKER. S'appuie sur les binaires installés sur l'hôte
# (psql, tar, gunzip) et lit DATABASE_URL depuis .env.local après l'avoir
# restauré depuis l'archive.
#
# Usage : ./restore.sh <chemin/vers/e-cosplay_backup_YYYYMMDD_HHMMSS.tar.gz>
#
# Étapes :
# 1. Décompresse l'archive
# 2. Restaure les fichiers d'environnement (.env.local, etc.)
# 3. Restaure la base PostgreSQL via psql + DATABASE_URL
# 4. Restaure les fichiers uploadés (public/storage)
# 5. Vide le cache Symfony et applique les migrations Doctrine
#
# ATTENTION : la restauration ÉCRASE les données existantes (DB + storage).
# ============================================================================
RED='\033[0;31m'
ORANGE='\033[0;33m'
GREEN='\033[0;32m'
CYAN='\033[0;36m'
RESET='\033[0m'
if [ $# -lt 1 ]; then
echo "${RED}Usage : $0 <archive.tar.gz>${RESET}" >&2
exit 1
fi
ARCHIVE="$1"
if [ ! -f "$ARCHIVE" ]; then
echo "${RED}Archive introuvable : $ARCHIVE${RESET}" >&2
exit 1
fi
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$PROJECT_DIR"
case "$ARCHIVE" in
/*) ARCHIVE_ABS="$ARCHIVE" ;;
*) ARCHIVE_ABS="$(pwd)/$ARCHIVE" ;;
esac
STORAGE_DIR="${STORAGE_DIR:-public/storage}"
WORK_DIR="$(mktemp -d /tmp/e-cosplay_restore.XXXXXX)"
trap 'rm -rf "$WORK_DIR"' EXIT
echo "${CYAN}#############################${RESET}"
echo "${CYAN}# E-COSPLAY RESTORE START #${RESET}"
echo "${CYAN}#############################${RESET}"
echo "${CYAN}Archive : ${ARCHIVE_ABS}${RESET}"
# ---------------------------------------------------------------------------
# Vérifications
# ---------------------------------------------------------------------------
for bin in psql tar gunzip; do
if ! command -v "$bin" >/dev/null 2>&1; then
echo "${RED}Binaire introuvable : $bin${RESET}" >&2
exit 1
fi
done
# ---------------------------------------------------------------------------
# Confirmation interactive (skip avec FORCE=1)
# ---------------------------------------------------------------------------
if [ "${FORCE:-0}" != "1" ]; then
printf "${ORANGE}La restauration va ÉCRASER la base et les fichiers existants. Continuer ? [y/N] ${RESET}"
read -r answer
case "$answer" in
y|Y|yes|YES) ;;
*) echo "Annulé."; exit 0 ;;
esac
fi
# ---------------------------------------------------------------------------
# 1) Décompression
# ---------------------------------------------------------------------------
echo "${CYAN}> Décompression de l'archive...${RESET}"
tar -xzf "$ARCHIVE_ABS" -C "$WORK_DIR"
SRC="$(find "$WORK_DIR" -mindepth 1 -maxdepth 1 -type d | head -n1)"
if [ -z "$SRC" ] || [ ! -f "$SRC/manifest.txt" ]; then
echo "${RED}Archive invalide : manifest.txt introuvable${RESET}" >&2
exit 1
fi
echo "${GREEN} ✓ Manifest :${RESET}"
sed 's/^/ /' "$SRC/manifest.txt"
# ---------------------------------------------------------------------------
# 2) Restauration des fichiers d'environnement
# ---------------------------------------------------------------------------
if [ -d "$SRC/env" ]; then
echo "${CYAN}> Restauration des fichiers d'environnement...${RESET}"
for f in "$SRC"/env/*; do
[ -e "$f" ] || continue
name="$(basename "$f")"
if [ -f "$PROJECT_DIR/$name" ]; then
cp -a "$PROJECT_DIR/$name" "$PROJECT_DIR/$name.bak.$(date +%s)"
fi
cp -a "$f" "$PROJECT_DIR/$name"
echo "${GREEN}$name${RESET}"
done
fi
# ---------------------------------------------------------------------------
# 3) Récupération de DATABASE_URL (après restauration des fichiers env)
# ---------------------------------------------------------------------------
get_database_url() {
if [ -n "${DATABASE_URL:-}" ]; then
echo "$DATABASE_URL"
return 0
fi
for f in .env.local .env.prod.local .env.prod .env; do
if [ -f "$PROJECT_DIR/$f" ]; then
url="$(grep -E '^DATABASE_URL=' "$PROJECT_DIR/$f" | tail -n1 | sed -E 's/^DATABASE_URL=//; s/^"(.*)"$/\1/; s/^'"'"'(.*)'"'"'$/\1/')"
if [ -n "$url" ]; then
echo "$url"
return 0
fi
fi
done
return 1
}
DATABASE_URL_RAW="$(get_database_url || true)"
if [ -z "$DATABASE_URL_RAW" ]; then
echo "${RED}DATABASE_URL introuvable${RESET}" >&2
exit 1
fi
DATABASE_URL_CLEAN="$(echo "$DATABASE_URL_RAW" | sed -E 's/\?.*$//')"
DATABASE_URL_MASKED="$(echo "$DATABASE_URL_CLEAN" | sed -E 's#(://[^:]+:)[^@]+(@)#\1***\2#')"
echo "${CYAN}> DATABASE_URL : ${DATABASE_URL_MASKED}${RESET}"
# ---------------------------------------------------------------------------
# 4) Restauration PostgreSQL
# ---------------------------------------------------------------------------
if [ -f "$SRC/database.sql.gz" ]; then
echo "${CYAN}> Restauration de la base PostgreSQL...${RESET}"
gunzip -c "$SRC/database.sql.gz" \
| psql "$DATABASE_URL_CLEAN" -v ON_ERROR_STOP=1 >/dev/null
echo "${GREEN} ✓ Base restaurée${RESET}"
else
echo "${ORANGE} ! database.sql.gz absent, étape ignorée${RESET}"
fi
# ---------------------------------------------------------------------------
# 5) Restauration des fichiers uploadés
# ---------------------------------------------------------------------------
if [ -f "$SRC/storage.tar.gz" ]; then
echo "${CYAN}> Restauration de ${STORAGE_DIR}...${RESET}"
if [ -d "$PROJECT_DIR/$STORAGE_DIR" ]; then
backup_path="$PROJECT_DIR/${STORAGE_DIR}.bak.$(date +%s)"
mv "$PROJECT_DIR/$STORAGE_DIR" "$backup_path"
echo "${ORANGE} ! ancien dossier déplacé vers $backup_path${RESET}"
fi
tar -xzf "$SRC/storage.tar.gz" -C "$PROJECT_DIR"
echo "${GREEN}${STORAGE_DIR} restauré${RESET}"
else
echo "${ORANGE} ! storage.tar.gz absent, étape ignorée${RESET}"
fi
# ---------------------------------------------------------------------------
# 6) Cache Symfony + migrations Doctrine
# ---------------------------------------------------------------------------
if [ -x "$PROJECT_DIR/bin/console" ] && command -v php >/dev/null 2>&1; then
echo "${CYAN}> Vidage du cache Symfony...${RESET}"
php "$PROJECT_DIR/bin/console" cache:clear --no-warmup || true
php "$PROJECT_DIR/bin/console" cache:warmup || true
echo "${CYAN}> Application des migrations Doctrine éventuelles...${RESET}"
php "$PROJECT_DIR/bin/console" doctrine:migrations:migrate --no-interaction --allow-no-migration || true
fi
echo "${GREEN}#############################${RESET}"
echo "${GREEN}# RESTORE TERMINÉ #${RESET}"
echo "${GREEN}#############################${RESET}"
echo "${GREEN}Pense à vérifier :${RESET}"
echo " - les variables d'environnement spécifiques au nouveau serveur (PATH_URL, DEV_URL, ...)"
echo " - les permissions du dossier $STORAGE_DIR (utilisateur du serveur web)"
echo " - la conf Caddy / Nginx / Apache et les certificats TLS"

View File

@@ -21,14 +21,15 @@ class CloudflarePurgeCommand extends Command
private const CLOUDFLARE_API_URL = 'https://api.cloudflare.com/client/v4/zones/%s/purge_cache';
private string $zoneId;
private string $apiToken;
private string $apiEmail;
private string $apiKey;
private HttpClientInterface $httpClient;
public function __construct(HttpClientInterface $httpClient)
{
// Les variables sont injectées via le conteneur de services (services.yaml)
$this->zoneId = $_ENV['CLOUDFLARE_ZONE_ID'];
$this->apiToken = $_ENV['CLOUDFLARE_API_TOKEN'];
$this->apiEmail = $_ENV['CLOUDFLARE_API_EMAIL'];
$this->apiKey = $_ENV['CLOUDFLARE_API_KEY'];
$this->httpClient = $httpClient;
parent::__construct();
@@ -38,8 +39,8 @@ class CloudflarePurgeCommand extends Command
{
$io = new SymfonyStyle($input, $output);
if (empty($this->zoneId) || empty($this->apiToken)) {
$io->error('CLOUDFLARE_ZONE_ID ou CLOUDFLARE_API_TOKEN ne sont pas définis. Veuillez vérifier votre fichier .env.');
if (empty($this->zoneId) || empty($this->apiEmail) || empty($this->apiKey)) {
$io->error('CLOUDFLARE_ZONE_ID, CLOUDFLARE_API_EMAIL ou CLOUDFLARE_API_KEY ne sont pas définis. Veuillez vérifier votre fichier .env.');
return Command::FAILURE;
}
@@ -52,8 +53,8 @@ class CloudflarePurgeCommand extends Command
sprintf(self::CLOUDFLARE_API_URL, $this->zoneId),
[
'headers' => [
// Utilisation du Token API (méthode recommandée par Cloudflare)
'Authorization' => 'Bearer ' . $this->apiToken,
'X-Auth-Email' => $this->apiEmail,
'X-Auth-Key' => $this->apiKey,
'Content-Type' => 'application/json',
],
// Le payload pour purger tout le cache

View File

@@ -33,7 +33,6 @@ class SitemapSubscriber
$decoratedUrlHome->addImage(new GoogleImage($this->cacheManager->resolve('assets/partenair/couronnes-d-or.jpg','webp')));
$decoratedUrlHome->addImage(new GoogleImage($this->cacheManager->resolve('assets/partenair/cosplay-familly.jpg','webp')));
$decoratedUrlHome->addImage(new GoogleImage($this->cacheManager->resolve('assets/partenair/house-of-geek.jpg','webp')));
$decoratedUrlHome->addImage(new GoogleImage($this->cacheManager->resolve('assets/partenair/siteconseil.png','webp')));
$decoratedUrlHome = new GoogleMultilangUrlDecorator($decoratedUrlHome);
foreach ($langs as $lang) {
$decoratedUrlHome->addLink($urlGenerator->generate('app_home',['lang'=>$lang], UrlGeneratorInterface::ABSOLUTE_URL), $lang);

View File

@@ -36,7 +36,7 @@ class AmazonSesClient
public function send(string $html, string $address, string $subject): void
{
$email = (new Email())
->from('no-reply@siteconseil.fr')
->from('no-reply@e-cosplay.fr')
->to($address)
->subject($subject);
@@ -77,7 +77,7 @@ class AmazonSesClient
{
$messageIdHeader = $email->getHeaders()->get('message-id');
$messageFormat = $messageIdHeader ? $messageIdHeader->getBody()[0] : '';
$messageFormat = str_replace('@siteconseil.fr', '', $messageFormat);
$messageFormat = str_replace('@e-cosplay.fr', '', $messageFormat);
$mailData = new Mail();
$mailData->setDest($email->getTo()[0]->getAddress());

View File

@@ -127,10 +127,7 @@ L'overflow-y-auto n'est plus nécessaire ici car c'est le <body> qui gère le sc
<!-- 2.3. Footer (Pied de Page) - bg-gray-800 -->
<footer class="p-4 bg-gray-800 border-t border-gray-700 text-center text-sm text-gray-400 flex-shrink-0">
Développé par SARL SITECONSEIL. Tous droits réservés.
<a href="https://www.siteconseil.fr/" target="_blank" rel="noopener noreferrer" class="text-indigo-400 hover:text-indigo-300 transition duration-150 font-medium ml-1">
https://www.siteconseil.fr/
</a>
&copy; {{ "now"|date("Y") }} E-Cosplay. Tous droits réservés.
</footer>

View File

@@ -62,7 +62,6 @@
{ 'name': 'Accueil'|trans, 'route': 'app_home' },
{ 'name': 'Qui sommes-nous'|trans, 'route': 'app_about' },
{ 'name': 'Nos membres'|trans, 'route': 'app_members' },
{ 'name': 'epage_cosplay'|trans, 'route': 'app_pages' },
{ 'name': 'Nos événements'|trans, 'route': 'app_events' },
{ 'name': 'Boutiques'|trans, 'route': 'app_shop' },
{ 'name': 'Documents'|trans, 'route': 'app_doc' },
@@ -209,7 +208,7 @@
<div class="flex flex-col md:flex-row justify-between items-center gap-6">
<div class="text-center md:text-left">
<p class="font-black uppercase text-sm">&copy; {{ "now"|date("Y") }} E-COSPLAY.</p>
<p class="text-[10px] font-bold opacity-70">RNA N°W022006988 - DEV BY SITECONSEIL</p>
<p class="text-[10px] font-bold opacity-70">RNA N°W022006988</p>
</div>
<div class="flex flex-wrap justify-center gap-3">
{% set footer_links = [

View File

@@ -135,8 +135,7 @@
{% for partner in partners|default([
{ 'image': '/assets/partenair/house-of-geek.jpg', 'name': 'House Of Geek', 'facebook_link': 'https://www.facebook.com/houseofgeek02' },
{ 'image': '/assets/partenair/cosplay-familly.jpg', 'name': 'Cosplays family arts', 'facebook_link': 'https://www.facebook.com/profile.php?id=61568494078902' },
{ 'image': '/assets/partenair/couronnes-d-or.jpg', 'name': 'Le Comité des Couronnes Dor', 'facebook_link': 'https://www.facebook.com/p/Le-Comit%C3%A9-des-Couronnes-Dor-61576548182126/' },
{ 'image': '/assets/partenair/siteconseil.png', 'name': 'SARL SITECONSEIL', 'facebook_link': 'https://www.facebook.com/siteconseil','website':'https://www.siteconseil.fr' }
{ 'image': '/assets/partenair/couronnes-d-or.jpg', 'name': 'Le Comité des Couronnes Dor', 'facebook_link': 'https://www.facebook.com/p/Le-Comit%C3%A9-des-Couronnes-Dor-61576548182126/' }
]) %}
<a href="{% if partner.website is defined and partner.website %}{{ partner.website }}{% else %}{{ partner.facebook_link ?? '#' }}{% endif %}" target="_blank"
class="group bg-white border-4 border-gray-900 p-8 flex flex-col items-center shadow-[6px_6px_0px_rgba(0,0,0,1)] hover:bg-gray-50 hover:translate-y-[-4px] transition-all">

View File

@@ -21,31 +21,11 @@
<div class="space-y-24">
{# SECTION 1 : OPÉRATEUR TECHNIQUE #}
{# SECTION 1 : HÉBERGEMENT DU SITE #}
<section class="relative">
<div class="inline-block bg-[#0f172a] text-yellow-500 px-6 py-3 font-black italic skew-x-[-15deg] mb-6 shadow-xl border-b-2 border-yellow-600">
<span class="skew-x-[15deg] block uppercase tracking-wider text-lg">
// 1. {{ 'hosting_tech_operator_title'|trans }}
</span>
</div>
<div class="bg-white border-2 border-gray-900 p-8 rounded-lg shadow-[8px_8px_0px_rgba(0,0,0,1)]">
<div class="bg-gray-50 p-6 border-l-4 border-gray-900 skew-x-[-2deg]">
<p class="font-black text-xl text-gray-900 uppercase italic">{{ 'hosting_tech_operator_name'|trans }}</p>
<p class="text-sm italic leading-relaxed mt-2 text-gray-600">
{{ 'hosting_tech_operator_address'|trans|raw }}
</p>
<p class="text-[10px] mt-4 font-mono font-bold tracking-widest text-gray-400">
{{ 'hosting_tech_operator_siret'|trans }}
</p>
</div>
</div>
</section>
{# SECTION 2 : INFRASTRUCTURE CLOUD #}
<section class="relative">
<div class="inline-block bg-[#0f172a] text-yellow-500 px-6 py-3 font-black italic skew-x-[-15deg] mb-6 shadow-xl border-b-2 border-yellow-600">
<span class="skew-x-[15deg] block uppercase tracking-wider text-lg">
// 2. {{ 'hosting_infrastructure_title'|trans }}
// 1. {{ 'hosting_infrastructure_title'|trans }}
</span>
</div>
<div class="bg-gray-900 text-white p-8 rounded-lg border-r-8 border-yellow-500 shadow-xl overflow-hidden">
@@ -55,18 +35,18 @@
<p class="text-sm italic text-gray-400 leading-relaxed">{{ 'hosting_location_detail'|trans }}</p>
</div>
<div class="flex gap-4">
<span class="text-[10px] bg-white/10 px-3 py-1 font-mono uppercase border border-white/20">Region: eu-west4</span>
<span class="text-[10px] bg-white/10 px-3 py-1 font-mono uppercase border border-white/20">France</span>
<span class="text-[10px] bg-green-500/20 text-green-400 px-3 py-1 font-mono uppercase border border-green-500/30">Tier 3+ Compliance</span>
</div>
</div>
</div>
</section>
{# SECTION 3 : ÉDITEUR DU SITE #}
{# SECTION 2 : ÉDITEUR DU SITE #}
<section class="relative">
<div class="inline-block bg-[#0f172a] text-yellow-500 px-6 py-3 font-black italic skew-x-[-15deg] mb-6 shadow-xl border-b-2 border-yellow-600">
<span class="skew-x-[15deg] block uppercase tracking-wider text-lg">
// 3. {{ 'hosting_editor_title'|trans }}
// 2. {{ 'hosting_editor_title'|trans }}
</span>
</div>
<div class="bg-white border-2 border-gray-900 p-8 rounded-lg shadow-[8px_8px_0px_rgba(0,0,0,1)] grid grid-cols-1 md:grid-cols-2 gap-8">
@@ -85,11 +65,11 @@
</div>
</section>
{# SECTION 4 : STACK TECHNIQUE & SÉCURITÉ #}
{# SECTION 3 : STACK TECHNIQUE & SÉCURITÉ #}
<section class="relative">
<div class="inline-block bg-[#0f172a] text-yellow-500 px-6 py-3 font-black italic skew-x-[-15deg] mb-6 shadow-xl border-b-2 border-yellow-600">
<span class="skew-x-[15deg] block uppercase tracking-wider text-lg">
// 4. {{ 'hosting_security_title'|trans }}
// 3. {{ 'hosting_security_title'|trans }}
</span>
</div>
<div class="bg-white border-2 border-gray-900 p-8 rounded-lg shadow-[8px_8px_0px_rgba(0,0,0,1)] grid grid-cols-1 md:grid-cols-3 gap-6">
@@ -108,11 +88,11 @@
</div>
</section>
{# SECTION 5 : SYSTÈME DE MESSAGERIE #}
{# SECTION 4 : SYSTÈME DE MESSAGERIE #}
<section class="relative">
<div class="inline-block bg-[#0f172a] text-yellow-500 px-6 py-3 font-black italic skew-x-[-15deg] mb-6 shadow-xl border-b-2 border-yellow-600">
<span class="skew-x-[15deg] block uppercase tracking-wider text-lg">
// 5. {{ 'hosting_mail_system_title'|trans }}
// 4. {{ 'hosting_mail_system_title'|trans }}
</span>
</div>
<div class="bg-gray-900 text-white p-8 rounded-lg border-l-8 border-red-600 shadow-xl">
@@ -126,11 +106,11 @@
</div>
</section>
{# SECTION 6 : CONFORMITÉ & SIGNALEMENT #}
{# SECTION 5 : CONFORMITÉ & SIGNALEMENT #}
<section class="relative">
<div class="inline-block bg-[#0f172a] text-yellow-500 px-6 py-3 font-black italic skew-x-[-15deg] mb-6 shadow-xl border-b-2 border-yellow-600">
<span class="skew-x-[15deg] block uppercase tracking-wider text-lg">
// 6. {{ 'hosting_compliance_title'|trans }}
// 5. {{ 'hosting_compliance_title'|trans }}
</span>
</div>
<div class="bg-white border-2 border-gray-900 p-8 rounded-lg shadow-[8px_8px_0px_rgba(0,0,0,1)] grid grid-cols-1 md:grid-cols-2 gap-12">

View File

@@ -93,7 +93,7 @@
<span class="skew-x-[15deg] block uppercase text-sm">// {{'legal_section3_title'|trans}}</span>
</div>
<div class="bg-white border-2 border-gray-900 p-6 rounded-lg shadow-[6px_6px_0px_rgba(0,0,0,1)] italic text-sm">
<p class="font-black text-gray-900 uppercase mb-2">Google Cloud Platform</p>
<p class="font-black text-gray-900 uppercase mb-2">OVHcloud</p>
<p class="text-gray-600">{{'legal_host_address'|trans}}</p>
<p class="mt-4 text-[10px] font-mono bg-gray-100 p-2">{{'legal_host_data_location'|trans}}</p>
</div>

View File

@@ -135,17 +135,13 @@
// 6. {{ 'rgpd_additif_title'|trans }}
</span>
</div>
<div class="bg-white border-2 border-gray-900 p-8 rounded-lg shadow-[8px_8px_0px_rgba(0,0,0,1)] grid grid-cols-1 lg:grid-cols-3 gap-8">
<div class="lg:col-span-2 space-y-6 italic text-sm">
<div class="bg-white border-2 border-gray-900 p-8 rounded-lg shadow-[8px_8px_0px_rgba(0,0,0,1)]">
<div class="space-y-6 italic text-sm">
<p>{{ 'rgpd_additif_collecte_text'|trans }}</p>
<div class="bg-gray-900 text-white p-4 font-mono text-[10px] uppercase">
<span class="text-yellow-500">// SSL</span> CLOUDFLARE + LET'S ENCRYPT
</div>
</div>
<div class="bg-yellow-500 p-6 border-2 border-gray-900 h-fit">
<h3 class="font-black uppercase text-xs mb-4 italic tracking-widest border-b border-gray-900/20 pb-2">DPO SITECONSEIL</h3>
<p class="text-[10px] font-bold uppercase italic text-gray-900 leading-tight">LEGRAND Philippe<br>03 23 05 62 43</p>
</div>
</div>
</section>

View File

@@ -220,9 +220,6 @@
'strong_end_tag': '</span>'
})|raw }}
</p>
<p class="text-[10px] text-gray-400 uppercase font-black tracking-widest border-t-2 border-gray-100 pt-4">
PARTNER_REFERRAL: SARL SITECONSEIL
</p>
</div>
</div>
@@ -274,33 +271,6 @@
</div>
</div>
{# BLOC PARTENARIAT #}
<div class="mt-32 p-10 bg-white border-8 border-cyan-500 shadow-[12px_12px_0px_rgba(6,182,212,1)] flex flex-col md:flex-row items-center gap-10">
<div class="flex-1 text-left">
<h3 class="text-3xl font-black text-cyan-600 uppercase italic tracking-tighter mb-4">
{{ 'page.presentation.siteconseil_partner.title'|trans }}
</h3>
<p class="text-gray-800 font-bold uppercase text-sm leading-tight">
{{ 'page.presentation.siteconseil_partner.intro'|trans({
'page_span': '<span class="text-cyan-600 font-black underline">EPage</span>',
'strong_tag': '<b>',
'strong_end_tag': '</b>'
})|raw }}
</p>
</div>
<div class="bg-gray-900 text-white p-6 border-4 border-gray-900 shadow-[8px_8px_0px_rgba(6,182,212,0.5)] max-w-sm">
<p class="text-xs font-black text-cyan-400 uppercase mb-4 tracking-widest">{{ 'page.presentation.siteconseil_partner.recommended'|trans }}</p>
<p class="text-sm font-bold mb-6">
{{ 'page.presentation.siteconseil_partner.cms_info'|trans({
'partner_strong': '<span class="text-cyan-400">SARL SITECONSEIL</span>',
'cms_strong': '<span class="text-yellow-400 font-black">Esy-Flex</span>'
})|raw }}
</p>
<a href="https://www.siteconseil.fr" target="_blank" class="block text-center py-3 bg-cyan-500 text-gray-900 font-black uppercase text-xs border-2 border-white hover:bg-white transition-colors">
{{ 'page.presentation.siteconseil_partner.discover_button'|trans }} _
</a>
</div>
</div>
</div>
{# --- JAVASCRIPT --- #}

View File

@@ -171,16 +171,16 @@ hosting_page_title_long: 托管和技术服务提供商详细信息
# Section 1 : Hébergeur Principal
hosting_section1_title: 1. 主要托管服务商
hosting_section1_p1: '%site_url%网站托管在 Google 的云基础设施上。'
hosting_section1_p1: '%site_url%网站托管在 OVHcloud 的云基础设施上。'
hosting_label_host_name: 托管服务商名称
hosting_label_service_used: 使用的服务
hosting_service_compute_cloud: Compute Cloud (计算和数据基础设施)
hosting_label_company: 公司
hosting_label_address: 注册地址
hosting_label_data_location: 数据托管地点(欧洲)
hosting_data_location_details: "Google Cloud Netherlands B.V.通常从爱尔兰管理O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, Irelande。"
hosting_data_location_details: "OVH SAS数据中心位于法国。"
hosting_label_contact: 联系方式
hosting_contact_details: 通常通过 Google Cloud 支持平台以电子方式联系。
hosting_contact_details: 通常通过 OVHcloud 支持平台以电子方式联系。
hosting_section1_disclaimer: 根据 GDPR用户数据的主要存储保证在欧盟内。
# Section 2 : Autres Prestataires
@@ -265,8 +265,8 @@ legal_label_technical_contact: 技术联系方式
# Section 3 : Hébergement
legal_section3_title: 3. 网站托管
legal_section3_p1_host_intro: "网站由以下机构托管:"
legal_host_address: 1600 Amphitheatre Parkway, Mountain View, CA 94043, 美国(注册地址)
legal_host_data_location: Google Cloud Netherlands B.V., O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, 爱尔兰
legal_host_address: 2 rue Kellermann, 59100 Roubaix, 法国(注册地址)
legal_host_data_location: OVH SAS数据中心位于法国
# Section 4 : Propriété Intellectuelle et Droit à l'Image
legal_section4_title: 4. 知识产权和肖像权
@@ -679,14 +679,6 @@ events.details.back_to_list: 返回活动列表
page:
presentation:
siteconseil_partner:
discover_button: 探索 SITECONSEIL
offer_info: 快速创建您的网站,并享受量身定制的优惠。
cms_info: 我们的合作伙伴 partner_strong 提供其 cms_strong 内容管理系统解决方案。
recommended: 推荐合作伙伴
intro: "page_span 非常适合您的 Cosplay 展示,但如果您希望为您的专业活动或个人品牌建立一个 strong_tag完整、个性化且可扩展的网站strong_end_tag"
title: 🚀 您的完整网站
js:
periodic_billing: 按 %duration% 个月计费。平均每月 %average_price%。
annual_billing: 按年计费。平均每月 %average_price%。
@@ -707,7 +699,6 @@ page:
choose_period: 选择您的订阅期限
additional_features:
siteconseil_referral: '<p class="text-base sm:text-lg leading-relaxed mt-3">我们会告知您是否可行,或者我们是否需要将您转介给我们的合作伙伴 partner_strong_cyan 来创建您的定制网站。</p>'
request_support: 如果您需要 page_span 上当前没有提供的额外功能strong_tag请咨询 E-Cosplay 支持strong_end_tag。
title: ⚡ 需要更多功能?
@@ -966,13 +957,9 @@ rules_art5_stand_desc: "协会参展时,将优先要求主办方提供门票
hosting_main_title: "法律信息与托管"
hosting_bg_text: "服务器 (SERVER)"
hosting_responsibilities_label: "责任声明"
hosting_tech_operator_title: "技术运营商"
hosting_tech_operator_name: "SARL SITECONSEIL"
hosting_tech_operator_address: "27 RUE LE SERURIER<br>02100 SAINT-QUENTIN"
hosting_tech_operator_siret: "SIRET: 41866405800025"
hosting_infrastructure_title: "云基础设施"
hosting_cloud_provider: "Google Cloud Platform (GCP)"
hosting_location_detail: "荷兰 (eu-west4)"
hosting_infrastructure_title: "网站托管"
hosting_cloud_provider: "OVHcloud"
hosting_location_detail: "法国"
hosting_editor_title: "网站出版商"
hosting_editor_name: "E-Cosplay 协会"
hosting_editor_address: "42 rue de Saint-Quentin<br>02800 Beautor"
@@ -995,7 +982,7 @@ hosting_privacy_alert_desc: "我们的服务器和 Amazon SES 处理本网站发
hosting_compliance_title: "合规与 GDPR"
hosting_compliance_desc: "基础设施配置符合欧盟境内的安全标准和 GDPR通用数据保护条例。"
hosting_signalement_label: "违规举报"
hosting_signalement_email: "signalement@siteconseil.fr"
hosting_signalement_email: "signalement@e-cosplay.fr"
# 技术补充 (Addendum)
rgpd_additif_title: "技术补充条款"

View File

@@ -173,16 +173,16 @@ hosting_page_title_long: Detailed Information on Hosting and Technical Providers
# Section 1 : Hébergeur Principal
hosting_section1_title: 1. Main Host
hosting_section1_p1: The website %site_url% is hosted on Google's cloud infrastructure.
hosting_section1_p1: The website %site_url% is hosted on OVHcloud's cloud infrastructure.
hosting_label_host_name: Host Name
hosting_label_service_used: Service Used
hosting_service_compute_cloud: Compute Cloud (Computing and Data Infrastructure)
hosting_label_company: Company
hosting_label_address: Headquarters Address
hosting_label_data_location: Data Hosting Location (Europe)
hosting_data_location_details: "Google Cloud Netherlands B.V. (often managed from Ireland: O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, Ireland)."
hosting_data_location_details: "OVH SAS, datacenters located in France."
hosting_label_contact: Contact
hosting_contact_details: Generally by electronic means via Google Cloud support platforms.
hosting_contact_details: Generally by electronic means via OVHcloud support platforms.
hosting_section1_disclaimer: In compliance with the GDPR, the main storage of user data is guaranteed within the European Union.
# Section 2 : Autres Prestataires
@@ -267,8 +267,8 @@ legal_label_technical_contact: Technical Contact
# Section 3 : Hébergement
legal_section3_title: 3. Site Hosting
legal_section3_p1_host_intro: "The site is hosted by:"
legal_host_address: 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States (Headquarters)
legal_host_data_location: Google Cloud Netherlands B.V., O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, Ireland.
legal_host_address: 2 rue Kellermann, 59100 Roubaix, France (Headquarters)
legal_host_data_location: OVH SAS, datacenters located in France.
# Section 4 : Propriété Intellectuelle et Droit à l'Image
@@ -751,14 +751,6 @@ events.details.organizer: Organizer
events.details.back_to_list: Back to Events List
page:
presentation:
siteconseil_partner:
discover_button: Discover SITECONSEIL
offer_info: Create your website quickly and benefit from a suitable offer.
cms_info: Our partner partner_strong offers its CMS solution cms_strong.
recommended: Recommended Partner
intro: "The page_span is perfect for your Cosplay showcase, but if you want a strong_tagcomplete, personalized, and scalable websitestrong_end_tag for your professional activity or personal brand:"
title: 🚀 Your Complete Website
js:
periodic_billing: Billed for %duration% months. An average of %average_price% per month.
annual_billing: Billed annually. An average of %average_price% per month.
@@ -779,7 +771,6 @@ page:
choose_period: Choose Your Subscription Period
additional_features:
siteconseil_referral: '<p class="text-base sm:text-lg leading-relaxed mt-3">We will let you know if its feasible or if we need to direct you to our partner partner_strong_cyan for the creation of your custom website.</p>'
request_support: If you need additional features not currently available on the page_span, strong_tagask E-Cosplay supportstrong_end_tag.
title: ⚡ NEED MORE FEATURES?
@@ -1039,13 +1030,9 @@ rules_art5_stand_desc: "When a stand is held by the association, the organizer w
hosting_main_title: "Legal Information & Hosting"
hosting_bg_text: "SERVER"
hosting_responsibilities_label: "Responsibilities"
hosting_tech_operator_title: "Technical Operator"
hosting_tech_operator_name: "SARL SITECONSEIL"
hosting_tech_operator_address: "27 RUE LE SERURIER<br>02100 SAINT-QUENTIN"
hosting_tech_operator_siret: "SIRET: 41866405800025"
hosting_infrastructure_title: "Cloud Infrastructure"
hosting_cloud_provider: "Google Cloud Platform (GCP)"
hosting_location_detail: "Netherlands (eu-west4)"
hosting_infrastructure_title: "Site Hosting"
hosting_cloud_provider: "OVHcloud"
hosting_location_detail: "France"
hosting_editor_title: "Site Editor"
hosting_editor_name: "E-Cosplay Association"
hosting_editor_address: "42 rue de Saint-Quentin<br>02800 Beautor"
@@ -1066,9 +1053,9 @@ hosting_mail_system_desc: "Internal mail server (mail.esy-web.dev) with Amazon S
hosting_privacy_alert_label: "Privacy"
hosting_privacy_alert_desc: "Our server and Amazon SES process the content and metadata of emails sent by the site."
hosting_compliance_title: "Compliance & GDPR"
hosting_compliance_desc: "Infrastructure (GCP, Cloudflare, Sentry) is configured to respect security standards and GDPR within the European Union."
hosting_compliance_desc: "Infrastructure (OVHcloud, Cloudflare, Sentry) is configured to respect security standards and GDPR within the European Union."
hosting_signalement_label: "Report a violation"
hosting_signalement_email: "signalement@siteconseil.fr"
hosting_signalement_email: "signalement@e-cosplay.fr"
# Technical Addendum
rgpd_additif_title: "Technical Addendum"

View File

@@ -172,16 +172,16 @@ hosting_page_title_long: Información detallada sobre el hosting y proveedores t
# Sección 1: Proveedor Principal
hosting_section1_title: 1. Proveedor de Hosting Principal
hosting_section1_p1: El sitio %site_url% está alojado en la infraestructura en la nube de Google.
hosting_section1_p1: El sitio %site_url% está alojado en la infraestructura en la nube de OVHcloud.
hosting_label_host_name: Nombre del host
hosting_label_service_used: Servicio utilizado
hosting_service_compute_cloud: Compute Cloud (infraestructura de computación y datos)
hosting_label_company: Empresa
hosting_label_address: Dirección de la sede
hosting_label_data_location: Ubicación de los datos (Europa)
hosting_data_location_details: "Google Cloud Netherlands B.V. (a menudo gestionado desde Irlanda: O'Mahony's Corner, Block R, Spencer Dock, Dublín 1, Irlanda)."
hosting_data_location_details: "OVH SAS, centros de datos situados en Francia."
hosting_label_contact: Contacto
hosting_contact_details: Generalmente de forma electrónica a través de las plataformas de soporte de Google Cloud.
hosting_contact_details: Generalmente de forma electrónica a través de las plataformas de soporte de OVHcloud.
hosting_section1_disclaimer: De acuerdo con el RGPD, el almacenamiento primario de los datos de los usuarios está garantizado dentro de la Unión Europea.
# Sección 2: Otros Proveedores
@@ -266,8 +266,8 @@ legal_label_technical_contact: Contacto técnico
# Sección 3: Hosting
legal_section3_title: 3. Hosting del sitio
legal_section3_p1_host_intro: "El sitio está alojado por:"
legal_host_address: 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA (Sede social)
legal_host_data_location: Google Cloud Netherlands B.V., O'Mahony's Corner, Block R, Spencer Dock, Dublín 1, Irlanda.
legal_host_address: 2 rue Kellermann, 59100 Roubaix, Francia (Sede social)
legal_host_data_location: OVH SAS, centros de datos situados en Francia.
# Sección 4: Propiedad Intelectual
legal_section4_title: 4. Propiedad Intelectual y Derecho a la Imagen
@@ -701,14 +701,6 @@ page:
title: "Formulario de solicitud de EPage"
description: "Formulario de solicitud de EPage"
presentation:
siteconseil_partner:
discover_button: Descubrir SITECONSEIL
offer_info: Crea rápidamente tu sitio y disfruta de una oferta adaptada.
cms_info: Nuestro socio partner_strong ofrece su solución CMS cms_strong.
recommended: Socio recomendado
intro: "La page_span es perfecta para tu vitrina de cosplay, pero si quieres un strong_tagsitio web completo, personalizado y escalable para tu actividad profesional o tu marca personalstrong_end_tag:"
title: 🚀 Tu sitio web completo
js:
periodic_billing: Facturación por %duration% meses. Esto equivale a una media de %average_price% al mes.
annual_billing: Facturación anual. Esto equivale a una media de %average_price% al mes.
@@ -729,7 +721,6 @@ page:
choose_period: Elige tu periodo de suscripción
additional_features:
siteconseil_referral: '<p class="text-base sm:text-lg leading-relaxed mt-3">Te indicaremos si es factible o si debemos redirigirte a nuestro socio partner_strong_cyan para la creación de tu sitio a medida.</p>'
request_support: Si necesitas funcionalidades adicionales que no están presentes actualmente en la page_span, strong_tagconsulta al soporte de E-Cosplaystrong_end_tag.
title: ⚡ ¿NECESITAS MÁS FUNCIONALIDADES?
@@ -1031,14 +1022,9 @@ hosting_bg_text: "SERVIDOR"
hosting_responsibilities_label: "Responsabilidades"
hosting_tech_operator_title: "Operador Técnico"
hosting_tech_operator_name: "SARL SITECONSEIL"
hosting_tech_operator_address: "27 RUE LE SERURIER<br>02100 SAINT-QUENTIN"
hosting_tech_operator_siret: "SIRET: 41866405800025"
hosting_infrastructure_title: "Infraestructura Cloud"
hosting_cloud_provider: "Google Cloud Platform (GCP)"
hosting_location_detail: "Países Bajos (eu-west4)"
hosting_infrastructure_title: "Alojamiento del Sitio"
hosting_cloud_provider: "OVHcloud"
hosting_location_detail: "Francia"
hosting_editor_title: "Editor del sitio"
hosting_editor_name: "Asociación E-Cosplay"
@@ -1063,11 +1049,11 @@ hosting_privacy_alert_label: "Privacidad"
hosting_privacy_alert_desc: "Nuestro servidor y Amazon SES procesan el contenido y los metadatos de los correos enviados a través del sitio."
hosting_compliance_title: "Conformidad y RGPD"
hosting_compliance_desc: "La infraestructura (GCP, Cloudflare, Sentry) está configurada para cumplir con los estándares de seguridad y el RGPD dentro de la Unión Europea."
hosting_compliance_desc: "La infraestructura (OVHcloud, Cloudflare, Sentry) está configurada para cumplir con los estándares de seguridad y el RGPD dentro de la Unión Europea."
hosting_signalement_label: "Denuncia de abusos"
hosting_signalement_email: "signalement@siteconseil.fr"
hosting_signalement_email: "signalement@e-cosplay.fr"
# --- ADENDA TÉCNICA SITECONSEIL ---
# --- ADENDA TÉCNICA ---
rgpd_additif_title: "Adenda Técnica"
rgpd_additif_collecte_title: "Recogida mínima y anonimizada"
rgpd_additif_collecte_text: "El sitio se limita estrictamente a la recogida de datos técnicos necesarios para su buen funcionamiento (logs de errores, rendimiento). Estos datos se agregan de forma que no permitan identificar a un visitante específico."

View File

@@ -172,16 +172,16 @@ hosting_page_title_long: Informations détaillées sur l'Hébergement et les Pre
# Section 1 : Hébergeur Principal
hosting_section1_title: 1. Hébergeur Principal
hosting_section1_p1: Le site internet %site_url% est hébergé sur l'infrastructure cloud de Google.
hosting_section1_p1: Le site internet %site_url% est hébergé sur l'infrastructure cloud d'OVHcloud.
hosting_label_host_name: Nom de l'Hébergeur
hosting_label_service_used: Service utilisé
hosting_service_compute_cloud: Compute Cloud (Infrastructure de calcul et de données)
hosting_label_company: Société
hosting_label_address: Adresse du Siège social
hosting_label_data_location: Lieu d'hébergement des données (Europe)
hosting_data_location_details: "Google Cloud Netherlands B.V. (souvent géré depuis l'Irlande : O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, Irelande)."
hosting_data_location_details: "OVH SAS, datacenters situés en France."
hosting_label_contact: Contact
hosting_contact_details: Généralement par voie électronique via les plateformes de support de Google Cloud.
hosting_contact_details: Généralement par voie électronique via les plateformes de support OVHcloud.
hosting_section1_disclaimer: Conformément au RGPD, le stockage principal des données des utilisateurs est garanti au sein de l'Union Européenne.
# Section 2 : Autres Prestataires
@@ -266,8 +266,8 @@ legal_label_technical_contact: Contact technique
# Section 3 : Hébergement
legal_section3_title: 3. Hébergement du Site
legal_section3_p1_host_intro: "Le site est hébergé par :"
legal_host_address: 1600 Amphitheatre Parkway, Mountain View, CA 94043, États-Unis (Siège social)
legal_host_data_location: Google Cloud Netherlands B.V., O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, Irelande.
legal_host_address: 2 rue Kellermann, 59100 Roubaix, France (Siège social)
legal_host_data_location: OVH SAS, datacenters situés en France.
# Section 4 : Propriété Intellectuelle et Droit à l'Image
legal_section4_title: 4. Propriété Intellectuelle et Droit à l'Image
@@ -701,14 +701,6 @@ page:
title: "Formulaire demande de EPage"
description: "Formulaire demande de EPage"
presentation:
siteconseil_partner:
discover_button: Découvrir SITECONSEIL
offer_info: Créez votre site internet rapidement et profitez d'une offre adaptée.
cms_info: Notre partenaire partner_strong propose sa solution CMS cms_strong.
recommended: Partenaire Recommandé
intro: "L'page_span est parfait pour votre vitrine Cosplay, mais si vous souhaitez un strong_tagsite complet, personnalisé et évolutifstrong_end_tag pour votre activité professionnelle ou votre marque personnelle :"
title: 🚀 Votre Site Internet Complet
js:
periodic_billing: Facturation pour %duration% mois. Soit %average_price% en moyenne par mois.
annual_billing: Facturation annuelle. Soit %average_price% en moyenne par mois.
@@ -729,7 +721,6 @@ page:
choose_period: Choisissez Votre Période d'Abonnement
additional_features:
siteconseil_referral: '<p class="text-base sm:text-lg leading-relaxed mt-3">Nous vous indiquerons si cela est réalisable ou si nous devons vous diriger vers notre partenaire partner_strong_cyan pour la création de votre site internet sur mesure.</p>'
request_support: Si vous avez besoin de fonctionnalités supplémentaires non disponibles actuellement sur l'page_span, strong_tagdemandez au support E-Cosplaystrong_end_tag.
title: ⚡ BESOIN DE PLUS DE FONCTIONNALITÉS ?
@@ -1054,16 +1045,10 @@ hosting_bg_text: "SERVER"
# Section Responsabilités
hosting_responsibilities_label: "Responsabilités"
# Opérateur Technique
hosting_tech_operator_title: "Opérateur Technique"
hosting_tech_operator_name: "SARL SITECONSEIL"
hosting_tech_operator_address: "27 RUE LE SERURIER<br>02100 SAINT-QUENTIN"
hosting_tech_operator_siret: "SIRET: 41866405800025"
# Infrastructure Cloud
hosting_infrastructure_title: "Infrastructure Cloud"
hosting_cloud_provider: "Google Cloud Platform (GCP)"
hosting_location_detail: "Pays-Bas (eu-west4)"
# Hébergement du Site
hosting_infrastructure_title: "Hébergement du Site"
hosting_cloud_provider: "OVHcloud"
hosting_location_detail: "France"
# Éditeur
hosting_editor_title: "Éditeur du Site"
@@ -1092,11 +1077,11 @@ hosting_privacy_alert_desc: "Notre serveur et Amazon SES traitent le contenu et
# Conformité
hosting_compliance_title: "Conformité & RGPD"
hosting_compliance_desc: "L'infrastructure (GCP, Cloudflare, Sentry) est configurée pour respecter les standards de sécurité et le RGPD au sein de l'Union Européenne."
hosting_compliance_desc: "L'infrastructure (OVHcloud, Cloudflare, Sentry) est configurée pour respecter les standards de sécurité et le RGPD au sein de l'Union Européenne."
hosting_signalement_label: "Signalement d'infraction"
hosting_signalement_email: "signalement@siteconseil.fr"
hosting_signalement_email: "signalement@e-cosplay.fr"
# --- ADDITIF TECHNIQUE SITECONSEIL ---
# --- ADDITIF TECHNIQUE ---
rgpd_additif_title: "Additif Technique"
rgpd_additif_collecte_title: "Collecte Minimale et Anonymisée"
rgpd_additif_collecte_text: "Le site se limite strictement à la collecte de données techniques nécessaires au bon fonctionnement (logs d'erreurs, performance). Ces données sont agrégées de manière à ce qu'il soit impossible de remonter à un visiteur spécifique."

View File

@@ -172,16 +172,16 @@ hosting_page_title_long: Detaillierte Informationen zum Hosting und zu den techn
# Abschnitt 1: Haupt-Hoster
hosting_section1_title: 1. Haupt-Hoster
hosting_section1_p1: Die Website %site_url% wird auf der Cloud-Infrastruktur von Google gehostet.
hosting_section1_p1: Die Website %site_url% wird auf der Cloud-Infrastruktur von OVHcloud gehostet.
hosting_label_host_name: Name des Hosters
hosting_label_service_used: Genutzter Dienst
hosting_service_compute_cloud: Compute Cloud (Rechen- und Dateninfrastruktur)
hosting_label_company: Unternehmen
hosting_label_address: Adresse des Hauptsitzes
hosting_label_data_location: Ort der Datenspeicherung (Europa)
hosting_data_location_details: "Google Cloud Netherlands B.V. (oft verwaltet von Irland aus: O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, Irland)."
hosting_data_location_details: "OVH SAS, Rechenzentren in Frankreich."
hosting_label_contact: Kontakt
hosting_contact_details: In der Regel elektronisch über die Support-Plattformen von Google Cloud.
hosting_contact_details: In der Regel elektronisch über die Support-Plattformen von OVHcloud.
hosting_section1_disclaimer: Gemäß der DSGVO ist die primäre Speicherung der Nutzerdaten innerhalb der Europäischen Union garantiert.
# Abschnitt 2: Weitere Dienstleister
@@ -266,8 +266,8 @@ legal_label_technical_contact: Technischer Kontakt
# Abschnitt 3: Hosting
legal_section3_title: 3. Hosting der Website
legal_section3_p1_host_intro: "Die Website wird gehostet von:"
legal_host_address: 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA (Hauptsitz)
legal_host_data_location: Google Cloud Netherlands B.V., O'Mahony's Corner, Block R, Spencer Dock, Dublin 1, Irland.
legal_host_address: 2 rue Kellermann, 59100 Roubaix, Frankreich (Hauptsitz)
legal_host_data_location: OVH SAS, Rechenzentren in Frankreich.
# Abschnitt 4: Geistiges Eigentum und Recht am eigenen Bild
legal_section4_title: 4. Geistiges Eigentum und Recht am eigenen Bild
@@ -701,14 +701,6 @@ page:
title: "Antragsformular für EPage"
description: "Antragsformular für EPage"
presentation:
siteconseil_partner:
discover_button: SITECONSEIL entdecken
offer_info: Erstellen Sie schnell Ihre Website und profitieren Sie von einem passenden Angebot.
cms_info: Unser Partner partner_strong bietet seine CMS-Lösung cms_strong an.
recommended: Empfohlener Partner
intro: "Die page_span ist perfekt für Ihre Cosplay-Vitrine, aber wenn Sie eine strong_tagvollständige, personalisierte und skalierbare Website für Ihre berufliche Tätigkeit oder Ihre persönliche Marke wünschenstrong_end_tag:"
title: 🚀 Ihre vollständige Internetseite
js:
periodic_billing: Abrechnung für %duration% Monate. Das entspricht durchschnittlich %average_price% pro Monat.
annual_billing: Jährliche Abrechnung. Das entspricht durchschnittlich %average_price% pro Monat.
@@ -729,7 +721,6 @@ page:
choose_period: Wählen Sie Ihren Abonnementzeitraum
additional_features:
siteconseil_referral: '<p class="text-base sm:text-lg leading-relaxed mt-3">Wir werden Ihnen mitteilen, ob dies machbar ist oder ob wir Sie an unseren Partner partner_strong_cyan für die Erstellung Ihrer maßgeschneiderten Website verweisen müssen.</p>'
request_support: Wenn Sie zusätzliche Funktionen benötigen, die derzeit auf der page_span nicht verfügbar sind, strong_tagfragen Sie den E-Cosplay Supportstrong_end_tag.
title: ⚡ BENÖTIGEN SIE MEHR FUNKTIONEN?
@@ -1031,14 +1022,9 @@ hosting_bg_text: "SERVER"
hosting_responsibilities_label: "Verantwortlichkeiten"
hosting_tech_operator_title: "Technischer Betreiber"
hosting_tech_operator_name: "SARL SITECONSEIL"
hosting_tech_operator_address: "27 RUE LE SERURIER<br>02100 SAINT-QUENTIN"
hosting_tech_operator_siret: "SIRET: 41866405800025"
hosting_infrastructure_title: "Cloud-Infrastruktur"
hosting_cloud_provider: "Google Cloud Platform (GCP)"
hosting_location_detail: "Niederlande (eu-west4)"
hosting_infrastructure_title: "Website-Hosting"
hosting_cloud_provider: "OVHcloud"
hosting_location_detail: "Frankreich"
hosting_editor_title: "Herausgeber der Website"
hosting_editor_name: "Verein E-Cosplay"
@@ -1063,11 +1049,11 @@ hosting_privacy_alert_label: "Vertraulichkeit"
hosting_privacy_alert_desc: "Unser Server und Amazon SES verarbeiten den Inhalt und die Metadaten der über die Website gesendeten E-Mails."
hosting_compliance_title: "Konformität & DSGVO"
hosting_compliance_desc: "Die Infrastruktur (GCP, Cloudflare, Sentry) ist so konfiguriert, dass sie die Sicherheitsstandards und die DSGVO innerhalb der Europäischen Union erfüllt."
hosting_compliance_desc: "Die Infrastruktur (OVHcloud, Cloudflare, Sentry) ist so konfiguriert, dass sie die Sicherheitsstandards und die DSGVO innerhalb der Europäischen Union erfüllt."
hosting_signalement_label: "Meldung von Verstößen"
hosting_signalement_email: "signalement@siteconseil.fr"
hosting_signalement_email: "signalement@e-cosplay.fr"
# --- TECHNISCHER ZUSATZ SITECONSEIL ---
# --- TECHNISCHER ZUSATZ ---
rgpd_additif_title: "Technischer Zusatz"
rgpd_additif_collecte_title: "Minimale und anonymisierte Erhebung"
rgpd_additif_collecte_text: "Die Website beschränkt sich strikt auf die Erhebung technischer Daten, die für den ordnungsgemäßen Betrieb erforderlich sind (Fehlerprotokolle, Leistung). Diese Daten werden so aggregiert, dass kein Rückschluss auf einen spezifischen Besucher möglich ist."