Skip to content

Commit d34ff62

Browse files
committed
Upload .dsc file and handle signed case
1 parent 98ee2fc commit d34ff62

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ require (
2424
github.com/spf13/cobra v1.0.0
2525
github.com/ulikunitz/xz v0.5.8
2626
gocloud.dev v0.20.0
27+
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a
2728
)

go.sum

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,10 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
296296
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
297297
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
298298
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
299+
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g=
299300
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
301+
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM=
302+
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
300303
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
301304
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
302305
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=

upload.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import (
3636
"strings"
3737

3838
"gocloud.dev/blob"
39+
"golang.org/x/crypto/openpgp/clearsign"
3940
"zombiezen.com/go/aptblob/internal/deb"
4041
)
4142

@@ -196,7 +197,7 @@ func uploadSourcePackage(ctx context.Context, bucket *blob.Bucket, dscPath strin
196197
if err != nil {
197198
return nil, fmt.Errorf("upload source package %s: %w", packageName, err)
198199
}
199-
p := deb.NewParser(bytes.NewReader(dsc))
200+
p := deb.NewParser(bytes.NewReader(maybeClearSigned(dsc)))
200201
p.Fields = deb.SourceControlFields
201202
if !p.Single() {
202203
if err := p.Err(); err != nil {
@@ -211,6 +212,11 @@ func uploadSourcePackage(ctx context.Context, bucket *blob.Bucket, dscPath strin
211212
if err != nil {
212213
return nil, fmt.Errorf("upload source package %s: files: %w", packageName, err)
213214
}
215+
216+
_, err = upload(ctx, bucket, dir+"/"+filepath.Base(dscPath), "text/plain; charset=utf-8", "immutable", bytes.NewReader(dsc))
217+
if err != nil {
218+
return nil, fmt.Errorf("upload source package %s: %s: %w", packageName, filepath.Base(dscPath), err)
219+
}
214220
for _, sig := range files {
215221
fname := sig.Filename
216222
contentType := mime.TypeByExtension(slashpath.Ext(fname))
@@ -230,6 +236,16 @@ func uploadSourcePackage(ctx context.Context, bucket *blob.Bucket, dscPath strin
230236
return pkg, nil
231237
}
232238

239+
// maybeClearSigned returns the plaintext of a file that may or may not be
240+
// wrapped in GPG clear-signed armor.
241+
func maybeClearSigned(data []byte) []byte {
242+
block, _ := clearsign.Decode(data)
243+
if block == nil {
244+
return data
245+
}
246+
return block.Plaintext
247+
}
248+
233249
// promotePackageField ensures the Package field is the first in the paragraph.
234250
// It modifies the paragraph in-place.
235251
//

0 commit comments

Comments
 (0)