- Pour résoudre la lenteur et la complexité du processus d’entrée de l’application PureGym, l’auteur l’a personnellement optimisé avec Apple Wallet
- Le code QR existant impose d’ouvrir l’application et de charger les informations à chaque fois, un mode d’accès inefficace qui prend environ 47 secondes
- Grâce à diverses techniques de reverse engineering, à l’usage de mitmproxy et au framework PassKit, l’auteur a mis en place un pass Wallet à renouvellement automatique
- Au cours de ce processus, il a constaté le fonctionnement interne de PureGym exposé sur le web, notamment une faille de sécurité du code PIN, la structure d’authentification de l’API et les données de localisation des clubs
- Au final, il a créé une expérience permettant d’entrer en 3 secondes, tout en précisant clairement qu’il s’agit d’une expérimentation personnelle et non d’un service officiel
47 secondes : le début de la frustration
- Un jour de semaine à 11 h 15, il a fallu 47 secondes pour ouvrir l’application devant l’entrée de PureGym
- Le signal est faible, il faut passer la connexion Wi‑Fi, le lancement de l’application, diverses notifications push et des offres promotionnelles avant que le code QR n’apparaisse
- Le code QR met longtemps à s’afficher, au point de se sentir observé par les autres membres
- Répétée 6 fois par semaine, cette expérience inefficace fait perdre 282 secondes chaque semaine
- Comparée à l’expérience sans friction d’Amazon Fresh, l’UX d’entrée de PureGym est très en retard
Le mystère d’un PIN vieux de 8 ans
- L’auteur utilise le même code PIN à 8 chiffres depuis 8 ans
- Ce PIN n’expire pas et n’a jamais changé
- À l’inverse, le code QR dans l’application est remplacé par une nouvelle valeur chaque minute
- Il existe donc une contradiction majeure entre le niveau réel de sécurité et son implémentation effective
- La méthode par PIN dure de manière excessivement longue alors que seul le code QR est strictement protégé : une véritable « mise en scène de la sécurité »
Comprendre PureGym avec mitmproxy
- Au départ, l’auteur a essayé d’utiliser dans Apple Wallet une capture d’écran du code QR, mais cela n’a évidemment pas fonctionné
- Le code QR de PureGym est généré dynamiquement, expire au bout d’environ une semaine, mais l’application le renouvelle toutes les minutes
- En recherchant des dépôts liés à « PureGym » sur GitHub, l’auteur a découvert la structure d’authentification de l’API
- Le PIN à 8 chiffres utilisé pour la connexion sert aussi de mot de passe API
- Les informations d’authentification basiques encodées en Base64 offrent elles aussi une sécurité limitée
- Pour analyser le trafic de l’application, il a intercepté les requêtes avec des outils proxy comme mitmproxy
- La structure JSON du code QR se compose de part1 (id fixe), part2 (horodatage), part3 (salt de renouvellement)
- L’API indique même le moment du renouvellement et les conditions d’expiration
PassKit : le potentiel d’Apple Wallet
- Un pass Apple Wallet n’est pas une simple carte statique, mais une sorte de mini‑application capable de se mettre à jour, d’envoyer des notifications push et de réagir à la localisation
- L’implémentation de PassKit nécessite une spécification JSON, des ressources d’image, une signature par certificat et un service web pour les mises à jour en temps réel
- Le portail développeur d’Apple exige l’émission d’un Pass Type ID et d’un certificat WWDR
- La signature et la gestion des certificats sont complexes, mais une fois réussies, l’expérience sur un appareil réel devient fluide
Mise en place d’un backend Swift
- Même s’il utilise habituellement Node.js, l’auteur a directement implémenté le service web PassKit avec Vapor en Swift
- Lorsqu’un pass doit être mis à jour, une notification push silencieuse déclenche la mise à jour automatique
- Cela permet un renouvellement du pass naturel et invisible pour l’utilisateur
Automatisation des emplacements PureGym dans tout le pays
- Les pass Apple Wallet peuvent s’afficher automatiquement à un emplacement donné
- Le site officiel de PureGym ne fournit pas les coordonnées détaillées, mais l’API donne accès à la liste des coordonnées de tous les clubs du pays
- En analysant toutes les coordonnées des clubs, l’auteur attribue à chaque pass le club le plus proche
- Inconvénient : si un PureGym se trouve dans un centre commercial, le pass peut apparaître même lors d’une simple visite shopping
Intégration avec l’Apple Watch
- Le pass Apple Wallet se synchronise automatiquement sur l’Apple Watch sans manipulation supplémentaire
- Deux clics au poignet, scan, puis entrée : le tout prend 3 secondes, soit un gain spectaculaire
- Cela représente plus de 93 % de temps économisé
Le changement en chiffres
- Temps d’entrée avec l’application PureGym d’origine : 47 secondes
- Temps d’entrée avec le pass Apple Wallet : 3 secondes
- Temps moyen économisé par semaine : 4,4 minutes (3,8 heures par an)
- Des membres autour de lui lui ont demandé 23 fois « il existe une appli pour ça ? », et il a expliqué à chaque fois qu’il s’agissait d’une solution non officielle
- Malgré les demandes, aucune diffusion n’est prévue pour des raisons de droits et de politique de service
Bonus : intégration avec Home Assistant
- Grâce au endpoint du nombre de personnes présentes de l’API PureGym, il affiche le niveau d’affluence actuel de la salle sur un tableau de bord IoT
- Ces données permettent de décider de revenir aux heures plus calmes, avec à la clé un meilleur rendement et une motivation accrue
Réalité de l’ingénierie et éthique
- À l’origine, il s’agissait simplement de résoudre une gêne personnelle, mais c’est aussi un domaine que PureGym n’a pas amélioré depuis des années
- Un prototype créé hors de l’organisation peut parfois résoudre un problème plus vite qu’une feuille de route officielle
- Officiellement, cela peut constituer une violation des conditions d’utilisation, et PureGym pourrait le bloquer à tout moment
- Il n’y a jamais eu d’automatisation ni de partage : uniquement une expérimentation personnelle, avec respect de principes comme le cache pour préserver la stabilité
Suite et conclusion
- À l’avenir, des idées d’extension comme une « notification push de honte » pourraient être envisagées
- L’utilité concrète est modeste, mais l’auteur se dit satisfait d’avoir optimisé 3,8 heures par an de « gestes inutiles »
- Si PureGym mettait en place une implémentation officielle, davantage d’utilisateurs pourraient en bénéficier
- Cela reste un exemple marquant d’une « expérience non officielle mais efficace »
1 commentaires
Commentaires sur Hacker News
Quand j’ai passé trois mois aux États-Unis, je me suis inscrit chez PureGym et j’ai reçu un PIN, puis j’ai annulé mon abonnement plus tard. Ensuite, Chrome m’a signalé que mon PIN PureGym avait fuité
Deux ans plus tard, je suis retourné aux États-Unis et j’ai reçu le même PIN, ce qui me semble être un énorme problème de sécurité
L’app PureGym et son token étaient aussi intéressants, et j’ai également découvert une faille de sécurité dans le système d’activation des fauteuils de hydromassage, qui acceptait n’importe quel PIN
Par exemple, un PIN comme 87623103 est transformé en hash
558B4C37F6E3FF9A5E1115C66CEF0703E3F2ADEE, et si on le cherche dans la plage de hash HaveIBeenPwned, on voit qu’il a effectivement fuité plusieurs foisOui, on obtient bien un accès API immédiat. En pratique, je n’ai jamais rencontré de rate limit en utilisant l’app et le site, et les tentatives ratées semblent assez généreusement tolérées
Le scope présenté dans le post est le même que celui utilisé par l’app officielle et par les clients non officiels sur GitHub
La probabilité qu’il existe des scopes supplémentaires me semble très faible. Voir aussi PureGym PHP Wrapper et PureGym Attendance Python
Du style : « si on construit cette fonctionnalité, alors on devra l’assumer nous-mêmes »
Et la blague qui revient souvent : « très juste, mettons-la sur la roadmap 2028 »
La liste des tâches prévues et la wishlist sont déjà longues, donc il est très difficile d’ajouter des fonctionnalités
La meilleure chose que PureGym pourrait faire maintenant, ce serait de donner quelques milliers de livres sterling et un accès gratuit à vie au développeur qui a créé cette app
J’aimerais créer un pass Apple Wallet, mais la configuration du compte développeur et les coûts supplémentaires me freinent
En cas de batterie faible ou de mode économie d’énergie, elles peuvent même ne pas être livrées du tout, précisément pour minimiser la consommation
Les notifications plus importantes, elles, doivent impérativement afficher un élément d’interface et arrivent quelle que soit la situation énergétique