Revision 1c65dd5c
Added by koszko over 1 year ago
html/install.js | ||
---|---|---|
49 | 49 |
#FROM html/DOM_helpers.js IMPORT clone_template, Showable |
50 | 50 |
#FROM common/entities.js IMPORT item_id_string, version_string, get_files, \ |
51 | 51 |
is_valid_version |
52 |
#FROM common/misc.js IMPORT sha256_async AS sha256 |
|
52 |
#FROM common/misc.js IMPORT sha256_async AS compute_sha256
|
|
53 | 53 |
|
54 | 54 |
const coll = new Intl.Collator(); |
55 | 55 |
|
... | ... | |
134 | 134 |
/* Make a link to view a file from the repository. */ |
135 | 135 |
const make_file_link = (preview_ctx, file_ref) => { |
136 | 136 |
const a = document.createElement("a"); |
137 |
a.href = `${this.repo_url}file/${file_ref.hash_key}`;
|
|
137 |
a.href = `${this.repo_url}file/sha256/${file_ref.sha256}`;
|
|
138 | 138 |
a.innerText = file_ref.file; |
139 | 139 |
|
140 | 140 |
return a; |
... | ... | |
213 | 213 |
|
214 | 214 |
const files = response.json.source_copyright |
215 | 215 |
.concat(item_type === "resource" ? response.json.scripts : []); |
216 |
for (const file of files) { |
|
217 |
file.hash_key = `sha256-${file.sha256}`; |
|
218 |
delete file.sha256; |
|
219 |
} |
|
220 | 216 |
|
221 | 217 |
if (item_type === "mapping") { |
222 | 218 |
for (const res_ref of Object.values(response.json.payloads)) |
... | ... | |
294 | 290 |
dialog.close(this.dialog_ctx); |
295 | 291 |
} |
296 | 292 |
|
297 |
const process_file = async (work, hash_key) => {
|
|
293 |
const process_file = async (work, sha256) => {
|
|
298 | 294 |
if (!work.is_ok) |
299 | 295 |
return; |
300 | 296 |
|
... | ... | |
302 | 298 |
|
303 | 299 |
try { |
304 | 300 |
var file_uses = await haketilodb.idb_get(work.file_uses_transaction, |
305 |
"file_uses", hash_key);
|
|
301 |
"file_uses", sha256);
|
|
306 | 302 |
if (!work.is_ok) |
307 | 303 |
return; |
308 | 304 |
} catch(e) { |
... | ... | |
311 | 307 |
} |
312 | 308 |
|
313 | 309 |
if (!file_uses) { |
314 |
const url = `${this.repo_url}file/${hash_key}`;
|
|
310 |
const url = `${this.repo_url}file/sha256/${sha256}`;
|
|
315 | 311 |
|
316 | 312 |
try { |
317 | 313 |
var response = await fetch(url); |
... | ... | |
336 | 332 |
return work.err(e, msg); |
337 | 333 |
} |
338 | 334 |
|
339 |
const digest = await sha256(text); |
|
335 |
const digest = await compute_sha256(text);
|
|
340 | 336 |
if (!work.is_ok) |
341 | 337 |
return; |
342 |
if (`sha256-${digest}` !== hash_key) {
|
|
338 |
if (digest !== sha256) {
|
|
343 | 339 |
const msg = `${url} served a file with different SHA256 cryptographic sum :(`; |
344 | 340 |
return work.err(null, msg); |
345 | 341 |
} |
346 | 342 |
|
347 |
work.result.push([hash_key, text]);
|
|
343 |
work.result.push([sha256, text]);
|
|
348 | 344 |
} |
349 | 345 |
|
350 | 346 |
if (--work.waiting === 0) |
... | ... | |
359 | 355 |
|
360 | 356 |
for (const item_def of item_defs) { |
361 | 357 |
for (const file of get_files(item_def)) { |
362 |
if (!processed_files.has(file.hash_key)) {
|
|
363 |
processed_files.add(file.hash_key);
|
|
364 |
process_file(work, file.hash_key);
|
|
358 |
if (!processed_files.has(file.sha256)) {
|
|
359 |
processed_files.add(file.sha256);
|
|
360 |
process_file(work, file.sha256);
|
|
365 | 361 |
} |
366 | 362 |
} |
367 | 363 |
} |
... | ... | |
379 | 375 |
|
380 | 376 |
try { |
381 | 377 |
var files = (await get_missing_files(item_defs)) |
382 |
.reduce((ac, [hk, txt]) => Object.assign(ac, {[hk]: txt}), {});
|
|
378 |
.reduce((ac, [h, txt]) => Object.assign(ac, {[h]: txt}), {});
|
|
383 | 379 |
} catch(e) { |
384 | 380 |
var dialog_prom = dialog.error(this.dialog_ctx, e); |
385 | 381 |
} |
386 | 382 |
|
387 | 383 |
if (files !== undefined) { |
388 |
const data = {files};
|
|
384 |
const data = {file: {sha256: files}};
|
|
389 | 385 |
const names = [["mappings", "mapping"], ["resources", "resource"]]; |
390 | 386 |
|
391 | 387 |
for (const [set_name, type] of names) { |
Also available in: Unified diff
adapt to changes in file path format
From now on we assume Hydrilla serves file contents at 'file/sha256/' instead of 'file/sha256-'.
With this commit we also stop using the "hash_key" property internally.