119 lines
3.9 KiB
C#
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);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|