Pipeline de Busca e Mapeamento de Perfil¶
O django-govbr-auth utiliza o padrão de projeto Chain of Responsibility (Cadeia de Responsabilidade) para busca de dados (USER_INFO_FETCHERS) e mapeamento de atributos (USER_INFO_MAPPERS).
1. Cadeia de Busca (USER_INFO_FETCHERS)¶
O elo padrão DefaultEndpointsUserInfoFetcher consome os endpoints em USER_INFO_ENDPOINTS:
GOVBR_AUTH = {
"USER_INFO_ENDPOINTS": [
"/userinfo",
],
}
Você pode estender a cadeia USER_INFO_FETCHERS no settings.py para consultar APIs externas ou LDAP:
# meu_app/fetchers.py
from django_govbr_auth.fetchers import BaseUserInfoFetcher
class ExternalLdapFetcher(BaseUserInfoFetcher):
def fetch(self, client, access_token, user_info=None):
user_info = super().fetch(client, access_token, user_info)
cpf = user_info.get("sub")
if cpf:
user_info["ldap"] = meu_ldap.buscar_por_cpf(cpf)
return user_info
# settings.py
GOVBR_AUTH = {
"USER_INFO_FETCHERS": [
"django_govbr_auth.fetchers.DefaultEndpointsUserInfoFetcher",
"meu_app.fetchers.ExternalLdapFetcher",
],
}
2. Cadeia de Mapeamento (USER_INFO_MAPPERS)¶
O elo padrão DefaultAttrMapUserMapper aplica o dicionário de regras USER_ATTR_MAP:
GOVBR_AUTH = {
"USER_INFO_MAPPERS": [
"django_govbr_auth.mappers.DefaultAttrMapUserMapper",
],
"USER_ATTR_MAP": {
"username": "sub",
"email": "email",
"cpf": {
"key": "sub",
"transform": "django_govbr_auth.transformers.format_cpf",
},
"foto": {
"key": "picture",
"transform": "django_govbr_auth.transformers.fetch_image_file",
},
},
}