code: def validate(self, message):
          
          if hasattr(message, '__json__'):
              message = message.__json__()
              if isinstance(message['body'], six.text_type):
                  message['body'] = json.loads(message['body'])
              elif isinstance(message['body'], six.binary_type):
                  # Try to decode the message body as UTF-8 since it's very likely
                  # that that was the encoding used. This API should eventually only
                  # accept unicode strings inside messages. If a UnicodeDecodeError
                  # happens, let that bubble up.
                  warnings.warn('Message body is not unicode', DeprecationWarning)
                  message['body'] = json.loads(message['body'].decode('utf-8'))
  
          # Massage STOMP messages into a more compatible format.
          if 'topic' not in message['body']:
              message['body'] = {
                  'topic': message.get('topic'),
                  'msg': message['body'],
              }
  
          # If we're not validating, then everything is valid.
          # If this is turned on globally, our child class can override it.
          if not self.validate_signatures:
              return
  
          # We assume these match inside fedmsg.crypto, so we should enforce it.
          if not message['topic'] == message['body']['topic']:
              raise RuntimeWarning("Topic envelope mismatch.")
  
          if not fedmsg.crypto.validate(message['body'], **self.hub.config):
              raise RuntimeWarning("Failed to authn message.")
docs: Validate the message before the consumer processes it.
  
          This needs to raise an exception, caught by moksha.
  
          Args:
              message (dict): The message as a dictionary. This must, at a minimum,
                  contain the 'topic' key with a unicode string value and 'body' key
                  with a dictionary value. However, the message might also be an object
                  with a ``__json__`` method that returns a dict with a 'body' key that
                  can be a unicode string that is JSON-encoded.
  
          Raises:
              RuntimeWarning: If the message is not valid.
              UnicodeDecodeError: If the message body is not unicode or UTF-8 and also
                  happens to contain invalid UTF-8 binary.