c22b4a2613
NUOVE FUNZIONALITÀ: - Aggiunto modulo CredentialManager per gestione centralizzata credenziali - Implementata UI Blazor per gestione credenziali (CredentialManagement.razor) - Supporto completo per credenziali database (SQL Server, MySQL, PostgreSQL, Oracle, SQLite, DB2, SAP HANA) - Gestione unificata REST API con supporto specifico per SAP B1 Service Layer e Salesforce - Test reali di connessione per database, SAP B1 e Salesforce OAuth2 - Selezione dinamica tipo servizio REST (Generico, SAP B1, Salesforce) con campi specifici - Persistenza sicura di credenziali con crittografia password e campi sensibili COMPONENTI AGGIUNTI: - CredentialManager/Models/: CredentialEntity, CredentialModels (DatabaseCredential, RestApiCredential, SapB1ServiceLayerCredential, SalesforceCredential) - CredentialManager/Services/: CredentialService, EncryptionService, DatabaseInitializer - CredentialManager/Data/: CredentialDbContext con Entity Framework - DataConnection/CredentialManagement/: Interfacce e servizi di integrazione - Data_Coupler/Pages/CredentialManagement.razor: UI completa per gestione credenziali MIGLIORAMENTI UI: - Form dinamica per REST API con campi specifici per tipo servizio - Validazione campi obbligatori per Salesforce (ClientId, ClientSecret, SecurityToken) - Test connessione in tempo reale dalla modale di inserimento/modifica - Rimozione sezioni separate per SAP B1 e Salesforce (ora unificate in REST API) - Gestione stato loading durante operazioni async PERSISTENZA AVANZATA: - Campo RestServiceType aggiunto a CredentialEntity con migrazione automatica - Serializzazione campi specifici Salesforce/SAP B1 in AdditionalParameters JSON - Mapping bidirezionale tra entità database e modelli business - Gestione nullability e conversioni tipo sicure SICUREZZA: - Crittografia AES-256 per password e token sensibili - Gestione sicura ConnectionString database - Validazione input e sanitizzazione dati TESTING E CONNETTIVITÀ: - Test autenticazione reale SAP B1 Service Layer - Test OAuth2 Salesforce con supporto Connected App - Test connettività database multi-provider - Logging dettagliato per debugging e monitoraggio CONFIGURAZIONE: - Dependency injection per tutti i servizi - Configurazione Entity Framework con SQLite - Tasks VS Code per build e run - Gestione connection string centralizzata CORREZIONI: - Risolti errori nullability in CredentialService - Aggiunto using Microsoft.JSInterop per IJSRuntime - Fix compilazione e warning Files modificati: 35+ file tra nuovi e aggiornati
123 lines
4.1 KiB
C#
123 lines
4.1 KiB
C#
using System;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using DataConnection.Interfaces;
|
|
using DataConnection.EF.DatabaseDiscovery;
|
|
using DataConnection.Enums;
|
|
|
|
namespace DataConnection.EF;
|
|
|
|
/// <summary>
|
|
/// Opzioni per la configurazione del manager di database esistenti
|
|
/// </summary>
|
|
public class DbManagerOptions
|
|
{
|
|
/// <summary>
|
|
/// Configuratore del DbContext
|
|
/// </summary>
|
|
public Action<DbContextOptionsBuilder> DbContextConfigurator { get; set; }
|
|
|
|
/// <summary>
|
|
/// Configuratore del modello del database
|
|
/// </summary>
|
|
public Action<ModelBuilder> ModelConfigurator { get; set; }
|
|
|
|
/// <summary>
|
|
/// Flag che indica se la scoperta automatica delle entità è abilitata
|
|
/// </summary>
|
|
public bool EnableAutoDiscovery { get; set; }
|
|
|
|
/// <summary>
|
|
/// Assembly da cui caricare automaticamente le entità (se EnableAutoDiscovery = true)
|
|
/// </summary>
|
|
public System.Reflection.Assembly EntityAssembly { get; set; }
|
|
|
|
/// <summary>
|
|
/// Namespace in cui cercare le entità (se EnableAutoDiscovery = true)
|
|
/// </summary>
|
|
public string EntityNamespace { get; set; }
|
|
|
|
/// <summary>
|
|
/// Timeout per le operazioni del database (in secondi)
|
|
/// </summary>
|
|
public int CommandTimeout { get; set; } = 30;
|
|
|
|
/// <summary>
|
|
/// Strategia di mappatura dei nomi (CamelCase, PascalCase, SnakeCase)
|
|
/// </summary>
|
|
public NamingStrategy NamingStrategy { get; set; } = NamingStrategy.Default;
|
|
|
|
/// <summary>
|
|
/// Servizio per la scoperta dei database disponibili sul server
|
|
/// </summary>
|
|
public IDatabaseDiscovery DatabaseDiscoveryService { get; set; }
|
|
|
|
/// <summary>
|
|
/// Stringa di connessione a livello di server (senza specificare il database)
|
|
/// </summary>
|
|
public string ServerConnectionString { get; set; }
|
|
|
|
/// <summary>
|
|
/// Nome del database a cui connettersi
|
|
/// </summary>
|
|
public string DatabaseName { get; set; }
|
|
|
|
/// <summary>
|
|
/// Tipo di database (SqlServer, MySql, ecc.)
|
|
/// </summary>
|
|
public DatabaseType DatabaseType { get; set; } = DatabaseType.SqlServer; /// <summary>
|
|
/// Configura automaticamente il servizio di scoperta database in base al tipo di database
|
|
/// </summary>
|
|
/// <param name="databaseType">Tipo di database</param>
|
|
public void ConfigureDatabaseDiscovery(DatabaseType databaseType)
|
|
{
|
|
DatabaseType = databaseType;
|
|
|
|
switch (databaseType)
|
|
{
|
|
case DatabaseType.SqlServer:
|
|
DatabaseDiscoveryService = new SqlServerDatabaseDiscovery();
|
|
DbContextConfigurator = options => options.UseSqlServer(BuildFullConnectionString(),
|
|
sqlOptions => sqlOptions.CommandTimeout(CommandTimeout));
|
|
break;
|
|
default:
|
|
// Per altri database, configuriamo un configuratore di base che non fa nulla
|
|
// Il test di connessione userà un approccio diverso
|
|
DbContextConfigurator = options => { };
|
|
break;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Costruisce una stringa di connessione completa includendo il database selezionato
|
|
/// </summary>
|
|
public string BuildFullConnectionString()
|
|
{
|
|
if (string.IsNullOrEmpty(ServerConnectionString))
|
|
{
|
|
throw new InvalidOperationException("La stringa di connessione al server non è stata specificata");
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(DatabaseName))
|
|
{
|
|
return ServerConnectionString;
|
|
}
|
|
|
|
// Per SQL Server
|
|
if (ServerConnectionString.Contains("Initial Catalog=") || ServerConnectionString.Contains("Database="))
|
|
{
|
|
// Sostituisci il database esistente
|
|
var modifiedString = System.Text.RegularExpressions.Regex.Replace(
|
|
ServerConnectionString,
|
|
@"(Initial Catalog|Database)=([^;]*)",
|
|
$"$1={DatabaseName}");
|
|
|
|
return modifiedString;
|
|
}
|
|
else
|
|
{
|
|
// Aggiungi il database
|
|
return ServerConnectionString + $";Database={DatabaseName}";
|
|
}
|
|
}
|
|
}
|