Skip to content

Commit dfa2e81

Browse files
authored
Save a hash of the hls.min.js release (#3464)
This ensures the downloaded hls.js matches exactly and removes a dependency on cdn.jsdelivr.net
1 parent 7dcfd2e commit dfa2e81

File tree

3 files changed

+41
-8
lines changed

3 files changed

+41
-8
lines changed

Diff for: .github/workflows/bump_hls_js.yml

+6-3
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@ jobs:
1919
&& git config user.email bot@mediamtx
2020
&& ((git checkout deps/hlsjs && git rebase ${GITHUB_REF_NAME}) || git checkout -b deps/hlsjs)
2121
22-
- run: >
22+
- run: |
23+
set -e
2324
VERSION=$(curl -s https://api.github.com/repos/video-dev/hls.js/releases?per_page=1 | grep tag_name | sed 's/\s\+"tag_name": "\(.\+\)",/\1/')
24-
&& echo $VERSION > internal/servers/hls/hlsjsdownloader/VERSION
25-
&& echo VERSION=$VERSION >> $GITHUB_ENV
25+
HASH=$(curl -sL https://github.com/video-dev/hls.js/releases/download/$VERSION/release.zip -o- | sha256sum | cut -f1 -d ' ')
26+
echo $VERSION > internal/servers/hls/hlsjsdownloader/VERSION
27+
echo $HASH > internal/servers/hls/hlsjsdownloader/HASH
28+
echo VERSION=$VERSION >> $GITHUB_ENV
2629
2730
- id: check_repo
2831
run: >

Diff for: internal/servers/hls/hlsjsdownloader/HASH

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
869ea17a6ddb2cf483ca8c692fc6c7ba80de0882105ba300027af2edaed1b902

Diff for: internal/servers/hls/hlsjsdownloader/main.go

+34-5
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,30 @@
22
package main
33

44
import (
5+
"archive/zip"
6+
"bytes"
7+
"crypto/sha256"
8+
"encoding/hex"
59
"fmt"
610
"io"
11+
"io/fs"
712
"log"
813
"net/http"
914
"os"
1015
"strings"
1116
)
1217

1318
func do() error {
14-
log.Println("downloading hls.js...")
15-
1619
buf, err := os.ReadFile("./hlsjsdownloader/VERSION")
1720
if err != nil {
1821
return err
1922
}
23+
2024
version := strings.TrimSpace(string(buf))
2125

22-
res, err := http.Get("https://cdn.jsdelivr.net/npm/hls.js@" + version + "/dist/hls.min.js")
26+
log.Printf("downloading hls.js version %s...", version)
27+
28+
res, err := http.Get("https://github.com/video-dev/hls.js/releases/download/" + version + "/release.zip")
2329
if err != nil {
2430
return err
2531
}
@@ -29,15 +35,38 @@ func do() error {
2935
return fmt.Errorf("bad status code: %v", res.StatusCode)
3036
}
3137

32-
buf, err = io.ReadAll(res.Body)
38+
zipBuf, err := io.ReadAll(res.Body)
3339
if err != nil {
3440
return err
3541
}
3642

37-
err = os.WriteFile("hls.min.js", buf, 0o644)
43+
hashBuf, err := os.ReadFile("./hlsjsdownloader/HASH")
3844
if err != nil {
3945
return err
4046
}
47+
hash := make([]byte, hex.DecodedLen(len(hashBuf)))
48+
49+
if _, err = hex.Decode(hash, bytes.TrimSpace(hashBuf)); err != nil {
50+
return err
51+
}
52+
53+
if sum := sha256.Sum256(zipBuf); !bytes.Equal(sum[:], hash) {
54+
return fmt.Errorf("hash mismatch")
55+
}
56+
57+
z, err := zip.NewReader(bytes.NewReader(zipBuf), int64(len(zipBuf)))
58+
if err != nil {
59+
return err
60+
}
61+
62+
hls, err := fs.ReadFile(z, "dist/hls.min.js")
63+
if err != nil {
64+
return err
65+
}
66+
67+
if err = os.WriteFile("hls.min.js", hls, 0o644); err != nil {
68+
return err
69+
}
4170

4271
log.Println("ok")
4372
return nil

0 commit comments

Comments
 (0)