# Module `src.data2871027835.plugins.pms.main`

Onionr - Private P2P Communication

This default plugin handles private messages in an email like fashion

Expand source code

    '''
        Onionr - Private P2P Communication

        This default plugin handles private messages in an email like fashion
    '''
    '''
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <https://www.gnu.org/licenses/>.
    '''

    # Imports some useful libraries
    import logger, config, threading, time, datetime
    import onionrexceptions
    from onionrusers import onionrusers, contactmanager
    from utils import reconstructhash
    from onionrutils import stringvalidators, escapeansi, bytesconverter
    import notifier
    import locale, sys, os, json

    locale.setlocale(locale.LC_ALL, '')

    plugin_name = 'pms'
    PLUGIN_VERSION = '0.0.1'

    sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
    import sentboxdb, mailapi, loadinbox # import after path insert
    from onblacklist import on_blacklist_add

    flask_blueprint = mailapi.flask_blueprint
    security_whitelist = ['staticfiles.mail', 'staticfiles.mailindex']

    def add_deleted(keyStore, b_hash):
        existing = keyStore.get('deleted_mail')
        bHash = reconstructhash.reconstruct_hash(b_hash)
        if existing is None:
            existing = []
        else:
            if bHash in existing:
                return
        keyStore.put('deleted_mail', existing.append(b_hash))

    def on_insertblock(api, data={}):
        meta = json.loads(data['meta'])
        if meta['type'] == 'pm':
            sentboxTools = sentboxdb.SentBox()
            sentboxTools.addToSent(data['hash'], data['peer'], data['content'], meta['subject'])

    def on_processblocks(api, data=None):
        if data['type'] != 'pm':
            return
        data['block'].decrypt()
        metadata = data['block'].bmetadata

        signer = bytesconverter.bytes_to_str(data['block'].signer)
        user = contactmanager.ContactManager(signer, saveUser=False)
        name = user.get_info("name")
        if name != 'anonymous' and name != None:
            signer = name.title()
        else:
            signer = signer[:5]

        if data['block'].decrypted:
            notifier.notify(title="Onionr Mail - New Message", message="From: %s\n\nSubject: %s" % (signer, metadata['subject']))

## Functions

`def add_deleted(keyStore, b_hash)`
  Expand source code

      def add_deleted(keyStore, b_hash):
          existing = keyStore.get('deleted_mail')
          bHash = reconstructhash.reconstruct_hash(b_hash)
          if existing is None:
              existing = []
          else:
              if bHash in existing:
                  return
          keyStore.put('deleted_mail', existing.append(b_hash))

`def on_insertblock(api, data={})`
  Expand source code

      def on_insertblock(api, data={}):
          meta = json.loads(data['meta'])
          if meta['type'] == 'pm':
              sentboxTools = sentboxdb.SentBox()
              sentboxTools.addToSent(data['hash'], data['peer'], data['content'], meta['subject'])

`def on_processblocks(api, data=None)`
  Expand source code

      def on_processblocks(api, data=None):
          if data['type'] != 'pm':
              return
          data['block'].decrypt()
          metadata = data['block'].bmetadata

          signer = bytesconverter.bytes_to_str(data['block'].signer)
          user = contactmanager.ContactManager(signer, saveUser=False)
          name = user.get_info("name")
          if name != 'anonymous' and name != None:
              signer = name.title()
          else:
              signer = signer[:5]

          if data['block'].decrypted:
              notifier.notify(title="Onionr Mail - New Message", message="From: %s\n\nSubject: %s" % (signer, metadata['subject']))