Que fait ce code d'Authkit? (Où ces fonctions et méthodes sont-elles définies?)
Question
J'essaie de Implémentez ma propre méthode d'authentification pour Authkit Et j'essaie de comprendre comment fonctionnent certaines des méthodes intégrées. En particulier, j'essaie de comprendre comment mettre à jour le REMOTE_USER
pour environ
correctement.
C'est ainsi qu'il est géré à l'intérieur de authkit.authenticate.basic
Mais c'est assez déroutant. Je ne trouve aucun lieu où REMOTE_USER
et AUTH_TYPE
sont définis. Y a-t-il quelque chose d'étrange qui se passe ici et si oui, qu'est-ce que c'est?
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)
Il y a en fait un certain nombre de toutes les choses en majuscules comme celle-ci pour lesquelles je ne trouve pas de définition. Par exemple, où fait AUTHORIZATION
Viens de ci-dessous:
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()
J'ai l'impression que je manque peut-être une gestion spéciale de syntaxe pour le environ
Dict, mais il est possible qu'il y ait quelque chose d'autre vraiment bizarre ici qui n'est pas immédiatement évident pour quelqu'un d'aussi nouveau à Python que moi-même.
La solution
En regardant cette source, je vois qu'il a un (mal)
from paste.httpheaders import *
C'est une façon par ailleurs mystérieux que les Barenames pourraient soudainement apparaître dans le code (c'est exactement pourquoi cet idiome est une très, très mauvaise pratique). Je ne peux pas être sûr que c'est ainsi que ces identifiants se matérialisent soudainement et inexplicablement, mais c'est une possibilité.