diff --git a/lib/tfw/networking/server/controller_responder.py b/lib/tfw/networking/server/controller_responder.py index 32567d7..16a405a 100644 --- a/lib/tfw/networking/server/controller_responder.py +++ b/lib/tfw/networking/server/controller_responder.py @@ -5,11 +5,13 @@ from tfw.networking.serialization import deserialize_all, serialize_all class ControllerResponder: def __init__(self, fsm): self.fsm = fsm + self.token = None self.controller_connector = ControllerConnector() self.controller_connector.register_callback(self.handle_controller_request) self.controller_request_handlers = { 'solution_check': self.handle_solution_check_request, - 'test': self.handle_test_request + 'test': self.handle_test_request, + 'token': self.handle_token_request } def handle_controller_request(self, stream, msg_parts): @@ -20,6 +22,11 @@ class ControllerResponder: def handle_test_request(self, data): return 'OK' + def handle_token_request(self, data): + if self.token is None: + self.token = data + return {'token': self.token} + def handle_solution_check_request(self, data): return { 'solved': self.fsm.is_solved(), diff --git a/src/controller/app.py b/src/controller/app.py index 2a0b507..a6ae9b6 100644 --- a/src/controller/app.py +++ b/src/controller/app.py @@ -8,13 +8,21 @@ from handlers import SolutionCheckHandler, TestHandler from tfw.networking.async_solvable_connector import AsyncSolvableConnector from tfw.config.logs import logging + log = logging.getLogger(__name__) + +async def setup_token(solvable_connector, token): + solvable_connector.send('token', token) + key, data = await solvable_connector.recv() + log.debug('Token setup is done.') + if __name__ == '__main__': kwargs = { 'solvable_connector': AsyncSolvableConnector(), 'token': secrets.token_hex(32) } + IOLoop.instance().add_callback(setup_token, **kwargs) routes = [ (r'/{secret}/?'.format(secret=taoenv.SECRET), SolutionCheckHandler, kwargs), (r'/{secret}/test/?'.format(secret=taoenv.SECRET), TestHandler, kwargs)