1515)
1616from ..icon import IconManager
1717from ..logger import get_logger
18+ from ..services .verification_service import VerificationService
1819from ..utils import extract_and_validate_version
19- from ..verify import Verifier
2020from .install import InstallationError , InstallStrategy , ValidationError
2121
2222logger = get_logger (__name__ )
@@ -161,7 +161,7 @@ async def _install_single_repo(
161161 # Verify download if requested
162162 if kwargs .get ("verify_downloads" , True ):
163163 await self ._perform_verification (
164- download_path , appimage_asset , owner , repo_name
164+ download_path , appimage_asset , release_data , owner , repo_name
165165 )
166166
167167 # Move to install directory
@@ -258,13 +258,19 @@ async def _install_single_repo(
258258 }
259259
260260 async def _perform_verification (
261- self , path : Path , asset : GitHubAsset , owner : str , repo_name : str
261+ self ,
262+ path : Path ,
263+ asset : GitHubAsset ,
264+ release_data : GitHubReleaseDetails ,
265+ owner : str ,
266+ repo_name : str ,
262267 ) -> None :
263- """Perform download verification using available methods .
268+ """Perform download verification using VerificationService with optimization .
264269
265270 Args:
266271 path: Path to downloaded file
267272 asset: GitHub asset information
273+ release_data: Full GitHub release data with all assets
268274 owner: Repository owner
269275 repo_name: Repository name
270276
@@ -273,35 +279,63 @@ async def _perform_verification(
273279
274280 """
275281 logger .debug ("🔍 Starting verification for %s" , path .name )
276- verifier = Verifier (path )
277- verification_passed = False
278282
279- # Try digest verification first if available
280- if asset .get ("digest" ):
281- try :
282- logger .debug ("🔐 Attempting digest verification" )
283- verifier .verify_digest (asset ["digest" ])
284- logger .debug ("✅ Digest verification passed" )
285- verification_passed = True
286- except Exception as e :
287- logger .warning ("⚠️ Digest verification failed: %s" , e )
283+ # Use VerificationService for comprehensive verification including optimized checksum files
284+ verification_service = VerificationService (self .download_service )
285+
286+ # Convert GitHubReleaseDetails assets to the format expected by verification service
287+ all_assets = []
288+ for release_asset in release_data ["assets" ]:
289+ all_assets .append (
290+ {
291+ "name" : release_asset .get ("name" , "" ),
292+ "size" : release_asset .get ("size" , 0 ),
293+ "browser_download_url" : release_asset .get ("browser_download_url" , "" ),
294+ "digest" : release_asset .get ("digest" , "" ),
295+ }
296+ )
297+
298+ # Create verification config
299+ config = {
300+ "skip" : False ,
301+ "checksum_file" : None , # Let it auto-detect with prioritization
302+ "checksum_hash_type" : "sha256" ,
303+ "digest_enabled" : bool (asset .get ("digest" )),
304+ }
305+
306+ # Convert asset to expected format
307+ asset_data = {
308+ "name" : asset .get ("name" , "" ),
309+ "size" : asset .get ("size" , 0 ),
310+ "browser_download_url" : asset .get ("browser_download_url" , "" ),
311+ "digest" : asset .get ("digest" , "" ),
312+ }
288313
289- # Always perform basic file size verification
290314 try :
291- expected_size = asset .get ("size" , 0 )
292- if expected_size > 0 :
293- if not self .download_service .verify_file_size (path , expected_size ):
294- if not verification_passed :
295- raise InstallationError ("File size verification failed" )
296- else :
297- logger .warning ("⚠️ File size verification failed, but digest passed" )
298- else :
299- logger .debug ("✅ File size verification passed" )
300- else :
301- logger .debug ("⚠️ No expected file size available" )
315+ # Perform comprehensive verification with optimized checksum file prioritization
316+ result = await verification_service .verify_file (
317+ file_path = path ,
318+ asset = asset_data ,
319+ config = config ,
320+ owner = owner ,
321+ repo = repo_name ,
322+ tag_name = release_data ["version" ],
323+ app_name = repo_name ,
324+ assets = all_assets ,
325+ )
326+
327+ if not result .passed :
328+ raise InstallationError (
329+ "File verification failed - no verification methods succeeded"
330+ )
331+
332+ # Log verification methods used
333+ methods_used = list (result .methods .keys ())
334+ logger .debug ("✅ Verification passed using methods: %s" , ", " .join (methods_used ))
335+
302336 except Exception as e :
303- if not verification_passed :
304- raise InstallationError (f"File verification failed: { e } " )
337+ logger . error ( "❌ Verification failed: %s" , e )
338+ raise InstallationError (f"File verification failed: { e } " )
305339
306340 logger .debug ("✅ Verification completed" )
307341
0 commit comments