Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deployment config #37

Merged
merged 20 commits into from
Feb 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
build:
docker:
- image: circleci/node:8

working_directory: ~/repo

steps:
- checkout

# npm build
- run:
name: npm install
command: npm install
- run:
name: npm lint
command: npm run lint

workflows:
version: 2
continuous-deploy:
jobs:
- build:
filters:
branches:
only:
- master

3 changes: 3 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.gitignore
/node_modules
/public
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ node_modules/
public/assets/data/authorities.index.json
public/assets/data/authorities.db.json
/private/data
account-config.json
smtp-account-config.json
*.swp
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:8
FROM node:8-alpine

WORKDIR /usr/src/app/

Expand All @@ -9,4 +9,4 @@ RUN npm install
COPY . .

# Launch application
CMD npm run $env
CMD npm run $env
132 changes: 118 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,140 @@
# Onboarding

Tramite l'applicazione di onboarding, le PA avranno la possibilità di registrare i propri code hosting su Developers Italia ed indicizzarli nel motore di ricerca.
Tramite l'applicazione di onboarding, le PA avranno la possibilità di
registrare i propri repository di code hosting sul portale `Developers Italia`.
In questo modo sarà possibile aggiungere il repository alla lista indicizzata
dal *crawler* del portale che popolerà il catalogo del riuso.

# Avviare il progetto
# Flow dell'applicativo

Installare le dipendenze
1. Inserimento da parte della PA dei dati relativi all'organizzazione.
N.B. Utilizzando la funzionalità di *ricerca amministrazione* i dati verranno
automaticamente inseriti nei campi *Codice iPA, Amministrazione e PEC*.
2. Dopo aver selezionato il pulsante *Registra*, l'applicativo invierà una PEC
all'indirizzo email dell'amministrazione indicato nel form.
3. All'interno della email inviata è presente un link per confermare la
registrazione. Cliccando sul link si arriverà ad una pagina di conferma.
4. Selezionando *Registra* nella pagina di conferma l'amministrazione sarà
registrata.


# Formati

Le informazioni vengono salvate in un file JSON con la seguente struttura:

```json
{
"registrati": [
{
"referente": "pluto",
"ipa": "c_a123",
"url": "https://github.com/undefined",
"pec": "protocollo.comunemaramao@pec.it"
},
{
"referente": "pluto",
"ipa": "c_a123",
"url": "https://gitlab.com/undefined",
"pec": "protocollo.comunemaramao@pec.it"
}
]
}
```

Come si può notare, la stessa PA può registrare diverse URL per repository di
codice pubblico.

# Percorsi
Le PA registrate vengono salvate all'interno del file
`private/whitelist.db.json`.
Per invocare la API che restituisce la lista delle PA registrate, usare
la URL `http://localhost/repo-list`.
Il formato ritornato è il seguente:

```yaml
---
registrati:
-
ipa: "c_a123"
url: "https://github.com/undefined"
pec: "protocollo.comunemaramao@pec.it"
-
ipa: "c_a123"
url: "https://gitlab.com/undefined"
pec: "protocollo.comunemaramao@pec.it"
```


# Avvio del progetto

## Modalità di sviluppo (dev)

Per sviluppare in locale è necessario innanzitutto clonare o scaricare il
repository in una cartella locale.
Per far ciò, eseguire il comando `git clone` seguito dalla URL più appropriata.

### Locale (npm/yarn)

Dopodichè, sarà necessario installare le dipendenze del progetto tramite:
```bash
npm install
```
A questo punto sarà possibile eseguire il server tramite il comando:
```bash
npm dev
```
Questo comando creerà un server di development esposto sulla port 80 di
localhost attraverso `nodemon`, che quindi esegue il reload in automatico ad
ogni cambiamento dei file, permettendo di testare i cambiamenti in fase di
sviluppo.

Avviare l'applicazione con docker

- Modalità sviluppo
### Docker

Lanciare i seguenti comandi
E' possibile avviare l'applicazione anche attraverso docker.
Per far ciò, è necessario lanciare i seguenti comandi:

```bash
docker build -t <imageName> .
docker run -p 80:80 -e env=dev <imageName>
```

- Modalita' produzione

Creare nella cartella principale del progetto un file di nome `account-config.json` basandosi sul template di `account-config-tpl.json`.
## Modalita' di produzione (prod)

Configurare il file `config-prod.json`, specificando i parametri `host` e `applicationHost`.
Per configurare il software in modalità di produzione è necessario specificare
dei parametri quali, ad esempio, gli host SMTP, gli host applicativi etc.

### SMTP
Innanzitutto, siccome l'applicativo prevede l'invio di *Posta Elettronica
Certificata*, è necessario configurare un server SMTP.
Questa fase di configurazione prevede di modificare due file di progetto.
Il primo è il file denominato `config-prod.json` che contiene le seguenti
informazioni:
```json
{
"host": "",
"port": 587,
"secure": true,
"applicationHost": "",
"applicationPort": 80
}
```
dove `host` e `port` rappresentano le informazioni del server SMTP.
Per specificare le credenziali, invece, è necessario modificare un secondo
file. Per far ciò, copiare il file denominato
`smtp-account-config.json.example`, inserire le informazioni relative al
proprio `user` e `password`, e salvarlo come `smtp-account-config.json`.
In questo modo l'applicativo avrà le informazioni per connettersi al server
SMTP ed inviare i messaggi di PEC.

Lanciare i seguenti comandi
A questo punto è possibile creare l'immagine docker e avviarla.
Per far ciò, lanciare i seguenti comandi:

```bash modalita' di produzione
```bash
docker build -t <imageName> .
docker run -p 80:80 -e env=pm-prod <imageName>
```

Per invocare la API che restituisce la lista relativa alle PA registrate, usare la URL `http://localhost/repo-list`
# LICENSE
Questo progetto è coperto da una licenza di tipo BSD 3-Clause License (codice
SPDX: `BSD-3-Clause`). Per maggiori informazioni a riguardo consultare il file
denominato [`LICENSE`](LICENSE).
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"description": "",
"main": "server.js",
"scripts": {
"lint": "eslint .",
"dev": "nodemon --watch src server.js dev",
"pm-prod": "pm2-runtime server.js"
},
Expand All @@ -22,14 +23,14 @@
"homepage": "https://github.com/italia/onboarding.developers.italia.it#readme",
"dependencies": {
"fs-extra": "^6.0.1",
"generate-password": "^1.4.0",
"generate-password": "^1.4.1",
"hapi": "^17.5.2",
"inert": "^5.1.0",
"jscs": "^3.0.7",
"json2yaml": "^1.1.0",
"jsonwebtoken": "^8.3.0",
"lowdb": "^1.0.0",
"lunr": "^2.2.1",
"lunr": "^2.3.5",
"mustache": "^2.3.0",
"nodemailer": "^4.6.7",
"nodemon": "^1.18.3",
Expand Down
4 changes: 2 additions & 2 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const Hapi = require('hapi');
const Mustache = require('mustache');
const fs = require('fs-extra');

const whiteList = 'account-config.json';
const whiteList = 'smtp-account-config.json';

const init = async () => {
const emailSentHandler = require('./src/email-sent');
Expand Down Expand Up @@ -90,6 +90,6 @@ require('./src/create-index.js')().then(() => {
if (JSON.parse(process.argv.includes('dev')) || fs.existsSync(whiteList)) {
init();
} else {
console.log('Attenzione! Creare prima un file di credenziali "account-config.json" seguendo il modello di account-config-tpl.json');
console.log('Attenzione! Creare prima un file di credenziali "smtp-account-config.json" seguendo il modello di account-config-tpl.json');
}
});
File renamed without changes.
2 changes: 1 addition & 1 deletion src/email-sent.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ module.exports = function (request, h) {
sendEmail(transporter);
});
} else {
const configAccountString = fs.readFileSync('account-config.json').toString('utf8');
const configAccountString = fs.readFileSync('smtp-account-config.json').toString('utf8');
const accountConfig = JSON.parse(configAccountString);

const transporter = nodemailer.createTransport({
Expand Down