Metadata-Version: 2.4
Name: cuboutils
Version: 0.1.0
Summary: Utilitários compartilhados pelos produtos CUBO
Author: Leonardo Pires Batista
Author-email: leonardopbatista98@gmail.com
Keywords: cubo licença atualização
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE_FORMAT.md
Requires-Dist: cryptography==50.0.1
Dynamic: author
Dynamic: author-email
Dynamic: description
Dynamic: description-content-type
Dynamic: keywords
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# CuboUtils

Este repositório contém utilitários compartilhados pelos produtos CUBO:

- `license/`: emissão, instalação e validação de licenças;
- `update_checker/`: consulta da versão mais recente de um produto.

## Licenças

A diferença entre os programas está somente nas operações utilizadas:

- o consumidor chama `verify_installed_license()`;
- o instalador chama `current_machine_id()` e `save_license()`;
- o emissor chama `issue_license()` e fornece sua chave privada.

A chave pública fictícia está incorporada em `license/public_key.py`. Durante este teste de conceito, a chave privada correspondente está em `private-key.pem`, na raiz do repositório.

As duas chaves atuais são apenas para desenvolvimento. Antes de qualquer distribuição real, remova `private-key.pem` do repositório e substitua o par por chaves mantidas em um ambiente seguro.

A licença instalada usa o caminho fixo `C:\ProgramData\CUBO\-`. `save_license()` grava o arquivo com os atributos `Hidden` e `System`, enquanto os programas consumidores usam somente a interface de validação.

O formato compartilhado está descrito em `LICENSE_FORMAT.md`, e os exemplos de cada operação estão em `license/README.md`.

## Verificação de versão

O endpoint retorna um único objeto JSON que relaciona cada produto à sua versão mais recente:

```json
{
  "TQSVigas": "v1.0.0",
  "TQSFormas": "v1.0.0"
}
```

O utilitário retorna `True` quando a versão informada é igual ou posterior à versão publicada:

```python
from update_checker import is_latest_version

updated = is_latest_version(
    endpoint="https://leonardopbatista.github.io/versions/versions.json",
    product="TQSVigas",
    version="2027.2.0",
)
```

Versões aceitas são sequências numéricas separadas por pontos, com um `v` inicial opcional. A consulta possui timeout padrão de cinco segundos e lança `UpdateCheckError` quando a rede ou a resposta do servidor falha.
