Onionr/onionr/static-data/default-plugins/pms/main.py

72 lines
2.5 KiB
Python
Raw Normal View History

'''
2019-06-20 07:59:32 +00:00
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
2019-02-17 20:21:03 +00:00
import onionrexceptions
from onionrusers import onionrusers, contactmanager
2019-07-29 18:05:27 +00:00
from utils import reconstructhash
from onionrutils import stringvalidators, escapeansi, bytesconverter
import notifier
2019-02-08 18:53:28 +00:00
import locale, sys, os, json
2018-11-03 03:24:14 +00:00
locale.setlocale(locale.LC_ALL, '')
2019-03-02 06:22:59 +00:00
plugin_name = 'pms'
PLUGIN_VERSION = '0.0.1'
2018-11-03 03:24:14 +00:00
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
2019-03-02 19:17:18 +00:00
import sentboxdb, mailapi, loadinbox # import after path insert
flask_blueprint = mailapi.flask_blueprint
security_whitelist = ['staticfiles.mail', 'staticfiles.mailindex']
2019-08-29 09:25:21 +00:00
def add_deleted(keyStore, b_hash):
2019-03-02 06:22:59 +00:00
existing = keyStore.get('deleted_mail')
2019-08-29 09:25:21 +00:00
bHash = reconstructhash.reconstruct_hash(b_hash)
2019-03-02 06:22:59 +00:00
if existing is None:
existing = []
else:
if bHash in existing:
return
2019-08-29 09:25:21 +00:00
keyStore.put('deleted_mail', existing.append(b_hash))
2019-03-02 06:22:59 +00:00
2019-02-10 18:43:45 +00:00
def on_insertblock(api, data={}):
2019-02-11 22:36:43 +00:00
meta = json.loads(data['meta'])
if meta['type'] == 'pm':
2019-07-24 18:23:31 +00:00
sentboxTools = sentboxdb.SentBox()
sentboxTools.addToSent(data['hash'], data['peer'], data['content'], meta['subject'])
2019-02-10 18:43:45 +00:00
def on_processblocks(api, data=None):
if data['type'] != 'pm':
return
data['block'].decrypt()
2019-08-08 06:25:48 +00:00
metadata = data['block'].bmetadata
signer = bytesconverter.bytes_to_str(data['block'].signer)
user = contactmanager.ContactManager(signer, saveUser=False)
name = user.get_info("name")
2019-08-08 06:25:48 +00:00
if name != 'anonymous' and name != None:
signer = name.title()
else:
signer = signer[:5]
2019-07-21 00:29:08 +00:00
if data['block'].decrypted:
2019-08-08 06:25:48 +00:00
notifier.notify(title="Onionr Mail - New Message", message="From: %s\n\nSubject: %s" % (signer, metadata['subject']))