work on plugins doing http endpoints
parent
11625b297a
commit
c89bf5b430
3
Makefile
3
Makefile
|
@ -2,6 +2,9 @@ PREFIX = /usr/local
|
||||||
|
|
||||||
.DEFAULT_GOAL := setup
|
.DEFAULT_GOAL := setup
|
||||||
|
|
||||||
|
SHELL := env ONIONR_HOME=$(ONIONR_HOME) $(SHELL)
|
||||||
|
ONIONR_HOME ?= "data"
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
sudo pip3 install -r requirements.txt
|
sudo pip3 install -r requirements.txt
|
||||||
-@cd onionr/static-data/ui/; ./compile.py
|
-@cd onionr/static-data/ui/; ./compile.py
|
||||||
|
|
|
@ -25,7 +25,8 @@ import sys, random, threading, hmac, base64, time, os, json, socket
|
||||||
import core
|
import core
|
||||||
from onionrblockapi import Block
|
from onionrblockapi import Block
|
||||||
import onionrutils, onionrexceptions, onionrcrypto, blockimporter, onionrevents as events, logger, config
|
import onionrutils, onionrexceptions, onionrcrypto, blockimporter, onionrevents as events, logger, config
|
||||||
from httpapi import friendsapi
|
import httpapi
|
||||||
|
from httpapi import friendsapi, simplecache
|
||||||
import onionr
|
import onionr
|
||||||
|
|
||||||
class FDSafeHandler(WSGIHandler):
|
class FDSafeHandler(WSGIHandler):
|
||||||
|
@ -279,6 +280,8 @@ class API:
|
||||||
self.queueResponse = {}
|
self.queueResponse = {}
|
||||||
onionrInst.setClientAPIInst(self)
|
onionrInst.setClientAPIInst(self)
|
||||||
app.register_blueprint(friendsapi.friends)
|
app.register_blueprint(friendsapi.friends)
|
||||||
|
app.register_blueprint(simplecache.simplecache)
|
||||||
|
httpapi.load_plugin_blueprints(app)
|
||||||
|
|
||||||
@app.before_request
|
@app.before_request
|
||||||
def validateRequest():
|
def validateRequest():
|
||||||
|
@ -521,13 +524,13 @@ class API:
|
||||||
responseTimeout = 20
|
responseTimeout = 20
|
||||||
startTime = self._core._utils.getEpoch()
|
startTime = self._core._utils.getEpoch()
|
||||||
postData = {}
|
postData = {}
|
||||||
|
print('spth', subpath)
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
postData = request.form['postData']
|
postData = request.form['postData']
|
||||||
if len(subpath) > 1:
|
if len(subpath) > 1:
|
||||||
data = subpath.split('/')
|
data = subpath.split('/')
|
||||||
if len(data) > 1:
|
if len(data) > 1:
|
||||||
plName = data[0]
|
plName = data[0]
|
||||||
|
|
||||||
events.event('pluginRequest', {'name': plName, 'path': subpath, 'pluginResponse': pluginResponseCode, 'postData': postData}, onionr=onionrInst)
|
events.event('pluginRequest', {'name': plName, 'path': subpath, 'pluginResponse': pluginResponseCode, 'postData': postData}, onionr=onionrInst)
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -19,7 +19,7 @@
|
||||||
'''
|
'''
|
||||||
import sqlite3, os, sys, time, math, base64, tarfile, nacl, logger, json, netcontroller, math, config, uuid
|
import sqlite3, os, sys, time, math, base64, tarfile, nacl, logger, json, netcontroller, math, config, uuid
|
||||||
from onionrblockapi import Block
|
from onionrblockapi import Block
|
||||||
|
import deadsimplekv as simplekv
|
||||||
import onionrutils, onionrcrypto, onionrproofs, onionrevents as events, onionrexceptions
|
import onionrutils, onionrcrypto, onionrproofs, onionrevents as events, onionrexceptions
|
||||||
import onionrblacklist
|
import onionrblacklist
|
||||||
from onionrusers import onionrusers
|
from onionrusers import onionrusers
|
||||||
|
@ -65,6 +65,7 @@ class Core:
|
||||||
self.dataNonceFile = self.dataDir + 'block-nonces.dat'
|
self.dataNonceFile = self.dataDir + 'block-nonces.dat'
|
||||||
self.dbCreate = dbcreator.DBCreator(self)
|
self.dbCreate = dbcreator.DBCreator(self)
|
||||||
self.forwardKeysFile = self.dataDir + 'forward-keys.db'
|
self.forwardKeysFile = self.dataDir + 'forward-keys.db'
|
||||||
|
#self.keyStore = simplekv.DeadSimpleKV(self.dataDir + 'cachedstorage.dat', refresh_seconds=5)
|
||||||
|
|
||||||
# Socket data, defined here because of multithreading constraints with gevent
|
# Socket data, defined here because of multithreading constraints with gevent
|
||||||
self.killSockets = False
|
self.killSockets = False
|
||||||
|
@ -105,7 +106,6 @@ class Core:
|
||||||
logger.warn('Warning: address bootstrap file not found ' + self.bootstrapFileLocation)
|
logger.warn('Warning: address bootstrap file not found ' + self.bootstrapFileLocation)
|
||||||
|
|
||||||
self._utils = onionrutils.OnionrUtils(self)
|
self._utils = onionrutils.OnionrUtils(self)
|
||||||
self.blockCache = onionrstorage.BlockCache()
|
|
||||||
# Initialize the crypto object
|
# Initialize the crypto object
|
||||||
self._crypto = onionrcrypto.OnionrCrypto(self)
|
self._crypto = onionrcrypto.OnionrCrypto(self)
|
||||||
self._blacklist = onionrblacklist.OnionrBlackList(self)
|
self._blacklist = onionrblacklist.OnionrBlackList(self)
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
from flask import request
|
||||||
|
import onionrplugins
|
||||||
|
|
||||||
|
def load_plugin_blueprints(flaskapp):
|
||||||
|
for plugin in onionrplugins.get_enabled_plugins():
|
||||||
|
plugin = onionrplugins.get_plugin(plugin)
|
||||||
|
try:
|
||||||
|
flaskapp.register_blueprint(getattr(plugin, 'flask_blueprint'))
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
|
@ -0,0 +1,31 @@
|
||||||
|
'''
|
||||||
|
Onionr - P2P Anonymous Storage Network
|
||||||
|
|
||||||
|
This file creates http endpoints for friend management
|
||||||
|
'''
|
||||||
|
'''
|
||||||
|
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/>.
|
||||||
|
'''
|
||||||
|
import core
|
||||||
|
from flask import Blueprint, Response, request, abort
|
||||||
|
|
||||||
|
simplecache = Blueprint('simplecache', __name__)
|
||||||
|
|
||||||
|
@simplecache.route('/get/<key>')
|
||||||
|
def get_key(key):
|
||||||
|
return
|
||||||
|
|
||||||
|
@simplecache.route('/set/<key>', methods=['POST'])
|
||||||
|
def set_key(key):
|
||||||
|
return
|
|
@ -59,7 +59,6 @@ def reload(onionr = None, stop_event = True):
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def enable(name, onionr = None, start_event = True):
|
def enable(name, onionr = None, start_event = True):
|
||||||
'''
|
'''
|
||||||
Enables a plugin
|
Enables a plugin
|
||||||
|
|
|
@ -21,13 +21,6 @@ import core, sys, sqlite3, os, dbcreator
|
||||||
|
|
||||||
DB_ENTRY_SIZE_LIMIT = 10000 # Will be a config option
|
DB_ENTRY_SIZE_LIMIT = 10000 # Will be a config option
|
||||||
|
|
||||||
class BlockCache:
|
|
||||||
def __init__(self):
|
|
||||||
self.blocks = {}
|
|
||||||
def cleanCache(self):
|
|
||||||
while sys.getsizeof(self.blocks) > 100000000:
|
|
||||||
self.blocks.pop(list(self.blocks.keys())[0])
|
|
||||||
|
|
||||||
def dbCreate(coreInst):
|
def dbCreate(coreInst):
|
||||||
try:
|
try:
|
||||||
dbcreator.DBCreator(coreInst).createBlockDataDB()
|
dbcreator.DBCreator(coreInst).createBlockDataDB()
|
||||||
|
@ -84,7 +77,6 @@ def store(coreInst, data, blockHash=''):
|
||||||
else:
|
else:
|
||||||
with open('%s/%s.dat' % (coreInst.blockDataLocation, blockHash), 'wb') as blockFile:
|
with open('%s/%s.dat' % (coreInst.blockDataLocation, blockHash), 'wb') as blockFile:
|
||||||
blockFile.write(data)
|
blockFile.write(data)
|
||||||
coreInst.blockCache.cleanCache()
|
|
||||||
|
|
||||||
def getData(coreInst, bHash):
|
def getData(coreInst, bHash):
|
||||||
assert isinstance(coreInst, core.Core)
|
assert isinstance(coreInst, core.Core)
|
||||||
|
|
|
@ -23,15 +23,21 @@ import logger, config, threading, time, readline, datetime
|
||||||
from onionrblockapi import Block
|
from onionrblockapi import Block
|
||||||
import onionrexceptions
|
import onionrexceptions
|
||||||
from onionrusers import onionrusers
|
from onionrusers import onionrusers
|
||||||
|
from flask import Response, request, redirect, Blueprint
|
||||||
import locale, sys, os, json
|
import locale, sys, os, json
|
||||||
|
|
||||||
locale.setlocale(locale.LC_ALL, '')
|
locale.setlocale(locale.LC_ALL, '')
|
||||||
|
|
||||||
|
plugin_name = 'pms'
|
||||||
|
PLUGIN_VERSION = '0.0.1'
|
||||||
|
flask_blueprint = Blueprint('mail', __name__)
|
||||||
|
|
||||||
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
|
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
|
||||||
import sentboxdb # import after path insert
|
import sentboxdb # import after path insert
|
||||||
|
|
||||||
plugin_name = 'pms'
|
@flask_blueprint.route('/mailhello')
|
||||||
PLUGIN_VERSION = '0.0.1'
|
def mailhello():
|
||||||
|
return "hello world from mail"
|
||||||
|
|
||||||
def draw_border(text):
|
def draw_border(text):
|
||||||
#https://stackoverflow.com/a/20757491
|
#https://stackoverflow.com/a/20757491
|
||||||
|
@ -190,7 +196,6 @@ class OnionrMail:
|
||||||
finally:
|
finally:
|
||||||
if choice == '-q':
|
if choice == '-q':
|
||||||
entering = False
|
entering = False
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
def get_sent_list(self, display=True):
|
def get_sent_list(self, display=True):
|
||||||
|
@ -293,6 +298,15 @@ class OnionrMail:
|
||||||
logger.warn('Invalid choice.')
|
logger.warn('Invalid choice.')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def add_deleted(keyStore, bHash):
|
||||||
|
existing = keyStore.get('deleted_mail')
|
||||||
|
if existing is None:
|
||||||
|
existing = []
|
||||||
|
else:
|
||||||
|
if bHash in existing:
|
||||||
|
return
|
||||||
|
keyStore.put('deleted_mail', existing.append(bHash))
|
||||||
|
|
||||||
def on_insertblock(api, data={}):
|
def on_insertblock(api, data={}):
|
||||||
sentboxTools = sentboxdb.SentBox(api.get_core())
|
sentboxTools = sentboxdb.SentBox(api.get_core())
|
||||||
meta = json.loads(data['meta'])
|
meta = json.loads(data['meta'])
|
||||||
|
@ -306,11 +320,17 @@ def on_pluginrequest(api, data=None):
|
||||||
postData = {}
|
postData = {}
|
||||||
blockID = ''
|
blockID = ''
|
||||||
sentboxTools = sentboxdb.SentBox(api.get_core())
|
sentboxTools = sentboxdb.SentBox(api.get_core())
|
||||||
|
keyStore = api.get_core().keyStore
|
||||||
if data['name'] == 'mail':
|
if data['name'] == 'mail':
|
||||||
path = data['path']
|
path = data['path']
|
||||||
|
print(cmd)
|
||||||
cmd = path.split('/')[1]
|
cmd = path.split('/')[1]
|
||||||
if cmd == 'sentbox':
|
if cmd == 'sentbox':
|
||||||
resp = OnionrMail(api).get_sent_list(display=False)
|
resp = OnionrMail(api).get_sent_list(display=False)
|
||||||
|
elif cmd == 'deletemsg':
|
||||||
|
print('path', data['path'])
|
||||||
|
#add_deleted(keyStore, data['path'].split('/')[2])
|
||||||
|
resp = 'success'
|
||||||
if resp != '':
|
if resp != '':
|
||||||
api.get_onionr().clientAPIInst.pluginResponses[data['pluginResponse']] = resp
|
api.get_onionr().clientAPIInst.pluginResponses[data['pluginResponse']] = resp
|
||||||
|
|
||||||
|
@ -325,4 +345,5 @@ def on_init(api, data = None):
|
||||||
mail = OnionrMail(pluginapi)
|
mail = OnionrMail(pluginapi)
|
||||||
api.commands.register(['mail'], mail.menu)
|
api.commands.register(['mail'], mail.menu)
|
||||||
api.commands.register_help('mail', 'Interact with OnionrMail')
|
api.commands.register_help('mail', 'Interact with OnionrMail')
|
||||||
|
print("YEET2")
|
||||||
return
|
return
|
||||||
|
|
|
@ -233,7 +233,6 @@ for (var i = 0; i < idStrings.length; i++){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (var i = 0; i < document.getElementsByClassName('refresh').length; i++){
|
for (var i = 0; i < document.getElementsByClassName('refresh').length; i++){
|
||||||
document.getElementsByClassName('refresh')[i].style.float = 'right'
|
document.getElementsByClassName('refresh')[i].style.float = 'right'
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,3 +6,4 @@ defusedxml==0.5.0
|
||||||
Flask==1.0.2
|
Flask==1.0.2
|
||||||
PySocks==1.6.8
|
PySocks==1.6.8
|
||||||
stem==1.6.0
|
stem==1.6.0
|
||||||
|
deadsimplekv==0.0.1
|
Loading…
Reference in New Issue