{"id":22957345,"url":"https://github.com/camarm-dev/nsi-projet-minijeux","last_synced_at":"2026-02-09T02:33:21.678Z","repository":{"id":267282539,"uuid":"894973500","full_name":"camarm-dev/nsi-projet-minijeux","owner":"camarm-dev","description":"NSI 1ère Projet Mini Jeux","archived":false,"fork":false,"pushed_at":"2025-01-19T18:56:19.000Z","size":18357,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-29T16:44:33.704Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/camarm-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-11-27T10:35:53.000Z","updated_at":"2025-01-19T18:56:21.000Z","dependencies_parsed_at":"2024-12-09T13:42:02.184Z","dependency_job_id":"29c090a0-47ff-47e2-8a24-81dca3ae91b5","html_url":"https://github.com/camarm-dev/nsi-projet-minijeux","commit_stats":null,"previous_names":["camarm-dev/nsi-projet-minijeux"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/camarm-dev/nsi-projet-minijeux","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camarm-dev%2Fnsi-projet-minijeux","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camarm-dev%2Fnsi-projet-minijeux/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camarm-dev%2Fnsi-projet-minijeux/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camarm-dev%2Fnsi-projet-minijeux/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/camarm-dev","download_url":"https://codeload.github.com/camarm-dev/nsi-projet-minijeux/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/camarm-dev%2Fnsi-projet-minijeux/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29254316,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T01:52:29.835Z","status":"online","status_checked_at":"2026-02-09T02:00:09.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-14T17:16:18.474Z","updated_at":"2026-02-09T02:33:21.624Z","avatar_url":"https://github.com/camarm-dev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![borne_arcade_v1.png](design/borne_arcade_v1.png)\n\n\u003c/div\u003e \n\n# Projet mini jeux NSI\nNSI 1ère Projet Mini Jeux\n\n## Liens utiles\n- Gestion des tâches : [projet Github](https://github.com/users/camarm-dev/projects/6)\n\n## Crédits\n\nCe projet est disponible sous la licence [CeCILL-2.1](./LICENSE).\n\n## Direction artistique / graphisme\n\n- Style 8-bit / police pixelisée (type minecraft)\n- Cartouches de jeux\n- Les jeux tournent dans une borne d'arcade\n\n## Documentation\n\n- Installer les dépendances python\n```shell\npip install -r requirements.txt\n```\n- Lancer le serveur\n```shell\npython3 main.py\n```\n\n## Base de données\n\nLa base de données est située à la racine; `database.db`. C'est une base Sqlite3.\n\nCi-dessous la définition des tables:\n\n| Nom de la table | Description                         |\n|-----------------|-------------------------------------|\n| users           | Stockages des profils utilisateurs  |\n| scores          | Stockages des résultats des parties |\n\n**Table `users`**\n\n| Nom de la colonne (propriété) | Description                         |\n|-------------------------------|-------------------------------------|\n| name                          | Nom complet de l'utilisateur        |\n| pseudo                        | Pseudo de l'utilisateur             |\n| email                         | Email de l'utilisateur              |\n| password                      | Mot de passe hashé de l'utilisateur |\n| created_at                    | Date de création de l'utilisateur   |\n\n\n**Table `scores`**\n\n| Nom de la colonne (propriété) | Description                                                     |\n|-------------------------------|-----------------------------------------------------------------|\n| game                          | Nom du jeu parmis `morpion`, `pfc`, `osu`, `dino`, `justeprix`. |\n| date                          | Date d'enregistrement de la partie                              |\n| user                          | Pseudo de l'utilisateur                                         |\n| points                        | Nombres de points gagnés                                        |\n\n## À propos du hashage des mots de passes\n\nComme décrit dans le cahier des charges, la sécurité des mots de passe est une couche de sécurité attendue.\nNous utilisons l'algorithme [PBKDF2](https://fr.wikipedia.org/wiki/PBKDF2): Password Based Key Derivation Function 2.\n\nSon fonctionnement est itératif : \n- il _hash_ le mot de passe avec un algorithme donné un certain nombre de fois (SHA-256, 260 000 fois dans notre cas)\n- en plus ce hashage, cet algorithme rajoute un sel ; une chaine de caractères aléatoires qui complique le cassage par force brute\n\nCet algorithme permet donc de hasher des mots de passes et de comparer leur hash mais rend presque impossible le cassage de ceux-ci, car il est lent...\n\nL'implémentation python de cet algorithme est à `pbkdf2.py` et provient de [Password hashing in Python with pbkdf2 - Simon Willison](https://til.simonwillison.net/python/password-hashing-with-pbkdf2)\n\n## À propos des jetons de connexion\n\nNotre système utilise les Json Web Token ([JWT](https://fr.wikipedia.org/wiki/JSON_Web_Token)). Ces jetons uniques permettent d'identifier les utilisateurs.\n\nIls possèdent : \n- une charge utile, avec le pseudo unique de l'utilisateur\n- une date d'expiration\n- une signature, qui permet de vérifier leur authenticité (si le jeton a bien été généré par notre site)\n\nLa clé secrète, permettant de générer des jetons qui font autorité est générée aléatoirement au lancement du site. Si elle venait à être compromise, le site doit donc être relancé.\n\n## Crédits sons\n\nLes sons sont des sons libres de droits du site pixabay; liens des sites:\n- https://pixabay.com/sound-effects/success-02-68338/\n- https://pixabay.com/sound-effects/arcade-countdown-7007/\n\n\nPres: https://docs.google.com/presentation/d/1t0LoICOyvf2f6LLtJ2pq80I2NC7hUi_K/edit?usp=sharing\u0026ouid=107812009650275978551\u0026rtpof=true\u0026sd=true\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamarm-dev%2Fnsi-projet-minijeux","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcamarm-dev%2Fnsi-projet-minijeux","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcamarm-dev%2Fnsi-projet-minijeux/lists"}