work on plugins doing http endpoints
This commit is contained in:
parent
11625b297a
commit
c89bf5b430
0
.gitlab-ci.yml
Normal file → Executable file
0
.gitlab-ci.yml
Normal file → Executable file
3
Makefile
3
Makefile
@ -2,6 +2,9 @@ PREFIX = /usr/local
|
||||
|
||||
.DEFAULT_GOAL := setup
|
||||
|
||||
SHELL := env ONIONR_HOME=$(ONIONR_HOME) $(SHELL)
|
||||
ONIONR_HOME ?= "data"
|
||||
|
||||
setup:
|
||||
sudo pip3 install -r requirements.txt
|
||||
-@cd onionr/static-data/ui/; ./compile.py
|
||||
|
0
onionr/__init__.py
Normal file → Executable file
0
onionr/__init__.py
Normal file → Executable file
@ -25,7 +25,8 @@ import sys, random, threading, hmac, base64, time, os, json, socket
|
||||
import core
|
||||
from onionrblockapi import Block
|
||||
import onionrutils, onionrexceptions, onionrcrypto, blockimporter, onionrevents as events, logger, config
|
||||
from httpapi import friendsapi
|
||||
import httpapi
|
||||
from httpapi import friendsapi, simplecache
|
||||
import onionr
|
||||
|
||||
class FDSafeHandler(WSGIHandler):
|
||||
@ -279,6 +280,8 @@ class API:
|
||||
self.queueResponse = {}
|
||||
onionrInst.setClientAPIInst(self)
|
||||
app.register_blueprint(friendsapi.friends)
|
||||
app.register_blueprint(simplecache.simplecache)
|
||||
httpapi.load_plugin_blueprints(app)
|
||||
|
||||
@app.before_request
|
||||
def validateRequest():
|
||||
@ -521,13 +524,13 @@ class API:
|
||||
responseTimeout = 20
|
||||
startTime = self._core._utils.getEpoch()
|
||||
postData = {}
|
||||
print('spth', subpath)
|
||||
if request.method == 'POST':
|
||||
postData = request.form['postData']
|
||||
if len(subpath) > 1:
|
||||
data = subpath.split('/')
|
||||
if len(data) > 1:
|
||||
plName = data[0]
|
||||
|
||||
events.event('pluginRequest', {'name': plName, 'path': subpath, 'pluginResponse': pluginResponseCode, 'postData': postData}, onionr=onionrInst)
|
||||
while True:
|
||||
try:
|
||||
|
0
onionr/communicatorutils/onionrcommunicatortimers.py
Normal file → Executable file
0
onionr/communicatorutils/onionrcommunicatortimers.py
Normal file → Executable file
@ -19,7 +19,7 @@
|
||||
'''
|
||||
import sqlite3, os, sys, time, math, base64, tarfile, nacl, logger, json, netcontroller, math, config, uuid
|
||||
from onionrblockapi import Block
|
||||
|
||||
import deadsimplekv as simplekv
|
||||
import onionrutils, onionrcrypto, onionrproofs, onionrevents as events, onionrexceptions
|
||||
import onionrblacklist
|
||||
from onionrusers import onionrusers
|
||||
@ -65,6 +65,7 @@ class Core:
|
||||
self.dataNonceFile = self.dataDir + 'block-nonces.dat'
|
||||
self.dbCreate = dbcreator.DBCreator(self)
|
||||
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
|
||||
self.killSockets = False
|
||||
@ -105,7 +106,6 @@ class Core:
|
||||
logger.warn('Warning: address bootstrap file not found ' + self.bootstrapFileLocation)
|
||||
|
||||
self._utils = onionrutils.OnionrUtils(self)
|
||||
self.blockCache = onionrstorage.BlockCache()
|
||||
# Initialize the crypto object
|
||||
self._crypto = onionrcrypto.OnionrCrypto(self)
|
||||
self._blacklist = onionrblacklist.OnionrBlackList(self)
|
||||
|
10
onionr/httpapi/__init__.py
Executable file
10
onionr/httpapi/__init__.py
Executable file
@ -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
onionr/httpapi/friendsapi/__init__.py
Normal file → Executable file
0
onionr/httpapi/friendsapi/__init__.py
Normal file → Executable file
31
onionr/httpapi/simplecache/__init__.py
Executable file
31
onionr/httpapi/simplecache/__init__.py
Executable file
@ -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
|
0
onionr/onionrfragment.py
Normal file → Executable file
0
onionr/onionrfragment.py
Normal file → Executable file
@ -59,7 +59,6 @@ def reload(onionr = None, stop_event = True):
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def enable(name, onionr = None, start_event = True):
|
||||
'''
|
||||
Enables a plugin
|
||||
|
@ -21,13 +21,6 @@ import core, sys, sqlite3, os, dbcreator
|
||||
|
||||
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):
|
||||
try:
|
||||
dbcreator.DBCreator(coreInst).createBlockDataDB()
|
||||
@ -84,7 +77,6 @@ def store(coreInst, data, blockHash=''):
|
||||
else:
|
||||
with open('%s/%s.dat' % (coreInst.blockDataLocation, blockHash), 'wb') as blockFile:
|
||||
blockFile.write(data)
|
||||
coreInst.blockCache.cleanCache()
|
||||
|
||||
def getData(coreInst, bHash):
|
||||
assert isinstance(coreInst, core.Core)
|
||||
|
0
onionr/onionrusers/contactmanager.py
Normal file → Executable file
0
onionr/onionrusers/contactmanager.py
Normal file → Executable file
0
onionr/static-data/default-plugins/contactmanager/info.json
Normal file → Executable file
0
onionr/static-data/default-plugins/contactmanager/info.json
Normal file → Executable file
0
onionr/static-data/default-plugins/contactmanager/main.py
Normal file → Executable file
0
onionr/static-data/default-plugins/contactmanager/main.py
Normal file → Executable file
@ -23,15 +23,21 @@ import logger, config, threading, time, readline, datetime
|
||||
from onionrblockapi import Block
|
||||
import onionrexceptions
|
||||
from onionrusers import onionrusers
|
||||
from flask import Response, request, redirect, Blueprint
|
||||
import locale, sys, os, json
|
||||
|
||||
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__)))
|
||||
import sentboxdb # import after path insert
|
||||
|
||||
plugin_name = 'pms'
|
||||
PLUGIN_VERSION = '0.0.1'
|
||||
@flask_blueprint.route('/mailhello')
|
||||
def mailhello():
|
||||
return "hello world from mail"
|
||||
|
||||
def draw_border(text):
|
||||
#https://stackoverflow.com/a/20757491
|
||||
@ -190,7 +196,6 @@ class OnionrMail:
|
||||
finally:
|
||||
if choice == '-q':
|
||||
entering = False
|
||||
|
||||
return
|
||||
|
||||
def get_sent_list(self, display=True):
|
||||
@ -293,6 +298,15 @@ class OnionrMail:
|
||||
logger.warn('Invalid choice.')
|
||||
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={}):
|
||||
sentboxTools = sentboxdb.SentBox(api.get_core())
|
||||
meta = json.loads(data['meta'])
|
||||
@ -306,11 +320,17 @@ def on_pluginrequest(api, data=None):
|
||||
postData = {}
|
||||
blockID = ''
|
||||
sentboxTools = sentboxdb.SentBox(api.get_core())
|
||||
keyStore = api.get_core().keyStore
|
||||
if data['name'] == 'mail':
|
||||
path = data['path']
|
||||
print(cmd)
|
||||
cmd = path.split('/')[1]
|
||||
if cmd == 'sentbox':
|
||||
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 != '':
|
||||
api.get_onionr().clientAPIInst.pluginResponses[data['pluginResponse']] = resp
|
||||
|
||||
@ -325,4 +345,5 @@ def on_init(api, data = None):
|
||||
mail = OnionrMail(pluginapi)
|
||||
api.commands.register(['mail'], mail.menu)
|
||||
api.commands.register_help('mail', 'Interact with OnionrMail')
|
||||
print("YEET2")
|
||||
return
|
||||
|
0
onionr/static-data/www/friends/friends.js
Normal file → Executable file
0
onionr/static-data/www/friends/friends.js
Normal file → Executable file
0
onionr/static-data/www/friends/index.html
Normal file → Executable file
0
onionr/static-data/www/friends/index.html
Normal file → Executable file
0
onionr/static-data/www/friends/style.css
Normal file → Executable file
0
onionr/static-data/www/friends/style.css
Normal file → Executable file
@ -233,7 +233,6 @@ for (var i = 0; i < idStrings.length; i++){
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (var i = 0; i < document.getElementsByClassName('refresh').length; i++){
|
||||
document.getElementsByClassName('refresh')[i].style.float = 'right'
|
||||
}
|
||||
|
0
onionr/static-data/www/mail/sendmail.js
Normal file → Executable file
0
onionr/static-data/www/mail/sendmail.js
Normal file → Executable file
0
onionr/tests/test_blocks.py
Normal file → Executable file
0
onionr/tests/test_blocks.py
Normal file → Executable file
0
onionr/tests/test_database_actions.py
Normal file → Executable file
0
onionr/tests/test_database_actions.py
Normal file → Executable file
0
onionr/tests/test_database_creation.py
Normal file → Executable file
0
onionr/tests/test_database_creation.py
Normal file → Executable file
0
onionr/tests/test_forward_secrecy.py
Normal file → Executable file
0
onionr/tests/test_forward_secrecy.py
Normal file → Executable file
0
onionr/tests/test_highlevelcrypto.py
Normal file → Executable file
0
onionr/tests/test_highlevelcrypto.py
Normal file → Executable file
0
onionr/tests/test_onionrusers.py
Normal file → Executable file
0
onionr/tests/test_onionrusers.py
Normal file → Executable file
0
onionr/tests/test_stringvalidations.py
Normal file → Executable file
0
onionr/tests/test_stringvalidations.py
Normal file → Executable file
0
onionr/utils/netutils.py
Normal file → Executable file
0
onionr/utils/netutils.py
Normal file → Executable file
0
onionr/utils/networkmerger.py
Normal file → Executable file
0
onionr/utils/networkmerger.py
Normal file → Executable file
@ -6,3 +6,4 @@ defusedxml==0.5.0
|
||||
Flask==1.0.2
|
||||
PySocks==1.6.8
|
||||
stem==1.6.0
|
||||
deadsimplekv==0.0.1
|
Loading…
Reference in New Issue
Block a user