using Levelcode_licenseCliente.DataAccess; using Levelcode_licenseCliente.Models; using Levelcode_licenseCliente.Security; using System; using System.Configuration; using System.IO; using System.Text.Json; namespace Levelcode_licenseCliente.Services { public class AtivacaoService { private readonly string _connectionString; public AtivacaoService(string connectionString) { _connectionString = connectionString; } public object HwidService { get; private set; } public ModeloLicenca Ativar(string caminhoArquivoLicenca, string caminhoPublicKey) { if (!File.Exists(caminhoArquivoLicenca)) throw new Exception("Arquivo de licença não encontrado."); if (!File.Exists(caminhoPublicKey)) throw new Exception("Chave pública não encontrada."); // 🔓 Ler chave pública string chavePublica = File.ReadAllText(caminhoPublicKey); // 🔐 Validar arquivo .key (assinatura RSA) LicensePayload payload = LicenseEngine.ValidarArquivoKey( caminhoArquivoLicenca, chavePublica); if (payload == null) throw new Exception("Licença inválida."); // 🔑 Buscar licença no banco LicencaClienteDAL licencaDal = new LicencaClienteDAL(_connectionString); ModeloLicenca licenca = licencaDal.BuscarPorLicenseKey(payload.Key); if (licenca == null) throw new Exception("Licença não encontrada ou inativa."); // ⏳ Verificar expiração if (licenca.ExpiraEm.HasValue && licenca.ExpiraEm.Value < DateTime.Now) throw new Exception("Licença expirada."); // 🖥️ Gerar HWID string hwid = Levelcode_licenseCliente.Security.HwidService.ObterHwid(); // 🔢 Verificar máquinas LicencaMaquinaClienteDAL maquinaDal = new LicencaMaquinaClienteDAL(_connectionString); bool jaRegistrada = maquinaDal.MaquinaJaRegistrada(licenca.IdLicenca, hwid); if (!jaRegistrada) { int usadas = maquinaDal.ContarMaquinasAtivas(licenca.IdLicenca); if (usadas >= licenca.LimiteMaquinas) throw new Exception( "Limite de máquinas atingido para esta licença."); // 📝 Registrar máquina maquinaDal.RegistrarMaquina(licenca.IdLicenca, hwid); } // ✅ Ativação OK return licenca; } // 💾 Salvar ativação local (opcional, mas recomendado) public void SalvarAtivacaoLocal(ModeloLicenca licenca) { string json = JsonSerializer.Serialize(licenca); File.WriteAllText( Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "licenca_ativada.json"), json); } public bool SistemaEstaAutorizado() { string hwid = Levelcode_licenseCliente.Security.HwidService.ObterHwid(); string conn = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; using (var db = new DbConexao()) { var licencaDal = new LicencaClienteDAL(conn); var maquinaDal = new LicencaMaquinaClienteDAL(conn); // busca licença ativa (simplificado) ModeloLicenca licenca = licencaDal.BuscarLicencaAtiva(); if (licenca == null) return false; // verifica se este HWID está autorizado return maquinaDal.MaquinaJaRegistrada( licenca.IdLicenca, hwid); } } } }