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))
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)
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
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