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— schemapgl_authe tabelapgl_auth.students.db/migrate.py— aplicaschema.sqlno banco (usaNEON_DATABASE_URLdo.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ó):
- pypi.org → Account settings → API tokens → Add API token.
- Se o projeto
pgl-authainda não existe no PyPI, crie o token com escopo "Entire account" (o escopo pode ser restrito ao projeto depois do primeiro publish).
- Se o projeto
- 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-).
- Nome:
- Pronto — o job
publishusasecrets.PYPI_API_TOKENautomaticamente.
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)
| File | Size | Uploaded | |
|---|---|---|---|
| pgl_auth-0.1.2.tar.gz | 9.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|