diff --git a/CHANGELOG.md b/CHANGELOG.md
index d067009..9e00d4a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,13 @@
+## 3.0.0 (30-04-2024)
+
+### Novità: 5
+- [#30854](https://parermine.regione.emilia-romagna.it/issues/30854) Creazione endpoint con informazioni sulla versione
+- [#30779](https://parermine.regione.emilia-romagna.it/issues/30779) Aggiornamento all'ultima versione di Spring 5
+- [#30349](https://parermine.regione.emilia-romagna.it/issues/30349) Gestione TLS su protocollo DICOM
+- [#30348](https://parermine.regione.emilia-romagna.it/issues/30348) Introduzione protocolli sicuri di comunicazione DICOM
+- [#28746](https://parermine.regione.emilia-romagna.it/issues/28746) Gestione configurazioni DPI
+
## 2.8.0 (03-08-2023)
### Novità: 1
diff --git a/README.md b/README.md
index a496d80..15d9d18 100644
--- a/README.md
+++ b/README.md
@@ -13,16 +13,137 @@ Il modulo software DPI (Digital Preservation Interface), sviluppato e manutenuto
Requisiti minimi per installazione:
- Sistema operativo : consigliato Linux server (in alternativa compatibilità con Windows server);
-- Java versione 11 (OpenJDK / Oracle);
+- Java versione 8 (OpenJDK / Oracle);
- Tomcat 9.
## Instalazione JDK
Consigliata adozione della OpenJDK alla versione 11, guida all'installazione https://openjdk.org/install/.
+## Connettività
+
+Il server su cui è installato il DPI deve essere abilitato a raggiungere gli host che ospitano determinati servizi esposti in Internet. Deve essere possibile raggiungere un server ftp e gli URL che espongono i contesti applicativi che occorrono al corretto funzionamento del DPI alle porte specificate, ad esempio:
+- host: ftp-parer.regione.emilia-romagna.it porte: 21, 60000 - 60100 (ftps)
+- host: parer.regione.emilia-romagna.it porta: 443 TCP (https)
+- host: parer-pre.regione.emilia-romagna.it porta: 443 TCP (https)
+
+E' consigliata la disponibilità di un DNS per la risoluzione degli indirizzi specificati.
+
+Il DPI necessita inoltre di comunicare con il PACS e viceversa tramite protocollo TCP/DICOM.
+
+Solitamente vengono utilizzate le porte 104 (DPI --> PACS) e 11112 (PACS --> DPI).
+
+L’IP del PACS varia a seconda dell'installazione e deve essere comunicato di volta in volta.
+
## Setup application server (Tomcat 9)
-TODO
+Installare Tomcat 9 all'ultimo update disponibile.
+
+Abilitare il connettore https.
+
+### Settaggio variabili d’avvio JVM Tomcat
+
+Nelle installazioni di test sono state utilizzate le seguenti configurazioni di system.d.
+
+In particolare, si riporta un esempio del file tomcat-dpi-AMBIENTE.service presente nella directory /etc/systemd/system/ . Il valore di AMBIENTE viene comunicato in fase di installazione.
+
+Contenuto del file:
+
+```
+[Unit]
+Description=Apache Tomcat 9 DPI AMBIENTE
+After=syslog.target
+
+[Service]
+User=tomcat
+Group=tomcat
+UMask=0002
+TimeoutSec=5m
+WorkingDirectory=/opt/tomcat/tomcat-dpi-AMBIENTE/
+
+Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk"
+Environment="CATALINA_BASE=/opt/tomcat/tomcat-dpi-AMBIENTE"
+Environment="CATALINA_HOME=/opt/tomcat/tomcat-dpi-AMBIENTE"
+Environment="CATALINA_PID=/opt/tomcat/tomcat-dpi-AMBIENTE/tomcat.pid"
+Environment="CATALINA_OPTS=-server -Xss1M -XX:MaxPermSize=256M -XX:+UseConcMarkSweepGC -Xms2G -Xmx2G -Denv=AMBIENTE -Dhttps.protocols=TLSv1.2"
+
+ExecStart=/bin/bash /opt/tomcat/tomcat-dpi-AMBIENTE/bin/startup.sh
+ExecStop=/bin/bash /opt/tomcat/tomcat-dpi-AMBIENTE/bin/shutdown.sh
+
+PIDFile=/opt/tomcat/tomcat-dpi-AMBIENTE/tomcat.pid
+SyslogIdentifier=tomcat-dpi
+SuccessExitStatus=143
+LimitNOFILE=65535
+
+[Install]
+WantedBy=multi-user.target
+```
+
+Per il corretto funzionamento del DPI è necessario impostare a 65536 il limite di fd che il processo Tomcat può mantenere aperti.
+
+Questo comportamento viene configurato nella riga `LimitNOFILE=65535` del file tomcat-dpi-AMBIENTE.service mostrato sopra.
+
+Se la macchina dispone di soli 4gb settare la variabile dell’heap a Xmx2g.
+
+Assicurarsi dell’esistenza della variabile d'ambiente `catalina.base` e che punti alla directory contente la cartella ./conf
+
+Aggiungere il parametro `–Denv` e valorizzarlo con il nome dell’AMBIENTE (comunicato in fase di installazione).
+
+Per disabilitare la serializzazione dell'oggetto Session durante i restart di Tomcat verificare che il file conf/context.xml abbia la stringa:
+
+` `
+
+NON commentata.
+
+### Settaggio configurazione
+
+Creare all’interno di `${catalina.base}`/conf/ una cartella con il nome dpi-AMBIENTE (il valore di AMBIENTE viene comunicato in fase di installazione) e copiarci dentro i file `dpi.properties`, `samlKeystore.jks` e `securityContext.xml` generati mediante l'apposito progetto **DPI-Config**, ricordandosi di settare i permessi.
+
+Se nel file `dpi.properties` sono valorizzate le seguenti proprietà:
+```
+tipoObj.1=
+tipoObj.input_path.1=
+```
+allora è necessario creare una cartella:
+```
+/
+```
+
+### Settaggio cartella di storage
+
+1. Montare lo storage su `/dpicache`;
+2. creare in `/dpicache` una cartella `dpi` e assegnare i permessi rwx all’utente oltre che l’owning a chi esegue Tomcat;
+3. creare le cartelle `dpi_test` e `dpi_prod` dentro a `/dpicache/dpi/` in modo da poter passare facilmente da test a produzione semplicemente cambiando il parametro `dpi.work_path` dal file di conf del dpi.
+
+Il risultato finale deve essere:
+```
+/dpicache/dpi/dpi_test
+/dpicache/dpi/dpi_prod
+```
+
+### Configurazione cartella log
+
+1. Spostare la vecchia cartella `logs` in `logs_OLD`;
+2. creare una cartella `logs_prod`;
+3. creare una cartella `logs_test`;
+4. creare un _link simbolico_ chiamato `logs` che punti alla cartella di log in base alla configurazione di test o produzione che si vuole attivare.
+
+Il risultato finale deve essere:
+```
+lrwxrwxrwx 1 tomcat tomcat 10 Mar 10 19:36 logs -> logs_test/
+drwxr-xr-x 2 tomcat tomcat 4096 Mar 10 16:52 logs_OLD
+drwxrwxr-x 2 tomcat tomcat 4096 Mar 10 19:35 logs_prod
+drwxrwxr-x 2 tomcat tomcat 4096 Apr 11 17:51 logs_test
+```
+
+### Deploy applicazione
+
+1. Creare la cartella `$CATALINA_HOME`/wars;
+2. copiare il .war in `$CATALINA_HOME`/wars;
+3. pulire le cartelle `$CATALINA_HOME`/work `$CATALINA_HOME`/tmp;
+4. assicurarsi di aver messo i file di configurazione `dpi.properties`, `samlKeystore.jks` e `securityContext.xml` nella cartella conf;
+5. in `$CATALINA_HOME`/webapps creare un nuovo link simbolico con il comando `ln -sf ../wars/dpi-VERS.war ./dpi.war`;
+6. avviare il processo tomcat.
# Utilizzo
@@ -34,6 +155,24 @@ DPI può operare con logiche sia push che pull, ricevendo o estraendo dati e doc
Inoltre, DPI fornisce strumenti di monitoraggio dei versamenti effettuati a disposizione dell’Ente produttore.
+## Ricerca diario
+
+Il sistema offre una pagina di ricerca degli studi diagnostici:
+
+
+
+
+
+## Rircerca restituzione studi
+
+Il sistema offre una pagina di recupero degli studi diagnostici versati:
+
+
+
+
+
+
+
# Librerie utilizzate
| GroupId | ArtifactId | Version | Type | Licenses |
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index d72e100..981cda9 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -1,4 +1,8 @@
-## 2.8.0 (03-08-2023)
+## 3.0.0 (07-05-2024)
-### Novità: 1
-- [#29738](https://parermine.regione.emilia-romagna.it/issues/29738) Aggiornamento librerie obsolete 2023
+### Novità: 5
+- [#30854](https://parermine.regione.emilia-romagna.it/issues/30854) Creazione endpoint con informazioni sulla versione
+- [#30779](https://parermine.regione.emilia-romagna.it/issues/30779) Aggiornamento all'ultima versione di Spring 5
+- [#30349](https://parermine.regione.emilia-romagna.it/issues/30349) Gestione TLS su protocollo DICOM
+- [#30348](https://parermine.regione.emilia-romagna.it/issues/30348) Introduzione protocolli sicuri di comunicazione DICOM
+- [#28746](https://parermine.regione.emilia-romagna.it/issues/28746) Gestione configurazioni DPI
diff --git a/pom.xml b/pom.xml
index 655efe8..7d36102 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,7 +1,7 @@
4.0.0
dpi
- 2.8.1-SNAPSHOT
+ 3.0.1-SNAPSHOT
war
Dpi Maven Webapp
Progetto DPI
@@ -9,7 +9,7 @@
it.eng.parer
parer-pom
- 4.2.0
+ 5.2.1
@@ -25,13 +25,11 @@
dpi
true
- true
+ true
- 4.11.0
-
- 5.3.28
- 5.7.9
- 9.0.30
+ 5.14.0
+
+ 9.0.30
2.0.29
2.0.29
2.3.2
@@ -59,18 +57,17 @@
-
-
-
-
-
- it.eng.parer
- spagofat
- ${spagofat.version}
- pom
- import
-
-
+
+
+
+
+ it.eng.parer
+ spagofat
+ ${spagofat.version}
+ pom
+ import
+
+
org.springframework
spring-context
@@ -127,67 +124,67 @@
${spring.security.version}
-
- com.fasterxml.jackson.core
- jackson-core
- ${jackson-core.version}
-
-
- com.fasterxml.jackson.core
- jackson-databind
- ${jackson-core.version}
-
-
- com.fasterxml.jackson.core
- jackson-annotations
- ${jackson-core.version}
-
-
- com.google.guava
- guava
- ${guava.version}
-
-
- org.apache.taglibs
- taglibs-standard-jstlel
- ${taglibs-standard-jstlel.version}
-
-
- org.apache.taglibs
- taglibs-standard-spec
- ${taglibs-standard-jstlel.version}
-
-
- org.apache.taglibs
- taglibs-standard-impl
- ${taglibs-standard-jstlel.version}
-
-
- ch.qos.logback
- logback-core
- ${logback.version}
-
-
- ch.qos.logback
- logback-classic
- ${logback.version}
-
-
- org.dom4j
- dom4j
- ${dom4j.version}
- compile
-
-
-
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson-core.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson-core.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ ${jackson-core.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+ org.apache.taglibs
+ taglibs-standard-jstlel
+ ${taglibs-standard-jstlel.version}
+
+
+ org.apache.taglibs
+ taglibs-standard-spec
+ ${taglibs-standard-jstlel.version}
+
+
+ org.apache.taglibs
+ taglibs-standard-impl
+ ${taglibs-standard-jstlel.version}
+
+
+ ch.qos.logback
+ logback-core
+ ${logback.version}
+
+
+ ch.qos.logback
+ logback-classic
+ ${logback.version}
+
+
+ org.dom4j
+ dom4j
+ ${dom4j.version}
+ compile
+
+
+
dev
svil
- false
- false
+ false
+ false
@@ -317,18 +314,18 @@
-
- com.fasterxml.jackson.core
- jackson-core
-
-
- com.fasterxml.jackson.core
- jackson-databind
-
-
- com.fasterxml.jackson.core
- jackson-annotations
-
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
org.apache.cxf.build-utils
@@ -374,7 +371,7 @@
org.apache.taglibs
taglibs-standard-jstlel
-
+
org.apache.taglibs
taglibs-standard-spec
@@ -445,10 +442,10 @@
commons-beanutils
commons-beanutils
-
- org.dom4j
- dom4j
-
+
+ org.dom4j
+ dom4j
+
@@ -474,7 +471,30 @@
-
+
+ pl.project13.maven
+ git-commit-id-plugin
+
+ true
+ false
+ false
+
+
+
+ get-the-git-infos
+
+ revision
+
+
+
+ validate-the-git-infos
+
+ validateRevision
+
+
+
+
+
org.apache.maven.plugins
maven-war-plugin
@@ -527,75 +547,76 @@
org.apache.maven.plugins
maven-javadoc-plugin
-
it.eng.dpi.slite.*:it.eng.sacerasi.*
-
- org.apache.maven.plugins
- maven-compiler-plugin
-
-
- parer-tool-compilation
- generate-sources
-
-
- it/eng/dpi/web/util/*.java
-
-
-
- compile
-
-
-
-
-
- org.apache.maven.plugins
- maven-antrun-plugin
-
-
- createSliteDir
- generate-sources
-
-
-
-
-
-
- run
-
-
-
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
-
- generate-slite-sources
- generate-sources
-
- java
-
-
-
-
- ${project.build.directory}/generated-sources/slite
- true
- true
- it.eng.dpi.web.util.ParerTool
- compile
-
-
-
- commons-collections
- commons-collections
- ${commons-collections.version}
-
-
-
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ parer-tool-compilation
+ generate-sources
+
+
+ it/eng/dpi/web/util/*.java
+
+
+
+ compile
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-antrun-plugin
+
+
+ createSliteDir
+ generate-sources
+
+
+
+
+
+
+ run
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+
+ generate-slite-sources
+ generate-sources
+
+ java
+
+
+
+
+ ${project.build.directory}/generated-sources/slite
+ true
+ true
+ it.eng.dpi.web.util.ParerTool
+ compile
+
+
+
+ commons-collections
+ commons-collections
+ ${commons-collections.version}
+
+
+
@@ -605,7 +626,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
-
+
it.eng.dpi.slite.*:it.eng.sacerasi.*
diff --git a/publiccode.yml b/publiccode.yml
new file mode 100644
index 0000000..602f3aa
--- /dev/null
+++ b/publiccode.yml
@@ -0,0 +1,71 @@
+# This repository adheres to the publiccode.yml standard by including this
+# metadata file that makes public software easily discoverable.
+# More info at https://github.com/italia/publiccode.yml
+
+publiccodeYmlVersion: '0.3'
+categories:
+ - data-collection
+ - data-visualization
+dependsOn:
+ open:
+ - name: Sacer
+ optional: false
+ version: ''
+ versionMax: ''
+ versionMin: ''
+description:
+ it:
+ features:
+ - archiviazione documentale
+ genericName: DPI
+ longDescription: |
+ Il modulo software DPI (Dicom Preservation Interface) è un sistema di interfaccia tra i PACS dell’Ente produttore e PING
+ che può essere installato sia all’interno della rete del Sistema di conservazione, sia all’interno della rete dell'Ente produttore dove
+ può essere gestito secondo le proprie politiche di sicurezza e autenticarsi sul suo IdP. E' pensato per il versamento in conservazione
+ delle immagini diagnostiche in formato Dicom e dialoga con i Pacs utilizzando il medesimo protocollo.
+ shortDescription: |-
+ E' un'interfaccia che consente di versare in conservazione le immagini diagnostiche mediante l'utilizzo del protocollo DICOM, interfacciando i PACS con il modulo PING
+developmentStatus: stable
+intendedAudience:
+ countries:
+ - it
+it:
+ conforme:
+ gdpr: false
+ lineeGuidaDesign: false
+ misureMinimeSicurezza: false
+ modelloInteroperabilita: false
+ countryExtensionVersion: '0.2'
+ piattaforme:
+ anpr: false
+ cie: false
+ pagopa: false
+ spid: false
+ riuso:
+ codiceIPA: r_emiro
+landingURL: 'https://github.com/RegioneER/parer-dpi'
+legal:
+ license: AGPL-3.0-or-later
+ mainCopyrightOwner: Regione Emilia-Romagna
+ repoOwner: Regione Emilia-Romagna
+localisation:
+ availableLanguages:
+ - it
+ localisationReady: true
+logo: |-
+ https://raw.githubusercontent.com/RegioneER/parer-dpi/master/src/docs/rer-logo.png
+maintenance:
+ contacts:
+ - email: areasviluppoparer@regione.emilia-romagna.it
+ name: Cristiano Casagni
+ contractors:
+ - name: ' Engineering Ingegneria Informatica S.p.A.'
+ until: '2024-06-30'
+ type: contract
+name: Parer - DPI
+platforms:
+ - linux
+releaseDate: '2023-11-13'
+softwareType: standalone/backend
+url: 'https://github.com/RegioneER/parer-dpi.git'
+applicationSuite: SACER
diff --git a/src/docs/img/ricerca_diario.png b/src/docs/img/ricerca_diario.png
new file mode 100644
index 0000000..9e719ba
Binary files /dev/null and b/src/docs/img/ricerca_diario.png differ
diff --git a/src/docs/img/ricerca_diario2.png b/src/docs/img/ricerca_diario2.png
new file mode 100644
index 0000000..736979c
Binary files /dev/null and b/src/docs/img/ricerca_diario2.png differ
diff --git a/src/docs/img/ricerca_studi.png b/src/docs/img/ricerca_studi.png
new file mode 100644
index 0000000..60dcd51
Binary files /dev/null and b/src/docs/img/ricerca_studi.png differ
diff --git a/src/docs/img/ricerca_studi2.png b/src/docs/img/ricerca_studi2.png
new file mode 100644
index 0000000..3ceaed5
Binary files /dev/null and b/src/docs/img/ricerca_studi2.png differ
diff --git a/src/docs/rer-logo.png b/src/docs/rer-logo.png
new file mode 100644
index 0000000..6407fe6
Binary files /dev/null and b/src/docs/rer-logo.png differ
diff --git a/src/main/java/it/eng/dpi/business/impl/DPIAuthenticator.java b/src/main/java/it/eng/dpi/business/impl/DPIAuthenticator.java
index fdc79a4..fea36a4 100644
--- a/src/main/java/it/eng/dpi/business/impl/DPIAuthenticator.java
+++ b/src/main/java/it/eng/dpi/business/impl/DPIAuthenticator.java
@@ -21,20 +21,7 @@
*/
package it.eng.dpi.business.impl;
-import it.eng.dpi.component.DPIContext;
-import it.eng.dpi.web.util.Constants;
-import it.eng.integriam.client.util.UserUtil;
-import it.eng.integriam.client.ws.IAMSoapClients;
-import it.eng.integriam.client.ws.recauth.RecuperoAutorizzazioni;
-import it.eng.integriam.client.ws.recauth.RecuperoAutorizzazioniRisposta;
-import it.eng.integriam.client.ws.recauth.AuthWSException_Exception;
-
-import it.eng.spagoLite.SessionManager;
-import it.eng.spagoLite.security.User;
-import it.eng.spagoLite.security.auth.Authenticator;
-import it.eng.spagoLite.security.menu.impl.Link;
-import it.eng.spagoLite.security.menu.impl.Menu;
-
+import java.util.Calendar;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -45,6 +32,19 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import it.eng.dpi.component.DPIContext;
+import it.eng.dpi.component.Util;
+import it.eng.dpi.exception.AuthenticationException;
+import it.eng.dpi.web.util.Constants;
+import it.eng.integriam.client.util.UserUtil;
+import it.eng.integriam.client.ws.IAMSoapClients;
+import it.eng.integriam.client.ws.recauth.AuthWSException_Exception;
+import it.eng.integriam.client.ws.recauth.RecuperoAutorizzazioni;
+import it.eng.integriam.client.ws.recauth.RecuperoAutorizzazioniRisposta;
+import it.eng.spagoLite.SessionManager;
+import it.eng.spagoLite.security.User;
+import it.eng.spagoLite.security.auth.Authenticator;
+
/**
*
* @author Quaranta_M
@@ -52,8 +52,6 @@
@Component
public class DPIAuthenticator extends Authenticator {
- private static final Logger log = LoggerFactory.getLogger(DPIAuthenticator.class);
-
@Autowired
private DPIContext ctx;
@@ -77,6 +75,30 @@ public User recuperoAutorizzazioni(HttpSession httpSession) {
return utente;
}
+ public User doLogin(String user, String password) throws AuthenticationException {
+ String encHashedPwd = Util.encodePassword(password);
+ User utente = new User();
+ boolean authorized = false;
+ if (ctx.getAdminUser().equals(user) && ctx.getAdminPwd().equals(encHashedPwd)) {
+ authorized = true;
+ utente.setIdApplicazione(Long.valueOf(1));
+ }
+ if (!authorized) {
+ throw new AuthenticationException(
+ "Autenticazione fallita. Utente non abilitato all'applicativo " + Constants.DPI);
+ }
+ utente.setIdUtente(1);
+ Calendar c = Calendar.getInstance();
+ c.set(2444, 10, 10);
+ utente.setScadenzaPwd(c.getTime());
+ utente.setUsername(ctx.getAdminUser());
+ utente.setCognome(ctx.getAdminSurname());
+ utente.setNome(ctx.getAdminName());
+ utente.setAttivo(ctx.isAdminAttivo());
+
+ return utente;
+ }
+
@Override
protected String getAppName() {
return ctx.getNmApplic();
diff --git a/src/main/java/it/eng/dpi/component/Util.java b/src/main/java/it/eng/dpi/component/Util.java
index 20bfc30..7dce5a3 100644
--- a/src/main/java/it/eng/dpi/component/Util.java
+++ b/src/main/java/it/eng/dpi/component/Util.java
@@ -25,6 +25,9 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -37,12 +40,16 @@
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
+import org.apache.commons.codec.binary.Base64;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.input.CloseShieldInputStream;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.xadisk.bridge.proxies.interfaces.Session;
import org.xadisk.filesystem.exceptions.DirectoryNotEmptyException;
import org.xadisk.filesystem.exceptions.FileAlreadyExistsException;
@@ -53,9 +60,12 @@
import org.xadisk.filesystem.exceptions.NoTransactionAssociatedException;
import it.eng.dpi.exception.XAGenericException;
+import it.eng.dpi.service.DPIConstants;
public class Util {
+ private static final Logger log = LoggerFactory.getLogger(Util.class);
+
public static final String FILE_PREFIX = "tmp_dpi_";
private Util() {
@@ -447,4 +457,18 @@ public static long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
return timeUnit.convert(diffInMillies, TimeUnit.MILLISECONDS);
}
+ public static String encodePassword(String password) {
+ MessageDigest md = null;
+ try {
+ md = MessageDigest.getInstance(DPIConstants.HASH_ALGO);
+ md.update(password.getBytes(StandardCharsets.UTF_8), 0, password.length());
+ } catch (NoSuchAlgorithmException ex) {
+ log.error("Algoritmo " + DPIConstants.HASH_ALGO + "non supportato");
+ return StringUtils.EMPTY;
+ }
+ byte[] pwdHash = md.digest();
+ return new String(Base64.encodeBase64(pwdHash));
+
+ }
+
}
diff --git a/src/main/java/it/eng/dpi/controller/AppInfos.java b/src/main/java/it/eng/dpi/controller/AppInfos.java
new file mode 100644
index 0000000..f33883f
--- /dev/null
+++ b/src/main/java/it/eng/dpi/controller/AppInfos.java
@@ -0,0 +1,162 @@
+/*
+ * Engineering Ingegneria Informatica S.p.A.
+ *
+ * Copyright (C) 2023 Regione Emilia-Romagna
+ *
+ * This program is free software: you can redistribute it and/or modify it under the terms of
+ * the GNU Affero General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License along with this program.
+ * If not, see .
+ */
+
+package it.eng.dpi.controller;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import it.eng.dpi.business.impl.DPIAuthenticator;
+import it.eng.dpi.exception.AuthenticationException;
+import it.eng.spagoLite.security.User;
+
+@RestController
+@RequestMapping("/admin")
+public class AppInfos {
+
+ private static final Logger log = LoggerFactory.getLogger(AppInfos.class);
+
+ // constant
+ private static final String ROOT_GIT = "git";
+ private static final String ROOT_ENV = "env";
+ private static final String ROOT_SYSPROPS = "sysprops";
+ private static final String ETAG = "v1.0";
+ //
+ private static final String SYS_CONFIG_ROOT_TO_SKIP = "admin-appinfos.roottoskip";
+ private static final String SYS_CONFIG_PROP_TO_SKIP = "admin-appinfos.proptoskip";
+
+ private Properties gitproperties = null;
+
+ @Autowired
+ private DPIAuthenticator authenticator;
+
+ @PostConstruct
+ public void init() {
+ // custom
+ try (InputStream input = getClass().getResourceAsStream("/git.properties")) {
+ gitproperties = new Properties();
+ // load a properties file
+ gitproperties.load(input);
+ } catch (IOException e) {
+ log.error("Errore init", e);
+ }
+ }
+
+ @GetMapping(value = { "/infos.do" }, produces = MediaType.APPLICATION_JSON_VALUE)
+ public ResponseEntity