Пример #1
0
def route_nuke(firmware_id):
    """ Delete a firmware entry and also delete the file from disk """

    # check firmware exists in database
    fw = db.session.query(Firmware).filter(
        Firmware.firmware_id == firmware_id).first()
    if not fw:
        flash('No firmware {} exists'.format(firmware_id), 'danger')
        return redirect(url_for('firmware.route_firmware'))

    # firmware is not deleted yet
    if not fw.is_deleted:
        flash('Cannot nuke file not yet deleted', 'danger')
        return redirect(url_for('firmware.route_show',
                                firmware_id=firmware_id))

    # security check
    if not fw.check_acl('@nuke'):
        flash('Permission denied: Insufficient permissions to nuke firmware',
              'danger')
        return redirect(url_for('firmware.route_show',
                                firmware_id=firmware_id))

    # really delete firmware
    path = os.path.join(app.config['RESTORE_DIR'], fw.filename)
    if os.path.exists(path):
        os.remove(path)

    # delete shard cache if they exist
    for md in fw.mds:
        for shard in md.shards:
            path = _get_shard_path(shard)
            if os.path.exists(path):
                os.remove(path)

    # generate next cron run
    fw.remote.is_dirty = True

    # delete everything we stored about the firmware
    db.session.delete(fw)

    # all done
    db.session.commit()

    flash('Firmware nuked', 'info')
    return redirect(url_for('firmware.route_firmware'))
Пример #2
0
def _purge_old_deleted_firmware():

    # find all unsigned firmware
    for fw in db.session.query(Firmware)\
                        .join(Remote).filter(Remote.name == 'deleted')\
                        .order_by(Firmware.timestamp.asc()):
        if fw.target_duration > datetime.timedelta(days=30 * 6):
            print('Deleting %s as age %s' % (fw.filename, fw.target_duration))
            path = os.path.join(app.config['RESTORE_DIR'], fw.filename)
            if os.path.exists(path):
                os.remove(path)
            for md in fw.mds:
                for shard in md.shards:
                    path = _get_shard_path(shard)
                    if os.path.exists(path):
                        os.remove(path)
            db.session.delete(fw)
            db.session.commit()