VaultUpdateConfigUtilities.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.pdd.config.vault.cli;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.openspcoop2.core.byok.BYOKUtilities;
import org.openspcoop2.core.byok.BYOKWrappedValue;
import org.openspcoop2.core.commons.CoreException;
import org.openspcoop2.core.commons.DBUtils;
import org.openspcoop2.core.constants.CostantiConnettori;
import org.openspcoop2.core.constants.CostantiDB;
import org.openspcoop2.core.constants.CostantiProprieta;
import org.openspcoop2.core.constants.ProprietariProtocolProperty;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
import org.openspcoop2.core.registry.driver.IDAccordoFactory;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.pdd.core.byok.DriverBYOK;
import org.openspcoop2.utils.TipiDatabase;
import org.openspcoop2.utils.UtilsException;
import org.openspcoop2.utils.io.Base64Utilities;
import org.openspcoop2.utils.jdbc.IJDBCAdapter;
import org.openspcoop2.utils.jdbc.JDBCAdapterFactory;
import org.openspcoop2.utils.jdbc.JDBCUtilities;
import org.openspcoop2.utils.resources.FileSystemUtilities;
import org.openspcoop2.utils.sql.ISQLQueryObject;
import org.openspcoop2.utils.sql.LikeConfig;
import org.openspcoop2.utils.sql.SQLObjectFactory;
import org.openspcoop2.utils.sql.SQLQueryObjectException;
/**
* VaultUpdateConfigUtilities
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class VaultUpdateConfigUtilities {
private VaultUpdateConfig config;
private DriverBYOK inDriverBYOK = null;
private DriverBYOK outDriverBYOK = null;
private String tipoDatabase;
private String driver;
private String username;
private String password;
private String connectionURL;
private static final String LOG_ORIG_SKIPPED = "\t!skyp! wrapped with other policy:";
private static final String LOG_ORIG_SKIPPED_NO_WRAPPED = "\t!skyp! no wrapped value:";
private static final String LOG_ORIG_SKIPPED_ALREADY_WRAPPED = "\t!skyp! already wrapped value:";
private static final String LOG_ORIG_SKIPPED_WITH_POLICY = "\t!skyp! wrapped with policy:";
private static final String LOG_ORIG = "\torig:";
private static final String LOG_NEW = "\tnew:";
private static final String LOG_ROW_UPDATE = "\trow-update:";
private static final String CONDITION_WHERE_ID = "id = ?";
private static final String CONDITION_JOIN_ID = ".id = ";
private static final String ALIAS_PLAIN_VALUE = "plainValue";
private static final String ALIAS_ENC_VALUE = "encValue";
public VaultUpdateConfigUtilities(VaultUpdateConfig config) {
this.config = config;
}
public void process() throws CoreException {
try {
VaultTools.logCoreDebug("Inizializzazione connessione database in corso...");
VaultDatabaseProperties databaseProperties = VaultDatabaseProperties.getInstance();
this.tipoDatabase = databaseProperties.getTipoDatabase();
this.driver = databaseProperties.getDriver();
this.username = databaseProperties.getUsername();
this.password = databaseProperties.getPassword();
this.connectionURL = databaseProperties.getConnectionUrl();
VaultTools.logCoreDebug("Inizializzazione connessione database terminata");
VaultTools.logCoreDebug("Inizializzazione driver ...");
if(this.config.isInSecurityMode()) {
this.inDriverBYOK = new DriverBYOK(VaultTools.getLogCore(), this.config.getInId(), this.config.getInId());
}
if(this.config.isOutSecurityMode()) {
this.outDriverBYOK = new DriverBYOK(VaultTools.getLogCore(), this.config.getOutId(), this.config.getOutId());
}
VaultTools.logCoreDebug("Inizializzazione driver terminata");
StringBuilder output = null;
if(this.config.getReportPath()!=null) {
output = new StringBuilder();
}
processConnettori(output);
processServiziApplicativi(output);
processSecurity(output);
processGenericProperties(output);
processProtocolProperties(output);
processProperties(output); // lasciare in fondo in modo da non gestire nuovamente le proprietà di sicurezza
if(this.config.getReportPath()!=null && output!=null) {
FileSystemUtilities.writeFile(this.config.getReportPath(), output.toString().getBytes());
}
}
catch(Exception t) {
VaultTools.logCoreError(t.getMessage(),t);
throw new CoreException(t.getMessage(),t);
}
}
private void processConnettori(StringBuilder output) throws CoreException {
VaultTools.logCoreDebug("Conversione connettori ...");
if(output!=null) {
if(output.length()>0) {
output.append("\n\n");
}
output.append("=== Connettori ===\n\n");
}
updateConnettori("password", "enc_password", output);
updateConnettori("proxy_password", "enc_proxy_password", output);
updateConnettori("api_key", null, output);
if(output!=null) {
output.append("\n\n");
output.append("=== Connettori Custom ===\n\n");
}
for (String nomeProprieta : CostantiConnettori.getConfidentials()) {
updateConnettoriCustom(nomeProprieta, output);
}
VaultTools.logCoreDebug("Conversione connettori terminata");
}
private void processServiziApplicativi(StringBuilder output) throws CoreException {
VaultTools.logCoreDebug("Conversione applicativi ...");
if(output!=null) {
if(output.length()>0) {
output.append("\n\n");
}
output.append("=== Applicativi ===\n\n");
}
updateServiziApplicativi("passwordrisp", "enc_passwordrisp", output);
updateServiziApplicativi("passwordinv", "enc_passwordinv", output);
VaultTools.logCoreDebug("Conversione applicativi terminata");
}
private void processSecurity(StringBuilder output) throws CoreException {
VaultTools.logCoreDebug("Conversione message security ...");
List<String> messageSecurityIds = CostantiProprieta.getMessageSecurityIds();
processSecurityFruizioni(messageSecurityIds, output);
processSecurityErogazioni(messageSecurityIds, output);
VaultTools.logCoreDebug("Conversione message security terminata");
}
private void processSecurityFruizioni(List<String> messageSecurityIds, StringBuilder output) throws CoreException {
if(output!=null) {
if(output.length()>0) {
output.append("\n\n");
}
output.append("=== Message Security (Fruizioni request-flow) ===\n\n");
}
processSecurity(
messageSecurityIds, output,
CostantiDB.PORTE_DELEGATE, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST,
CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST_COLUMN_NOME, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST_COLUMN_ENC_VALUE);
if(output!=null) {
output.append("\n\n");
output.append("=== Message Security (Fruizioni response-flow) ===\n\n");
}
processSecurity(
messageSecurityIds, output,
CostantiDB.PORTE_DELEGATE, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE,
CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE_COLUMN_NOME, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE_COLUMN_ENC_VALUE);
}
private void processSecurityErogazioni(List<String> messageSecurityIds, StringBuilder output) throws CoreException {
if(output!=null) {
output.append("\n\n");
output.append("=== Message Security (Erogazioni request-flow) ===\n\n");
}
processSecurity(
messageSecurityIds, output,
CostantiDB.PORTE_APPLICATIVE, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST,
CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST_COLUMN_NOME, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST_COLUMN_ENC_VALUE);
if(output!=null) {
output.append("\n\n");
output.append("=== Message Security (Erogazioni response-flow) ===\n\n");
}
processSecurity(
messageSecurityIds, output,
CostantiDB.PORTE_APPLICATIVE, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE,
CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE_COLUMN_NOME, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE_COLUMN_ENC_VALUE);
}
private void processSecurity(List<String> messageSecurityIds, StringBuilder output,
String tabellaPadre, String tabella,
String nomeColonnaNomeProprieta, String nomeColonnaPlain, String nomeColonnaCodificata) throws CoreException {
if(messageSecurityIds!=null && !messageSecurityIds.isEmpty()) {
List<String> lnomiProp = new ArrayList<>();
for (String id : messageSecurityIds) {
List<String> l = CostantiProprieta.getMessageSecurityProperties(id);
for (String nomeProprieta : l) {
if(!lnomiProp.contains(nomeProprieta)) {
lnomiProp.add(nomeProprieta);
}
}
}
for (String nomeProprieta : lnomiProp) {
updateMessageSecurity(tabellaPadre, tabella,
nomeColonnaNomeProprieta, nomeColonnaPlain, nomeColonnaCodificata,
nomeProprieta, output);
}
}
}
private void processGenericProperties(StringBuilder output) throws CoreException {
VaultTools.logCoreDebug("Conversione generic properties ...");
if(output!=null) {
if(output.length()>0) {
output.append("\n\n");
}
output.append("=== TokenPolicy Validazione ===\n\n");
}
for (String nomeProprieta : CostantiProprieta.getTokenValidationProperties()) {
updateGenericProperties(CostantiProprieta.TOKEN_VALIDATION_ID, nomeProprieta, output);
}
if(output!=null) {
output.append("\n\n");
output.append("=== TokenPolicy Negoziazione ===\n\n");
}
for (String nomeProprieta : CostantiProprieta.getTokenRetrieveProperties()) {
updateGenericProperties(CostantiProprieta.TOKEN_NEGOZIAZIONE_ID, nomeProprieta, output);
}
if(output!=null) {
output.append("\n\n");
output.append("=== Attribute Authority ===\n\n");
}
for (String nomeProprieta : CostantiProprieta.getAttributeAuthorityProperties()) {
updateGenericProperties(CostantiProprieta.ATTRIBUTE_AUTHORITY_ID, nomeProprieta, output);
}
VaultTools.logCoreDebug("Conversione generic properties terminata");
}
private void processProtocolProperties(StringBuilder output) throws CoreException {
VaultTools.logCoreDebug("Conversione protocol properties ...");
if(output!=null) {
if(output.length()>0) {
output.append("\n\n");
}
output.append("=== ProtocolProperties ===\n\n");
}
// DBProtocolPropertiesUtils.getProtocolPropertiesConfidentials()
// Non uso questo metodo poichè viene inizializzato dalla ModI Factory e nel vault non viene usato alcun protocollo
updateProtocolProperties(CostantiDB.MODIPA_KEYSTORE_PASSWORD, false, output);
updateProtocolProperties(CostantiDB.MODIPA_KEY_PASSWORD, false, output);
updateProtocolProperties(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_CERTIFICATI_TRUSTSTORE_PASSWORD, false, output);
updateProtocolProperties(CostantiDB.MODIPA_PROFILO_SICUREZZA_MESSAGGIO_SSL_TRUSTSTORE_PASSWORD, false, output);
updateProtocolProperties(CostantiDB.MODIPA_KEYSTORE_ARCHIVE, true, output);
VaultTools.logCoreDebug("Conversione protocol properties terminata");
}
private void processProperties(StringBuilder output) throws CoreException {
VaultTools.logCoreDebug("Conversione properties ...");
if(output!=null) {
if(output.length()>0) {
output.append("\n\n");
}
output.append("=== Soggetti properties ===\n\n");
}
updateProperties(CostantiDB.SOGGETTI_PROPS, CostantiDB.SOGGETTI_PROPS_COLUMN_NAME, CostantiDB.SOGGETTI_PROPS_COLUMN_VALUE, CostantiDB.SOGGETTI_PROPS_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Applicativi properties ===\n\n");
}
updateProperties(CostantiDB.SERVIZI_APPLICATIVI_PROPS, CostantiDB.SERVIZI_APPLICATIVI_PROPS_COLUMN_NOME, CostantiDB.SERVIZI_APPLICATIVI_PROPS_COLUMN_VALUE, CostantiDB.SERVIZI_APPLICATIVI_PROPS_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Configurazione properties ===\n\n");
}
updateProperties(CostantiDB.SYSTEM_PROPERTIES_PDD, CostantiDB.SYSTEM_PROPERTIES_PDD_COLUMN_NOME, CostantiDB.SYSTEM_PROPERTIES_PDD_COLUMN_VALUE, CostantiDB.SYSTEM_PROPERTIES_PDD_COLUMN_ENC_VALUE, output,
false, false);
processErogazioniProperties(output);
processFruizioniProperties(output);
VaultTools.logCoreDebug("Conversione properties terminata");
}
private void processErogazioniProperties(StringBuilder output) throws CoreException {
if(output!=null) {
output.append("\n\n");
output.append("=== Erogazioni message security request properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST_COLUMN_NOME,
CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST_COLUMN_ENC_VALUE, output,
true, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Erogazioni message security response properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE_COLUMN_NOME,
CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE_COLUMN_ENC_VALUE, output,
false, true);
if(output!=null) {
output.append("\n\n");
output.append("=== Erogazioni autenticazione properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_APPLICATIVE_AUTENTICAZIONE_PROP, CostantiDB.PORTE_APPLICATIVE_AUTENTICAZIONE_PROP_COLUMN_NOME,
CostantiDB.PORTE_APPLICATIVE_AUTENTICAZIONE_PROP_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_AUTENTICAZIONE_PROP_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Erogazioni autorizzazione properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_PROP, CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_PROP_COLUMN_NOME,
CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_PROP_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_PROP_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Erogazioni autorizzazione contenuti properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_CONTENUTI_PROP, CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_CONTENUTI_PROP_COLUMN_NOME,
CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_CONTENUTI_PROP_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_CONTENUTI_PROP_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Erogazioni properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_APPLICATIVE_PROP, CostantiDB.PORTE_APPLICATIVE_PROP_COLUMN_NOME,
CostantiDB.PORTE_APPLICATIVE_PROP_COLUMN_VALORE, CostantiDB.PORTE_APPLICATIVE_PROP_COLUMN_ENC_VALUE, output,
false, false);
}
private void processFruizioniProperties(StringBuilder output) throws CoreException {
if(output!=null) {
output.append("\n\n");
output.append("=== Fruizioni message security request properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST_COLUMN_NOME,
CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST_COLUMN_ENC_VALUE, output,
true, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Fruizioni message security response properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE_COLUMN_NOME,
CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE_COLUMN_ENC_VALUE, output,
false, true);
if(output!=null) {
output.append("\n\n");
output.append("=== Fruizioni autenticazione properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_DELEGATE_AUTENTICAZIONE_PROP, CostantiDB.PORTE_DELEGATE_AUTENTICAZIONE_PROP_COLUMN_NOME,
CostantiDB.PORTE_DELEGATE_AUTENTICAZIONE_PROP_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_AUTENTICAZIONE_PROP_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Fruizioni autorizzazione properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_PROP, CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_PROP_COLUMN_NOME,
CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_PROP_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_PROP_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Fruizioni autorizzazione contenuti properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_CONTENUTI_PROP, CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_CONTENUTI_PROP_COLUMN_NOME,
CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_CONTENUTI_PROP_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_CONTENUTI_PROP_COLUMN_ENC_VALUE, output,
false, false);
if(output!=null) {
output.append("\n\n");
output.append("=== Fruizioni properties ===\n\n");
}
updateProperties(CostantiDB.PORTE_DELEGATE_PROP, CostantiDB.PORTE_DELEGATE_PROP_COLUMN_NOME,
CostantiDB.PORTE_DELEGATE_PROP_COLUMN_VALORE, CostantiDB.PORTE_DELEGATE_PROP_COLUMN_ENC_VALUE, output,
false, false);
}
// UTILS
private Connection getConnection() throws ClassNotFoundException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, SQLException {
Connection connectionSQL = null;
org.openspcoop2.utils.resources.Loader.getInstance().newInstance(this.driver);
if(this.username!=null && this.password!=null){
connectionSQL = DriverManager.getConnection(this.connectionURL,this.username,this.password);
}else{
connectionSQL = DriverManager.getConnection(this.connectionURL);
}
return connectionSQL;
}
private void closeConnection(Connection connectionSQL) {
if(connectionSQL!=null) {
try {
connectionSQL.close();
}catch(Exception e) {
// ignore
}
}
}
private void skip(StringBuilder output, String prefix, String value, boolean wrapped) {
if(output!=null) {
output.append(prefix).append("\n");
output.append(wrapped ? LOG_ORIG_SKIPPED : LOG_ORIG_SKIPPED_NO_WRAPPED).append(value).append("\n");
}
}
private void skipWithPolicy(StringBuilder output, String prefix, String value) {
if(output!=null) {
output.append(prefix).append("\n");
output.append(LOG_ORIG_SKIPPED_WITH_POLICY).append(value).append("\n");
}
}
private void skipAlreadyWrapped(StringBuilder output, String prefix, String value) {
if(output!=null) {
output.append(prefix).append("\n");
output.append(LOG_ORIG_SKIPPED_ALREADY_WRAPPED).append(value).append("\n");
}
}
private void updateValue(Connection connectionSQL, ResultSet rs, String nomeColonna,
String prefix, StringBuilder output,
VaultUpdateConfigValue c) throws UtilsException, SQLException, SQLQueryObjectException {
String plainStringValue = rs.getString(nomeColonna);
String updatedValue = null;
if(this.inDriverBYOK!=null &&
plainStringValue!=null && StringUtils.isNotEmpty(plainStringValue)) {
if(BYOKUtilities.isWrappedValue(plainStringValue)) {
if(this.inDriverBYOK.isWrappedWithInternalPolicy(plainStringValue)) {
updatedValue = this.inDriverBYOK.unwrapAsString(plainStringValue);
}
else {
// trovato un valore cifrato con una security policy differente ?
// non effettua il wrap anche se richiesto
skip(output, prefix, plainStringValue, true);
return;
}
}
else {
// trovato un valore non cifrato con una security policy
// non effettua il wrap anche se richiesto
skip(output, prefix, plainStringValue, false);
return;
}
}
else {
if(plainStringValue!=null && StringUtils.isNotEmpty(plainStringValue) && BYOKUtilities.isWrappedValue(plainStringValue)) {
// trovato un valore cifrato con una security policy, non devo quindi considerarlo
skipWithPolicy(output, prefix, plainStringValue);
return;
}
}
if(this.outDriverBYOK!=null || updatedValue!=null) {
updateValue(connectionSQL, output,
plainStringValue, updatedValue,
c, prefix);
}
}
private void updateValue(Connection connectionSQL, StringBuilder output,
String plainStringValue, String updatedValue,
VaultUpdateConfigValue c, String prefix) throws SQLQueryObjectException, SQLException, UtilsException {
if(this.outDriverBYOK!=null) {
String v = updatedValue!=null ? updatedValue : plainStringValue;
if(this.outDriverBYOK.isWrappedWithInternalPolicy(v)) {
// Il valore di destinazione risulta già cifrato con la policy richiesta
skipAlreadyWrapped(output, prefix, v);
return;
}
}
if(output!=null) {
output.append(prefix).append("\n");
output.append(LOG_ORIG).append(plainStringValue).append("\n");
}
updateValue(connectionSQL, output,
plainStringValue, updatedValue,
c);
if(output!=null) {
output.append("\n\n");
}
}
private void updateValue(Connection connectionSQL, StringBuilder output,
String plainStringValue, String updatedValue,
VaultUpdateConfigValue updateConfig) throws SQLQueryObjectException, SQLException, UtilsException {
PreparedStatement stmUpdate = null;
try {
BYOKWrappedValue wrappedValue =null;
if(this.outDriverBYOK!=null) {
wrappedValue = this.outDriverBYOK.wrap(updatedValue!=null ? updatedValue : plainStringValue);
}
ISQLQueryObject sqlQueryObjectUpdate = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObjectUpdate.addUpdateTable(updateConfig.tabella);
sqlQueryObjectUpdate.addUpdateField(updateConfig.nomeColonna, "?");
sqlQueryObjectUpdate.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObjectUpdate.setANDLogicOperator(true);
String sqlUpdate = sqlQueryObjectUpdate.createSQLUpdate();
stmUpdate = connectionSQL.prepareStatement(sqlUpdate);
int index = 1;
if(wrappedValue!=null) {
stmUpdate.setString(index++, wrappedValue.getWrappedValue());
if(output!=null) {
output.append(LOG_NEW).append(wrappedValue.getWrappedValue()).append("\n");
}
}
else {
stmUpdate.setString(index++, updatedValue);
if(output!=null) {
output.append(LOG_NEW).append(updatedValue).append("\n");
}
}
stmUpdate.setLong(index++, updateConfig.id);
int row = stmUpdate.executeUpdate();
if(output!=null) {
output.append(LOG_ROW_UPDATE).append(row).append("\n");
}
stmUpdate.close();
} finally {
JDBCUtilities.closeResources(stmUpdate);
}
}
private void updatePlainEncValue(Connection connectionSQL, ResultSet rs, String nomeColonnaPlain, String nomeColonnaCodificata,
String prefix, StringBuilder output,
VaultUpdateConfigPlainEnc c) throws UtilsException, SQLException, SQLQueryObjectException {
String plainStringValue = rs.getString(nomeColonnaPlain);
String encStringValue = rs.getString(nomeColonnaCodificata);
String updatedValue = null;
if(this.inDriverBYOK!=null) {
if(encStringValue!=null && StringUtils.isNotEmpty(encStringValue)) {
if(this.inDriverBYOK.isWrappedWithInternalPolicy(encStringValue)) {
updatedValue = this.inDriverBYOK.unwrapAsString(encStringValue);
}
else {
// trovato un valore cifrato con una security policy differente ?
// non effettua il wrap anche se richiesto
skip(output, prefix, encStringValue, true);
return;
}
}
else {
// trovato un valore non cifrato con una security policy
// non effettua il wrap anche se richiesto
skip(output, prefix, plainStringValue, false);
return;
}
}
else {
if(encStringValue!=null && StringUtils.isNotEmpty(encStringValue)) {
// trovato un valore cifrato con una security policy, non devo quindi considerarlo
skipWithPolicy(output, prefix, encStringValue);
return;
}
}
if(this.outDriverBYOK!=null || updatedValue!=null) {
updatePlainEncValue(connectionSQL, output,
plainStringValue, encStringValue, updatedValue,
c, prefix);
}
}
private void updatePlainEncValue(Connection connectionSQL, StringBuilder output,
String plainStringValue, String encStringValue, String updatedValue,
VaultUpdateConfigPlainEnc c, String prefix) throws SQLQueryObjectException, SQLException, UtilsException {
if(this.outDriverBYOK!=null) {
String v = updatedValue!=null ? updatedValue : plainStringValue;
if(this.outDriverBYOK.isWrappedWithInternalPolicy(v)) {
// Il valore di destinazione risulta già cifrato con la policy richiesta
skipAlreadyWrapped(output, prefix, v);
return;
}
}
if(output!=null) {
output.append(prefix).append("\n");
output.append(LOG_ORIG).append(encStringValue!=null && StringUtils.isNotEmpty(encStringValue) ? encStringValue : plainStringValue).append("\n");
}
updatePlainEncValue(connectionSQL, output,
plainStringValue, updatedValue,
c);
if(output!=null) {
output.append("\n\n");
}
}
private void updatePlainEncValue(Connection connectionSQL, StringBuilder output,
String plainStringValue, String updatedValue,
VaultUpdateConfigPlainEnc plainEncConfig) throws SQLQueryObjectException, SQLException, UtilsException {
PreparedStatement stmUpdate = null;
try {
BYOKWrappedValue wrappedValue =null;
if(this.outDriverBYOK!=null) {
wrappedValue = this.outDriverBYOK.wrap(updatedValue!=null ? updatedValue : plainStringValue);
}
ISQLQueryObject sqlQueryObjectUpdate = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObjectUpdate.addUpdateTable(plainEncConfig.tabella);
sqlQueryObjectUpdate.addUpdateField(plainEncConfig.nomeColonnaPlain, "?");
sqlQueryObjectUpdate.addUpdateField(plainEncConfig.nomeColonnaCodificata, "?");
sqlQueryObjectUpdate.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObjectUpdate.setANDLogicOperator(true);
String sqlUpdate = sqlQueryObjectUpdate.createSQLUpdate();
stmUpdate = connectionSQL.prepareStatement(sqlUpdate);
int index = 1;
if(wrappedValue!=null) {
stmUpdate.setString(index++, wrappedValue.getWrappedPlainValue());
stmUpdate.setString(index++, wrappedValue.getWrappedValue());
if(output!=null) {
output.append(LOG_NEW).append(wrappedValue.getWrappedValue()).append("\n");
}
}
else {
stmUpdate.setString(index++, updatedValue);
stmUpdate.setString(index++, null);
if(output!=null) {
output.append(LOG_NEW).append(updatedValue).append("\n");
}
}
stmUpdate.setLong(index++, plainEncConfig.id);
int row = stmUpdate.executeUpdate();
if(output!=null) {
output.append(LOG_ROW_UPDATE).append(row).append("\n");
}
stmUpdate.close();
} finally {
JDBCUtilities.closeResources(stmUpdate);
}
}
private void updateBinaryProtocolProperty(IJDBCAdapter jdbcAdapter, Connection connectionSQL, ResultSet rs, String nomeColonna,
String prefix, StringBuilder output,
VaultUpdateConfigValue c) throws UtilsException, SQLException, SQLQueryObjectException {
byte[]binaryValue = jdbcAdapter.getBinaryData(rs,nomeColonna);
byte[]updateValue = null;
if(this.inDriverBYOK!=null &&
binaryValue!=null && binaryValue.length>0) {
if(BYOKUtilities.isWrappedValue(binaryValue)) {
if(this.inDriverBYOK.isWrappedWithInternalPolicy(binaryValue)) {
updateValue = this.inDriverBYOK.unwrap(binaryValue);
}
else {
// trovato un valore cifrato con una security policy differente ?
// non effettua il wrap anche se richiesto
skip(output, prefix, BYOKUtilities.extractPrefixWrappedValue(binaryValue), true);
return;
}
}
else {
// trovato un valore non cifrato con una security policy
// non effettua il wrap anche se richiesto
skip(output, prefix, "--binary-value--", false);
return;
}
}
else {
if(binaryValue!=null && binaryValue.length>0 && BYOKUtilities.isWrappedValue(binaryValue)) {
// trovato un valore cifrato con una security policy, non devo quindi considerarlo
skipWithPolicy(output, prefix, BYOKUtilities.extractPrefixWrappedValue(binaryValue));
return;
}
}
if(this.outDriverBYOK!=null || updateValue!=null) {
updateBinaryValue(jdbcAdapter, connectionSQL, output,
binaryValue, updateValue,
c, prefix);
}
}
private void updateBinaryValue(IJDBCAdapter jdbcAdapter, Connection connectionSQL, StringBuilder output,
byte[]binaryValue, byte[]updateValue,
VaultUpdateConfigValue c, String prefix) throws UtilsException, SQLQueryObjectException, SQLException {
if(this.outDriverBYOK!=null) {
byte[] v = updateValue!=null ? updateValue : binaryValue;
if(this.outDriverBYOK.isWrappedWithInternalPolicy(v)) {
// Il valore di destinazione risulta già cifrato con la policy richiesta
skipAlreadyWrapped(output, prefix, BYOKUtilities.extractPrefixWrappedValue(v));
return;
}
}
if(output!=null) {
output.append(prefix).append("\n");
String base64 = Base64Utilities.encodeAsString(binaryValue);
output.append(LOG_ORIG).append(base64).append("\n");
}
updateBinaryValue(jdbcAdapter, connectionSQL, output,
binaryValue, updateValue,
c);
if(output!=null) {
output.append("\n\n");
}
}
private void updateBinaryValue(IJDBCAdapter jdbcAdapter, Connection connectionSQL, StringBuilder output,
byte[]binaryValue, byte[]updateValue,
VaultUpdateConfigValue binaryConfig) throws UtilsException, SQLQueryObjectException, SQLException {
PreparedStatement stmUpdate = null;
try {
BYOKWrappedValue wrappedValue =null;
if(this.outDriverBYOK!=null) {
wrappedValue = this.outDriverBYOK.wrap(updateValue!=null ? updateValue : binaryValue);
}
ISQLQueryObject sqlQueryObjectUpdate = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObjectUpdate.addUpdateTable(binaryConfig.tabella);
sqlQueryObjectUpdate.addUpdateField(binaryConfig.nomeColonna, "?");
sqlQueryObjectUpdate.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObjectUpdate.setANDLogicOperator(true);
String sqlUpdate = sqlQueryObjectUpdate.createSQLUpdate();
stmUpdate = connectionSQL.prepareStatement(sqlUpdate);
int index = 1;
if(wrappedValue!=null) {
jdbcAdapter.setBinaryData(stmUpdate,index++,wrappedValue.getWrappedValue().getBytes());
if(output!=null) {
String base64 = Base64Utilities.encodeAsString(wrappedValue.getWrappedValue().getBytes());
output.append(LOG_NEW).append(base64).append("\n");
}
}
else {
jdbcAdapter.setBinaryData(stmUpdate,index++,updateValue);
if(output!=null) {
String base64 = Base64Utilities.encodeAsString(updateValue);
output.append(LOG_NEW).append(base64).append("\n");
}
}
stmUpdate.setLong(index++, binaryConfig.id);
int row = stmUpdate.executeUpdate();
if(output!=null) {
output.append(LOG_ROW_UPDATE).append(row).append("\n");
}
stmUpdate.close();
} finally {
JDBCUtilities.closeResources(stmUpdate);
}
}
// CONNETTORI
private void updateConnettori(String nomeColonnaPlain, String nomeColonnaCodificata, StringBuilder output) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.CONNETTORI);
sqlQueryObject.addWhereIsNotNullCondition(nomeColonnaPlain);
if(!TipiDatabase.ORACLE.equals(this.tipoDatabase)) {
// In oracle le stringhe vuote equivalgono a null
sqlQueryObject.addWhereIsNotEmptyCondition(nomeColonnaPlain);
}
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addOrderBy(CostantiDB.CONNETTORI_COLUMN_NOME);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
rs = stmRead.executeQuery();
while(rs.next()){
long id = rs.getLong("id");
String nomeConnettore = rs.getString(CostantiDB.CONNETTORI_COLUMN_NOME);
String endpointtype = rs.getString(CostantiDB.CONNETTORI_COLUMN_ENDPOINT_TYPE);
String prefix = "["+nomeConnettore+"][tipoConnettore:"+endpointtype+"][idConnettore:"+id+"] '"+nomeColonnaPlain+"' ";
if(nomeColonnaCodificata!=null) {
VaultUpdateConfigPlainEnc c = new VaultUpdateConfigPlainEnc();
c.tabella = CostantiDB.CONNETTORI;
c.nomeColonnaPlain = nomeColonnaPlain;
c.nomeColonnaCodificata = nomeColonnaCodificata;
c.id = id;
updatePlainEncValue(connectionSQL, rs, nomeColonnaPlain, nomeColonnaCodificata,
prefix, output,
c);
}
else {
VaultUpdateConfigValue c = new VaultUpdateConfigValue();
c.tabella = CostantiDB.CONNETTORI;
c.nomeColonna = nomeColonnaPlain;
c.id = id;
updateValue(connectionSQL, rs, nomeColonnaPlain,
prefix, output,
c);
}
}
} catch (Exception se) {
throw new CoreException("[updateConnettori] failed: " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
private void updateConnettoriCustom(String nomeProprieta, StringBuilder output) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
String aliasIdConnettore = "idCon";
String aliasNomeConnettore = "nomeCon";
String aliasTipoConnettore = "tipoCon";
String aliasIdConnettoreCustsom = "idConCustom";
String aliasNomeConnettoreCustsom = "nomeConCustom";
String aliasPlanValueConnettoreCustsom = "plainConCustom";
String aliasEncValueConnettoreCustsom = "encConCustom";
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.CONNETTORI);
sqlQueryObject.addFromTable(CostantiDB.CONNETTORI_CUSTOM);
sqlQueryObject.addSelectAliasField(CostantiDB.CONNETTORI, CostantiDB.CONNETTORI_COLUMN_NOME, aliasNomeConnettore);
sqlQueryObject.addSelectAliasField(CostantiDB.CONNETTORI, CostantiDB.CONNETTORI_COLUMN_ENDPOINT_TYPE, aliasTipoConnettore);
sqlQueryObject.addSelectAliasField(CostantiDB.CONNETTORI, "id", aliasIdConnettore);
sqlQueryObject.addSelectAliasField(CostantiDB.CONNETTORI_CUSTOM, "id", aliasIdConnettoreCustsom);
sqlQueryObject.addSelectAliasField(CostantiDB.CONNETTORI_CUSTOM, CostantiDB.CONNETTORI_CUSTOM_COLUMN_NAME, aliasNomeConnettoreCustsom);
sqlQueryObject.addSelectAliasField(CostantiDB.CONNETTORI_CUSTOM, CostantiDB.CONNETTORI_CUSTOM_COLUMN_VALUE, aliasPlanValueConnettoreCustsom);
sqlQueryObject.addSelectAliasField(CostantiDB.CONNETTORI_CUSTOM, CostantiDB.CONNETTORI_CUSTOM_COLUMN_ENC_VALUE, aliasEncValueConnettoreCustsom);
sqlQueryObject.addWhereCondition(CostantiDB.CONNETTORI+CONDITION_JOIN_ID+CostantiDB.CONNETTORI_CUSTOM+"."+CostantiDB.CONNETTORI_CUSTOM_COLUMN_ID_CONNETTORE);
sqlQueryObject.addWhereCondition(CostantiDB.CONNETTORI_CUSTOM+"."+CostantiDB.CONNETTORI_CUSTOM_COLUMN_NAME+"=?");
sqlQueryObject.addWhereIsNotNullCondition(CostantiDB.CONNETTORI_CUSTOM+"."+CostantiDB.CONNETTORI_CUSTOM_COLUMN_VALUE);
if(!TipiDatabase.ORACLE.equals(this.tipoDatabase)) {
// In oracle le stringhe vuote equivalgono a null
sqlQueryObject.addWhereIsNotEmptyCondition(CostantiDB.CONNETTORI_CUSTOM+"."+CostantiDB.CONNETTORI_CUSTOM_COLUMN_VALUE);
}
sqlQueryObject.addWhereCondition(true, true, CostantiDB.CONNETTORI_CUSTOM+"."+CostantiDB.CONNETTORI_CUSTOM_COLUMN_VALUE+"='"+CostantiDB.MODIPA_VALUE_UNDEFINED+"'"); // vale anche per security properties
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addOrderBy(CostantiDB.CONNETTORI_COLUMN_NOME);
sqlQueryObject.setSelectDistinct(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
stmRead.setString(1, nomeProprieta);
rs = stmRead.executeQuery();
while(rs.next()){
long idCustom = rs.getLong(aliasIdConnettoreCustsom);
long idConnettore = rs.getLong(aliasIdConnettore);
String nomeConnettore = rs.getString(aliasNomeConnettore);
String endpointtype = rs.getString(aliasTipoConnettore);
String prefix = "["+nomeConnettore+"][tipoConnettore:"+endpointtype+"][idConnettore:"+idConnettore+"][idCustomProp:"+idCustom+"] '"+nomeProprieta+"' ";
VaultUpdateConfigPlainEnc c = new VaultUpdateConfigPlainEnc();
c.tabella = CostantiDB.CONNETTORI_CUSTOM;
c.nomeColonnaPlain = CostantiDB.CONNETTORI_CUSTOM_COLUMN_VALUE;
c.nomeColonnaCodificata = CostantiDB.CONNETTORI_CUSTOM_COLUMN_ENC_VALUE;
c.id = idCustom;
updatePlainEncValue(connectionSQL, rs, aliasPlanValueConnettoreCustsom, aliasEncValueConnettoreCustsom,
prefix, output,
c);
}
} catch (Exception se) {
throw new CoreException("[updateConnettoriCustom] failed: " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
// SERVIZI APPLICATIVI
private void updateServiziApplicativi(String nomeColonnaPlain, String nomeColonnaCodificata, StringBuilder output) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
String aliasNomeSA = "nomeSA";
String aliasTipoSoggetto = "tipoSogg";
String aliasNomeSoggetto = "nomeSogg";
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "id", "idSA");
sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "nome", aliasNomeSA);
sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, "tipo", "tipoSA");
sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI, "tipo_soggetto", aliasTipoSoggetto);
sqlQueryObject.addSelectAliasField(CostantiDB.SOGGETTI, "nome_soggetto", aliasNomeSoggetto);
sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, nomeColonnaPlain, ALIAS_PLAIN_VALUE);
sqlQueryObject.addSelectAliasField(CostantiDB.SERVIZI_APPLICATIVI, nomeColonnaCodificata, ALIAS_ENC_VALUE);
sqlQueryObject.addWhereCondition(CostantiDB.SERVIZI_APPLICATIVI+".id_soggetto = "+CostantiDB.SOGGETTI+".id");
sqlQueryObject.addWhereIsNotNullCondition(nomeColonnaPlain);
if(!TipiDatabase.ORACLE.equals(this.tipoDatabase)) {
// In oracle le stringhe vuote equivalgono a null
sqlQueryObject.addWhereIsNotEmptyCondition(nomeColonnaPlain);
}
sqlQueryObject.addOrderBy(aliasTipoSoggetto);
sqlQueryObject.addOrderBy(aliasNomeSoggetto);
sqlQueryObject.addOrderBy(aliasNomeSA);
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.setSelectDistinct(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
rs = stmRead.executeQuery();
while(rs.next()){
long idSA = rs.getLong("idSA");
String nome = rs.getString(aliasNomeSA);
String tipo = rs.getString("tipoSA");
String tipoSoggetto = rs.getString(aliasTipoSoggetto);
String nomeSoggetto = rs.getString(aliasNomeSoggetto);
String prefix = "["+nome+"][soggetto:"+tipoSoggetto+"/"+nomeSoggetto+"][tipoSA:"+tipo+"][idSA:"+idSA+"] '"+nomeColonnaPlain+"' ";
VaultUpdateConfigPlainEnc c = new VaultUpdateConfigPlainEnc();
c.tabella = CostantiDB.SERVIZI_APPLICATIVI;
c.nomeColonnaPlain = nomeColonnaPlain;
c.nomeColonnaCodificata = nomeColonnaCodificata;
c.id = idSA;
updatePlainEncValue(connectionSQL, rs, ALIAS_PLAIN_VALUE, ALIAS_ENC_VALUE,
prefix, output,
c);
}
} catch (Exception se) {
throw new CoreException("[updateServiziApplicativi] failed: " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
// MESSAGE SECURITY
private void updateMessageSecurity(String tabellaPadre, String tabella,
String nomeColonnaNomeProprieta, String nomeColonnaPlain, String nomeColonnaCodificata,
String nomeProprieta, StringBuilder output) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
String aliasIdSecProp = "idSecProp";
String aliasIdPorta = "idP";
String aliasNomePorta = "nomeP";
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(tabellaPadre);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addSelectAliasField(tabellaPadre, "id", aliasIdPorta);
sqlQueryObject.addSelectAliasField(tabellaPadre, "nome_porta", aliasNomePorta);
sqlQueryObject.addSelectAliasField(tabella, "id", aliasIdSecProp);
sqlQueryObject.addSelectAliasField(tabella, nomeColonnaPlain, ALIAS_PLAIN_VALUE);
sqlQueryObject.addSelectAliasField(tabella, nomeColonnaCodificata, ALIAS_ENC_VALUE);
sqlQueryObject.addWhereCondition(tabellaPadre+CONDITION_JOIN_ID+tabella+".id_porta");
ISQLQueryObject sqlQueryObjectOrName = sqlQueryObject.newSQLQueryObject();
sqlQueryObjectOrName.addFromTable(tabella);
sqlQueryObjectOrName.addWhereCondition(tabella+"."+nomeColonnaNomeProprieta+" = ?");
sqlQueryObjectOrName.addWhereLikeCondition(tabella+"."+nomeColonnaNomeProprieta, CostantiProprieta.KEY_PROPERTIES_CUSTOM_SEPARATOR+nomeProprieta, LikeConfig.endsWith(false)); // puo' contenere l'id del properties
sqlQueryObjectOrName.addWhereLikeCondition(tabella+"."+nomeColonnaNomeProprieta, CostantiProprieta.KEY_PROPERTIES_DEFAULT_SEPARATOR+nomeProprieta, LikeConfig.endsWith(false)); // puo' contenere l'id del properties
sqlQueryObjectOrName.setANDLogicOperator(false);
sqlQueryObject.addWhereCondition(sqlQueryObjectOrName.createSQLConditions());
sqlQueryObject.addWhereIsNotNullCondition(nomeColonnaPlain);
if(!TipiDatabase.ORACLE.equals(this.tipoDatabase)) {
// In oracle le stringhe vuote equivalgono a null
sqlQueryObject.addWhereIsNotEmptyCondition(nomeColonnaPlain);
}
// campo clob, non gestito tramite condizione uguale su oracle
/**sqlQueryObject.addWhereCondition(true, true, tabella+"."+nomeColonnaPlain+"='"+CostantiDB.MODIPA_VALUE_UNDEFINED+"'"); // vale anche per security properties*/
sqlQueryObject.addWhereCondition(true, true, sqlQueryObject.getWhereLikeCondition(tabella+"."+nomeColonnaPlain, CostantiDB.MODIPA_VALUE_UNDEFINED, true)); // vale anche per security properties
sqlQueryObject.addOrderBy(aliasNomePorta);
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.setSelectDistinct(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
stmRead.setString(1, nomeProprieta);
rs = stmRead.executeQuery();
while(rs.next()){
long idSecProp = rs.getLong(aliasIdSecProp);
String nome = rs.getString(aliasNomePorta);
long idPorta = rs.getLong(aliasIdPorta);
String prefix = "["+nome+"][idPorta:"+idPorta+"][idSecProp:"+idSecProp+"] '"+nomeProprieta+"' ";
VaultUpdateConfigPlainEnc c = new VaultUpdateConfigPlainEnc();
c.tabella = tabella;
c.nomeColonnaPlain = nomeColonnaPlain;
c.nomeColonnaCodificata = nomeColonnaCodificata;
c.id = idSecProp;
updatePlainEncValue(connectionSQL, rs, ALIAS_PLAIN_VALUE, ALIAS_ENC_VALUE,
prefix, output,
c);
}
} catch (Exception se) {
throw new CoreException("[updateMessageSecurity] failed: " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
// GENERIC PROPERTIES
private void updateGenericProperties(String tipologia, String nomeProprieta, StringBuilder output) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
String aliasNomeConfig = "nomeConfig";
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.CONFIG_GENERIC_PROPERTY);
sqlQueryObject.addFromTable(CostantiDB.CONFIG_GENERIC_PROPERTIES);
sqlQueryObject.addSelectAliasField(CostantiDB.CONFIG_GENERIC_PROPERTY, "id", "idProp");
sqlQueryObject.addSelectAliasField(CostantiDB.CONFIG_GENERIC_PROPERTIES, CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_NOME, aliasNomeConfig);
sqlQueryObject.addSelectAliasField(CostantiDB.CONFIG_GENERIC_PROPERTY, CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_VALORE, ALIAS_PLAIN_VALUE);
sqlQueryObject.addSelectAliasField(CostantiDB.CONFIG_GENERIC_PROPERTY, CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_ENC_VALUE, ALIAS_ENC_VALUE);
sqlQueryObject.addWhereCondition(CostantiDB.CONFIG_GENERIC_PROPERTIES+CONDITION_JOIN_ID+CostantiDB.CONFIG_GENERIC_PROPERTY+".id_props");
sqlQueryObject.addWhereCondition(CostantiDB.CONFIG_GENERIC_PROPERTIES+".tipo = ?");
ISQLQueryObject sqlQueryObjectOrName = sqlQueryObject.newSQLQueryObject();
sqlQueryObjectOrName.addFromTable(CostantiDB.CONFIG_GENERIC_PROPERTY);
sqlQueryObjectOrName.addWhereCondition(CostantiDB.CONFIG_GENERIC_PROPERTY+"."+CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_NOME+" = ?");
sqlQueryObjectOrName.addWhereLikeCondition(CostantiDB.CONFIG_GENERIC_PROPERTY+"."+CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_NOME, CostantiProprieta.KEY_PROPERTIES_CUSTOM_SEPARATOR+nomeProprieta, LikeConfig.endsWith(false)); // puo' contenere l'id del properties
sqlQueryObjectOrName.addWhereLikeCondition(CostantiDB.CONFIG_GENERIC_PROPERTY+"."+CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_NOME, CostantiProprieta.KEY_PROPERTIES_DEFAULT_SEPARATOR+nomeProprieta, LikeConfig.endsWith(false)); // puo' contenere l'id del properties
sqlQueryObjectOrName.setANDLogicOperator(false);
sqlQueryObject.addWhereCondition(sqlQueryObjectOrName.createSQLConditions());
sqlQueryObject.addWhereIsNotNullCondition(CostantiDB.CONFIG_GENERIC_PROPERTY+"."+CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_VALORE);
if(!TipiDatabase.ORACLE.equals(this.tipoDatabase)) {
// In oracle le stringhe vuote equivalgono a null
sqlQueryObject.addWhereIsNotEmptyCondition(CostantiDB.CONFIG_GENERIC_PROPERTY+"."+CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_VALORE);
}
sqlQueryObject.addWhereCondition(true, true, CostantiDB.CONFIG_GENERIC_PROPERTY+"."+CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_VALORE+"='"+CostantiDB.MODIPA_VALUE_UNDEFINED+"'"); // vale anche per generic properties
sqlQueryObject.addOrderBy(aliasNomeConfig);
sqlQueryObject.setANDLogicOperator(true);
/**sqlQueryObject.setSelectDistinct(true);*/ // Ritornando il field 'id' di CONFIG_GENERIC_PROPERTY il distinct non serve; lasciandolo si ottiene l'erore oracle: failed: ORA-00932: inconsistent datatypes: expected - got CLOB per via della colonna encValue ritornata
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
stmRead.setString(1, tipologia);
stmRead.setString(2, nomeProprieta);
rs = stmRead.executeQuery();
while(rs.next()){
long id = rs.getLong("idProp");
String nomeConfig = rs.getString(aliasNomeConfig);
String prefix = "[config:"+nomeConfig+"][tipo:"+tipologia+"][idGP:"+id+"] '"+nomeProprieta+"' ";
VaultUpdateConfigPlainEnc c = new VaultUpdateConfigPlainEnc();
c.tabella = CostantiDB.CONFIG_GENERIC_PROPERTY;
c.nomeColonnaPlain = CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_VALORE;
c.nomeColonnaCodificata = CostantiDB.CONFIG_GENERIC_PROPERTY_COLUMN_ENC_VALUE;
c.id = id;
updatePlainEncValue(connectionSQL, rs, ALIAS_PLAIN_VALUE, ALIAS_ENC_VALUE,
prefix, output,
c);
}
} catch (Exception se) {
throw new CoreException("[updateGenericProperties] failed: " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
// PROTOCOL PROPERTIES
private void updateProtocolProperties(String nomeProprieta, boolean binary, StringBuilder output) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.PROTOCOL_PROPERTIES);
sqlQueryObject.addWhereCondition(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_NAME+" = ?");
if(binary) {
sqlQueryObject.addWhereIsNotNullCondition(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_BINARY);
}
else {
sqlQueryObject.addWhereIsNotNullCondition(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_STRING);
if(!TipiDatabase.ORACLE.equals(this.tipoDatabase)) {
// In oracle le stringhe vuote equivalgono a null
sqlQueryObject.addWhereIsNotEmptyCondition(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_STRING);
}
sqlQueryObject.addWhereCondition(true, true, CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_STRING+"='"+CostantiDB.MODIPA_VALUE_UNDEFINED+"'");
}
sqlQueryObject.setANDLogicOperator(true);
sqlQueryObject.addOrderBy(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_TIPO_PROPRIETARIO);
sqlQueryObject.addOrderBy(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_ID_PROPRIETARIO);
sqlQueryObject.addOrderBy(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_NAME);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
stmRead.setString(1, nomeProprieta);
rs = stmRead.executeQuery();
IJDBCAdapter jdbcAdapter = null;
if(binary) {
jdbcAdapter = JDBCAdapterFactory.createJDBCAdapter(this.tipoDatabase);
}
while(rs.next()){
long id = rs.getLong(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_ID);
long idProprietario = rs.getLong(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_ID_PROPRIETARIO);
String proprietario = rs.getString(CostantiDB.PROTOCOL_PROPERTIES_COLUMN_TIPO_PROPRIETARIO);
String identificativoOggetto = getIdentificativoOggettoProtocolProperties(proprietario,idProprietario, id);
String prefix = "[tipoProprietario:"+proprietario+"][idProprietario:"+idProprietario+"]["+identificativoOggetto+"][idProp:"+id+"] '"+nomeProprieta+"' ";
if(binary) {
VaultUpdateConfigValue c = new VaultUpdateConfigValue();
c.tabella = CostantiDB.PROTOCOL_PROPERTIES;
c.nomeColonna = CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_BINARY;
c.id = id;
updateBinaryProtocolProperty(jdbcAdapter, connectionSQL, rs, CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_BINARY,
prefix, output,
c);
}
else {
VaultUpdateConfigPlainEnc c = new VaultUpdateConfigPlainEnc();
c.tabella = CostantiDB.PROTOCOL_PROPERTIES;
c.nomeColonnaPlain = CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_STRING;
c.nomeColonnaCodificata = CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_ENCODING_STRING;
c.id = id;
updatePlainEncValue(connectionSQL, rs, CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_STRING, CostantiDB.PROTOCOL_PROPERTIES_COLUMN_VALUE_ENCODING_STRING,
prefix, output,
c);
}
}
} catch (Exception se) {
throw new CoreException("[updateProtocolProperties] failed: " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
private String getIdentificativoOggettoProtocolProperties(String proprietario, long id, long idProp) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
ProprietariProtocolProperty proprietarioProtocolProperty = ProprietariProtocolProperty.valueOf(proprietario);
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
addTableProtocolProperties(sqlQueryObject, proprietarioProtocolProperty);
sqlQueryObject.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
stmRead.setLong(1, id);
rs = stmRead.executeQuery();
if(rs.next()){
return readInfoProtocolProperties(connectionSQL, rs, proprietarioProtocolProperty);
}
throw new CoreException("Entry not found for (idProp:"+idProp+") '"+proprietarioProtocolProperty+"' ("+sqlQuery+" id:"+id+")");
} catch (Exception se) {
throw new CoreException(se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
private void addTableProtocolProperties(ISQLQueryObject sqlQueryObject, ProprietariProtocolProperty proprietarioProtocolProperty) throws SQLQueryObjectException {
switch(proprietarioProtocolProperty) {
case ACCORDO_COOPERAZIONE:
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_COOPERAZIONE);
break;
case ACCORDO_SERVIZIO_PARTE_COMUNE:
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
break;
case ACCORDO_SERVIZIO_PARTE_SPECIFICA:
sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
break;
case AZIONE_ACCORDO:
sqlQueryObject.addFromTable(CostantiDB.ACCORDI_AZIONI);
break;
case OPERATION:
sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE_AZIONI);
break;
case PORT_TYPE:
sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
break;
case RESOURCE:
sqlQueryObject.addFromTable(CostantiDB.API_RESOURCES);
break;
case FRUITORE:
sqlQueryObject.addFromTable(CostantiDB.SERVIZI_FRUITORI);
break;
case SERVIZIO_APPLICATIVO:
sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
break;
case SOGGETTO:
sqlQueryObject.addFromTable(CostantiDB.SOGGETTI);
break;
default:
break;
}
}
private String readInfoProtocolProperties(Connection connectionSQL, ResultSet rs, ProprietariProtocolProperty proprietarioProtocolProperty) throws SQLException, CoreException, DriverRegistroServiziException {
switch(proprietarioProtocolProperty) {
case ACCORDO_COOPERAZIONE:{
return rs.getString("nome");
}
case ACCORDO_SERVIZIO_PARTE_COMUNE:{
String nome = rs.getString("nome");
long idSoggetto = rs.getLong(CostantiDB.ACCORDI_COLUMN_ID_REFERENTE_REF);
int versione = rs.getInt("versione");
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return IDAccordoFactory.getInstance().getUriFromValues(nome, idS, versione);
}
case ACCORDO_SERVIZIO_PARTE_SPECIFICA:{
String tipoServizio = rs.getString("tipo_servizio");
String nomeServizio = rs.getString("nome_servizio");
int versioneServizio = rs.getInt("versione_servizio");
long idSoggetto = rs.getLong(CostantiDB.SERVIZI_COLUMN_ID_SOGGETTO_REF);
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return IDServizioFactory.getInstance().getUriFromValues(tipoServizio, nomeServizio, idS, versioneServizio);
}
case AZIONE_ACCORDO:{
String nome = rs.getString("nome");
long idAccordo = rs.getLong(CostantiDB.ACCORDI_COLUMN_ID_ACCORDO_REF);
return "api:"+readDatiAccordo(connectionSQL, idAccordo) + " azione:"+nome;
}
case OPERATION:{
String nome = rs.getString("nome");
long idPortType = rs.getLong("id_port_type");
return "api:"+readDatiPT(connectionSQL, idPortType) + " operation:"+nome;
}
case PORT_TYPE:{
String nome = rs.getString("nome");
long idAccordo = rs.getLong(CostantiDB.ACCORDI_COLUMN_ID_ACCORDO_REF);
return "api:"+readDatiAccordo(connectionSQL, idAccordo) + " portType:"+nome;
}
case RESOURCE:{
String nome = rs.getString("nome");
long idAccordo = rs.getLong(CostantiDB.ACCORDI_COLUMN_ID_ACCORDO_REF);
return "api:"+readDatiAccordo(connectionSQL, idAccordo) + " resource:"+nome;
}
case FRUITORE:{
long idServizio = rs.getLong("id_servizio");
long idSoggetto = rs.getLong(CostantiDB.SERVIZI_COLUMN_ID_SOGGETTO_REF);
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return idS.toString() +" -> " + readDatiServizio(connectionSQL, idServizio);
}
case SERVIZIO_APPLICATIVO:{
String nome = rs.getString("nome");
long idSoggetto = rs.getLong("id_soggetto");
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return idS.toString()+" sa:"+nome;
}
case SOGGETTO:{
String tipoSoggetto = rs.getString("tipo_soggetto");
String nomeSoggetto = rs.getString("nome_soggetto");
return new IDSoggetto(tipoSoggetto, nomeSoggetto).toString();
}
default:
break;
}
return null;
}
// PROPERTIES
private void updateProperties(String tabella, String nomeColonna, String nomeColonnaPlain, String nomeColonnaCodificata, StringBuilder output,
boolean checkRequestSec, boolean checkResponseCheck) throws CoreException {
PreparedStatement stmRead = null;
ResultSet rs=null;
Connection connectionSQL = null;
try {
connectionSQL = getConnection();
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addWhereIsNotNullCondition(nomeColonnaCodificata);
if(!TipiDatabase.ORACLE.equals(this.tipoDatabase)) {
// In oracle le stringhe vuote equivalgono a null
sqlQueryObject.addWhereIsNotEmptyCondition(nomeColonnaCodificata);
}
sqlQueryObject.addOrderBy(nomeColonna);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmRead = connectionSQL.prepareStatement(sqlQuery);
rs = stmRead.executeQuery();
while(rs.next()){
long idP = rs.getLong("id");
String nomeProprieta = rs.getString(nomeColonna);
if(checkRequestSec || checkResponseCheck) {
long idPorta = rs.getLong(CostantiDB.PORTA_COLUMN_ID_REF);
String tabellaPorta = CostantiDB.PORTE_DELEGATE;
if(CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST.equals(tabella) ||
CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE.equals(tabella)) {
tabellaPorta = CostantiDB.PORTE_APPLICATIVE;
}
String sec = readMessageSecurityPorta(connectionSQL, idPorta, tabellaPorta, checkRequestSec);
if(sec!=null && StringUtils.isNotEmpty(sec) && !"-".equals(sec) && !CostantiDB.SICUREZZA_MESSAGGIO_SCHEMA_DEFAULT.equals(sec)) {
// viene gestita con il processamento specifico delle proprietà fatto in precedenza
continue;
}
}
String identificativoOggetto = getIdentificativoOggettoProperties(tabella,connectionSQL,rs);
String prefix = "[proprietario:"+tabella+"]["+identificativoOggetto+"][idProp:"+idP+"] '"+nomeProprieta+"' ";
VaultUpdateConfigPlainEnc c = new VaultUpdateConfigPlainEnc();
c.tabella = tabella;
c.nomeColonnaPlain = nomeColonnaPlain;
c.nomeColonnaCodificata = nomeColonnaCodificata;
c.id = idP;
updatePlainEncValue(connectionSQL, rs, nomeColonnaPlain, nomeColonnaCodificata,
prefix, output,
c);
}
} catch (Exception se) {
throw new CoreException("[updateProperties-"+tabella+"] failed: " + se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rs, stmRead);
closeConnection(connectionSQL);
}
}
private String getIdentificativoOggettoProperties(String tabella, Connection connectionSQL, ResultSet rs) throws SQLException, CoreException {
if(CostantiDB.SOGGETTI_PROPS.equals(tabella)) {
long idSoggetto = rs.getLong("id_soggetto");
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return idS.toString();
}
else if(CostantiDB.SERVIZI_APPLICATIVI_PROPS.equals(tabella)) {
long idSA = rs.getLong("id_servizio_applicativo");
return readDatiSA(connectionSQL, idSA);
}
else if(CostantiDB.SYSTEM_PROPERTIES_PDD.equals(tabella)) {
return "configurazione-generale";
}
else if(CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_REQUEST.equals(tabella) ||
CostantiDB.PORTE_APPLICATIVE_MESSAGE_SECURITY_RESPONSE.equals(tabella) ||
CostantiDB.PORTE_APPLICATIVE_AUTENTICAZIONE_PROP.equals(tabella) ||
CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_PROP.equals(tabella) ||
CostantiDB.PORTE_APPLICATIVE_AUTORIZZAZIONE_CONTENUTI_PROP.equals(tabella) ||
CostantiDB.PORTE_APPLICATIVE_PROP.equals(tabella)) {
long idPorta = rs.getLong(CostantiDB.PORTA_COLUMN_ID_REF);
return readDatiPortaApplicativa(connectionSQL, idPorta);
}
else if(CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_REQUEST.equals(tabella) ||
CostantiDB.PORTE_DELEGATE_MESSAGE_SECURITY_RESPONSE.equals(tabella) ||
CostantiDB.PORTE_DELEGATE_AUTENTICAZIONE_PROP.equals(tabella) ||
CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_PROP.equals(tabella) ||
CostantiDB.PORTE_DELEGATE_AUTORIZZAZIONE_CONTENUTI_PROP.equals(tabella) ||
CostantiDB.PORTE_DELEGATE_PROP.equals(tabella)) {
long idPorta = rs.getLong(CostantiDB.PORTA_COLUMN_ID_REF);
return readDatiPortaDelegata(connectionSQL, idPorta);
}
return null;
}
// READ UTILS
private String readDatiAccordo(Connection connectionSQL, long idAccordo) throws CoreException {
PreparedStatement stmReadInternal = null;
ResultSet rsInternal=null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.ACCORDI);
sqlQueryObject.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmReadInternal = connectionSQL.prepareStatement(sqlQuery);
stmReadInternal.setLong(1, idAccordo);
rsInternal = stmReadInternal.executeQuery();
String nome = rsInternal.getString("nome");
if(rsInternal.next()) {
long idSoggetto = rsInternal.getLong(CostantiDB.ACCORDI_COLUMN_ID_REFERENTE_REF);
int versione = rsInternal.getInt("versione");
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return IDAccordoFactory.getInstance().getUriFromValues(nome, idS, versione);
}
return null;
} catch (Exception se) {
throw new CoreException(se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rsInternal, stmReadInternal);
}
}
private String readDatiPT(Connection connectionSQL, long idPortType) throws CoreException {
PreparedStatement stmReadInternal = null;
ResultSet rsInternal=null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.PORT_TYPE);
sqlQueryObject.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmReadInternal = connectionSQL.prepareStatement(sqlQuery);
stmReadInternal.setLong(1, idPortType);
rsInternal = stmReadInternal.executeQuery();
if(rsInternal.next()) {
String nome = rsInternal.getString("nome");
long idAccordo = rsInternal.getLong(CostantiDB.ACCORDI_COLUMN_ID_ACCORDO_REF);
return readDatiAccordo(connectionSQL, idAccordo) + " portType:"+nome;
}
return null;
} catch (Exception se) {
throw new CoreException(se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rsInternal, stmReadInternal);
}
}
private String readDatiServizio(Connection connectionSQL, long idServizio) throws CoreException {
PreparedStatement stmReadInternal = null;
ResultSet rsInternal=null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.SERVIZI);
sqlQueryObject.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmReadInternal = connectionSQL.prepareStatement(sqlQuery);
stmReadInternal.setLong(1, idServizio);
rsInternal = stmReadInternal.executeQuery();
if(rsInternal.next()) {
String tipoServizio = rsInternal.getString("tipo_servizio");
String nomeServizio = rsInternal.getString("nome_servizio");
int versioneServizio = rsInternal.getInt("versione_servizio");
long idSoggetto = rsInternal.getLong(CostantiDB.SERVIZI_COLUMN_ID_SOGGETTO_REF);
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return IDServizioFactory.getInstance().getUriFromValues(tipoServizio, nomeServizio, idS, versioneServizio);
}
return null;
} catch (Exception se) {
throw new CoreException(se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rsInternal, stmReadInternal);
}
}
private String readDatiSA(Connection connectionSQL, long idServizioApplicativo) throws CoreException {
PreparedStatement stmReadInternal = null;
ResultSet rsInternal=null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(CostantiDB.SERVIZI_APPLICATIVI);
sqlQueryObject.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmReadInternal = connectionSQL.prepareStatement(sqlQuery);
stmReadInternal.setLong(1, idServizioApplicativo);
rsInternal = stmReadInternal.executeQuery();
if(rsInternal.next()) {
String nome = rsInternal.getString("nome");
long idSoggetto = rsInternal.getLong(CostantiDB.SERVIZI_APPLICATIVI_COLUMN_ID_SOGGETTO);
IDSoggetto idS = DBUtils.getIdSoggetto(idSoggetto, connectionSQL, this.tipoDatabase);
return idS.toString()+" sa:"+nome;
}
return null;
} catch (Exception se) {
throw new CoreException(se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rsInternal, stmReadInternal);
}
}
private String readDatiPortaDelegata(Connection connectionSQL, long idPorta) throws CoreException {
return readDatiPorta(connectionSQL, idPorta, CostantiDB.PORTE_DELEGATE) ;
}
private String readDatiPortaApplicativa(Connection connectionSQL, long idPorta) throws CoreException {
return readDatiPorta(connectionSQL, idPorta, CostantiDB.PORTE_APPLICATIVE) ;
}
private String readDatiPorta(Connection connectionSQL, long idPorta, String tabella) throws CoreException {
PreparedStatement stmReadInternal = null;
ResultSet rsInternal=null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmReadInternal = connectionSQL.prepareStatement(sqlQuery);
stmReadInternal.setLong(1, idPorta);
rsInternal = stmReadInternal.executeQuery();
if(rsInternal.next()) {
return rsInternal.getString("nome_porta");
}
return null;
} catch (Exception se) {
throw new CoreException(se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rsInternal, stmReadInternal);
}
}
private String readMessageSecurityPorta(Connection connectionSQL, long idPorta, String tabella, boolean request) throws CoreException {
PreparedStatement stmReadInternal = null;
ResultSet rsInternal=null;
try {
ISQLQueryObject sqlQueryObject = SQLObjectFactory.createSQLQueryObject(this.tipoDatabase);
sqlQueryObject.addFromTable(tabella);
sqlQueryObject.addWhereCondition(CONDITION_WHERE_ID);
sqlQueryObject.setANDLogicOperator(true);
String sqlQuery = sqlQueryObject.createSQLQuery();
stmReadInternal = connectionSQL.prepareStatement(sqlQuery);
stmReadInternal.setLong(1, idPorta);
rsInternal = stmReadInternal.executeQuery();
if(rsInternal.next()) {
return rsInternal.getString(request ? "security_request_mode" : "security_response_mode");
}
return null;
} catch (Exception se) {
throw new CoreException(se.getMessage(),se);
} finally {
JDBCUtilities.closeResources(rsInternal, stmReadInternal);
}
}
}
class VaultUpdateConfigPlainEnc{
String tabella;
String nomeColonnaPlain;
String nomeColonnaCodificata;
long id;
}
class VaultUpdateConfigValue{
String tabella;
String nomeColonna;
long id;
}