# netig.net ## À faire - traduire le message Rodauth « Please login to continue » ; - limiter le spam sur `/contact/send` ; - afficher les recettes et les dépenses sur la page d'accueil ; - gérer les accès aux services selon la situation des membres ; - traiter les demandes de démission et de suppression des comptes. ## Développement ### Dépendances Installer les dépendances : ```sh bundle install ``` ### Variables d'environnement Créer un fichier `.env` à la racine du projet : ```dotenv RACK_ENV=development SESSION_SECRET=... RODAUTH_HMAC_SECRET=... RODAUTH_DOMAIN=netig.net BASE_URL=http://[::1]:9292 SMTP_PASSWORD='...' ``` Générer `SESSION_SECRET` et `RODAUTH_HMAC_SECRET` avec : ```sh openssl rand -hex 64 ``` Utiliser une valeur différente pour chaque secret. Les valeurs contenant `#`, des espaces ou des caractères interprétés spécialement peuvent être entourées d'apostrophes simples. Le fichier `.env` est chargé automatiquement en développement par `config/boot.rb`. Ce fichier est chargé par `netig.rb` et directement par les scripts de `bin/` qui ont besoin de la configuration. Ne pas versionner le fichier `.env`. ### Base de données En développement, la base est créée par défaut dans : ```text db/development.sqlite3 ``` Ce chemin peut être remplacé par la variable d'environnement `DATABASE_PATH`. Un chemin relatif est résolu à partir du répertoire de `lib/database.rb`, et non du répertoire courant. Créer ou mettre à jour la base de données : ```sh bundle exec ruby bin/migrate ``` ### Serveur Démarrer le serveur de développement depuis la racine du projet : ```sh bundle exec puma ``` Puma charge automatiquement `config.ru`, qui démarre l'application. Ouvrir la page de création de compte : ```text http://[::1]:9292/create-account ``` Les personnes physiques et les personnes morales peuvent créer un compte. La création du compte crée également une fiche dans `members`. L'adresse électronique doit être vérifiée avant de pouvoir se connecter. ### Espaces utilisateurs Après avoir vérifié son adresse électronique, chaque personne connectée accède à son espace personnel : ```text http://[::1]:9292/account ``` Cet espace permet notamment de consulter sa situation d'adhésion et de formuler une demande d'adhésion à l'association. Les membres du Noyau disposent également d'un accès à la gestion de l'association : ```text http://[::1]:9292/noyau ``` Cet espace permet notamment de consulter les demandes d'adhésion, de les accepter ou de les refuser, et de consulter les comptes de l'association. Les demandes en attente sont accessibles à l'adresse : ```text http://[::1]:9292/noyau/memberships ``` La consultation et la gestion de l'association sont réservées aux membres du Noyau. ### Initialisation du Noyau Pour ajouter une personne au Noyau, utiliser le script : ```sh bundle exec ruby bin/add-core-member adresse@example.net ``` Le compte doit exister, son adresse électronique doit être vérifiée et la fiche membre doit correspondre à une personne physique. Une adhésion au statut `accepted` doit également déjà exister dans `memberships`. Le script ne crée ni le compte ni l'adhésion. Il attribue uniquement la qualité de membre du Noyau à une fiche membre qui remplit ces conditions. Il doit être exécuté séparément pour chaque personne. Les demandes d'adhésion sont formulées depuis l'espace personnel (`/account`) et examinées par le Noyau depuis l'espace de gestion de l'association (`/noyau/memberships`). Pour constituer le premier Noyau, les adhésions des personnes désignées doivent être enregistrées comme acceptées avant l'utilisation du script. Les statuts prévoient un Noyau composé d'au moins trois personnes physiques. ### Shell interactif Ouvrir un shell interactif avec l'application chargée : ```sh bundle exec irb -r ./netig.rb ``` `netig.rb` charge également `config/boot.rb` : les variables du fichier `.env` sont donc disponibles en développement. ## Production En production, les variables d'environnement sont fournies au conteneur par Docker Compose. Le service doit définir `RACK_ENV=production` et transmettre le fichier d'environnement avec `env_file`. Exemple de configuration : ```yaml services: netig: env_file: - .env environment: RACK_ENV: production ``` La variable définie dans `environment` prend le dessus sur une éventuelle valeur de `RACK_ENV` présente dans `.env`. Le fichier `.env` de production doit notamment contenir : ```dotenv DATABASE_PATH=../db/netig.sqlite3 SESSION_SECRET=... RODAUTH_HMAC_SECRET=... RODAUTH_DOMAIN=netig.net BASE_URL=https://netig.net SMTP_PASSWORD='...' ``` Générer `SESSION_SECRET` et `RODAUTH_HMAC_SECRET` avec : ```sh openssl rand -hex 64 ``` Utiliser des secrets propres à la production et ne pas versionner le fichier contenant ces variables. ### Base de données La base de production est stockée dans : ```text db/netig.sqlite3 ``` Le chemin `../db/netig.sqlite3` est relatif au répertoire de `lib/database.rb`. Il désigne donc le dossier `db/` à la racine du projet, dans le conteneur. Le dossier `db/` doit être conservé entre les déploiements, monté sur un stockage persistant et accessible en écriture par l'utilisateur qui exécute Puma. Il doit également être inclus dans les sauvegardes. Créer ou mettre à jour la base dans le conteneur applicatif, avec les mêmes variables d'environnement et le même stockage persistant que l'application, avant de démarrer la nouvelle version : ```sh docker compose run --rm netig bundle exec ruby bin/migrate ``` Cette commande suppose que le service Compose s'appelle `netig`. ### Initialisation du premier Noyau Chaque personne désignée pour siéger au Noyau doit d'abord créer un compte depuis le site et vérifier son adresse électronique. Sa fiche membre doit également disposer d'une adhésion au statut `accepted`. Pour chaque personne, exécuter dans le conteneur applicatif : ```sh docker compose run --rm netig \ bundle exec ruby bin/add-core-member adresse@example.net ``` Cette commande suppose que le service Compose s'appelle `netig`. Elle ne crée pas l'adhésion : elle vérifie qu'elle existe et qu'elle est acceptée, puis attribue la qualité de membre du Noyau. Les statuts prévoient un Noyau composé d'au moins trois personnes physiques.