Skip to main content

pgl_auth

Pacote Python para autenticação de alunos (matrícula + senha) e emissão de um token JWT de curta duração (4 horas) para acesso ao proxy dos modelos de IA usado na disciplina.

A API serverless que valida a matrícula/senha e emite o token (hospedada no Vercel) vive num repositório separado, pgl_auth_server — foi extraída daqui porque o pyproject.toml do pacote, na raiz deste repo, confundia a detecção de dependências da Vercel. Nenhuma credencial do banco fica no pacote instalado pelos alunos.

Componentes deste repositório

  • src/pgl_auth/ — pacote publicado no PyPI, instalado pelos alunos (pip install pgl-auth).
  • db/schema.sql — schema pgl_auth e tabela pgl_auth.students.
  • db/migrate.py — aplica schema.sql no banco (usa NEON_DATABASE_URL do .env).
  • db/create_student.py — cria/atualiza a senha de um aluno (hash bcrypt).
  • .github/workflows/publish.yml — CI que publica o pacote no PyPI a cada release do GitHub.

Uso pelo aluno

pip install pgl-auth
from pgl_auth import PGLAuthClient

client = PGLAuthClient()  # usa PGL_AUTH_API_URL ou o default do Vercel
token = client.login("2021012345", "minha_senha")

# usar o token para chamar o proxy dos modelos
headers = client.auth_header()  # {"Authorization": "Bearer <token>"}

Ou via linha de comando:

pgl-auth 2021012345

Estrutura da tabela pgl_auth.students

coluna tipo descrição
id UUID (PK) identificador único, gerado automaticamente
matricula TEXT (UNIQUE) matrícula do aluno
password_hash TEXT hash bcrypt da senha (nunca texto puro)
is_active BOOLEAN se o aluno pode autenticar
updated_at TIMESTAMPTZ atualizado automaticamente via trigger

Provisionar o banco

pip install -e ".[admin]"
python db/migrate.py                 # cria schema + tabela
python db/create_student.py 2021012345   # cadastra/atualiza um aluno (pede a senha)

Testes

pip install -e ".[dev]"
pytest

tests/test_create_student.py garante as regras de negócio do cadastro de senha (bloqueio se a matrícula não existir ou estiver inativa em pgl_proxy.students, e overwrite do registro existente em pgl_auth.students). tests/test_client.py cobre o cliente HTTP usado pelos alunos. Os testes rodam com dependências mockadas — não tocam no banco real — e são executados automaticamente no CI antes de qualquer build/publish (job test em publish.yml).

API e deploy no Vercel

A API (FastAPI, POST /api/login) e as instruções de deploy no Vercel ficam no repositório separado pgl_auth_server — veja o README de lá. Depois do deploy, atualize DEFAULT_API_URL em src/pgl_auth/client.py (ou oriente os alunos a definir PGL_AUTH_API_URL) com a URL final.

Publicar o pacote no PyPI

O workflow .github/workflows/publish.yml roda a cada push na main (também em release/workflow_dispatch): testa, builda e publica no PyPI usando um API token guardado como secret do repositório.

Configuração única (uma vez só):

  1. pypi.org → Account settings → API tokens → Add API token.
    • Se o projeto pgl-auth ainda não existe no PyPI, crie o token com escopo "Entire account" (o escopo pode ser restrito ao projeto depois do primeiro publish).
  2. No GitHub: repo → Settings → Secrets and variables → Actions → New repository secret.
    • Nome: PYPI_API_TOKEN
    • Valor: o token gerado no passo anterior (começa com pypi-).
  3. Pronto — o job publish usa secrets.PYPI_API_TOKEN automaticamente.

skip-existing: true faz o publish ser ignorado (sem falhar o job) quando a versão em pyproject.toml já foi publicada antes, então pushes na main sem bump de versão não quebram o CI.

Para publicar uma nova versão:

# atualizar version em pyproject.toml
git tag v0.1.0 && git push origin v0.1.0
# criar uma Release no GitHub a partir dessa tag -> dispara o workflow

Release files for pgl-auth 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pgl-auth 0.1.2
File Size Uploaded
pgl_auth-0.1.2.tar.gz 9.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pgl-auth 0.1.2
File Interpreter ABI Platform
pgl_auth-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 14.8 kB

Release files / pgl_auth-0.1.2.tar.gz

Download URL pgl_auth-0.1.2.tar.gz
Size 9.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d3473ea393ac808a58e0d0db8e6cc65742bb7c307e30c7656e1a6d9035b2d222
BLAKE2b-256 checksum
How to use checksums
b73e278686e595e1a29ee8b9977917f56db2aa3b5a488ccba176e592a105a392
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pgl_auth-0.1.2-py3-none-any.whl

Download URL pgl_auth-0.1.2-py3-none-any.whl
Size 5.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ba9ef4ad1f020449b92577a61c95c17823e05aa3e11350c123bcffb3918ea85
BLAKE2b-256 checksum
How to use checksums
70de72d3dc66f806ef7396f27c6c910c225f250fd69371ba3378530d0208084e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page