¿Qué hace este código de AuthKit? (¿Dónde se definen estas funciones y métodos?)
Pregunta
estoy tratando de Implemente mi propio método de autenticación para AuthKit Y estoy tratando de descubrir cómo funcionan algunos de los métodos incorporados. En particular, estoy tratando de descubrir cómo actualizar el REMOTE_USER
por environ
correctamente.
Así es como se maneja dentro de authkit.authenticate.basic
Pero es bastante confuso. No puedo encontrar ningún lugar donde REMOTE_USER
y AUTH_TYPE
están definidos. ¿Hay algo extraño aquí y, de ser así, qué es?
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)
En realidad, hay varias cosas mayúsculas como esta para las que no puedo encontrar una definición. Por ejemplo, donde hace AUTHORIZATION
Ven desde abajo:
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()
Siento que tal vez me estoy perdiendo un manejo especial de sintaxis para el environ
dict, pero es posible que haya algo más realmente extraño aquí que no sea de inmediato para alguien tan nuevo en Python como yo.
Solución
Mirando esa fuente, veo que tiene un (mal)
from paste.httpheaders import *
Esa es una forma en que, de lo contrario, los nombres de barenos misteriosos podrían aparecer repentinamente en el código (que es exactamente por qué este idioma es una práctica muy, muy mala). No puedo estar seguro de que esos identificadores se materialicen repentina e inexplicablemente, pero es una posibilidad.