138 lines
5.4 KiB
Markdown
138 lines
5.4 KiB
Markdown
# 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.
|
|
|
|
- les pages `application.html`, `chrono.html` et `cube.html` demandent une connexion
|
|
- la page d'accueil et la page reglement affichent l'etat de session courant
|
|
- 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`
|
|
|
|
La gestion des utilisateurs se fait ensuite dans la console d'administration Keycloak.
|
|
|
|
## Demarrage local
|
|
|
|
### Avec Docker
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
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
|
|
|
|
```bash
|
|
./scripts/install-proxmox-lxc.sh \
|
|
--proxmox-host 10.0.0.2 \
|
|
--proxmox-user root@pam \
|
|
--proxmox-password 'secret'
|
|
```
|
|
|
|
Version "curl | bash" :
|
|
|
|
```bash
|
|
bash -c "$(curl -fsSL https://git.jeannerot.fr/christophe/chesscubing/raw/branch/main/install-chesscubing-proxmox.sh)"
|
|
```
|
|
|
|
### Mettre a jour depuis Git
|
|
|
|
```bash
|
|
./scripts/update-proxmox-lxc.sh \
|
|
--proxmox-host 10.0.0.2 \
|
|
--proxmox-user root@pam \
|
|
--proxmox-password 'secret' \
|
|
--ctid 120
|
|
```
|
|
|
|
Version "curl | bash" :
|
|
|
|
```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
|