LevelcodeLicenseClient/Services/AtivacaoService.cs
2026-03-25 16:34:45 -03:00

119 lines
3.9 KiB
C#

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);
}
}
}
}