Skip to content

Commit

Permalink
Merge branch 'master' into patch-1
Browse files Browse the repository at this point in the history
  • Loading branch information
damikael authored Oct 25, 2021
2 parents deb8e86 + f9fd9df commit 52aeb49
Show file tree
Hide file tree
Showing 16 changed files with 473 additions and 80 deletions.
35 changes: 6 additions & 29 deletions .github/workflows/publish_docker_image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,12 @@ on:
name: publish_docker_image

jobs:
publish_docker_image:
push_to_registry:
name: Build and Publish Docker image (via Makefile)
runs-on: ubuntu-latest
env:
IMAGE: italia/spid-saml-check

steps:
- name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Get Docker image tags
run: |
TAGS=${IMAGE}:$(echo ${GITHUB_REF##*/})
TAGS="$TAGS,${IMAGE}:${GITHUB_SHA::8}"
echo "TAGS=${TAGS}" >> $GITHUB_ENV
- name: Add latest tag to Docker image on release
if: startsWith(github.ref, 'refs/tags/v')
run: |
TAGS=$(echo "${{ env.TAGS }}")
TAGS="$TAGS,${IMAGE}:latest"
echo "TAGS=${TAGS}" >> $GITHUB_ENV
- name: Check out the repo
uses: actions/checkout@v2

- name: Build and push
uses: docker/build-push-action@v2
with:
push: true
tags: ${{ env.TAGS }}
- name: Build Docker Image
run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin && make release
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Changelog
Tutte le modifiche importanti a questo progetto saranno documentate in questo file.

Il formato è basato su [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
e questo progetto aderisce a [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.8.2] - 2021-10-05
### Changed
- Ottimizzazione del Dockerfile
- Modifica del footer affinchè sia visualizzata la versione dello
spid-validator e spid-sp-test
- Aggiornamento del file README.it.md

### Added
- Makefile per il build dell'immagine docker che facilita l'aggiunta dei metadati
dell'immagine via OCI Metadata label
- API /api/server-info che restituisce informazioni essenziali sul server come
la versione del software dello spid-validator e del tool spid-sp-test
- Aggiunta di utilità per ricavare la versione di spid-sp-test
47 changes: 30 additions & 17 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,31 +1,43 @@
FROM debian:buster-slim
LABEL mantainer="Michele D'Amico, michele.damico@agid.gov.it"
FROM node:8-buster-slim

# Metadata params
ARG BUILD_DATE
ARG VCS_REF
ARG VCS_URL
ARG VERSION
ARG EXPOSE_HTTPS_PORT

# Define the Metadata Container image
# For more info refere to https://github.com/opencontainers/image-spec/blob/main/annotations.md
LABEL org.opencontainers.image.authors="Michele D'Amico, michele.damico@agid.gov.it" \
org.opencontainers.image.created=${BUILD_DATE} \
org.opencontainers.image.version=${VERSION} \
org.opencontainers.image.source=${VCS_URL} \
org.opencontainers.image.revision=${VCS_REF} \
org.opencontainers.image.url="https://github.com/italia/spid-saml-check" \
org.opencontainers.image.vendor="Developers Italia" \
org.opencontainers.image.licenses="EUPL-1.2" \
org.opencontainers.image.title="SPID SAML Check" \
org.opencontainers.image.description="SPID SAML Check è una suita applicativa che fornisce diversi strumenti ai Service Provider SPID, utili per ispezionare le request di autenticazione SAML inviate all'Identity Provider, verificare la correttezza del metadata e inviare response personalizzate al Service Provider." \
org.opencontainers.image.base.name="italia/spid-saml-check"

# Update and install utilities
RUN apt-get update \
&& apt-get install -y \
RUN apt-get update && apt-get install -y \
wget \
curl \
unzip \
build-essential \
libxml2-utils \
openssl \
python3-minimal \
python3-pip \
xmlsec1 \
libxml2-dev \
libxmlsec1-dev \
libxmlsec1-openssl \
&& apt-get clean
xmlsec1 \
openssl \
python3 \
python3-pip

# Install spid-sp-test
RUN pip3 install spid-sp-test --upgrade --no-cache

# Node.js
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - \
&& apt-get install -y \
nodejs \
&& apt-get clean

# Set the working directory
WORKDIR /spid-saml-check

Expand All @@ -36,6 +48,7 @@ ADD . /spid-saml-check
RUN mkdir /spid-saml-check/data

ENV TZ=Europe/Rome
ENV NODE_HTTPS_PORT=${EXPOSE_HTTPS_PORT}

# Build validator
RUN cd /spid-saml-check/spid-validator && \
Expand All @@ -45,7 +58,7 @@ RUN cd /spid-saml-check/spid-validator && \
npm cache clean --force

# Ports exposed
EXPOSE 8080
EXPOSE ${EXPOSE_HTTPS_PORT}


ENTRYPOINT cd spid-validator && npm run start-prod
105 changes: 105 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
default: build

# Build Docker image
build: docker_build output

# Debug the laste Docker image
debug: docker_debug

# Run the last Docker image
run: docker_run

# Run Docker image prune
clean: docker_image_prune

# Run Docker image remove
remove: docker_image_remove_last_build output

# Build and push Docker image
release: docker_build docker_push output

# Image can be overidden with env vars.
# es: make build DOCKER_IMAGE=my-cns
DOCKER_IMAGE ?= italia/spid-saml-check

# Expose HTTPS port can be overidden with env vars.
# es: make run EXPOSE_HTTPS_PORT=90443
EXPOSE_HTTPS_PORT ?= 8443

# Get the latest commit.
GIT_COMMIT = $(strip $(shell git rev-parse --short HEAD))

# Get the version number from the code
CODE_VERSION = $(strip $(shell git describe --tags --always --abbrev=0 | cut -c3-))

# Find out if the working directory is clean
GIT_NOT_CLEAN_CHECK = $(shell git status --porcelain)
ifneq (x$(GIT_NOT_CLEAN_CHECK), x)
DOCKER_TAG_SUFFIX = -dirty
endif

# If we're releasing to Docker Hub, and we're going to mark it with the latest
# tag, it should exactly match a version release
ifeq ($(MAKECMDGOALS),release)
# Use the version number as the release tag.
DOCKER_TAG = $(CODE_VERSION)

ifndef CODE_VERSION
$(error You need to create a VERSION file to build a release)
endif

# See what commit is tagged to match the version
VERSION_COMMIT = $(strip $(shell git rev-list $(GIT_COMMIT) -n 1 | cut -c1-7))
ifneq ($(VERSION_COMMIT), $(GIT_COMMIT))
$(error echo You are trying to push a build based on commit $(GIT_COMMIT) but the tagged release version is $(VERSION_COMMIT))
endif

# Don't push to Docker Hub if this isn't a clean repo
ifneq (x$(GIT_NOT_CLEAN_CHECK), x)
$(error echo You are trying to release a build based on a dirty repo)
endif

else
# Add the commit ref for development builds. Mark as dirty if the working directory isn't clean
DOCKER_TAG = $(CODE_VERSION)-$(GIT_COMMIT)$(DOCKER_TAG_SUFFIX)
endif

docker_build:
# Update version of the spid-validator server component
sed -i -r -E 's/("version"\:\s)("[0-9]+\.[0-9]+.[0-9]+")/\1"$(DOCKER_TAG)"/g' spid-validator/server/package.json

# Build Docker image
docker build \
--build-arg BUILD_DATE=`date -u +"%Y-%m-%dT%H:%M:%SZ"` \
--build-arg VERSION=$(CODE_VERSION) \
--build-arg VCS_URL=`git config --get remote.origin.url` \
--build-arg VCS_REF=$(GIT_COMMIT) \
--build-arg EXPOSE_HTTPS_PORT=$(EXPOSE_HTTPS_PORT) \
-t $(DOCKER_IMAGE):$(DOCKER_TAG) .

docker_push:
# Tag image as latest
docker tag $(DOCKER_IMAGE):$(DOCKER_TAG) $(DOCKER_IMAGE):latest

# Push to DockerHub
docker push $(DOCKER_IMAGE):$(DOCKER_TAG)
docker push $(DOCKER_IMAGE):latest

docker_debug:
# Run bash shell on Container
docker run --rm -it $(DOCKER_IMAGE):$(DOCKER_TAG) /bin/bash

docker_run:
# Run Container
docker run --rm -it -d --name=spid-saml-check -p ${EXPOSE_HTTPS_PORT}:8443 $(DOCKER_IMAGE):$(DOCKER_TAG)

docker_image_prune:
# Docker image prune
docker image prune --force

docker_image_remove_last_build:
# Docker image remove
docker image rm $(DOCKER_IMAGE):$(DOCKER_TAG)

output:
@echo Docker Image: $(DOCKER_IMAGE):$(DOCKER_TAG)
99 changes: 88 additions & 11 deletions README.it.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,101 @@

*SPID SAML Check* è sviluppato e mantenuto da [AgID - Agenzia per l'Italia Digitale](https://www.agid.gov.it).

## Come costruire il contenitore Docker
## Quick start con Docker
L'intera suite applicativa è disponibile come immagine Docker pubblicata
su DockerHub [italia/spid-saml-check](https://hub.docker.com/r/italia/spid-saml-check).

Fin da subito è quindi possibile eseguire il container Docker utilizzando
il comando indicato a seguire.

```
# Esecuzione dell'ultima versione
docker run -t -i -p 8443:8443 italia/spid-saml-check
# Esecuzione di una specifica versione
docker run -t -i -p 8443:8443 italia/spid-saml-check:v.1.8.1
```

Così facendo l'applicazione spid-validator è immediatamente disponibile
all'indirizzo https://localhost:8443

In console vengono mostrate informazioni utili quali:
- la versione della suite spid-saml-check
- la versione del tool spid-sp-test
- il comando per ottenere la shell bash

A seguire un esempio di output che dovreste ottenere dall'esecuzione di uno dei comandi mostrati in precedenza.

```
> spid-validator@1.0.0 start-prod /spid-saml-check/spid-validator
> node server/spid-validator.js
>>> DATABASE : QUERY
...
Attach to container by this command: docker exec -it 41c81fba9a26 /bin/bash
spid-validator
version: 1.8.1-627d2e7-dirty
listening on port 8443
SPID SP Test Tool (spid-sp-test), version: 0.9.22
```

Le immagini pubblicate su Docker Hub sono tutte sono arricchite di tutti
questi metadati che consentono di risalire alla versione del software
di riferimento. Per fare un verifica di questi metadati è possibile eseguire
il comando `docker image inspect italia/spid-saml-check:1.8.1` per ottenere
un output simile a quello mostrato a seguire.

```
"Labels": {
"org.opencontainers.image.authors": "Michele D'Amico, michele.damico@agid.gov.it",
"org.opencontainers.image.base.name": "italia/spid-saml-check",
"org.opencontainers.image.created": "2021-10-02T21:03:16Z",
"org.opencontainers.image.description": "SPID SAML Check è una suita applicativa che fornisce diversi strumenti ai Service Provider SPID, utili per ispezionare le request di autenticazione SAML inviate all'Identity Provider, verificare la correttezza del metadata e inviare response personalizzate al Service Provider.",
"org.opencontainers.image.licenses": "EUPL-1.2",
"org.opencontainers.image.revision": "7117b67",
"org.opencontainers.image.source": "https://github.com/amusarra/spid-saml-check.git",
"org.opencontainers.image.title": "SPID SAML Check",
"org.opencontainers.image.url": "https://github.com/italia/spid-saml-check",
"org.opencontainers.image.vendor": "Developers Italia",
"org.opencontainers.image.version": "1.8.1"
}
```


## Come costruire l'immagine Docker ed eseguire il container
Nel caso in cui abbiate per esempio apportato delle modifiche al progetto e
volete costruire la vostra immagine, è possibile procedere nel seguende modo.


```
# 1. Clone del repository
git clone https://github.com/italia/spid-saml-check.git
# 2. Esecuzione della build
cd spid-saml-check
docker build -t spid-saml-check .
```

## Come eseguire il contenitore Docker
Un volta terminato il processo di build dell'immagine (che potrebbe durare
diversi minuti), è possibile eseguire il container utilizzando il comando a
seguire.


```
docker run -t -i -p 8080:8080 spid-saml-check
docker run -t -i -p 8443:8443 spid-saml-check
```

## Come usare *SPID Validator*

L'applicazione spid-validator, se invocata *così com'è*, effettua un collaudo formale del solo metadata SAML del SP.
Per utilizzare l'intero set di controlli (il vero e proprio *SPID Validator*), va scaricato il metadata SAML disponibile all'indirizzo https://localhost:8080/metadata.xml installandolo come un nuovo IdP presso la propria implementazione di SP.
Per utilizzare l'intero set di controlli (il vero e proprio *SPID Validator*), va scaricato il metadata SAML disponibile all'indirizzo https://localhost:8443/metadata.xml installandolo come un nuovo IdP presso la propria implementazione di SP.
Usato in questo modo, lo *SPID Validator* può essere invocato come un IdP dal proprio SP, presentando un insieme di più di 300 controlli individuali, divisi in 7 famiglie:
* 4 famiglie per la convalida formale del **metadata** SP (come sopra descritto);
* 3 famiglie per la convalida formale delle **request** SAML;
Expand All @@ -37,9 +114,9 @@ Per usare lo *SPID Validator* pertanto occorre inviare una richiesta di autentic
### Passi per l'utilizzo

- Copia il metadata di spid-validator presso il metadata store del tuo SP.
I metadata di spid-validator possono essere scaricati qui: [https://localhost:8080/metadata.xml](https://localhost:8080/metadata.xml)
I metadata di spid-validator possono essere scaricati qui: [https://localhost:8443/metadata.xml](https://localhost:8443/metadata.xml)
````
wget https://localhost:8080/metadata.xml -O /path/to/your/sp/metadata/folder/spid-saml-check-metadata.xml
wget https://localhost:8443/metadata.xml -O /path/to/your/sp/metadata/folder/spid-saml-check-metadata.xml
````

- Connettendoti al tuo SP invia una richiesta di autenticazione, questa ti porterà alla schermata di autenticazione di spid-validator.
Expand All @@ -64,25 +141,25 @@ Per usare lo *SPID Validator* pertanto occorre inviare una richiesta di autentic

## Come usare *SPID Demo*

L'applicazione spid-demo viene eseguita all'indirizzo: [https://localhost:8080/demo](https://localhost:8080/demo)
L'applicazione spid-demo viene eseguita all'indirizzo: [https://localhost:8443/demo](https://localhost:8443/demo)

<img src="doc/img/demo_idp_index.png" width="500" alt="demo index page" />


Gli utenti di test di spid-demo che è possibile utilizzare sono elencati su: [https://localhost:8080/demo/users](https://localhost:8080/demo/users)
Gli utenti di test di spid-demo che è possibile utilizzare sono elencati su: [https://localhost:8443/demo/users](https://localhost:8443/demo/users)

<img src="doc/img/demo_idp_users.png" width="500" alt="demo users page" />


### Passi per l'utilizzo

- Copia il metadata di spid-demo presso il metadata store del tuo SP.
Il metadata di spid-demo può essere scaricato qui: [https://localhost:8080/demo/metadata.xml](https://localhost:8080/demo/metadata.xml)
Il metadata di spid-demo può essere scaricato qui: [https://localhost:8443/demo/metadata.xml](https://localhost:8443/demo/metadata.xml)
````
wget https://localhost:8080/demo/metadata.xml -O /path/to/your/sp/metadata/folder/spid-demo-metadata.xml
wget https://localhost:8443/demo/metadata.xml -O /path/to/your/sp/metadata/folder/spid-demo-metadata.xml
````

- Vai su https://localhost:8080 e registra il metadata del tuo SP tramite l'interfaccia di spid-validator.<br/>
- Vai su https://localhost:8443 e registra il metadata del tuo SP tramite l'interfaccia di spid-validator.<br/>
Dovresti poter accedere tramite una pagina di login come mostrato nella figura seguente

<img src="doc/img/login.png" width="500" alt="login page" />
Expand Down
Loading

0 comments on commit 52aeb49

Please sign in to comment.