🧪 Fake GovBr - Modo Desenvolvimento

FakeGovBrService

class govbr_auth.fake_govbr.FakeGovBrService(users: dict[str, FakeUserData], session_ttl: int = 600, jwt_secret: str = 'fake-govbr-secret-key-dev-only', client_id: str = 'fake-client-id')[source]

Bases: object

Serviço que simula o comportamento do Gov.br para desenvolvimento.

Mantém sessões e autorizações em memória, sem necessidade de banco de dados. Simula o fluxo OAuth 2.0 com PKCE do Gov.br real.

Parameters:
  • users – Dicionário de usuários válidos (chave=CPF, valor=FakeUserData).

  • session_ttl – Tempo de vida da sessão em segundos (padrão: 600 = 10 minutos).

  • jwt_secret – Chave secreta para assinar o id_token.

  • client_id – ID do cliente OAuth (deve coincidir com a config).

__init__(users: dict[str, FakeUserData], session_ttl: int = 600, jwt_secret: str = 'fake-govbr-secret-key-dev-only', client_id: str = 'fake-client-id')[source]
create_session(state: str, code_challenge: str, redirect_uri: str, nonce: str, scope: str = 'openid profile email') str[source]

Cria uma sessão temporária para armazenar os parâmetros OAuth.

Parameters:
  • state – State criptografado do OAuth.

  • code_challenge – Desafio PKCE.

  • redirect_uri – URI de redirecionamento.

  • nonce – Nonce para validação.

  • scope – Escopos solicitados.

Returns:

ID único da sessão criada.

Return type:

request_id

get_session(request_id: str) dict[source]

Recupera uma sessão pelo ID.

Parameters:

request_id – ID da sessão.

Returns:

Dados da sessão.

Raises:

ValueError – Se a sessão não existir ou estiver expirada.

authenticate_user(request_id: str, email: str, cpf: str) str[source]

Autentica um usuário e gera o código de autorização.

Parameters:
  • request_id – ID da sessão OAuth.

  • email – E-mail fornecido pelo usuário.

  • cpf – CPF fornecido como senha.

Returns:

URL de redirecionamento com code e state.

Raises:

ValueError – Se credenciais inválidas ou sessão inválida.

exchange_code_for_token(code: str, code_verifier: str, redirect_uri: str, client_id: str = None) dict[source]

Troca o código de autorização por tokens (simulando o endpoint /token do Gov.br).

Parameters:
  • code – Código de autorização.

  • code_verifier – Verificador PKCE.

  • redirect_uri – URI de redirecionamento (deve ser a mesma).

  • client_id – ID do cliente (opcional, para validação).

Returns:

Dicionário com access_token, id_token, etc.

Raises:

ValueError – Se código inválido ou code_verifier não corresponder.

cleanup_expired()[source]

Remove sessões e códigos expirados da memória. Deve ser chamado periodicamente para evitar vazamento de memória.

FakeUserData

class govbr_auth.fake_govbr.FakeUserData(*, cpf: str, nome: str, email: str, picture: str = 'https://www.gov.br/++theme++padrao_govbr/img/govbr-logo-large.png')[source]

Bases: BaseModel

Schema para dados de um usuário fake no sistema.

Parameters:
  • cpf – CPF do usuário (11 dígitos, usado como senha no fake).

  • nome – Nome completo do usuário.

  • email – E-mail do usuário.

  • picture – URL da foto do usuário (opcional).

cpf: str
nome: str
email: str
picture: str
model_config = {}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

Funções Auxiliares

govbr_auth.fake_govbr.create_default_fake_users() dict[str, FakeUserData][source]

Cria um conjunto de usuários fake padrão para desenvolvimento.

Returns:

Dicionário de usuários (chave=CPF).

govbr_auth.fake_govbr.render_fake_login_page(service: FakeGovBrService, auth_request: AuthorizationRequest) tuple[str, str][source]

Renderiza a página de login fake e cria a sessão OAuth.

Parameters:
  • service – Instância do FakeGovBrService.

  • auth_request – Dados da requisição de autorização.

Returns:

Tupla com (HTML da página, request_id da sessão).

govbr_auth.fake_govbr.process_fake_login(service: FakeGovBrService, request_id: str, email: str, cpf: str) str[source]

Processa o login fake e retorna a URL de redirecionamento.

Parameters:
  • service – Instância do FakeGovBrService.

  • request_id – ID da sessão OAuth.

  • email – E-mail fornecido pelo usuário.

  • cpf – CPF fornecido como senha.

Returns:

URL de redirecionamento com code e state.

Raises:

ValueError – Se credenciais inválidas.