diff --git a/app/routers/chave_manual.py b/app/routers/chave_manual.py new file mode 100644 index 0000000..56abdbe --- /dev/null +++ b/app/routers/chave_manual.py @@ -0,0 +1,19 @@ +""" +Calculadora de chave de reativação, para uso manual (reenvio/correção +pontual). 100% client-side (mesmo algoritmo gerarReativacao já usado no +workflow n8n e em Gerar chave WEB/index.html) — esta rota só serve a +página; NUNCA grava em Clientes_Chaves. +""" +from fastapi import APIRouter, Depends, Request +from fastapi.responses import HTMLResponse +from fastapi.templating import Jinja2Templates + +from ..auth import exigir_login + +router = APIRouter() +templates = Jinja2Templates(directory="app/templates") + + +@router.get("/gerador-chave", response_class=HTMLResponse) +def pagina(request: Request, usuario: str = Depends(exigir_login)): + return templates.TemplateResponse(request, "gerador_chave.html", {}) diff --git a/app/static/logo-gti-256x256.png b/app/static/logo-gti-256x256.png new file mode 100644 index 0000000..574db00 Binary files /dev/null and b/app/static/logo-gti-256x256.png differ diff --git a/app/templates/gerador_chave.html b/app/templates/gerador_chave.html new file mode 100644 index 0000000..f6d9042 --- /dev/null +++ b/app/templates/gerador_chave.html @@ -0,0 +1,85 @@ +{% extends "base.html" %} +{% block titulo %}Gerador de Chave de Reativação{% endblock %} +{% block conteudo %} +
+ GTI Grupo +

Gerador de Chave de Reativação

+ + + + + + + + + + + + +
+ + +{% endblock %} diff --git a/tests/test_router_chave_manual.py b/tests/test_router_chave_manual.py new file mode 100644 index 0000000..d4a786a --- /dev/null +++ b/tests/test_router_chave_manual.py @@ -0,0 +1,24 @@ +from fastapi import FastAPI +from fastapi.testclient import TestClient + +from app.auth import exigir_login +from app.routers import chave_manual as router_chave_manual + +app_teste = FastAPI() +app_teste.include_router(router_chave_manual.router) +app_teste.dependency_overrides[exigir_login] = lambda: "teste" +client = TestClient(app_teste) + + +def test_pagina_gerador_carrega(): + resposta = client.get("/gerador-chave") + assert resposta.status_code == 200 + assert "gerarReativacao" in resposta.text + assert "Gerador de Chave de Reativação" in resposta.text + + +def test_pagina_gerador_nao_grava_nada(): + # Rota é GET-only: não existe POST /gerador-chave, então não há como + # este router gravar em Clientes_Chaves. + resposta = client.post("/gerador-chave") + assert resposta.status_code == 405