Esempio n. 1
0
    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))
Esempio n. 2
0
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)
Esempio n. 3
0
File: host.py Progetto: ri0t/hfos
    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)
Esempio n. 4
0
File: host.py Progetto: ri0t/hfos
    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)
Esempio n. 5
0
 def __init__(self):
     self.username = '******'
     self.password = '******'
     self.clientuuid = std_uuid()
     self.sock = None
Esempio n. 6
0
    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)