diff --git a/README.md b/README.md index d02bac2f..fc9774e2 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,6 @@ -current stored block count - | | | | diff --git a/src/httpapi/onionrsitesapi/__init__.py b/src/httpapi/onionrsitesapi/__init__.py index 0cfe0fec..a00fb39d 100644 --- a/src/httpapi/onionrsitesapi/__init__.py +++ b/src/httpapi/onionrsitesapi/__init__.py @@ -1,8 +1,21 @@ -""" - Onionr - Private P2P Communication +"""Onionr - Private P2P Communication. - view and interact with onionr sites +view and interact with onionr sites """ +import base64 +import binascii +import mimetypes + +import unpaddedbase32 + +from flask import Blueprint, Response, request, abort + +from onionrblocks import onionrblockapi +import onionrexceptions +from onionrutils import stringvalidators +from utils import safezip +from onionrutils import mnemonickeys +from . import sitefiles """ 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 @@ -17,19 +30,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ -import base64 -import binascii -import mimetypes -import unpaddedbase32 - -from flask import Blueprint, Response, request, abort - -from onionrblocks import onionrblockapi -import onionrexceptions -from onionrutils import stringvalidators -from onionrutils import mnemonickeys -from . import sitefiles site_api = Blueprint('siteapi', __name__) diff --git a/src/httpapi/onionrsitesapi/sitefiles.py b/src/httpapi/onionrsitesapi/sitefiles.py index 79d66d49..f9171926 100644 --- a/src/httpapi/onionrsitesapi/sitefiles.py +++ b/src/httpapi/onionrsitesapi/sitefiles.py @@ -1,21 +1,6 @@ -""" - Onionr - Private P2P Communication +"""Onionr - Private P2P Communication. - Read onionr site files -""" -""" - 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 . +Read onionr site files """ from typing import Union, Tuple import tarfile @@ -32,30 +17,52 @@ from onionrblocks import insert from onionrtypes import UserID, DeterministicKeyPassphrase, BlockHash from onionrcrypto import generate_deterministic +""" + 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 . +""" + def find_site_gzip(user_id: str)->tarfile.TarFile: """Return verified site tar object""" sites = blockmetadb.get_blocks_by_type('osite') user_site = None + unpadded_user = user_id user_id = unpaddedbase32.repad(user_id) for site in sites: block = onionrblockapi.Block(site) - if block.isSigner(user_id): + if block.isSigner(user_id) or block.isSigner(unpadded_user): user_site = block if not user_site is None: return tarfile.open(fileobj=io.BytesIO(user_site.bcontent), mode='r') return None + def get_file(user_id, file)->Union[bytes, None]: """Get a site file content""" ret_data = "" site = find_site_gzip(user_id) + + if file.endswith('/'): + file += 'index.html' if site is None: return None for t_file in site.getmembers(): + if t_file.name.replace('./', '') == file: return site.extractfile(t_file) return None + def create_site(admin_pass: DeterministicKeyPassphrase, directory:str='.')->Tuple[UserID, BlockHash]: public_key, private_key = generate_deterministic(admin_pass) diff --git a/src/onionrcommands/sitecreator.py b/src/onionrcommands/sitecreator.py index b0d14ed0..e0d6360b 100644 --- a/src/onionrcommands/sitecreator.py +++ b/src/onionrcommands/sitecreator.py @@ -3,6 +3,7 @@ Command to create Onionr mutli-page sites """ import sys +import os import getpass from httpapi import onionrsitesapi @@ -27,8 +28,11 @@ from etc import onionrvalues def create_multipage_site(): """Command to create mutlipage sites with specified dir and password.""" error_encountered = False + orig_dir = os.getcwd() try: directory = sys.argv[2] + os.chdir(directory) + directory = '.' except IndexError: directory = '.' try: @@ -51,7 +55,7 @@ If you want to update your site later you must remember the passphrase.''', error_encountered = True logger.error( f'Passphrase must be at least {onionrvalues.PASSWORD_LENGTH}' + - 'characters.', terminal=True) + ' characters.', terminal=True) if error_encountered: sys.exit(1) @@ -61,6 +65,7 @@ If you want to update your site later you must remember the passphrase.''', results = (results[0].replace('=', ''), results[1]) logger.info(f'Site address {results[0]}', terminal=True) logger.info(f'Block for this version {results[1]}', terminal=True) + os.chdir(orig_dir) create_multipage_site.onionr_help = "[directory path " # type: ignore