Example #1
0
    def process_event(self, store, message):
        message_desc = rtip.receiver_serialize_message(message)

        # message.type can be 'receiver' or 'wb' at the moment, we care of the latter
        if message.type == u"receiver":
            return

        tip_desc = serialize_receivertip(message.receivertip)

        context_desc = admin.admin_serialize_context(store,
                                                     message.receivertip.internaltip.context,
                                                     self.language)

        steps_desc = admin.db_get_context_steps(store,
                                                context_desc['id'],
                                                self.language)

        do_mail, receiver_desc = self.import_receiver(message.receivertip.receiver)

        self.events.append(Event(type=self.template_type,
                                 trigger=self.trigger,
                                 node_info={},
                                 receiver_info=receiver_desc,
                                 context_info=context_desc,
                                 steps_info=steps_desc,
                                 tip_info=tip_desc,
                                 subevent_info=message_desc,
                                 do_mail=do_mail))
Example #2
0
    def load_messages(self, store):

        not_notified_messages = store.find(models.Message,
                                           models.Message.mark == u'not notified')

        if not_notified_messages.count():
            log.debug("Messages found to be notified: %d" % not_notified_messages.count())

        for message in not_notified_messages:

            message_desc = rtip.receiver_serialize_message(message)
            message.mark = u'notified'

            # message.type can be 'receiver' or 'wb' at the moment, we care of the 2nd
            if message.type == u"receiver":
                continue

            tip_desc = serialize_receivertip(message.receivertip)

            self.do_mail = self.import_receiver(message.receivertip.receiver)

            # this check is to avoid ask continuously the same context:
            if not self.context_desc.has_key('id') or \
                            self.context_desc['id'] != message.receivertip.internaltip.context_id:
                self.context_desc = admin.admin_serialize_context(store,
                                                                  message.receivertip.internaltip.context,
                                                                  self.language)
                self.steps_info_desc = admin.db_get_context_steps(store,
                                                                  self.context_desc['id'],
                                                                  self.language)

            # append the event based on the self.* and the iteration serialization:
            self.append_event(tip_info=tip_desc,
                              subevent_info=message_desc)
Example #3
0
    def process_event(self, store, message):
        message_desc = rtip.receiver_serialize_message(message)

        # message.type can be 'receiver' or 'wb' at the moment, we care of the latter
        if message.type == u"receiver":
            return

        tip_desc = serialize_receivertip(store, message.receivertip, self.language)

        context_desc = admin.admin_serialize_context(store,
                                                     message.receivertip.internaltip.context,
                                                     self.language)

        do_mail, receiver_desc = self.import_receiver(message.receivertip.receiver)

        self.events.append(Event(type=self.template_type,
                                 trigger=self.trigger,
                                 node_info={},
                                 receiver_info=receiver_desc,
                                 context_info=context_desc,
                                 tip_info=tip_desc,
                                 subevent_info=message_desc,
                                 do_mail=do_mail))
    def db_load(self, store):
        not_notified_messages = store.find(models.Message,
                                           models.Message.new == True)

        if not_notified_messages.count():
            log.debug("Messages found to be notified: %d" % not_notified_messages.count())

        for message in not_notified_messages:
            message_desc = rtip.receiver_serialize_message(message)

            # message.type can be 'receiver' or 'wb' at the moment, we care of the latter
            if message.type == u"receiver":
                continue

            tip_desc = serialize_receivertip(message.receivertip)

            context_desc = admin.admin_serialize_context(store,
                                                         message.receivertip.internaltip.context,
                                                         self.language)

            steps_desc = admin.db_get_context_steps(store,
                                                    context_desc['id'],
                                                    self.language)

            do_mail, receiver_desc = self.import_receiver(message.receivertip.receiver)

            self.events.append(Event(type=self.template_type,
                                     trigger=self.trigger,
                                     node_info={},
                                     receiver_info=receiver_desc,
                                     context_info=context_desc,
                                     steps_info=steps_desc,
                                     tip_info=tip_desc,
                                     subevent_info=message_desc,
                                     do_mail=do_mail))

            message.new = False
    def create_message_notification_events(self, store, notification_counter):
        """
        Creates events for performing notification of newly added messages.

        Returns:
            events: a list of tuples containing ((message_id, receiver_id), an instance of
                :class:`globaleaks.plugins.base.Event`).


        """
        events = []
        cplugin = GLSetting.notification_plugins[0]

        plugin = getattr(notification, cplugin)()

        not_notified_messages = store.find(
            models.Message, models.Message.mark == models.Message._marker[0])

        node_desc = admin.db_admin_serialize_node(
            store, GLSetting.memory_copy.default_language)

        if not_notified_messages.count():
            log.debug("Messages found to be notified: %d" %
                      not_notified_messages.count())

        for message in not_notified_messages:

            notification_counter += 1
            if notification_counter >= GLSetting.notification_limit:
                log.debug(
                    "Notification counter has reached the suggested limit: %d (messages)"
                    % notification_counter)
                break

            if message.receivertip is None:
                log.err("Message %s has ReceiverTip broken reference" %
                        message.id)
                message.mark = models.Message._marker[2]  # 'unable to notify'
                continue

            tip_desc = serialize_receivertip(message.receivertip)

            receiver = store.find(
                Receiver,
                Receiver.id == message.receivertip.receiver_id).one()
            if not receiver:
                log.err("Message %s do not find receiver!?" % message.id)

            if not receiver.mail_address:
                log.err("Receiver %s lack of email address!" % receiver.name)
                continue

            receiver_desc = admin.admin_serialize_receiver(
                receiver, GLSetting.memory_copy.default_language)
            log.debug("Messages receiver: %s" %
                      message.receivertip.receiver.name)

            context = message.receivertip.internaltip.context
            if not context:
                log.err("Reference chain fail!")
                continue

            context_desc = admin.admin_serialize_context(
                context, GLSetting.memory_copy.default_language)

            message_desc = rtip.receiver_serialize_message(message)
            message.mark = u'notified'  # models.Message._marker[1]

            if message.type == u"receiver":
                log.debug("Receiver is the Author (%s): skipped" %
                          receiver.user.username)
                continue

            # check if the receiver has the Message notification enabled or not
            if not receiver.message_notification:
                log.debug(
                    "Receiver %s has message notification disabled: skipped [source: %s]"
                    % (receiver.user.username, message.author))
                continue

            if receiver_desc[
                    'gpg_key_status'] == u'Enabled':  # Receiver._gpg_types[1]
                template_type = u'encrypted_message'
            else:
                template_type = u'plaintext_message'

            event = Event(type=template_type,
                          trigger='Message',
                          notification_settings=self.notification_settings,
                          trigger_info=message_desc,
                          trigger_parent=tip_desc,
                          node_info=node_desc,
                          receiver_info=receiver_desc,
                          context_info=context_desc,
                          plugin=plugin)

            events.append(((unicode(message.id), unicode(receiver.id)), event))

        return events, notification_counter
Example #6
0
    def create_message_notification_events(self, store, notification_counter):
        """
        Creates events for performing notification of newly added messages.

        Returns:
            events: a list of tuples containing ((message_id, receiver_id), an instance of
                :class:`globaleaks.plugins.base.Event`).


        """
        language = GLSetting.memory_copy.default_language
        events = []
        cplugin = GLSetting.notification_plugins[0]

        plugin = getattr(notification, cplugin)()

        not_notified_messages = store.find(models.Message,
                                           models.Message.mark == models.Message._marker[0]
        )

        node_desc = admin.db_admin_serialize_node(store, language)

        if not_notified_messages.count():
            log.debug("Messages found to be notified: %d" % not_notified_messages.count() )

        for message in not_notified_messages:

            notification_counter += 1
            if notification_counter >= GLSetting.notification_limit:
                log.debug("Notification counter has reached the suggested limit: %d (messages)" %
                          notification_counter)
                store.remove(message)
                break

            if message.receivertip is None:
                log.err("Message %s has ReceiverTip broken reference" % message.id)
                message.mark = models.Message._marker[2] # 'unable to notify'
                continue

            tip_desc = serialize_receivertip(message.receivertip)

            receiver = models.Receiver.get(store, message.receivertip.receiver_id)
            if not receiver:
                log.err("Message %s do not find receiver!?" % message.id)

            if not receiver.mail_address:
                log.err("Receiver %s lack of email address!" % receiver.name)
                continue

            receiver_desc = admin.admin_serialize_receiver(receiver, language)
            log.debug("Messages receiver: %s" % message.receivertip.receiver.name)

            context = message.receivertip.internaltip.context
            if not context:
                log.err("Reference chain fail!")
                continue

            context_desc = admin.admin_serialize_context(store, context, language)

            message_desc = rtip.receiver_serialize_message(message)
            message.mark = u'notified' # models.Message._marker[1]

            if message.type == u"receiver":
                log.debug("Receiver is the Author (%s): skipped" % receiver.user.username)
                continue

            # check if the receiver has the Message notification enabled or not
            if not receiver.message_notification:
                log.debug("Receiver %s has message notification disabled: skipped [source: %s]" % (
                    receiver.user.username, message.author))
                continue

            if  receiver_desc['gpg_key_status'] == u'Enabled': # Receiver._gpg_types[1]
                template_type = u'encrypted_message'
            else:
                template_type = u'plaintext_message'

            notification_settings = self._get_notification_settings(store, receiver_desc['language'])

            event = Event(type=template_type, trigger='Message',
                          notification_settings=notification_settings,
                          trigger_info=message_desc,
                          trigger_parent=tip_desc,
                          node_info=node_desc,
                          receiver_info=receiver_desc,
                          context_info=context_desc,
                          steps_info = admin.db_get_context_steps(store,
                                                                  context_desc['id'],
                                                                  language),
                          plugin=plugin)

            events.append(((unicode(message.id), unicode(receiver.id)), event))

        return events, notification_counter