Add support of hashes
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
class LayerConfig {
|
||||
string Name;
|
||||
string Path;
|
||||
string Hash;
|
||||
|
||||
CGameUILayer::EUILayerType LayerType = CGameUILayer::EUILayerType::Normal;
|
||||
string AttachId = '';
|
||||
@@ -9,6 +10,7 @@ class LayerConfig {
|
||||
|
||||
LayerConfig(const string &in _ParentPath, const Json::Value &in _Data) {
|
||||
Path = Path::Join(_ParentPath, _Data['Path']);
|
||||
Hash = _Data['Hash'];
|
||||
|
||||
const string Manialink = GetManialink();
|
||||
Name = PacksManager::GetLayerName(Manialink);
|
||||
@@ -33,6 +35,22 @@ class LayerConfig {
|
||||
|
||||
IO::File File(Path, IO::FileMode::Read);
|
||||
const string Manialink = File.ReadToEnd();
|
||||
|
||||
const string FileHash = Crypto::Sha256(Manialink);
|
||||
|
||||
if (Hash != FileHash) {
|
||||
print('Cannot load layer "'+ Path +'": Invalid hash');
|
||||
trace('info.json Layer hash: '+ Hash);
|
||||
trace('file hash: '+ FileHash);
|
||||
if (S_DisplayHashWarning) {
|
||||
RenderManager::NotifyWarning('Cannot load layer "'+ Path +'": Invalid hash');
|
||||
}
|
||||
|
||||
if (!Meta::IsDeveloperMode()) {
|
||||
throw('Cannot load layer "'+ Path +'": Invalid hash');
|
||||
}
|
||||
}
|
||||
|
||||
return Manialink;
|
||||
}
|
||||
|
||||
|
2
Hashes.as
Normal file
2
Hashes.as
Normal file
@@ -0,0 +1,2 @@
|
||||
const array<string> C_InterfacesPacksHashes = {
|
||||
};
|
@@ -41,6 +41,21 @@ namespace PacksManager {
|
||||
|
||||
const string FileContent = File.ReadToEnd();
|
||||
|
||||
const string InfoFileHash = Crypto::Sha256(FileContent);
|
||||
|
||||
if (C_InterfacesPacksHashes.Find(InfoFileHash) < 0) {
|
||||
print('Invalid Pack Config "'+ Id +'": Invalid hash');
|
||||
trace('info.json hash: '+ InfoFileHash);
|
||||
if (S_DisplayHashWarning) {
|
||||
RenderManager::NotifyWarning('Invalid Pack Config "'+ Id +'": Invalid hash');
|
||||
}
|
||||
|
||||
if (!Meta::IsDeveloperMode()) {
|
||||
trace('Invalid Pack Config "'+ Id +'": Invalid hash');
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const PackConfig Config(Path, FileContent);
|
||||
G_Configs[Id] = Config;
|
||||
|
@@ -1,3 +1,6 @@
|
||||
|
||||
[Setting name="Display hash mismatch warning"]
|
||||
bool S_DisplayHashWarning = true;
|
||||
|
||||
[Setting hidden]
|
||||
string S_EnabledConfigs = '';
|
Reference in New Issue
Block a user