Skip to content

Commit

Permalink
Save a hash of the hls.min.js release (#3464)
Browse files Browse the repository at this point in the history
This ensures the downloaded hls.js matches exactly and removes a dependency on cdn.jsdelivr.net
  • Loading branch information
bouk authored Jun 17, 2024
1 parent 7dcfd2e commit dfa2e81
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 8 deletions.
9 changes: 6 additions & 3 deletions .github/workflows/bump_hls_js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@ jobs:
&& git config user.email bot@mediamtx
&& ((git checkout deps/hlsjs && git rebase ${GITHUB_REF_NAME}) || git checkout -b deps/hlsjs)
- run: >
- run: |
set -e
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/')
&& echo $VERSION > internal/servers/hls/hlsjsdownloader/VERSION
&& echo VERSION=$VERSION >> $GITHUB_ENV
HASH=$(curl -sL https://github.com/video-dev/hls.js/releases/download/$VERSION/release.zip -o- | sha256sum | cut -f1 -d ' ')
echo $VERSION > internal/servers/hls/hlsjsdownloader/VERSION
echo $HASH > internal/servers/hls/hlsjsdownloader/HASH
echo VERSION=$VERSION >> $GITHUB_ENV
- id: check_repo
run: >
Expand Down
1 change: 1 addition & 0 deletions internal/servers/hls/hlsjsdownloader/HASH
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
869ea17a6ddb2cf483ca8c692fc6c7ba80de0882105ba300027af2edaed1b902
39 changes: 34 additions & 5 deletions internal/servers/hls/hlsjsdownloader/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,30 @@
package main

import (
"archive/zip"
"bytes"
"crypto/sha256"
"encoding/hex"
"fmt"
"io"
"io/fs"
"log"
"net/http"
"os"
"strings"
)

func do() error {
log.Println("downloading hls.js...")

buf, err := os.ReadFile("./hlsjsdownloader/VERSION")
if err != nil {
return err
}

version := strings.TrimSpace(string(buf))

res, err := http.Get("https://cdn.jsdelivr.net/npm/hls.js@" + version + "/dist/hls.min.js")
log.Printf("downloading hls.js version %s...", version)

res, err := http.Get("https://github.com/video-dev/hls.js/releases/download/" + version + "/release.zip")
if err != nil {
return err
}
Expand All @@ -29,15 +35,38 @@ func do() error {
return fmt.Errorf("bad status code: %v", res.StatusCode)
}

buf, err = io.ReadAll(res.Body)
zipBuf, err := io.ReadAll(res.Body)
if err != nil {
return err
}

err = os.WriteFile("hls.min.js", buf, 0o644)
hashBuf, err := os.ReadFile("./hlsjsdownloader/HASH")
if err != nil {
return err
}
hash := make([]byte, hex.DecodedLen(len(hashBuf)))

if _, err = hex.Decode(hash, bytes.TrimSpace(hashBuf)); err != nil {
return err
}

if sum := sha256.Sum256(zipBuf); !bytes.Equal(sum[:], hash) {
return fmt.Errorf("hash mismatch")
}

z, err := zip.NewReader(bytes.NewReader(zipBuf), int64(len(zipBuf)))
if err != nil {
return err
}

hls, err := fs.ReadFile(z, "dist/hls.min.js")
if err != nil {
return err
}

if err = os.WriteFile("hls.min.js", hls, 0o644); err != nil {
return err
}

log.Println("ok")
return nil
Expand Down

0 comments on commit dfa2e81

Please sign in to comment.