You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ce projet a pour but de me faire gagner du temps lors de mes réservations UCPA via Gymlib.
3
+
Ce projet a pour but d'automatiser et simplifier les réservations via [Gymlib](https://gymlib.com/) à l'[UCPA](https://www.ucpa.com/sport-station/paris-19), en minimisant les étapes manuelles.
4
4
5
5
Voici les différentes étapes pour pouvoir préparer correctement sa venue :
6
6
7
7

8
8
9
-
Le projet est composé actuellement de 5 grandes étapes :
9
+
Sur ce schéma, on peut voir des tâches sans valeur ajoutée comme remplir le formulaire de contremarque et les deux temps d'attentes de validation.
10
10
11
-
1. Vérifier qu'une nouvelle réservation a été demandée sur Gymlib
12
-
2. Remplir le formulaire de contremarque UCPA
13
-
3. Recevoir une notification dès que l'UCPA a validé les informations avec des créneaux arrangeants qui sont disponibles
14
-
4. Créer des évènements dans un calendrier et proposer une url pour s'abonner au calendrier `/reservations/calendar`.
15
-
5. Créer un pass Apple Wallet qui se met à jour pour chaque réservation
11
+
Pour ces différentes raisons, j'ai automatisé les étapes facilement automatisables jusqu'à la réservation et après la réservation.
12
+
Ce qui me permet d'avoir juste à faire une demande de code sur Gymlib, et choisir mon créneau horaire sur le site de l'UCPA.
13
+
L'après-réservation est transparente pour moi, car je n'ai rien à faire pour avoir les réservations dans mon calendrier,
14
+
et j'ai le QRCode sous la main à mon arrivée.
16
15
17
-
A venir :
16
+
## Plus en détail
18
17
19
-
2. Me notifier de créneaux qui m'arrangent qui se libèrent
18
+
Dans le code, les différentes étapes sont lancées par un CRON et sont découpées de cette manière :
20
19
21
-
La réservation du créneau se fait donc toujours manuellement sur le site de l'UCPA, mais toutes les étapes contraignantes
22
-
et d'attente sont désormais automatisées.
20
+
### 1. Vérifier qu'une nouvelle réservation a été demandée sur Gymlib
23
21
24
-
## Usage
22
+
Le code analyse les e-mails reçus en provenance de Gymlib grâce au paquet [`imapflow`](https://www.npmjs.com/package/imapflow)
23
+
et récupère le code de contremarque dans le contenu dans le mail préalablement parsé par [`mailparser`](https://www.npmjs.com/package/mailparser).
24
+
25
+
### 2. Remplir le formulaire de contremarque UCPA
26
+
27
+
Le formulaire ayant un token CSRF, le plus rapide à mettre en place a été de faire remplir le formulaire en utilisant [Puppeteer](https://pptr.dev/),
28
+
presque tous les champs du formulaire peuvent être remplis dynamiquement grâce à la variable d'environnement : `FORM_RESPONSE`.
29
+
D'ailleurs, en phase de tests, vous pouvez désactiver l'envoi du formulaire grâce à la variable d'environnement `FORM_SUBMIT_ENABLED=false`.
30
+
31
+
### 3. Recevoir une notification dès que l'UCPA a validé les informations avec des créneaux arrangeants qui sont disponibles
32
+
33
+
Même principe que pour la première étape, le code détecte un e-mail en provenance de l'UCPA pour valider la contremarque
34
+
et dire que l'e-billet est disponible sur votre espace personnel. Ensuite, le code cherche les créneaux qui vous arrangent, pour cela, il se base sur la variable d'environnement :
35
+
36
+
```dotenv
37
+
TIME_SLOTS_PREFERENCES='{
38
+
"sun": [
39
+
"17h00",
40
+
],
41
+
"mon": [
42
+
"19h00",
43
+
"20h00"
44
+
],
45
+
}'
46
+
```
47
+
48
+
Cette variable d'environnement n'a pas besoin d'avoir tous les jours de la semaine renseignée.
49
+
50
+
### 4. Créer des évènements dans un calendrier
51
+
52
+
Tous les créneaux réservés sont ajoutés à un calendrier en utilisant la librairie [`ical-generator`](https://www.npmjs.com/package/ical-generator).
53
+
54
+
Le calendrier est un lien auquel on s'abonne, il est disponible sous l'url `/reservations/calendar/${CALENDAR_ID}`,
55
+
où `CALENDAR_ID` correspond à ce qu'il y a dans la variable d'environnement.
56
+
57
+
### 5. Mettre à jour le pass Apple Wallet pour chaque réservation à venir
58
+
59
+
La génération du pass est géré par la librairie [`passkit-generator`](https://www.npmjs.com/package/passkit-generator), il faut avoir un compte Apple Developer pour générer des pass.
60
+
61
+
Les prérequis sont :
62
+
63
+
- Avoir un compte Apple Developer
64
+
- Générer tous les certificats nécessaires aux pass et les avoir mis dans le dossier `certs`
65
+
- Fournir les variables d'environnement nécessaire pour le pass
66
+
67
+
```dotenv
68
+
CERTIFICATES_SIGNER_KEY_PASSPHRASE=
69
+
PASS_TYPE_IDENTIFIER=
70
+
PASS_TEAM_IDENTIFIER=
71
+
```
72
+
73
+
Pour le pass, il faut d'abord en créer un. Pour ça, nous devons récupérer un token :
0 commit comments