diff --git a/mfer/deserialize.go b/mfer/deserialize.go index b9ce966..85ff318 100644 --- a/mfer/deserialize.go +++ b/mfer/deserialize.go @@ -11,7 +11,7 @@ import ( "google.golang.org/protobuf/proto" ) -func (m *manifest) validateProto() error { +func (m *manifest) validateProtoOuter() error { if m.pbOuter.Version != MFFileOuter_VERSION_ONE { return errors.New("unknown version") } @@ -38,12 +38,20 @@ func (m *manifest) validateProto() error { log.Debugf("truncated data, got %d expected %d", isize, m.pbOuter.Size) return bork.ErrFileTruncated } - + log.Debugf("inner data size is %d", isize) log.Dump(dat) log.Dump(m.pbOuter.Sha256) - return nil +} +func validateMagic(dat []byte) bool { + ml := len([]byte(MAGIC)) + if len(dat) < ml { + return false + } + got := dat[0:ml] + expected := []byte(MAGIC) + return bytes.Equal(got, expected) } func NewFromProto(input io.Reader) (*manifest, error) { @@ -52,30 +60,30 @@ func NewFromProto(input io.Reader) (*manifest, error) { if err != nil { return nil, err } - ml := len([]byte(MAGIC)) - bb := bytes.NewBuffer(dat) - got := dat[0:ml] - log.Dump("got:") - log.Dump(got) - expected := []byte(MAGIC) - log.Dump("expected:") - log.Dump(expected) - if !bytes.Equal(got, expected) { + if !validateMagic(dat) { return nil, errors.New("invalid file format") } - bb = bytes.NewBuffer(dat[ml:]) + + // remove magic bytes prefix: + ml := len([]byte(MAGIC)) + bb := bytes.NewBuffer(dat[ml:]) dat = bb.Bytes() + log.Dump(dat) + // deserialize: m.pbOuter = new(MFFileOuter) err = proto.Unmarshal(dat, m.pbOuter) if err != nil { return nil, err } - ve := m.validateProto() + + ve := m.validateProtoOuter() if ve != nil { return nil, ve } + + // FIXME TODO deserialize inner return m, nil } diff --git a/mfer/manifest.go b/mfer/manifest.go index 9c26a93..d85e5c5 100644 --- a/mfer/manifest.go +++ b/mfer/manifest.go @@ -158,7 +158,6 @@ func (m *manifest) addFile(p string, fi fs.FileInfo, sfsIndex int) error { func (m *manifest) Scan() error { // FIXME scan and whatever function does the hashing should take ctx - log.Debug("manifest Scan()") for idx, sfs := range m.sourceFS { if sfs == nil { return errors.New("invalid source fs") diff --git a/mfer/serialize.go b/mfer/serialize.go index 82dbff4..00e8a5e 100644 --- a/mfer/serialize.go +++ b/mfer/serialize.go @@ -7,12 +7,12 @@ import ( "errors" "time" - "git.eeqj.de/sneak/mfer/internal/log" "google.golang.org/protobuf/proto" ) //go:generate protoc --go_out=. --go_opt=paths=source_relative mf.proto +// rot13("MANIFEST") const MAGIC string = "ZNAVSRFG" func newTimestampFromTime(t time.Time) *Timestamp { @@ -24,8 +24,6 @@ func newTimestampFromTime(t time.Time) *Timestamp { } func (m *manifest) generate() error { - log.Debug("generate()") - if m.pbInner == nil { e := m.generateInner() if e != nil { @@ -51,7 +49,6 @@ func (m *manifest) generate() error { } func (m *manifest) generateOuter() error { - log.Debug("generateOuter()") if m.pbInner == nil { return errors.New("internal error") } @@ -83,18 +80,15 @@ func (m *manifest) generateOuter() error { CompressionType: MFFileOuter_COMPRESSION_GZIP, } m.pbOuter = o - log.Dump(m.pbOuter) return nil } func (m *manifest) generateInner() error { - log.Debug("generateInner()") m.pbInner = &MFFile{ Version: MFFile_VERSION_ONE, CreatedAt: newTimestampFromTime(time.Now()), Files: []*MFFilePath{}, } - for _, f := range m.files { nf := &MFFilePath{ Path: f.path, @@ -102,6 +96,5 @@ func (m *manifest) generateInner() error { } m.pbInner.Files = append(m.pbInner.Files, nf) } - log.Dump(m.pbInner) return nil }