def invite(self, event): self.log('Inviting new user to enrol') name = event.data['name'] email = event.data['email'] method = event.data['method'] props = { 'uuid': std_uuid(), 'status': 'Open', 'name': name, 'method': method, 'email': email, 'timestamp': std_now() } enrollment = objectmodels['enrollment'](props) enrollment.save() self.log('Enrollment stored', lvl=debug) if method == 'Invited': self._send_mail(enrollment) packet = { 'component': 'hfos.enrol.manager', 'action': 'invite', 'data': {True: enrollment.serializablefields()} } self.fireEvent(send(event.client.uuid, packet))
def test_invalid_user_auth(): log = logger.LiveLog logger.live = True m.start() client_uuid = std_uuid() event = authenticationrequest(username='******', password='******', clientuuid=client_uuid, requestedclientuuid=client_uuid, sock=None, auto=False) result = transmit('authentication', 'auth', event, 'auth') assert result is None assert "No userobject due to error" in str(log)
def userlogin(self, event): """Provides the newly authenticated user with a backlog and general channel status information""" try: user_uuid = event.useruuid if user_uuid not in self.lastlogs: self.log('Setting up lastlog for a new user.', lvl=debug) lastlog = objectmodels['chatlastlog']({ 'owner': user_uuid, 'uuid': std_uuid(), 'channels': {} }) lastlog.save() self.lastlogs[user_uuid] = lastlog self.users.append(user_uuid) self.user_attention[user_uuid] = None self._send_status(user_uuid, event.clientuuid) except Exception as e: self.log('Error during chat setup of user:', e, type(e), exc=True)
def say(self, event): """Chat event handler for incoming events :param event: say-event with incoming chat message """ try: userid = event.user.uuid recipient = self._get_recipient(event) content = self._get_content(event) message = objectmodels['chatmessage']({ 'timestamp': time(), 'recipient': recipient, 'sender': userid, 'content': content, 'uuid': std_uuid() }) message.save() chat_packet = { 'component': 'hfos.chat.host', 'action': 'say', 'data': message.serializablefields() } if recipient in self.chat_channels: for useruuid in self.users: if useruuid in self.chat_channels[recipient].users: self.log('User in channel', lvl=debug) self.update_lastlog(useruuid, recipient) self.log('Sending message', lvl=debug) self.fireEvent( send(useruuid, chat_packet, sendtype='user')) except Exception as e: self.log("Error: '%s' %s" % (e, type(e)), exc=True, lvl=error)
def __init__(self): self.username = '******' self.password = '******' self.clientuuid = std_uuid() self.sock = None
def _update_guide(self, guide, update=False, clear=True): kml_filename = os.path.join(self.cache_path, guide + '.kml') geojson_filename = os.path.join(self.cache_path, guide + '.geojson') if not os.path.exists(geojson_filename) or update: try: data = request.urlopen( self.guides[guide]).read().decode('utf-8') except (request.URLError, request.HTTPError) as e: self.log('Could not get web guide data:', e, type(e), lvl=warn) return with open(kml_filename, 'w') as f: f.write(data) self._translate(kml_filename, geojson_filename) with open(geojson_filename, 'r') as f: json_data = json.loads(f.read()) if len(json_data['features']) == 0: self.log('No features found!', lvl=warn) return layer = objectmodels['layer'].find_one({'name': guide}) if clear and layer is not None: layer.delete() layer = None if layer is None: layer_uuid = std_uuid() layer = objectmodels['layer']({ 'uuid': layer_uuid, 'name': guide, 'type': 'geoobjects' }) layer.save() else: layer_uuid = layer.uuid if clear: for item in objectmodels['geoobject'].find({'layer': layer_uuid}): self.log('Deleting old guide location', lvl=debug) item.delete() locations = [] for item in json_data['features']: self.log('Adding new guide location:', item, lvl=verbose) location = objectmodels['geoobject']({ 'uuid': std_uuid(), 'layer': layer_uuid, 'geojson': item, 'name': 'Guide for %s' % (item['properties']['Name']) }) locations.append(location) self.log('Bulk inserting guide locations', lvl=debug) objectmodels['geoobject'].bulk_create(locations)