diff options
author | Leah Rowe <leah@libreboot.org> | 2023-09-29 03:20:02 +0100 |
---|---|---|
committer | Leah Rowe <leah@libreboot.org> | 2023-09-29 04:03:18 +0100 |
commit | 0bb3c596201a42ccee03d6d2b8513b42f850031e (patch) | |
tree | 0142462ef7dc99977bfe51fcf5d5f9501d87dddd /include/fetch.sh | |
parent | 5d934be7b0119426aaad1533921b75f8618d6d79 (diff) |
update/blobs/*: unified download/checksum logic
Use the same logic between blobs/download and blobs/mrc.
The logic is taken from blobs/download.
Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'include/fetch.sh')
-rwxr-xr-x | include/fetch.sh | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/include/fetch.sh b/include/fetch.sh new file mode 100755 index 00000000..08a1d044 --- /dev/null +++ b/include/fetch.sh @@ -0,0 +1,41 @@ +# SPDX-License-Identifier: GPL-3.0-only +# SPDX-FileCopyrightText: 2023 Leah Rowe <leah@libreboot.org> + +agent="Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0" +dl_path="" + +fetch() +{ + dl_type="${1}" + dl="${2}" + dl_bkup="${3}" + dlsum="${4}" + dl_path="${5}" + _fail="${6}" + + mkdir -p "${dl_path%/*}" || "${_fail}" "fetch: !mkdir ${dl_path%/*}" + + dl_fail="y" + vendor_checksum "${dlsum}" "${dl_path}" && dl_fail="n" + for url in "${dl}" "${dl_bkup}"; do + [ "${dl_fail}" = "n" ] && break + [ -z "${url}" ] && continue + rm -f "${dl_path}" || "${_fail}" "fetch: !rm -f ${dl_path}" + wget --tries 3 -U "${agent}" "${url}" -O "${dl_path}" || \ + continue + vendor_checksum "${dlsum}" "${dl_path}" && dl_fail="n" + done + [ "${dl_fail}" = "y" ] && \ + "${_fail}" "fetch ${dlsum}: matched file unavailable" + + eval "extract_${dl_type}" +} + +vendor_checksum() +{ + if [ "$(sha512sum ${2} | awk '{print $1}')" != "${1}" ]; then + printf "Bad checksum for file: %s\n" "${2}" 1>&2 + rm -f "${2}" || : + return 1 + fi +} |