Skip to content

Commit d65ef9a

Browse files
committed
chore: signatures working, time to refactor
1 parent f769599 commit d65ef9a

File tree

4 files changed

+38
-28
lines changed

4 files changed

+38
-28
lines changed

cli/add.go

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

33
import (
44
"context"
5+
"encoding/json"
56
"fmt"
67
"os"
78
"path/filepath"
@@ -23,7 +24,6 @@ func add() *cobra.Command {
2324
artifactory string
2425
extdir string
2526
repo string
26-
signature bool
2727
)
2828

2929
cmd := &cobra.Command{
@@ -75,7 +75,7 @@ func add() *cobra.Command {
7575
return err
7676
}
7777
for _, file := range files {
78-
s, err := doAdd(ctx, filepath.Join(args[0], file.Name()), signature, store)
78+
s, err := doAdd(ctx, filepath.Join(args[0], file.Name()), store)
7979
if err != nil {
8080
_, _ = fmt.Fprintf(cmd.OutOrStdout(), "Failed to unpack %s: %s\n", file.Name(), err.Error())
8181
failed = append(failed, file.Name())
@@ -84,7 +84,7 @@ func add() *cobra.Command {
8484
}
8585
}
8686
} else {
87-
s, err := doAdd(ctx, args[0], signature, store)
87+
s, err := doAdd(ctx, args[0], store)
8888
if err != nil {
8989
return err
9090
}
@@ -104,12 +104,11 @@ func add() *cobra.Command {
104104
cmd.Flags().StringVar(&extdir, "extensions-dir", "", "The path to extensions.")
105105
cmd.Flags().StringVar(&artifactory, "artifactory", "", "Artifactory server URL.")
106106
cmd.Flags().StringVar(&repo, "repo", "", "Artifactory repository.")
107-
cmd.Flags().BoolVar(&signature, "signature", true, "Include signature")
108107

109108
return cmd
110109
}
111110

112-
func doAdd(ctx context.Context, source string, includeSignature bool, store storage.Storage) ([]string, error) {
111+
func doAdd(ctx context.Context, source string, store storage.Storage) ([]string, error) {
113112
// Read in the extension. In the future we might support stdin as well.
114113
vsix, err := storage.ReadVSIX(ctx, source)
115114
if err != nil {
@@ -123,31 +122,28 @@ func doAdd(ctx context.Context, source string, includeSignature bool, store stor
123122
return nil, err
124123
}
125124

126-
var extra []storage.File
127-
if includeSignature {
128-
sigManifest, err := extensionsign.GenerateSignatureManifest(vsix)
129-
if err != nil {
130-
return nil, xerrors.Errorf("generate signature manifest: %w", err)
131-
}
125+
sigManifest, err := extensionsign.GenerateSignatureManifest(vsix)
126+
if err != nil {
127+
return nil, xerrors.Errorf("zip signature manifest: %w", err)
128+
}
132129

133-
zipped, err := extensionsign.Zip(sigManifest)
134-
if err != nil {
135-
return nil, xerrors.Errorf("zip signature manifest: %w", err)
136-
}
130+
data, err := json.Marshal(sigManifest)
131+
if err != nil {
132+
return nil, xerrors.Errorf("encode manifest: %w", err)
133+
}
137134

138-
extra = append(extra, storage.File{
139-
RelativePath: "extension.sigzip",
140-
Content: zipped,
141-
})
135+
key, _ := extensionsign.GenerateKey()
136+
sigZip, _ := extensionsign.SignAndZipVSIX(key, vsix)
142137

143-
manifest.Assets.Asset = append(manifest.Assets.Asset, storage.VSIXAsset{
144-
Type: storage.VSIXSignatureType,
145-
Path: "extension.sigzip",
146-
Addressable: "true", // TODO: Idk if this is right
138+
location, err := store.AddExtension(ctx, manifest, vsix,
139+
storage.File{
140+
RelativePath: "extension.sigzip",
141+
Content: sigZip,
142+
},
143+
storage.File{
144+
RelativePath: ".signature.manifest",
145+
Content: data,
147146
})
148-
}
149-
150-
location, err := store.AddExtension(ctx, manifest, vsix, extra...)
151147
if err != nil {
152148
return nil, err
153149
}

internal/extensionsign/sigzip.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,18 @@ func ExtractSignatureManifest(zip []byte) (SignatureManifest, error) {
2626
return manifest, nil
2727
}
2828

29+
func SignAndZipVSIX(key ed25519.PrivateKey, vsix []byte) ([]byte, error) {
30+
manifest, err := GenerateSignatureManifest(vsix)
31+
if err != nil {
32+
return nil, xerrors.Errorf("generate manifest: %w", err)
33+
}
34+
return SignAndZipManifest(key, manifest)
35+
}
36+
2937
// SignAndZip signs a manifest and zips it up
3038
// Should be a PCKS8 key
3139
// TODO: Support other key types
32-
func SignAndZip(key ed25519.PrivateKey, manifest SignatureManifest) ([]byte, error) {
40+
func SignAndZipManifest(key ed25519.PrivateKey, manifest SignatureManifest) ([]byte, error) {
3341
var buf bytes.Buffer
3442
w := zip.NewWriter(&buf)
3543

storage/local.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,12 @@ func (s *Local) Manifest(ctx context.Context, publisher, name string, version Ve
164164
Addressable: "true",
165165
})
166166

167+
manifest.Assets.Asset = append(manifest.Assets.Asset, VSIXAsset{
168+
Type: VSIXSignatureType,
169+
Path: "extension.sigzip",
170+
Addressable: "true",
171+
})
172+
167173
return manifest, nil
168174
}
169175

testutil/mockstorage.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func NewMockStorage() *MockStorage {
1717
return &MockStorage{}
1818
}
1919

20-
func (s *MockStorage) AddExtension(ctx context.Context, manifest *storage.VSIXManifest, vsix []byte, extra ...storage.File) (string, error) {
20+
func (s *MockStorage) AddExtension(ctx context.Context, manifest *storage.VSIXManifest, vsix []byte) (string, error) {
2121
return "", errors.New("not implemented")
2222
}
2323

0 commit comments

Comments
 (0)