@@ -9,8 +9,8 @@ use crate::{
99 common:: CommandExt ,
1010 windows:: util:: {
1111 download, download_and_verify, download_webview2_bootstrapper,
12- download_webview2_offline_installer, extract_zip, HashAlgorithm , NSIS_OUTPUT_FOLDER_NAME ,
13- NSIS_UPDATER_OUTPUT_FOLDER_NAME ,
12+ download_webview2_offline_installer, extract_zip, verify_file_hash , HashAlgorithm ,
13+ NSIS_OUTPUT_FOLDER_NAME , NSIS_UPDATER_OUTPUT_FOLDER_NAME ,
1414 } ,
1515 } ,
1616 Settings ,
@@ -36,7 +36,7 @@ const NSIS_URL: &str =
3636#[ cfg( target_os = "windows" ) ]
3737const NSIS_SHA1 : & str = "057e83c7d82462ec394af76c87d06733605543d4" ;
3838const NSIS_APPLICATIONID_URL : & str = "https://github.com/tauri-apps/binary-releases/releases/download/nsis-plugins-v0/NSIS-ApplicationID.zip" ;
39- const NSIS_TAURI_UTILS : & str =
39+ const NSIS_TAURI_UTILS_URL : & str =
4040 "https://github.com/tauri-apps/nsis-tauri-utils/releases/download/nsis_tauri_utils-v0.2.2/nsis_tauri_utils.dll" ;
4141const NSIS_TAURI_UTILS_SHA1 : & str = "16DF1D1A5B4D5DF3859447279C55BE36D4109DFB" ;
4242
@@ -60,6 +60,13 @@ const NSIS_REQUIRED_FILES: &[&str] = &[
6060 "Plugins/x86-unicode/nsis_tauri_utils.dll" ,
6161] ;
6262
63+ const NSIS_REQUIRED_FILES_HASH : & [ ( & str , & str , & str , HashAlgorithm ) ] = & [ (
64+ "Plugins/x86-unicode/nsis_tauri_utils.dll" ,
65+ NSIS_TAURI_UTILS_URL ,
66+ NSIS_TAURI_UTILS_SHA1 ,
67+ HashAlgorithm :: Sha1 ,
68+ ) ] ;
69+
6370/// Runs all of the commands to build the NSIS installer.
6471/// Returns a vector of PathBuf that shows where the NSIS installer was created.
6572pub fn bundle_project ( settings : & Settings , updater : bool ) -> crate :: Result < Vec < PathBuf > > {
@@ -75,6 +82,21 @@ pub fn bundle_project(settings: &Settings, updater: bool) -> crate::Result<Vec<P
7582 warn ! ( "NSIS directory is missing some files. Recreating it." ) ;
7683 std:: fs:: remove_dir_all ( & nsis_toolset_path) ?;
7784 get_and_extract_nsis ( & nsis_toolset_path, & tauri_tools_path) ?;
85+ } else {
86+ let mismatched = NSIS_REQUIRED_FILES_HASH
87+ . iter ( )
88+ . filter ( |( p, _, hash, hash_algorithm) | {
89+ verify_file_hash ( nsis_toolset_path. join ( p) , hash, * hash_algorithm) . is_err ( )
90+ } )
91+ . collect :: < Vec < _ > > ( ) ;
92+
93+ if !mismatched. is_empty ( ) {
94+ warn ! ( "NSIS directory contains mis-hashed files. Redownloading them." ) ;
95+ for ( path, url, hash, hash_algorithim) in mismatched {
96+ let data = download_and_verify ( url, hash, * hash_algorithim) ?;
97+ write ( nsis_toolset_path. join ( path) , data) ?;
98+ }
99+ }
78100 }
79101
80102 build_nsis_app_installer ( settings, & nsis_toolset_path, & tauri_tools_path, updater)
@@ -107,7 +129,11 @@ fn get_and_extract_nsis(nsis_toolset_path: &Path, _tauri_tools_path: &Path) -> c
107129 nsis_plugins. join ( "x86-unicode" ) . join ( "ApplicationID.dll" ) ,
108130 ) ?;
109131
110- let data = download_and_verify ( NSIS_TAURI_UTILS , NSIS_TAURI_UTILS_SHA1 , HashAlgorithm :: Sha1 ) ?;
132+ let data = download_and_verify (
133+ NSIS_TAURI_UTILS_URL ,
134+ NSIS_TAURI_UTILS_SHA1 ,
135+ HashAlgorithm :: Sha1 ,
136+ ) ?;
111137 write (
112138 nsis_plugins
113139 . join ( "x86-unicode" )
0 commit comments