Skip to content

Commit fe51069

Browse files
committed
properly zip sigzips
1 parent 644c355 commit fe51069

File tree

2 files changed

+51
-4
lines changed

2 files changed

+51
-4
lines changed

cli/add.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package cli
22

33
import (
44
"context"
5-
"encoding/json"
65
"fmt"
76
"os"
87
"path/filepath"
@@ -131,14 +130,14 @@ func doAdd(ctx context.Context, source string, includeSignature bool, store stor
131130
return nil, xerrors.Errorf("generate signature manifest: %w", err)
132131
}
133132

134-
data, err := json.Marshal(sigManifest)
133+
zipped, err := extensionsign.Zip(sigManifest)
135134
if err != nil {
136-
return nil, xerrors.Errorf("marshal signature manifest: %w", err)
135+
return nil, xerrors.Errorf("zip signature manifest: %w", err)
137136
}
138137

139138
extra = append(extra, storage.File{
140139
RelativePath: "extension.sigzip",
141-
Content: data,
140+
Content: zipped,
142141
})
143142

144143
manifest.Assets.Asset = append(manifest.Assets.Asset, storage.VSIXAsset{

internal/extensionsign/sigzip.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package extensionsign
2+
3+
import (
4+
"archive/zip"
5+
"bytes"
6+
"encoding/json"
7+
8+
"golang.org/x/xerrors"
9+
10+
"github.com/coder/code-marketplace/storage"
11+
)
12+
13+
func ExtractSignatureManifest(zip []byte) (SignatureManifest, error) {
14+
r, err := storage.GetZipFileReader(zip, ".signature.manifest")
15+
if err != nil {
16+
return SignatureManifest{}, xerrors.Errorf("get manifest: %w", err)
17+
}
18+
19+
defer r.Close()
20+
var manifest SignatureManifest
21+
err = json.NewDecoder(r).Decode(&manifest)
22+
if err != nil {
23+
return SignatureManifest{}, xerrors.Errorf("decode manifest: %w", err)
24+
}
25+
return manifest, nil
26+
}
27+
28+
func Zip(manifest SignatureManifest) ([]byte, error) {
29+
var buf bytes.Buffer
30+
w := zip.NewWriter(&buf)
31+
32+
manFile, err := w.Create(".signature.manifest")
33+
if err != nil {
34+
return nil, xerrors.Errorf("create manifest: %w", err)
35+
}
36+
37+
err = json.NewEncoder(manFile).Encode(manifest)
38+
if err != nil {
39+
return nil, xerrors.Errorf("encode manifest: %w", err)
40+
}
41+
42+
err = w.Close()
43+
if err != nil {
44+
return nil, xerrors.Errorf("close zip: %w", err)
45+
}
46+
47+
return buf.Bytes(), nil
48+
}

0 commit comments

Comments
 (0)