class DatabaseChecker: implements(checkers.ICredentialsChecker) credentialInterfaces = credentials.IUsernamePassword, credentials.IUsernameHashedPassword def __init__(self, cp): self.cp = cp def requestAvatarId(self, creds): def _((matched, avatarId)): if matched: return avatarId else: return failure.Failure(error.UnauthorizedLogin()) return getOperator(self.cp, creds.username ).addErrback(lambda _: failure.Failure(error.UnauthorizedLogin()) ).addCallback(lambda operator: defer.maybeDeferred(creds.checkPassword, operator.password ).addCallback(lambda matched: (matched, operator)) ).addCallback(_) def getOperator(cp, username): def _(results): for row in results: return Operator(*row) raise ValueError('No such operator.') return cp.runQuery('SELECT username, password FROM operators WHERE username = %s', username ).addCallback(_)