2026-04-13 20:52:38 +02:00

ChessCubing Arena

Application web mobile-first pour telephone et tablette, maintenant migree vers Blazor WebAssembly en C# / .NET 10.

Ce que fait l'application

  • configure une rencontre Twice ou Time
  • separe l'experience en pages dediees : configuration, phase chrono, phase cube
  • permet de definir librement le temps de partie et le temps par coup
  • suit les quotas FAST, FREEZE et MASTERS
  • orchestre la phase cube avec designation du cube, capture des temps et preparation de la partie suivante
  • applique la logique du double coup V2 en Twice
  • applique les ajustements bloc - et bloc + en Time avec plafond de 120 s pris en compte
  • conserve l'etat du match dans le navigateur
  • propose une page chrono pensee pour le telephone avec deux grandes zones tactiles
  • ouvre automatiquement la page cube des que la phase chess est terminee

Architecture

Le coeur de l'application se trouve dans ChessCubing.App/.

  • ChessCubing.App/Pages/ : pages Razor du site et de l'application
  • ChessCubing.App/Services/MatchEngine.cs : logique metier des matchs
  • ChessCubing.App/Services/MatchStore.cs : persistance navigateur
  • ChessCubing.App/Services/KeycloakAccountFactory.cs : adaptation des roles Keycloak vers les claims Blazor
  • ChessCubing.App/wwwroot/ : assets statiques, manifeste, PDFs, appli Ethan
  • keycloak/realm/chesscubing-realm.json : realm importable avec client OIDC et roles
  • docker-compose.yml + Dockerfile : build Blazor, service via nginx et stack Keycloak/Postgres

Le projet continue a exposer les routes historiques index.html, application.html, chrono.html, cube.html et reglement.html.

Authentification Keycloak

L'application embarque maintenant une authentification OpenID Connect basee sur Keycloak.

  • toutes les pages du site restent accessibles sans connexion
  • la page d'accueil et la page reglement affichent l'etat de session courant
  • la page d'accueil propose directement des actions Se connecter et Creer un compte
  • l'action Creer un compte ouvre le parcours d'inscription natif de Keycloak
  • les roles Keycloak du realm sont exposes dans l'application
  • l'etat du match est isole par utilisateur dans le navigateur grace a une cle de stockage derivee du compte connecte

Le realm importe par defaut :

  • realm : chesscubing
  • client public OIDC : chesscubing-web
  • roles de realm : admin, organizer, player
  • inscription utilisateur : activee

La gestion des utilisateurs se fait ensuite dans la console d'administration Keycloak.

Demarrage local

Avec Docker

docker compose down
docker compose up -d --build

L'application est ensuite disponible sur http://localhost:8080.

La console Keycloak est servie via le meme nginx sur http://localhost:8080/auth/admin/.

Identifiants d'administration par defaut pour le premier demarrage local :

  • utilisateur : admin
  • mot de passe : admin

Ces valeurs peuvent etre surchargees via les variables d'environnement de .env.example.

Si vous voulez reimporter completement le realm fourni dans keycloak/realm/, il faut repartir d'une base vide, par exemple avec docker compose down -v avant le redemarrage.

Avec .NET 10

dotnet restore ChessCubing.App/ChessCubing.App.csproj
dotnet run --project ChessCubing.App/ChessCubing.App.csproj

Le mode Docker reste la voie recommandee pour cette integration, car nginx y reverse-proxy egalement Keycloak sous /auth/.

Deploiement dans un LXC Proxmox

Deux scripts Bash permettent de creer un conteneur LXC Debian sur Proxmox puis de le mettre a jour depuis Git.

Prerrequis sur la machine qui lance les scripts :

  • en mode distant : ssh et sshpass
  • en mode local sur l'hote Proxmox : aucun paquet supplementaire n'est installe sur Proxmox

Le deploiement dans le LXC n'utilise pas Docker. Le script clone le depot, publie l'application Blazor dans le conteneur, puis sert le resultat via nginx.

Attention : la pile Keycloak fournie ici est actuellement prete a l'emploi dans la stack Docker du projet. Les scripts LXC existants ne provisionnent pas encore automatiquement Keycloak ni sa base Postgres.

Installer un nouveau LXC

./scripts/install-proxmox-lxc.sh \
  --proxmox-host 10.0.0.2 \
  --proxmox-user root@pam \
  --proxmox-password 'secret'

Version "curl | bash" :

bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/install-chesscubing-proxmox.sh)"

Mettre a jour depuis Git

./scripts/update-proxmox-lxc.sh \
  --proxmox-host 10.0.0.2 \
  --proxmox-user root@pam \
  --proxmox-password 'secret' \
  --ctid 120

Version "curl | bash" :

bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/update-chesscubing-proxmox.sh)"

Fichiers cles

  • ChessCubing.App/Pages/Home.razor : page d'accueil du site
  • ChessCubing.App/Pages/ApplicationPage.razor : configuration et reprise de match
  • ChessCubing.App/Pages/ChronoPage.razor : phase chrono
  • ChessCubing.App/Pages/CubePage.razor : phase cube
  • ChessCubing.App/Pages/RulesPage.razor : synthese du reglement
  • ChessCubing.App/Services/MatchEngine.cs : regles de jeu et transitions
  • ChessCubing.App/Services/KeycloakAccountFactory.cs : transformation des roles Keycloak en claims Blazor
  • ChessCubing.App/wwwroot/appsettings.json : configuration OIDC du client WebAssembly
  • keycloak/realm/chesscubing-realm.json : realm, roles et client Keycloak importes
  • docker-compose.yml + Dockerfile : execution locale
  • scripts/install-proxmox-lxc.sh : creation et deploiement d'un LXC Proxmox
  • scripts/update-proxmox-lxc.sh : mise a jour d'un LXC existant depuis Git
Description
ChessCubing Arena
Readme 2.9 MiB
Languages
HTML 47%
JavaScript 20.3%
C# 18.9%
CSS 10.2%
Shell 3.6%