tvl-depot/tvix/nar-bridge/pkg/http/narinfo.go
Florian Klink 718af22dbb chore(tvix/nar-bridge): update to latest go mod renames
- code.tvl.fyi/tvix/castore/protos -> code.tvl.fyi/tvix/castore-go
 - code.tvl.fyi/tvix/store/protos -> code.tvl.fyi/tvix/store-go

 See cl/9791, cl/9792 for context.

Change-Id: I44614c6ed40b9f52d9dcdea8e61fe2c3c830ce78
Reviewed-on: https://cl.tvl.fyi/c/depot/+/9793
Reviewed-by: Connor Brewster <cbrewster@hey.com>
Tested-by: BuildkiteCI
Autosubmit: flokli <flokli@flokli.de>
2023-10-17 20:46:38 +00:00

51 lines
1.5 KiB
Go

package http
import (
"fmt"
storev1pb "code.tvl.fyi/tvix/store-go"
mh "github.com/multiformats/go-multihash/core"
nixhash "github.com/nix-community/go-nix/pkg/hash"
"github.com/nix-community/go-nix/pkg/narinfo"
"github.com/nix-community/go-nix/pkg/narinfo/signature"
"github.com/nix-community/go-nix/pkg/nixbase32"
)
// ToNixNarInfo converts the PathInfo to a narinfo.NarInfo.
func ToNixNarInfo(p *storev1pb.PathInfo) (*narinfo.NarInfo, error) {
// ensure the PathInfo is valid, and extract the StorePath from the node in
// there.
storePath, err := p.Validate()
if err != nil {
return nil, fmt.Errorf("failed to validate PathInfo: %w", err)
}
// convert the signatures from storev1pb signatures to narinfo signatures
narinfoSignatures := make([]signature.Signature, len(p.GetNarinfo().GetSignatures()))
for i, pathInfoSignature := range p.GetNarinfo().GetSignatures() {
narinfoSignatures[i] = signature.Signature{
Name: pathInfoSignature.GetName(),
Data: pathInfoSignature.GetData(),
}
}
// produce nixhash for the narsha256.
narHash, err := nixhash.FromHashTypeAndDigest(
mh.SHA2_256,
p.GetNarinfo().GetNarSha256(),
)
if err != nil {
return nil, fmt.Errorf("invalid narsha256: %w", err)
}
return &narinfo.NarInfo{
StorePath: storePath.Absolute(),
URL: "nar/" + nixbase32.EncodeToString(narHash.Digest()) + ".nar",
Compression: "none",
NarHash: narHash,
NarSize: uint64(p.GetNarinfo().GetNarSize()),
References: p.GetNarinfo().GetReferenceNames(),
Signatures: narinfoSignatures,
}, nil
}