mirror of
https://github.com/pomerium/pomerium.git
synced 2025-05-05 13:26:03 +02:00
43 lines
841 B
Go
43 lines
841 B
Go
//go:build !debug_local_envoy
|
|
|
|
package envoy
|
|
|
|
import (
|
|
"bytes"
|
|
"crypto/sha256"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/pomerium/pomerium/pkg/envoy/files"
|
|
)
|
|
|
|
func extract(dstName string) (err error) {
|
|
checksum, err := hex.DecodeString(strings.Fields(files.Checksum())[0])
|
|
if err != nil {
|
|
return fmt.Errorf("checksum %s: %w", files.Checksum(), err)
|
|
}
|
|
|
|
hr := &hashReader{
|
|
Hash: sha256.New(),
|
|
r: bytes.NewReader(files.Binary()),
|
|
}
|
|
|
|
dst, err := os.OpenFile(dstName, os.O_CREATE|os.O_WRONLY, ownerRX)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer func() { err = dst.Close() }()
|
|
|
|
if _, err = io.Copy(dst, io.LimitReader(hr, maxExpandedEnvoySize)); err != nil {
|
|
return err
|
|
}
|
|
|
|
sum := hr.Sum(nil)
|
|
if !bytes.Equal(sum, checksum) {
|
|
return fmt.Errorf("expected %x, got %x checksum", checksum, sum)
|
|
}
|
|
return nil
|
|
}
|