Source code for plaso.formatters.hangouts_messages

# -*- coding: utf-8 -*-
"""The Google Hangouts messages database event formatter."""

from __future__ import unicode_literals

from plaso.formatters import interface
from plaso.formatters import manager
from plaso.lib import errors


_MESSAGE_TYPES = {
    1: 'SENT',
    2: 'RECEIVED'}

_MESSAGE_STATUSES = {
    0: 'UNREAD',
    4: 'READ'}


[docs]class HangoutsFormatter(interface.ConditionalEventFormatter): """Formatter for an Hangouts message event.""" DATA_TYPE = 'android:messaging:hangouts' FORMAT_STRING_PIECES = [ 'Sender: {sender}', 'Body: {body}', 'Status: {message_status}', 'Type: {message_type}'] FORMAT_STRING_SHORT_PIECES = ['{body}'] SOURCE_LONG = 'Google Hangouts Message' SOURCE_SHORT = 'HANGOUTS' # VALUE_FORMATTERS contains formatting functions for event values that are # not ready for human consumption. # These functions replace the integer codes for scan types and scan results # (a.k.a. actions) with human-readable strings. VALUE_FORMATTERS = { 'message_type': lambda message_type: _MESSAGE_TYPES[message_type], 'message_status': lambda message_status: _MESSAGE_STATUSES[message_status]}
[docs] def GetMessages(self, unused_formatter_mediator, event): """Determines the formatted message strings for an event object. If any event values have a matching formatting function in VALUE_FORMATTERS, they are run through that function; then the dictionary is passed to the superclass's formatting method. Args: unused_formatter_mediator (FormatterMediator): not used. event (EventObject): event. Returns: tuple(str, str): formatted message string and short message string. Raises: WrongFormatter: if the event object cannot be formatted by the formatter. """ if self.DATA_TYPE != event.data_type: raise errors.WrongFormatter( 'Unsupported data type: {0:s}.'.format(event.data_type)) event_values = event.CopyToDict() for formattable_value_name, formatter in self.VALUE_FORMATTERS.items(): if formattable_value_name in event_values: value = event_values[formattable_value_name] event_values[formattable_value_name] = formatter(value)
return self._ConditionalFormatMessages(event_values) manager.FormattersManager.RegisterFormatter(HangoutsFormatter)