mirror of
https://github.com/platomav/BIOSUtilities.git
synced 2025-05-09 13:52:00 -04:00

Support for hardcoded Insyde 7-Zip SFX password Fixed 7-Zip hang on password protected files
66 lines
1.9 KiB
Python
66 lines
1.9 KiB
Python
#!/usr/bin/env python3
|
|
#coding=utf-8
|
|
|
|
"""
|
|
Copyright (C) 2022 Plato Mavropoulos
|
|
"""
|
|
|
|
import os
|
|
import subprocess
|
|
|
|
from common.path_ops import project_root, safe_path
|
|
from common.system import get_os_ver, printer
|
|
|
|
# Get 7-Zip path
|
|
def get_szip_path():
|
|
exec_name = '7z.exe' if get_os_ver()[1] else '7zzs'
|
|
|
|
return safe_path(project_root(), ['external',exec_name])
|
|
|
|
# Check 7-Zip bad exit codes (0 OK, 1 Warning)
|
|
def check_bad_exit_code(exit_code):
|
|
if exit_code not in (0,1):
|
|
raise Exception(f'BAD_EXIT_CODE_{exit_code}')
|
|
|
|
# Check if file is 7-Zip supported
|
|
def is_szip_supported(in_path, padding=0, password='', check=False, silent=False):
|
|
try:
|
|
szip_c = [get_szip_path(), 't', in_path, f'-p{password}', '-bso0', '-bse0', '-bsp0']
|
|
|
|
szip_t = subprocess.run(szip_c, check=False)
|
|
|
|
if check:
|
|
check_bad_exit_code(szip_t.returncode)
|
|
except:
|
|
if not silent:
|
|
printer(f'Error: 7-Zip could not check support for file {in_path}!', padding)
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
# Archive decompression via 7-Zip
|
|
def szip_decompress(in_path, out_path, in_name, padding=0, password='', check=False, silent=False):
|
|
if not in_name:
|
|
in_name = 'archive'
|
|
|
|
try:
|
|
szip_c = [get_szip_path(), 'x', f'-p{password}', '-aou', '-bso0', '-bse0', '-bsp0', f'-o{out_path}', in_path]
|
|
|
|
szip_x = subprocess.run(szip_c, check=False)
|
|
|
|
if check:
|
|
check_bad_exit_code(szip_x.returncode)
|
|
|
|
if not os.path.isdir(out_path):
|
|
raise Exception('EXTRACT_DIR_MISSING')
|
|
except:
|
|
if not silent:
|
|
printer(f'Error: 7-Zip could not extract {in_name} file {in_path}!', padding)
|
|
|
|
return 1
|
|
|
|
if not silent:
|
|
printer(f'Succesfull {in_name} decompression via 7-Zip!', padding)
|
|
|
|
return 0
|