Generate only password, encode username/password only on login

This commit is contained in:
Henrique Coura 2018-09-26 11:54:57 -03:00
parent 37cfb49805
commit e57a629efc
3 changed files with 14 additions and 15 deletions

View File

@ -53,20 +53,14 @@ class TelnetConsole(protocol.ServerFactory):
self.portrange = [int(x) for x in crawler.settings.getlist('TELNETCONSOLE_PORT')]
self.host = crawler.settings['TELNETCONSOLE_HOST']
username = crawler.settings.get('TELNETCONSOLE_USERNAME', None)
if username:
self.username = username.encode('utf8')
else:
self.username = binascii.hexlify(os.urandom(8))
self.username = crawler.settings['TELNETCONSOLE_USERNAME']
self.password = crawler.settings['TELNETCONSOLE_PASSWORD']
password = crawler.settings.get('TELNETCONSOLE_PASSWORD', None)
if password:
self.password = password.encode('utf8')
else:
self.password = binascii.hexlify(os.urandom(8))
if not self.password:
self.password = binascii.hexlify(os.urandom(8)).decode('utf8')
logger.info('Telnet Username: %s', self.username)
logger.info('Telnet Password: %s', self.password)
logger.info('Telnet Username: %s' % self.username)
logger.info('Telnet Password: %s' % self.password)
self.crawler.signals.connect(self.start_listening, signals.engine_started)
self.crawler.signals.connect(self.stop_listening, signals.engine_stopped)
@ -89,8 +83,8 @@ class TelnetConsole(protocol.ServerFactory):
"""An implementation of IPortal"""
@defers
def login(self_, credentials, mind, *interfaces):
if not (credentials.username == self.username and
credentials.checkPassword(self.password)):
if not (credentials.username == self.username.encode('utf8') and
credentials.checkPassword(self.password.encode('utf8'))):
raise ValueError("Invalid credentials")
protocol = telnet.TelnetBootstrapProtocol(

View File

@ -277,6 +277,8 @@ USER_AGENT = 'Scrapy/%s (+https://scrapy.org)' % import_module('scrapy').__versi
TELNETCONSOLE_ENABLED = 1
TELNETCONSOLE_PORT = [6023, 6073]
TELNETCONSOLE_HOST = '127.0.0.1'
TELNETCONSOLE_USERNAME = 'scrapy'
TELNETCONSOLE_PASSWORD = None
SPIDER_CONTRACTS = {}
SPIDER_CONTRACTS_BASE = {

View File

@ -41,7 +41,10 @@ class TelnetExtensionTest(unittest.TestCase):
@defer.inlineCallbacks
def test_good_credentials(self):
console, portal = self._get_console_and_portal()
creds = credentials.UsernamePassword(console.username, console.password)
creds = credentials.UsernamePassword(
console.username.encode('utf8'),
console.password.encode('utf8')
)
d = portal.login(creds, None, ITelnetProtocol)
yield d
console.stop_listening()