Module src.httpapi.miscpublicapi.endpoints
Onionr - Private P2P Communication
Misc public API endpoints too small to need their own file and that need access to the public api inst
Expand source code
'''
    Onionr - Private P2P Communication
    Misc public API endpoints too small to need their own file and that need access to the public api inst
'''
'''
    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/>.
'''
from flask import Response, Blueprint, request, send_from_directory, abort, g
from . import getblocks, upload, announce
from coredb import keydb
import config
class PublicEndpoints:
    def __init__(self, public_api):
        public_endpoints_bp = Blueprint('publicendpoints', __name__)
        self.public_endpoints_bp = public_endpoints_bp
        @public_endpoints_bp.route('/')
        def banner():
            # Display a bit of information to people who visit a node address in their browser
            try:
                with open('../static-data/index.html', 'r') as html:
                    resp = Response(html.read(), mimetype='text/html')
            except FileNotFoundError:
                resp = Response("")
            return resp
        @public_endpoints_bp.route('/getblocklist')
        def get_block_list():
            '''Get a list of blocks, optionally filtered by epoch time stamp, excluding those hidden'''
            return getblocks.get_public_block_list(public_api, request)
        @public_endpoints_bp.route('/getdata/<name>')
        def get_block_data(name):
            # Share data for a block if we have it and it isn't hidden
            return getblocks.get_block_data(public_api, name)
        @public_endpoints_bp.route('/www/<path:path>')
        def www_public(path):
            # A way to share files directly over your .onion
            if not config.get("www.public.run", True):
                abort(403)
            return send_from_directory(config.get('www.public.path', 'static-data/www/public/'), path)
        @public_endpoints_bp.route('/ping')
        def ping():
            # Endpoint to test if nodes are up
            return Response("pong!")
        @public_endpoints_bp.route('/pex')
        def peer_exchange():
            response = ','.join(keydb.listkeys.list_adders(recent=3600))
            if len(response) == 0:
                response = ''
            return Response(response)
        @public_endpoints_bp.route('/announce', methods=['post'])
        def accept_announce():
            '''Accept announcements with pow token to prevent spam'''
            g.shared_state = public_api._too_many
            resp = announce.handle_announce(request)
            return resp
        @public_endpoints_bp.route('/upload', methods=['post'])
        def upload_endpoint():
            '''Accept file uploads. In the future this will be done more often than on creation 
            to speed up block sync
            '''
            return upload.accept_upload(request)
Classes
class PublicEndpoints (public_api)- 
Expand source code
class PublicEndpoints: def __init__(self, public_api): public_endpoints_bp = Blueprint('publicendpoints', __name__) self.public_endpoints_bp = public_endpoints_bp @public_endpoints_bp.route('/') def banner(): # Display a bit of information to people who visit a node address in their browser try: with open('../static-data/index.html', 'r') as html: resp = Response(html.read(), mimetype='text/html') except FileNotFoundError: resp = Response("") return resp @public_endpoints_bp.route('/getblocklist') def get_block_list(): '''Get a list of blocks, optionally filtered by epoch time stamp, excluding those hidden''' return getblocks.get_public_block_list(public_api, request) @public_endpoints_bp.route('/getdata/<name>') def get_block_data(name): # Share data for a block if we have it and it isn't hidden return getblocks.get_block_data(public_api, name) @public_endpoints_bp.route('/www/<path:path>') def www_public(path): # A way to share files directly over your .onion if not config.get("www.public.run", True): abort(403) return send_from_directory(config.get('www.public.path', 'static-data/www/public/'), path) @public_endpoints_bp.route('/ping') def ping(): # Endpoint to test if nodes are up return Response("pong!") @public_endpoints_bp.route('/pex') def peer_exchange(): response = ','.join(keydb.listkeys.list_adders(recent=3600)) if len(response) == 0: response = '' return Response(response) @public_endpoints_bp.route('/announce', methods=['post']) def accept_announce(): '''Accept announcements with pow token to prevent spam''' g.shared_state = public_api._too_many resp = announce.handle_announce(request) return resp @public_endpoints_bp.route('/upload', methods=['post']) def upload_endpoint(): '''Accept file uploads. In the future this will be done more often than on creation to speed up block sync ''' return upload.accept_upload(request)