Some checks failed
Cadoles/hydra-sql/pipeline/pr-develop There was a failure building this commit
147 lines
12 KiB
Markdown
147 lines
12 KiB
Markdown
# Hydra-sql
|
||
|
||
Une [LoginApp](https://www.ory.sh/docs/hydra/concepts/login) pour le serveur OpenID Connect [Ory/Hydra](https://github.com/ory/hydra).
|
||
Elle permet de se connecter à une base de donnée et de vérifier un mot de passe donné sur une mire locale puis d'aller chercher des données demandées
|
||
|
||
## Image
|
||
|
||
- L'image standalone est construite en utilisant l'utilisateur `www-data` pour lancer supervisor (qui va lancer le process php-fpm et caddy, avec ce même user)
|
||
- C'est pour cela qu'on fini par "USER www-data" à la fin de `misc/images/hydra-oidc-standalone/Dockerfile`, sinon le conteneur `hydra-sql` ne tournera pas
|
||
|
||
## Configuration
|
||
|
||
### Variables d'environnement
|
||
|
||
| Variable | Description | Valeur par défaut | Utilisation |
|
||
| ----------------------------------- | ------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ----------- |
|
||
| `APP_ENV` | Environnement symfony | prod | dev:prod |
|
||
| `APP_DEBUG` | Console de debug symofny | false | true:false |
|
||
| `HYDRA_ADMIN_BASE_URL` | Url d'admin Hydra ou dispatcher | http://hydra:4445 | obligatoire |
|
||
| `BASE_URL` | Url d'accès | http://localhost:8080 | obligatoire |
|
||
| `DSN_REMOTE_DATABASE` | DSN de la BDD | postgresql://lasql:lasql@postgres:5432/lasql?serverVersion=15&chartset=utf8 | |
|
||
| `DB_USER` | User de connection à la BDD | lasql | obligatoire |
|
||
| `DB_PASSWORD` | PAssword de l'utilisateur de la BDD | lasql | obligatoire |
|
||
| `APP_LOCALES` | Langues disponibles dans l'application | fr,en | obligatoire |
|
||
| `HASH_ALGO_LEGACY` | ALgorythme de Hashage par défaut | sha256 | |
|
||
| `SECURITY_PATTERN` | Séquence à employer pour le hashage du mot de passe | password,salt,pepper | obligatoire |
|
||
| `PEPPER` | Pepper utilisé pour le Hashage | | |
|
||
| `REDIS_DSN` | DSN du serveur Redis | redis://redis:6379 | obligatoire |
|
||
| `URL_LINK` | Url pouvant être utilisée dans les liens des templates | | |
|
||
| `CADDY_HTTP_PORT` | Port d'écoute de l'application | 8080 | |
|
||
| `CADDY_HTTPS_PORT` | Port d'écoute de l'application | 8443 | |
|
||
| `CADDY_DATA_FS` | Chemin vers le répertoire utilisé pour le stockage de caddy | /tmp/caddy | |
|
||
| `CADDY_APP_ROOT_PUBLIC` | Chemin vers le répertoire utilisé pour servire les fichiers | /app/public | |
|
||
| `CADDY_PHP_INDEX` | Nom du fichier a utiliser pour servir l'application | index.php | |
|
||
| `CADDY_APP_UPSTREAM_BACKEND_SERVER` | Adresse du serveur backend FastCGI PHP vers lequel doit être diriger les requêtes PHP. | unix//tmp/php-fpm.sock | |
|
||
| `CADDY_TRUSTED_PROXIES` | Spécification des adresses IP /plage IP étant sur pour transmettre les requetes HTTP | private_ranges | |
|
||
| `CADDY_LOG_FORMAT` | Spécification du format des logs | console | |
|
||
| `CADDY_LOG_LEVEL` | Spécification du niveau de verbosité des logs | INFO | |
|
||
| `PHP_FPM_MEMORY_LIMIT` | Spécification de la mémoire limite maximale alloué au processus PHP-FPM | 128M | |
|
||
| `PHP_FPM_DISPLAY_ERRORS` | Afficahge des erreurs dans la sortie du serveur web. | off | |
|
||
| `PHP_FPM_LISTEN` | Spécification du serveur sur lequel PHP FPM écoute les connexion. | /tmp/php-fpm.sock | |
|
||
| `PHP_FPM_LOG_LEVEL` | Spécification du niveau de verbosité des logs PHP-FPM | notice | |
|
||
| `PHP_FPM_PM` | Définition du mode de gestion des processus PHP-FPM | dynamic | |
|
||
| `PHP_FPM_PM_MAX_CHILDREN` | Définition du nombre maximum de processus enfants que PHP-FPM peut générer | 5 | |
|
||
| `PHP_FPM_PM_START_SERVERS` | Définition du nombre de processus enfants que PHP-FPM va démarrer au lancement de PHP-FPM | 2 | |
|
||
| `PHP_FPM_PM_MIN_SPARE_SERVERS` | Définition du nombre minimum de processus enfants inactifs que PHP-FPM doit conserver en réserve. | 1 | |
|
||
| `PHP_FPM_PM_MAX_SPARE_SERVERS` | Définition du nombre maximum de processus enfants inactifs que PHP-FPM peut conserver en réserve. | 3 | |
|
||
| `XDG_DATA_HOME` | Définition du répertoire de base pour le stockage des données spécifiques à l'utilisateur. | /tmp/data | |
|
||
| `ALTCHA_ENABLED` | Désactivation d'altcha lors de la connexion | true | |
|
||
|
||
### Algorithmes de hashage compatibles
|
||
|
||
La login app est compatible par défaut avec toutes les méthodes de hashage de PHP et avec SSHA. Aucune configuration supplémentaire n'est nécessaire.
|
||
|
||
### Pattern de hashage
|
||
|
||
Définir dans la variable `SECURITY_PATTERN` le pattern utilisé avec les mots clés: password | salt | pepper séparé par des virgules pour représenter la séquence à employer pour le hashage du mot de passe.
|
||
Exemple : `SECURITY_PATTERN="salt,password,pepper"`
|
||
|
||
### Schéma de base de donnée
|
||
|
||
Permet d'adapter les requetes SQL à la base de donnée utilisée en indiquant les noms de colonnes de celle-ci.
|
||
|
||
```yaml
|
||
# config/sql_login_configuration/sql_login.yaml
|
||
sql_login:
|
||
login_column_name: email
|
||
password_column_name: password
|
||
salt_column_name: ~
|
||
table_name: usager
|
||
data_to_fetch:
|
||
- email
|
||
- lastname
|
||
- firstname
|
||
subject_rewrite_expression: 'firstname~"."~lastname~"@exemple.com"'
|
||
```
|
||
|
||
## Environnement de développement
|
||
|
||
### Tester
|
||
|
||
Se rendre sur [http://localhost:10502/](http://localhost:10502/) et cliquer `Login` pour commencer une nouvelle connexion.
|
||
3 utilisateurs d'exemple sont disponible pour les tests:
|
||
| Login | Mot de passe | Algorithme |
|
||
|-------|--------------|------------|
|
||
| test1@test.com | 123456 | Bcrypt |
|
||
| test2@test.com | 123456 | SHA256 |
|
||
| test3@test.com | 123456 | SSHA |
|
||
|
||
### Base de donnée
|
||
|
||
2 bases de données différentes sont disponible pour les tests.
|
||
Pour choisir la base de donnée à utiliser, modifier les d'environnement relatives à la base de donnée.
|
||
|
||
- **URL Postgres**: `postgresql://lasql:lasql@mariadb:3306/lasql?serverVersion=15&chartset=utf8`
|
||
- **URL Mariadb**: `mysql://lasql:lasql@postgres:5432/lasql`
|
||
|
||
### Redis
|
||
|
||
La variable `REDIS_DSN` est obligatoire. Hydra-sql utilise dorénavant Redis pour le stockage du cache et des session. Compatible Redis Sentinel
|
||
ex : `'redis:?host[redis1:26379]&host[redis2:26379]&host[redis3:26379]&redis_sentinel=mymaster'`
|
||
|
||
### Liste des ports
|
||
|
||
| Nom | Description | Port(s) hôte utilisé(s) |
|
||
| ----------- | -------------------------------------------------------------------------- | ----------------------- |
|
||
| `oidc-test` | Application factice permettant de tester l'authentification OpenID Connect | `8080` |
|
||
| `hydra` | Serveur Ory/Hydra | `8081` |
|
||
| `hydra-sql` | Login/Consent/Logout App (ce projet) | `8082` |
|
||
| `postgres` | Base de donnée postgres support du test et pour hydra | `5432` |
|
||
| `mariadb` | Base de donnée mariadb support du test | `3306` |
|
||
| `pgadmin` | pour administrer la base de donnée | `8085` |
|
||
|
||
### build du sql theme
|
||
|
||
copier les images et les fonts dans les dossier ./assets
|
||
modifier si besoin le fichier theme-entrypoints.js
|
||
|
||
lancer un `npm run build`
|
||
|
||
|
||
### watch-dev-optimized.sh
|
||
|
||
L'option watch du worker frankenphp ne semble pas bien fonctionner pour le moment
|
||
|
||
Script Bash pour le développement Symfony/FrankenPHP dans Docker :
|
||
il surveille les changements sur des dossiers spécifiés (/src, /templates, etc) et redémarre automatiquement le container correspondant pour refléter les changements en temps réel.
|
||
|
||
Il ignore les dossiers var/cache et vendor pour éviter les redémarrages inutiles.
|
||
|
||
#### context
|
||
|
||
Si le mode watch de compose est activé, ne pas oublier de enable watch dans la console
|
||
|
||
#### Pre requis
|
||
* Docker
|
||
* Docker compose
|
||
* inotify-tools (`sudo pacman -S inotify-tools`)
|
||
|
||
#### Utilisation
|
||
|
||
./watch-dev.sh [nom_du_container]
|
||
|
||
le nom peut être partiel, par exemple `sql`
|
||
ou complet, par exemple `hydra-dev-hydra-sql-1`
|
||
|
||
Chaque projet doit contenir son propre script de surveillance/redémarrage |