O trabalho deve ser baseado e PRed para o ramo principal. Usamos o processo de aprovação do GitHub PR, portanto, quando seu PR estiver pronto, você precisará que uma pessoa o aprove e que os testes de CI sejam aprovados antes que ele possa ser mesclado.
Clone este repositório e cd
no novo diretório
$ git clone [email protected]:ministryofjustice/peoplefinder.git
$ cd peoplefinder
Se você ainda não possui rbenv
instalado, instale-o da seguinte maneira:
$ brew install rbenv ruby-build
$ rbenv init
Siga as instruções impressas no comando rbenv init
e atualize seu ~/.bash_profile
ou arquivo equivalente de acordo, em seguida, inicie um novo terminal e navegue até o diretório repo.
Use rbenv
para instalar a versão mais recente do Ruby conforme definido em .ruby-version
(certifique-se de estar no caminho do repositório):
$ rbenv install
Postgresql
$ brew install postgresql
Pesquisa aberta
$ brew install opensearch
Use os seguintes comandos para instalar gems e pacotes javascript e depois criar o banco de dados
$ bin/setup
Crie algumas equipes de demonstração
$ DOMAIN=fake.gov.uk bin/rake peoplefinder:data:demo
Para apenas executar o servidor web sem nenhum trabalho em segundo plano (geralmente suficiente):
$ bin/rails server
O site estará acessível em http://localhost:3000.
Eles devem ser definidos nos arquivos config/application.rb ou nos arquivos enviroments/ environment .rb se as configurações precisarem ser definidas por ambiente.
config.app_title
, por exemplo, 'Meu novo localizador de pessoas'
config.default_url_options
, por exemplo, {host: mail.peoplefinder.example.com}
config.open_search_url
Necessário para produção (consulte a seção Pesquisa abaixo)
config.support_email
, por exemplo, '[email protected]'
config.send_reminder_emails
Defina como verdadeiro se e-mails de lembrete forem enviados por cronjobs
O sistema permite o login para e-mails que possuem domínios da lista de permissões. A lista de permissões está no banco de dados, gerenciada pelo modelo PermittedDomain
. Pelo menos um domínio deve estar na lista de permissões antes que alguém possa fazer login (isso também se aplica ao desenvolvimento).
Adicionando um novo domínio ao banco de dados de produção de 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>
O site pode ser acessado em modo somente leitura a partir de endereços IP MOJ. A lista de IPs é armazenada em uma variável de ambiente chamada IP_ALLOWLIST
que está em um segredo do Kubernetes. A mesma lista de IPs também é usada para restringir o acesso à seção de gerenciamento para usuários administradores.
O método de autenticação de token depende do acesso dos usuários à sua conta de e-mail para autenticá-los.
Cada vez que o usuário deseja iniciar uma sessão, ele precisa gerar um token de autenticação. Isso pode ser feito inserindo o endereço de e-mail (de um domínio permitido) na tela de login. Eles receberão uma mensagem de e-mail contendo um link com um token aleatório exclusivo. Clicar no link permitirá que eles façam login.
Para testes locais – Existem algumas maneiras de obter o token
select * from tokens where user_email = <the email you use for asking token from app> order by id desc;
http://localhost:3000/tokens/
Em seguida, use o token neste URL: http://localhost:3000/tokens/3da4f4e2-8001-4437-b3ab-7e2b3f6e768c <- substitua pelo seu token.
O People Finder envia alguns tipos de e-mail usando GOV.UK Notify
Na produção, e-mails periódicos são enviados para usuários que possuem:
Para executar o mecanismo no modo de produção, config.open_search_url
deve ser configurado, por exemplo, config/application.rb. A variável de ambiente usada para defini-lo é MOJ_PF_ES_URL
Veja 'Elementos configuráveis' acima.
Use localhost:9200
ao chamar a pesquisa OpenSearch localmente.
Os comandos a seguir em ambientes Kubernetes chamarão o pod de proxy de pesquisa aberta, que então chamará a pesquisa aberta na AWS para ler ou atualizar dados.
Para verificar a integridade da pilha opensearch, você pode usar o seguinte, em qualquer instância do host. wget
baixará as informações nos pods para que você possa ler os arquivos usando cat
. Localmente você pode apenas usar curl
.
wget 'aws-es-proxy-service:9200/_cat/health?v'
ou veja as configurações e estatísticas do 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'
Se você obtiver uma IndexMissingException, precisará indexar o modelo Person:
bundle exec rake environment opensearch:import:model CLASS='Person' FORCE=y
Ou, alternativamente:
rake peoplefinder:es:index_people
Ou você pode criar o índice a partir do console se os comandos rake acima falharem:
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
E preencha-o:
Person.import
Você também pode excluir o índice:
Person.delete_indexes
Para executar especificações sem OpenSearch:
bundle exec rspec . --tag ~opensearch
Se o seu shell for Zsh, você deverá escapar ~
usando ~
.
Nota: Infelizmente, no momento não há como evitar que o ES seja executado localmente, mas você pode usar um contêiner docker conforme mencionado acima.
Manipulação
Usamos MiniMagick, portanto, o Imagemagick ou o Graphicsmagick precisam ser instalados para manipulação de imagens e para alguns dos testes.
Se estiver usando brew você pode usar o seguinte comando:
brew install imagemagick
Armazenar
Para o ambiente de desenvolvimento local, as imagens de perfil são armazenadas como arquivos. Para os ambientes implantados, as imagens de perfil são armazenadas em seu próprio bucket AWS S3. Os buckets não concedem nenhuma permissão de grupo a usuários que não sejam da AWS (ou seja, são privados). O acesso às imagens é feito por meio de URLs pré-definidos e com tempo limitado gerados pelo aplicativo.
As imagens que são carregadas no bucket pelo aplicativo impedem explicitamente a leitura para o grupo AWS "Todos" usando a configuração CarrierWave em seu inicializador - o padrão para esta configuração é verdadeiro/público.
config.fog_public = false # default: true
O layout do aplicativo é definido pelo moj_internal_template instalado como parte deste mecanismo.
Você pode substituir esse layout no aplicativo wrapper, criar seu próprio arquivo:
app/views/layouts/peoplefinder/peoplefinder.html.haml
Muito do texto nas visualizações é configurável no arquivo de traduções.
Você pode substituí-los no aplicativo wrapper criando seu próprio arquivo:
config/locales/en.yml
O RandomGenerator
é capaz de gerar diversas camadas de equipes e pessoas com detalhes gerados aleatoriamente nessas equipes.
Uso:
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 )
Você também pode gerar dados semi-aleatórios usando a tarefa rake peoplefinder:data:demo
que é chamada como parte de peoplefinder:db:reload
. A execução repetida de peoplefinder:demo:data
adicionará membros aos grupos de exemplo que ele cria.
Execute rake -T | grep people
para a lista mais recente:
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
Para que o Peoplefinder seja bem-sucedido, os perfis precisam ser preenchidos e mantidos.
Quaisquer exceções levantadas em qualquer ambiente implantado serão enviadas ao Sentry.