Exemple #1
0
 def showOutput(self):
     while type(self.channel) is type(None) and self.flowRunning:
         time.sleep(1)
     try:
         while self.flowRunning:
             for block in blockmetadb.get_blocks_by_type('brd'):
                 if block in self.alreadyOutputed:
                     continue
                 block = Block(block)
                 b_hash = bytesconverter.bytes_to_str(block.getHash())
                 if block.getMetadata('ch') != self.channel:
                     continue
                 if not self.flowRunning:
                     break
                 logger.info('\n------------------------',
                             prompt=False, terminal=True)
                 content = block.getContent()
                 # Escape new lines, remove trailing whitespace, and escape ansi sequences
                 content = escapeansi.escape_ANSI(content.replace(
                     b'\n', b'\\n').replace(b'\r', b'\\r').strip().decode('utf-8'))
                 logger.info(block.getDate().strftime(
                     "%m/%d %H:%M") + ' - ' + logger.colors.reset + content, prompt=False, terminal=True)
                 self.alreadyOutputed.append(b_hash)
             time.sleep(5)
     except KeyboardInterrupt:
         self.flowRunning = False
Exemple #2
0
def print_site_list():
    """Create a new MOTD message for the Onionr network."""
    block_list = get_blocks_by_type('osite')
    if not block_list:
        logger.info('No sites saved right now', terminal=True)
    for block in block_list:
        block = Block(block)
        if block.isSigned():
            logger.info(block.signer.replace('=', ''), terminal=True)
        else:
            logger.info(block.hash, terminal=True)
Exemple #3
0
def get_motd()->Response:
    motds = blockmetadb.get_blocks_by_type("motd")
    newest_time = 0
    message = "No MOTD currently present."
    for x in motds:
        bl = onionrblocks.onionrblockapi.Block(x)
        if not bl.verifySig() or bl.signer != bytesconverter.bytes_to_str(unpaddedbase32.repad(bytesconverter.str_to_bytes(signer))): continue
        if not bl.isSigner(signer): continue
        if bl.claimedTime > newest_time:
            newest_time = bl.claimedTime
            message = bl.bcontent
    return Response(message, headers={"Content-Type": "text/plain"})
Exemple #4
0
def find_site_gzip(user_id: str) -> tarfile.TarFile:
    """Return verified site tar object"""
    sites = blockmetadb.get_blocks_by_type('osite')
    user_site = None
    user_id = unpaddedbase32.repad(user_id)
    for site in sites:
        block = onionrblockapi.Block(site)
        if block.isSigner(user_id):
            user_site = block
    if not user_site is None:
        return tarfile.open(fileobj=io.BytesIO(user_site.bcontent), mode='r')
    return None
Exemple #5
0
def load_inbox():
    inbox_list = []
    deleted = simplekv.DeadSimpleKV(identifyhome.identify_home() +
                                    '/mailcache.dat').get('deleted_mail')
    if deleted is None:
        deleted = []

    for blockHash in blockmetadb.get_blocks_by_type('pm'):
        block = onionrblockapi.Block(blockHash)
        block.decrypt()
        if block.decrypted and reconstructhash.deconstruct_hash(
                blockHash) not in deleted:
            inbox_list.append(blockHash)
    return inbox_list
Exemple #6
0
def find_site(user_id: str) -> Union[BlockHash, None]:
    """Returns block hash str for latest block for a site by a given user id"""
    # If mnemonic delim in key, convert to base32 version
    if mnemonickeys.DELIMITER in user_id:
        user_id = mnemonickeys.get_base32(user_id)

    if not stringvalidators.validate_pub_key(user_id):
        raise onionrexceptions.InvalidPubkey

    found_site = None
    sites = blockmetadb.get_blocks_by_type('zsite')

    # Find site by searching all site blocks. eww O(N) ☹️, TODO: event based
    for site in sites:
        site = Block(site)
        if site.isSigner(user_id) and site.verifySig():
            found_site = site.hash
    return found_site
Exemple #7
0
def service_creator(daemon):
    assert isinstance(daemon, communicator.OnionrCommunicatorDaemon)
    
    # Find socket connection blocks
    # TODO cache blocks and only look at recently received ones
    con_blocks = blockmetadb.get_blocks_by_type('con')
    for b in con_blocks:
        if not b in daemon.active_services:
            bl = onionrblockapi.Block(b, decrypt=True)
            bs = bytesconverter.bytes_to_str(bl.bcontent) + '.onion'
            if server_exists(bl.signer):
                continue
            if stringvalidators.validate_pub_key(bl.signer) and stringvalidators.validate_transport(bs):
                signer = bytesconverter.bytes_to_str(bl.signer)
                daemon.active_services.append(b)
                daemon.active_services.append(signer)
                if not daemon.services.create_server(signer, bs, daemon):
                    daemon.active_services.remove(b)
                    daemon.active_services.remove(signer)
    daemon.decrementThreadCount('service_creator')
Exemple #8
0
def get_blocks_by_type_endpoint(name):
    blocks = blockmetadb.get_blocks_by_type(name)
    return Response(','.join(blocks))
Exemple #9
0
 def refresh_db(self):
     self.check_time = get_epoch()
     if not self.block_type:
         self.block_list = get_block_list()
     else:
         self.block_list = get_blocks_by_type(self.block_type)