Module onionr.onionrcommands.filecommands

Onionr - Private P2P Communication

This file handles the commands for adding and getting files from the Onionr network

Source code
"""
    Onionr - Private P2P Communication

    This file handles the commands for adding and getting files from the Onionr network
"""
"""
    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 base64, sys, os
import logger
from onionrblocks.onionrblockapi import Block
import onionrexceptions
from onionrutils import stringvalidators
from etc import onionrvalues
from onionrblocks import insert
_ORIG_DIR = onionrvalues.ORIG_RUN_DIR_ENV_VAR

def _get_dir(path: str)->str: 
    if not os.getenv(_ORIG_DIR) is None: return os.getenv(_ORIG_DIR) + '/' + path
    else: return path

def add_html(singleBlock=True, blockType='html'):
    add_file(singleBlock, blockType)

add_html.onionr_help = "Adds an HTML file into Onionr. Does not currently include dependant resources"

def add_file(singleBlock=False, blockType='bin'):
    """
        Adds a file to the onionr network
    """

    if len(sys.argv) >= 3:
        filename = sys.argv[2]
        contents = None
        if not os.path.exists(_get_dir(filename)):
            logger.error('That file does not exist. Improper path (specify full path)?', terminal=True)
            return
        logger.info('Adding file... this might take a long time.', terminal=True)
        try:
            with open(_get_dir(filename), 'rb') as singleFile:
                blockhash = insert(base64.b64encode(singleFile.read()), header=blockType)
            if len(blockhash) > 0:
                logger.info('File %s saved in block %s' % (filename, blockhash), terminal=True)
        except Exception as e:
            logger.error('Failed to save file in block ' + str(e), timestamp = False, terminal=True)
    else:
        logger.error('%s add-file <filename>' % sys.argv[0], timestamp = False, terminal=True)

add_file.onionr_help = "<file path> Add a file into the Onionr network"

def get_file():
    """
        Get a file from onionr blocks
    """
    try:
        fileName = _get_dir(sys.argv[2])
        bHash = sys.argv[3]
    except IndexError:
        logger.error("Syntax %s %s" % (sys.argv[0], '/path/to/filename <blockhash>'), terminal=True)
    else:
        logger.info(fileName, terminal=True)

        contents = None
        if os.path.exists(fileName):
            logger.error("File already exists", terminal=True)
            return
        if not stringvalidators.validate_hash(bHash):
            logger.error('Block hash is invalid', terminal=True)
            return

        try:
            with open(fileName, 'wb') as myFile:
                myFile.write(base64.b64decode(Block(bHash).bcontent))
        except onionrexceptions.NoDataAvailable:
            logger.error('That block is not available. Trying again later may work.', terminal=True)

get_file.onionr_help = "<file path> <block hash>: Download a file from the onionr network."

Functions

def add_file(singleBlock=False, blockType='bin')

Adds a file to the onionr network

Source code
def add_file(singleBlock=False, blockType='bin'):
    """
        Adds a file to the onionr network
    """

    if len(sys.argv) >= 3:
        filename = sys.argv[2]
        contents = None
        if not os.path.exists(_get_dir(filename)):
            logger.error('That file does not exist. Improper path (specify full path)?', terminal=True)
            return
        logger.info('Adding file... this might take a long time.', terminal=True)
        try:
            with open(_get_dir(filename), 'rb') as singleFile:
                blockhash = insert(base64.b64encode(singleFile.read()), header=blockType)
            if len(blockhash) > 0:
                logger.info('File %s saved in block %s' % (filename, blockhash), terminal=True)
        except Exception as e:
            logger.error('Failed to save file in block ' + str(e), timestamp = False, terminal=True)
    else:
        logger.error('%s add-file <filename>' % sys.argv[0], timestamp = False, terminal=True)
def add_html(singleBlock=True, blockType='html')
Source code
def add_html(singleBlock=True, blockType='html'):
    add_file(singleBlock, blockType)
def get_file()

Get a file from onionr blocks

Source code
def get_file():
    """
        Get a file from onionr blocks
    """
    try:
        fileName = _get_dir(sys.argv[2])
        bHash = sys.argv[3]
    except IndexError:
        logger.error("Syntax %s %s" % (sys.argv[0], '/path/to/filename <blockhash>'), terminal=True)
    else:
        logger.info(fileName, terminal=True)

        contents = None
        if os.path.exists(fileName):
            logger.error("File already exists", terminal=True)
            return
        if not stringvalidators.validate_hash(bHash):
            logger.error('Block hash is invalid', terminal=True)
            return

        try:
            with open(fileName, 'wb') as myFile:
                myFile.write(base64.b64decode(Block(bHash).bcontent))
        except onionrexceptions.NoDataAvailable:
            logger.error('That block is not available. Trying again later may work.', terminal=True)