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.

Componentes deste repositório

  • src/pgl_auth/ — pacote publicado no PyPI, instalado pelos alunos (pip install pgl-auth).
  • api/login.py — API serverless (FastAPI) hospedada no Vercel, valida matrícula/senha no Postgres e emite o JWT. Nenhuma credencial do banco fica no pacote instalado pelos alunos.
  • 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).

Deploy da API no Vercel

  1. Importe este repositório no Vercel (Project → Add New → Project).
  2. Configure as variáveis de ambiente do projeto no Vercel:
    • NEON_DATABASE_URL
    • JWT_SECRET_KEY
  3. Deploy automático a cada push (o Vercel detecta api/login.py + api/requirements.txt via vercel.json e cria a função serverless em /api/login).
  4. Atualize DEFAULT_API_URL em src/pgl_auth/client.py (ou oriente os alunos a definir PGL_AUTH_API_URL) com a URL final do deploy.

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.0

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.0
File Size Uploaded
pgl_auth-0.1.0.tar.gz 9.8 kB Details

Built distribution (wheel)

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

Total release size: 15.3 kB

Release files / pgl_auth-0.1.0.tar.gz

Download URL pgl_auth-0.1.0.tar.gz
Size 9.8 kB
Tags Source
SHA-256 checksum
How to use checksums
cfd993e6294f61b9bc820c53b801ff93c22ae7af90098944636e84f1251884a6
BLAKE2b-256 checksum
How to use checksums
aab251329ef1a6016733e8c7f369d07c1754526c03ea635c796c26d288d6cc2a
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.0-py3-none-any.whl

Download URL pgl_auth-0.1.0-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e709ae499277cc2a8488839b119aa26f63b47b9ed98ec8cba3f69d7adba3dce0
BLAKE2b-256 checksum
How to use checksums
e69bf8ebfdd761a2c141fe45347e82c61c4695be746a88a67ea3a0172b06ea02
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

0.1.2

2 release files

0.1.1

2 release files

This release

0.1.0 This release

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