O que esse código do AuthKit faz? (Onde essas funções e métodos estão definidos?)
Pergunta
estou tentando implementar meu próprio método de autenticação para autkit E estou tentando descobrir como funcionam alguns dos métodos internos. Em particular, estou tentando descobrir como atualizar o REMOTE_USER
por environ
corretamente.
É assim que é tratado dentro de authkit.authenticate.basic
Mas é bastante confuso. Não consigo encontrar nenhum lugar onde REMOTE_USER
e AUTH_TYPE
são definidos. Há algo de estranho acontecendo aqui e se sim, o que é?
def __call__(self, environ, start_response):
environ['authkit.users'] = self.users
result = self.authenticate(environ)
if isinstance(result, str):
AUTH_TYPE.update(environ, 'basic')
REMOTE_USER.update(environ, result)
return self.application(environ, start_response)
Na verdade, existem várias coisas como essa, que não consigo encontrar uma definição. Por exemplo, onde faz AUTHORIZATION
Venha de baixo:
def authenticate(self, environ):
authorization = AUTHORIZATION(environ)
if not authorization:
return self.build_authentication()
(authmeth, auth) = authorization.split(' ',1)
if 'basic' != authmeth.lower():
return self.build_authentication()
auth = auth.strip().decode('base64')
username, password = auth.split(':',1)
if self.authfunc(environ, username, password):
return username
return self.build_authentication()
Eu sinto que talvez esteja perdendo algum manuseio especial de sintaxe para o environ
Dict, mas é possível que haja algo mais estranho acontecendo aqui que não seja imediatamente óbvio para alguém tão novo no Python quanto para mim.
Solução
Olhando para essa fonte, vejo que tem um (mal)
from paste.httpheaders import *
Essa é uma maneira de que os barenames de outra maneira podem aparecer repentinamente no código (e é exatamente por isso que esse idioma é uma prática muito, muito ruim). Não posso ter certeza de que é assim que esses identificadores se materializam de repente e inexplicavelmente, mas é uma possibilidade.