Le travail doit être basé sur la branche principale et orienté vers celle-ci. Nous utilisons le processus d'approbation GitHub PR, donc une fois votre PR prêt, vous devrez qu'une seule personne l'approuve et que les tests CI réussissent avant de pouvoir le fusionner.
Clonez ce référentiel puis cd
dans le nouveau répertoire
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
Si rbenv
n'est pas déjà installé, installez-le comme suit :
$ brew install rbenv ruby-build
$ rbenv init
Suivez les instructions imprimées à partir de la commande rbenv init
et mettez à jour votre ~/.bash_profile
ou un fichier équivalent en conséquence, puis démarrez un nouveau terminal et accédez au répertoire du dépôt.
Utilisez rbenv
pour installer la dernière version de Ruby telle que définie dans .ruby-version
(assurez-vous que vous êtes dans le chemin du dépôt) :
$ rbenv install
Postgresql
$ brew install postgresql
Recherche ouverte
$ brew install opensearch
Utilisez les commandes suivantes pour installer les packages gems et javascript, puis créez la base de données
$ bin/setup
Créer des équipes de démonstration
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
Pour simplement exécuter le serveur Web sans aucune tâche en arrière-plan (généralement suffisante) :
$ bin/rails server
Le site sera accessible à http://localhost:3000.
Ceux-ci doivent être définis dans les fichiers config/application.rb ou dans les fichiers enviroments/ environment .rb si les paramètres doivent être définis pour chaque environnement.
config.app_title
par exemple « Mon outil de recherche de nouvelles personnes »
config.default_url_options
par exemple { hôte : mail.peoplefinder.example.com }
config.open_search_url
Requis pour la production (voir la section Recherche ci-dessous)
config.support_email
par exemple '[email protected]'
config.send_reminder_emails
Défini sur true si des e-mails de rappel doivent être envoyés par des tâches cron
Le système permet de se connecter aux e-mails contenant des domaines de la liste blanche. La liste blanche se trouve dans la base de données, gérée par le modèle PermittedDomain
. Au moins un domaine doit être ajouté à la liste blanche avant que quiconque puisse se connecter (cela s'applique également au développement).
Ajout d'un nouveau domaine à la base de données de production depuis bash/zsh etc :
kubectl get pods -n <NAMESPACE>
kubectl exec -it <POD> -n <NAMESPACE> ash
rails c
PermittedDomain.create(domain: '<DOMAIN_NAME>')
email@<DOMAIN_NAME>
Le site est accessible en lecture seule à partir des adresses IP MOJ. La liste des adresses IP est stockée dans une variable d'environnement appelée IP_ALLOWLIST
qui se trouve dans un secret Kubernetes. La même liste d'adresses IP est également utilisée pour restreindre l'accès à la section de gestion pour les utilisateurs administrateurs.
La méthode d'authentification par jeton repose sur l'accès des utilisateurs à leur compte de messagerie pour les authentifier.
Chaque fois que l'utilisateur souhaite démarrer une session, il doit générer un jeton d'authentification. Cela peut être fait en saisissant leur adresse e-mail (à partir d'un domaine autorisé) sur l'écran de connexion. Ils recevront un e-mail contenant un lien avec un jeton aléatoire unique. En cliquant sur le lien, ils pourront se connecter.
Pour les tests locaux : il existe plusieurs façons d'obtenir le jeton
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/tokens/
Utilisez ensuite le token sur cette URL : http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <-- remplacez par votre token.
People Finder envoie quelques types d'e-mails à l'aide de GOV.UK Notify
En production, des e-mails périodiques sont envoyés aux utilisateurs qui ont :
Pour exécuter le moteur en mode production, config.open_search_url
doit être défini, par exemple, dans config/application.rb. La variable d'environnement utilisée pour le définir est MOJ_PF_ES_URL
Voir « Éléments configurables » ci-dessus.
Utilisez localhost:9200
lorsque vous appelez la recherche OpenSearch localement.
Les commandes suivantes sur les environnements Kubernetes appelleront le pod proxy de recherche ouverte, qui appellera ensuite la recherche ouverte sur AWS pour lire ou mettre à jour les données.
Pour vérifier la santé de la pile opensearch, vous pouvez utiliser les éléments suivants, à partir de l'une ou l'autre instance hôte. wget
téléchargera les informations sur les pods afin que vous puissiez lire les fichiers en utilisant cat
. Localement, vous pouvez simplement utiliser curl
.
wget 'aws-es-proxy-service:9200/_cat/health?v'
ou consultez les paramètres et les statistiques ES :
wget 'aws-es-proxy-service:9200/_cluster/stats/?pretty'
wget 'aws-es-proxy-service:9200/_cat/indices?v'
wget 'aws-es-proxy-service:9200/_cat/nodes?v'
Si vous obtenez une IndexMissingException, vous devrez indexer le modèle Person :
bundle exec rake environment opensearch:import:model CLASS='Person' FORCE=y
Ou bien :
rake peoplefinder:es:index_people
Ou vous pouvez créer l'index à partir de la console si les commandes rake ci-dessus échouent :
OpenSearch :: Model . client = OpenSearch :: Client . new ( url : Rails . configuration . open_search_url ) . index ( index : Person . index_name , body : { } )
Person . __opensearch__ . create_index! index : Person . index_name , force : true
Et remplissez-le :
Person.import
Vous pouvez également supprimer l'index :
Person.delete_indexes
Pour exécuter des spécifications sans OpenSearch :
bundle exec rspec . --tag ~opensearch
Si votre shell est Zsh, vous devez échapper ~
en utilisant ~
.
Remarque : Malheureusement, pour le moment, il n'existe aucun moyen d'éviter que ES ne s'exécute localement, mais vous pouvez utiliser un conteneur Docker comme mentionné ci-dessus.
Manipulation
Nous utilisons MiniMagick, donc Imagemagick ou Graphicsmagick doivent être installés pour la manipulation d'images et pour certains tests.
Si vous utilisez Brew, vous pouvez utiliser la commande suivante :
brew install imagemagick
Stockage
Pour l'environnement de développement local, les images de profil sont stockées sous forme de fichiers. Pour les environnements déployés, les images de profil sont stockées dans leur propre compartiment AWS S3. Les compartiments n'accordent aucune autorisation de groupe aux utilisateurs non-AWS (c'est-à-dire qu'ils sont privés). L'accès aux images se fait via des URL prédéfinies et limitées dans le temps générées par l'application.
Les images téléchargées dans le compartiment par l'application empêchent explicitement la lecture dans le groupe AWS « Tout le monde » à l'aide de la configuration CarrierWave dans son initialiseur - la valeur par défaut de cette configuration est true/public.
config.fog_public = false # default: true
La présentation de l'application est définie par le moj_internal_template installé dans le cadre de ce moteur.
Vous pouvez remplacer cette mise en page dans l'application wrapper, créer votre propre fichier :
app/views/layouts/peoplefinder/peoplefinder.html.haml
Une grande partie du texte des vues est configurable dans le fichier de traduction.
Vous pouvez les remplacer dans l'application wrapper en créant votre propre fichier :
config/locales/en.yml
RandomGenerator
est capable de générer plusieurs couches d'équipes et de personnes avec des détails générés aléatoirement dans ces équipes.
Usage:
group = Group . find ( ... )
# initialise the generator with a parent group
generator = RandomGenerator . new ( group )
# clean all subgroups and people within the provided parent group
generator . clear
# generate team structure and people with the given parameters
groups_levels = 2 # number of levels to generate
groups_per_level = 3 # how many teams per each level
people_per_group = 5 # how many people should be in the bottom most teams
domain = 'fake.gov.uk' # which e-mail address should be used for e-mails (has to be whitelisted)
generator . generate ( groups_levels , groups_per_level , people_per_group , domain )
Vous pouvez également générer des données semi-aléatoires à l'aide de la tâche rake peoplefinder:data:demo
qui est appelée dans le cadre de peoplefinder:db:reload
. L'exécution répétée de peoplefinder:demo:data
ajoutera des membres aux exemples de groupes qu'il crée.
Exécuter rake -T | grep people
pour la dernière liste :
rake peoplefinder:data:demo # create basic demonstration data
rake peoplefinder:data:demo_csv[count,file] # create a valid csv for load testing, [count: number of records=500], [file: path to file=spec/fixtures/]
rake peoplefinder:db:clear # drop all tables
rake peoplefinder:db:reload # drop tables, migrate, seed and populate with demonstration data for development purposes
rake peoplefinder:db:reset_column_information # reset all column information
rake peoplefinder:import:csv_check[path] # Check validity of CSV file before import
rake peoplefinder:import:csv_import[path] # Import valid CSV file
Pour que Peoplefinder réussisse, les profils doivent être remplis et maintenus.
Toutes les exceptions générées dans n’importe quel environnement déployé seront envoyées à Sentry.