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— 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).
Deploy da API no Vercel
- Importe este repositório no Vercel (Project → Add New → Project).
- Configure as variáveis de ambiente do projeto no Vercel:
NEON_DATABASE_URLJWT_SECRET_KEY
- Deploy automático a cada push (o Vercel detecta
api/login.py+api/requirements.txtviavercel.jsone cria a função serverless em/api/login). - Atualize
DEFAULT_API_URLemsrc/pgl_auth/client.py(ou oriente os alunos a definirPGL_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ó):
- 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.0
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.0.tar.gz | 9.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|