added site creator command
This commit is contained in:
parent
ff9bdc690e
commit
9fa05d6e1f
@ -1,4 +1,4 @@
|
||||
from typing import Union
|
||||
from typing import Union, Tuple
|
||||
import tarfile
|
||||
import io
|
||||
import os
|
||||
@ -6,8 +6,11 @@ import os
|
||||
from coredb import blockmetadb
|
||||
from onionrblocks import onionrblockapi
|
||||
from onionrblocks import insert
|
||||
from onionrtypes import UserID, DeterministicKeyPassphrase # Import types. Just for type hiting
|
||||
from onionrcrypto import generate
|
||||
|
||||
# Import types. Just for type hiting
|
||||
from onionrtypes import UserID, DeterministicKeyPassphrase, BlockHash
|
||||
|
||||
from onionrcrypto import generate_deterministic
|
||||
|
||||
def find_site_gzip(user_id: str)->str:
|
||||
sites = blockmetadb.get_blocks_by_type('osite')
|
||||
@ -25,8 +28,8 @@ def get_file(user_id, file)->Union[bytes, None]:
|
||||
return site.extractfile(file)
|
||||
return None
|
||||
|
||||
def create_site(admin_pass: DeterministicKeyPassphrase, directory:str='.')->UserID:
|
||||
public_key, private_key = generate.generate_deterministic(admin_pass)
|
||||
def create_site(admin_pass: DeterministicKeyPassphrase, directory:str='.')->Tuple[UserID, BlockHash]:
|
||||
public_key, private_key = generate_deterministic(admin_pass)
|
||||
|
||||
raw_tar = io.BytesIO()
|
||||
|
||||
@ -36,6 +39,6 @@ def create_site(admin_pass: DeterministicKeyPassphrase, directory:str='.')->User
|
||||
|
||||
raw_tar.seek(0)
|
||||
|
||||
insert.insert(raw_tar.read())
|
||||
block_hash = insert(raw_tar.read(), signing_key=private_key)
|
||||
|
||||
return public_key
|
||||
return (public_key, block_hash)
|
||||
|
@ -26,7 +26,8 @@ def insert_block(data: Union[str, bytes], header: str ='txt',
|
||||
our_private_key = crypto.priv_key
|
||||
our_pub_key = crypto.pub_key
|
||||
|
||||
if signingKey != '':
|
||||
if signing_key != '':
|
||||
# if it was specified to use an alternative private key
|
||||
our_private_key = signing_key
|
||||
our_pub_key = crypto.cryptoutils.get_pub_key_from_priv(our_private_key)
|
||||
|
||||
|
@ -74,7 +74,9 @@ def register():
|
||||
try:
|
||||
if cmd != 'start': os.chdir(os.environ['ORIG_ONIONR_RUN_DIR'])
|
||||
except KeyError: pass
|
||||
arguments.get_func(cmd)()
|
||||
try:
|
||||
arguments.get_func(cmd)()
|
||||
except KeyboardInterrupt: pass
|
||||
except onionrexceptions.NotFound:
|
||||
if not register_plugin_commands(cmd) and not is_help_cmd:
|
||||
recommend.recommend()
|
||||
|
@ -30,7 +30,7 @@ from .. import softreset # command to delete onionr blocks
|
||||
from .. import restartonionr # command to restart Onionr
|
||||
from .. import runtimetestcmd
|
||||
from .. import motdcreator
|
||||
from httpapi import onionrsitesapi
|
||||
from .. import sitecreator
|
||||
|
||||
import onionrexceptions
|
||||
from onionrutils import importnewblocks # func to import new blocks
|
||||
@ -50,7 +50,7 @@ def get_arguments()->dict:
|
||||
('openhome', 'gui', 'openweb', 'open-home', 'open-web'): openwebinterface.open_home,
|
||||
('get-url', 'url', 'get-web'): openwebinterface.get_url,
|
||||
('addhtml', 'add-html'): filecommands.add_html,
|
||||
('addsite', 'add-site'): onionrsitesapi.sitefiles.create_site,
|
||||
('addsite', 'add-site', 'update-site', 'updatesite'): sitecreator.create_multipage_site,
|
||||
('addfile', 'add-file'): filecommands.add_file,
|
||||
('get-file', 'getfile'): filecommands.get_file,
|
||||
('export-block', 'exportblock'): exportblocks.export_block,
|
||||
|
40
onionr/onionrcommands/sitecreator.py
Normal file
40
onionr/onionrcommands/sitecreator.py
Normal file
@ -0,0 +1,40 @@
|
||||
import sys
|
||||
import getpass
|
||||
|
||||
from httpapi import onionrsitesapi
|
||||
import onionrexceptions
|
||||
import logger
|
||||
from etc import onionrvalues
|
||||
|
||||
def create_multipage_site():
|
||||
error_encountered = False
|
||||
try:
|
||||
directory = sys.argv[2]
|
||||
except IndexError:
|
||||
directory = '.'
|
||||
try:
|
||||
passphrase = sys.argv[3]
|
||||
except IndexError:
|
||||
logger.warn('''It is critical that this passphrase is long.
|
||||
If you want to update your site later you must remember the passphrase.''', terminal=True)
|
||||
logger.info(f'Please enter a site passphrase of at least {onionrvalues.PASSWORD_LENGTH} characters.', terminal=True)
|
||||
passphrase = getpass.getpass()
|
||||
logger.info('Confirm:', terminal=True)
|
||||
confirm = getpass.getpass()
|
||||
if passphrase != confirm:
|
||||
logger.error('Passphrases do not match', terminal=True)
|
||||
error_encountered = True
|
||||
|
||||
if len(passphrase) < onionrvalues.PASSWORD_LENGTH:
|
||||
error_encountered = True
|
||||
logger.error(f'Passphrase must be at least {onionrvalues.PASSWORD_LENGTH} characters.', terminal=True)
|
||||
|
||||
if error_encountered:
|
||||
sys.exit(1)
|
||||
|
||||
results = onionrsitesapi.sitefiles.create_site(passphrase, directory=directory)
|
||||
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)
|
||||
|
||||
create_multipage_site.onionr_help = "[directory path (default relative)] - packages a whole directory and makes it available as an Onionr site."
|
@ -6,6 +6,7 @@ import nacl.encoding, nacl.signing, nacl.exceptions
|
||||
from onionrutils import bytesconverter
|
||||
from onionrutils import mnemonickeys
|
||||
import logger
|
||||
|
||||
def ed_sign(data, key, encodeResult=False):
|
||||
'''Ed25519 sign data'''
|
||||
key = unpaddedbase32.repad(bytesconverter.str_to_bytes(key))
|
||||
|
@ -3,4 +3,6 @@ from typing import NewType
|
||||
UserID = NewType('UserID', str)
|
||||
UserIDSecretKey = NewType('UserIDSecretKey', str)
|
||||
|
||||
DeterministicKeyPassphrase = NewType('DeterministicKeyPassphrase', str)
|
||||
DeterministicKeyPassphrase = NewType('DeterministicKeyPassphrase', str)
|
||||
|
||||
BlockHash = NewType('BlockHash', str)
|
Loading…
Reference in New Issue
Block a user