Verify files after download
This commit is contained in:
parent
b2225d36fa
commit
f32dd594a0
@ -52,6 +52,12 @@ namespace updater
|
|||||||
std::string data;
|
std::string data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct file_info
|
||||||
|
{
|
||||||
|
std::string name;
|
||||||
|
std::string hash;
|
||||||
|
};
|
||||||
|
|
||||||
struct update_data_t
|
struct update_data_t
|
||||||
{
|
{
|
||||||
bool restart_required{};
|
bool restart_required{};
|
||||||
@ -60,7 +66,7 @@ namespace updater
|
|||||||
status download{};
|
status download{};
|
||||||
std::string error{};
|
std::string error{};
|
||||||
std::string current_file{};
|
std::string current_file{};
|
||||||
std::vector<std::string> required_files{};
|
std::vector<file_info> required_files{};
|
||||||
std::vector<std::string> garbage_files{};
|
std::vector<std::string> garbage_files{};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -410,7 +416,7 @@ namespace updater
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::string> required_files;
|
std::vector<file_info> required_files;
|
||||||
std::vector<std::string> update_files;
|
std::vector<std::string> update_files;
|
||||||
|
|
||||||
const auto files = j.GetArray();
|
const auto files = j.GetArray();
|
||||||
@ -449,7 +455,7 @@ namespace updater
|
|||||||
console::info("[Updater] need file %s\n", name);
|
console::info("[Updater] need file %s\n", name);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
required_files.push_back(name);
|
required_files.emplace_back(name, sha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,7 +513,7 @@ namespace updater
|
|||||||
|
|
||||||
scheduler::once([]()
|
scheduler::once([]()
|
||||||
{
|
{
|
||||||
const auto required_files = update_data.access<std::vector<std::string>>([](update_data_t& data_)
|
const auto required_files = update_data.access<std::vector<file_info>>([](update_data_t& data_)
|
||||||
{
|
{
|
||||||
return data_.required_files;
|
return data_.required_files;
|
||||||
});
|
});
|
||||||
@ -516,16 +522,16 @@ namespace updater
|
|||||||
|
|
||||||
for (const auto& file : required_files)
|
for (const auto& file : required_files)
|
||||||
{
|
{
|
||||||
update_data.access([file](update_data_t& data_)
|
update_data.access([&](update_data_t& data_)
|
||||||
{
|
{
|
||||||
data_.current_file = file;
|
data_.current_file = file.name;
|
||||||
});
|
});
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
console::info("[Updater] downloading file %s\n", file.data());
|
console::info("[Updater] downloading file %s\n", file.name.data());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
const auto data = download_file(file);
|
const auto data = download_file(file.name);
|
||||||
|
|
||||||
if (is_update_cancelled())
|
if (is_update_cancelled())
|
||||||
{
|
{
|
||||||
@ -535,11 +541,18 @@ namespace updater
|
|||||||
|
|
||||||
if (!data.has_value())
|
if (!data.has_value())
|
||||||
{
|
{
|
||||||
set_update_download_status(true, false, ERR_DOWNLOAD_FAIL + file);
|
set_update_download_status(true, false, ERR_DOWNLOAD_FAIL + file.name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
downloads.push_back({file, data.value()});
|
const auto& value = data.value();
|
||||||
|
if (file.hash != utils::cryptography::sha1::compute(value, true))
|
||||||
|
{
|
||||||
|
set_update_download_status(true, false, ERR_DOWNLOAD_FAIL + file.name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
downloads.emplace_back(file.name, data.value());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& download : downloads)
|
for (const auto& download : downloads)
|
||||||
|
Loading…
Reference in New Issue
Block a user