blob: bdefa63d9289c6a23cb670d6082f9eb9f740eefd [file]
import json
from aiohttp_jinja2 import template
from app.utility.base_world import BaseWorld
class Contact(BaseWorld):
def __init__(self, services):
self.name = 'html'
self.description = 'Accept beacons through an HTML page'
self.app_svc = services.get('app_svc')
self.contact_svc = services.get('contact_svc')
async def start(self):
self.app_svc.application.router.add_route('*', self.get_config('app.contact.html'), self._accept_beacon)
@template('weather.html')
async def _accept_beacon(self, request):
try:
profile = json.loads(self.decode_bytes(await request.text()))
profile['paw'] = profile.get('paw')
profile['contact'] = 'html'
agent, instructions = await self.contact_svc.handle_heartbeat(**profile)
response = dict(paw=agent.paw,
sleep=await agent.calculate_sleep(),
watchdog=agent.watchdog,
instructions=json.dumps([json.dumps(i.display) for i in instructions]))
return dict(instructions=self.encode_string(json.dumps(response)))
except Exception:
return dict(instructions=[])