using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using CredentialManager; using CredentialManager.Services; using CredentialManager.Data; using DataConnection.CredentialManagement.Interfaces; using DataConnection.CredentialManagement.Services; namespace DataConnection.CredentialManagement; /// /// Metodi di estensione per configurare i servizi di gestione credenziali per DataConnection /// public static class ServiceCollectionExtensions { /// /// Aggiunge i servizi di gestione credenziali a DataConnection /// /// La collezione di servizi /// Stringa di connessione per il database delle credenziali /// La collezione di servizi per il chaining public static IServiceCollection AddDataConnectionCredentialManagement( this IServiceCollection services, string connectionString = "Data Source=credentials.db") { // Estrai il percorso del database dalla connection string string databasePath; if (connectionString.StartsWith("Data Source=", StringComparison.OrdinalIgnoreCase)) { databasePath = connectionString.Substring("Data Source=".Length); } else { // Se non è una connection string, assumiamo che sia già un percorso databasePath = connectionString; } // Aggiungi i servizi base di CredentialManager services.AddCredentialManager(databasePath); // Aggiungi il servizio di gestione associazioni per chiavi services.AddScoped(); // Aggiungi il servizio di integrazione DataConnection services.AddScoped(); return services; } /// /// Aggiunge i servizi di gestione credenziali con configurazione avanzata /// /// La collezione di servizi /// Azione per configurare le opzioni /// La collezione di servizi per il chaining public static IServiceCollection AddDataConnectionCredentialManagement( this IServiceCollection services, Action configure) { var options = new DataConnectionCredentialOptions(); configure(options); return services.AddDataConnectionCredentialManagement(options.ConnectionString); } } /// /// Opzioni per la configurazione del DataConnectionCredentialManagement /// public class DataConnectionCredentialOptions { /// /// Stringa di connessione per il database delle credenziali /// public string ConnectionString { get; set; } = "Data Source=credentials.db"; /// /// Abilita il logging dettagliato /// public bool EnableDetailedLogging { get; set; } = false; /// /// Timeout per le operazioni sul database (in secondi) /// public int DatabaseTimeout { get; set; } = 30; } /// /// Interfaccia per il servizio di gestione credenziali specifico per DataConnection /// Questa interfaccia estende le funzionalità base di CredentialManager /// con metodi specifici per l'integrazione con DataConnection /// public interface IDataConnectionCredentialServiceConfiguration { /// /// Configura il servizio con le opzioni specificate /// /// Le opzioni di configurazione void Configure(DataConnectionCredentialOptions options); /// /// Verifica la connessione al database delle credenziali /// /// True se la connessione è valida Task TestConnectionAsync(); }