From 8e20daa9276f058cc93ab744b086825247a8c45e Mon Sep 17 00:00:00 2001 From: Andrey Smirnov Date: Fri, 13 Mar 2015 18:42:34 +0300 Subject: [PATCH] Refactor out IsClearSigned to separate method. #71 --- deb/deb.go | 10 ++++------ deb/remote_test.go | 4 ++++ utils/gpg.go | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/deb/deb.go b/deb/deb.go index c4985558d..2a31125c1 100644 --- a/deb/deb.go +++ b/deb/deb.go @@ -2,14 +2,12 @@ package deb import ( "archive/tar" - "bufio" "compress/gzip" "fmt" "github.com/mkrautz/goar" "github.com/smira/aptly/utils" "io" "os" - "strings" ) // GetControlFileFromDeb reads control file from deb package @@ -69,16 +67,16 @@ func GetControlFileFromDsc(dscFile string, verifier utils.Verifier) (Stanza, err } defer file.Close() - line, err := bufio.NewReader(file).ReadString('\n') + isClearSigned, err := verifier.IsClearSigned(file) + file.Seek(0, 0) + if err != nil { return nil, err } - file.Seek(0, 0) - var text *os.File - if strings.Index(line, "BEGIN PGP SIGN") != -1 { + if isClearSigned { text, err = verifier.ExtractClearsigned(file) if err != nil { return nil, err diff --git a/deb/remote_test.go b/deb/remote_test.go index 4bdfbbaf2..09fe20b9d 100644 --- a/deb/remote_test.go +++ b/deb/remote_test.go @@ -43,6 +43,10 @@ func (n *NullVerifier) ExtractClearsigned(clearsigned io.Reader) (text *os.File, return } +func (n *NullVerifier) IsClearSigned(clearsign io.Reader) (bool, error) { + return false, nil +} + type PackageListMixinSuite struct { p1, p2, p3 *Package list *PackageList diff --git a/utils/gpg.go b/utils/gpg.go index 080aa74a0..b66ad1afc 100644 --- a/utils/gpg.go +++ b/utils/gpg.go @@ -1,6 +1,7 @@ package utils import ( + "bufio" "bytes" "fmt" "io" @@ -28,6 +29,7 @@ type Verifier interface { InitKeyring() error AddKeyring(keyring string) VerifyDetachedSignature(signature, cleartext io.Reader) error + IsClearSigned(clearsigned io.Reader) (bool, error) VerifyClearsigned(clearsigned io.Reader) error ExtractClearsigned(clearsigned io.Reader) (text *os.File, err error) } @@ -257,6 +259,22 @@ func (g *GpgVerifier) VerifyDetachedSignature(signature, cleartext io.Reader) er return g.runGpgv(args, "detached signature") } +// IsClearSigned returns true if file contains signature +func (g *GpgVerifier) IsClearSigned(clearsigned io.Reader) (bool, error) { + scanner := bufio.NewScanner(clearsigned) + for scanner.Scan() { + if strings.Index(scanner.Text(), "BEGIN PGP SIGN") != -1 { + return true, nil + } + } + + if err := scanner.Err(); err != nil { + return false, err + } + + return false, nil +} + // VerifyClearsigned verifies clearsigned file using gpgv func (g *GpgVerifier) VerifyClearsigned(clearsigned io.Reader) error { args := g.argsKeyrings()