Refactor out IsClearSigned to separate method. #71

This commit is contained in:
Andrey Smirnov
2015-03-13 18:42:34 +03:00
parent 9e39dbf81e
commit 8e20daa927
3 changed files with 26 additions and 6 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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()