Module src.communicatorutils.housekeeping

Onionr - Private P2P Communication

Cleanup old Onionr blocks and forward secrecy keys using the communicator. Ran from a timer usually

Expand source code
'''
    Onionr - Private P2P Communication

    Cleanup old Onionr blocks and forward secrecy keys using the communicator. Ran from a timer usually
'''
'''
    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 sqlite3
import logger
from onionrusers import onionrusers
from onionrutils import epoch
from coredb import blockmetadb, dbfiles
import onionrstorage
from onionrstorage import removeblock
from onionrblocks import onionrblacklist

def __remove_from_upload(comm_inst, block_hash: str):
    try:
        comm_inst.blocksToUpload.remove(block_hash)
    except ValueError:
        pass

def clean_old_blocks(comm_inst):
    '''Delete old blocks if our disk allocation is full/near full, and also expired blocks'''
    blacklist = onionrblacklist.OnionrBlackList()
    # Delete expired blocks
    for bHash in blockmetadb.expiredblocks.get_expired_blocks():
        blacklist.addToDB(bHash)
        removeblock.remove_block(bHash)
        onionrstorage.deleteBlock(bHash)
        __remove_from_upload(comm_inst, bHash)
        logger.info('Deleted block: %s' % (bHash,))

    while comm_inst.storage_counter.is_full():
        oldest = blockmetadb.get_block_list()[0]
        blacklist.addToDB(oldest)
        removeblock.remove_block(oldest)
        onionrstorage.deleteBlock(oldest)
        __remove_from_upload.remove(comm_inst, oldest)
        logger.info('Deleted block: %s' % (oldest,))

    comm_inst.decrementThreadCount('clean_old_blocks')

def clean_keys(comm_inst):
    '''Delete expired forward secrecy keys'''
    conn = sqlite3.connect(dbfiles.user_id_info_db, timeout=10)
    c = conn.cursor()
    time = epoch.get_epoch()
    deleteKeys = []

    for entry in c.execute("SELECT * FROM forwardKeys WHERE expire <= ?", (time,)):
        logger.debug('Forward key: %s' % entry[1])
        deleteKeys.append(entry[1])

    for key in deleteKeys:
        logger.debug('Deleting forward key %s' % key)
        c.execute("DELETE from forwardKeys where forwardKey = ?", (key,))
    conn.commit()
    conn.close()

    onionrusers.deleteExpiredKeys()

    comm_inst.decrementThreadCount('clean_keys')

Functions

def clean_keys(comm_inst)

Delete expired forward secrecy keys

Expand source code
def clean_keys(comm_inst):
    '''Delete expired forward secrecy keys'''
    conn = sqlite3.connect(dbfiles.user_id_info_db, timeout=10)
    c = conn.cursor()
    time = epoch.get_epoch()
    deleteKeys = []

    for entry in c.execute("SELECT * FROM forwardKeys WHERE expire <= ?", (time,)):
        logger.debug('Forward key: %s' % entry[1])
        deleteKeys.append(entry[1])

    for key in deleteKeys:
        logger.debug('Deleting forward key %s' % key)
        c.execute("DELETE from forwardKeys where forwardKey = ?", (key,))
    conn.commit()
    conn.close()

    onionrusers.deleteExpiredKeys()

    comm_inst.decrementThreadCount('clean_keys')
def clean_old_blocks(comm_inst)

Delete old blocks if our disk allocation is full/near full, and also expired blocks

Expand source code
def clean_old_blocks(comm_inst):
    '''Delete old blocks if our disk allocation is full/near full, and also expired blocks'''
    blacklist = onionrblacklist.OnionrBlackList()
    # Delete expired blocks
    for bHash in blockmetadb.expiredblocks.get_expired_blocks():
        blacklist.addToDB(bHash)
        removeblock.remove_block(bHash)
        onionrstorage.deleteBlock(bHash)
        __remove_from_upload(comm_inst, bHash)
        logger.info('Deleted block: %s' % (bHash,))

    while comm_inst.storage_counter.is_full():
        oldest = blockmetadb.get_block_list()[0]
        blacklist.addToDB(oldest)
        removeblock.remove_block(oldest)
        onionrstorage.deleteBlock(oldest)
        __remove_from_upload.remove(comm_inst, oldest)
        logger.info('Deleted block: %s' % (oldest,))

    comm_inst.decrementThreadCount('clean_old_blocks')