MCPcopy
hub / github.com/perkeep/perkeep / processEncryptedMetaBlob

Method processEncryptedMetaBlob

pkg/blobserver/encrypt/meta.go:211–260  ·  view source on GitHub ↗

processEncryptedMetaBlob decrypts dat (the data for the br meta blob) and parses its meta lines, updating the index. processEncryptedMetaBlob is not thread-safe.

(br blob.Ref, dat []byte)

Source from the content-addressed store, hash-verified

209//
210// processEncryptedMetaBlob is not thread-safe.
211func (s *storage) processEncryptedMetaBlob(br blob.Ref, dat []byte) error {
212 plainBytes := pools.BytesBuffer()
213 defer pools.PutBuffer(plainBytes)
214
215 if err := s.decryptBlob(plainBytes, bytes.NewBuffer(dat)); err != nil {
216 return err
217 }
218
219 header, err := plainBytes.ReadString('\n')
220 if err != nil {
221 return errors.New("No first line")
222 }
223 if header != "#camlistore/encmeta=2\n" {
224 if len(header) > 80 {
225 header = header[:80]
226 }
227 return fmt.Errorf("unsupported first line %q", header)
228 }
229 var plains []blob.Ref
230 for {
231 line, err := plainBytes.ReadString('\n')
232 if err != nil && len(line) != 0 {
233 return io.ErrUnexpectedEOF
234 } else if err != nil {
235 break
236 }
237 parts := strings.Split(strings.TrimRight(line, "\n"), "/")
238 if len(parts) != 3 {
239 if len(line) > 80 {
240 line = line[:80]
241 }
242 return fmt.Errorf("malformed line %q", line)
243 }
244 // We do very limited checking here, as we signed the blob and we check
245 // the value anyway on s.index.Get.
246 plainBR, ok := blob.ParseKnown(parts[0])
247 if !ok {
248 if len(line) > 80 {
249 line = line[:80]
250 }
251 return fmt.Errorf("malformed line %q", line)
252 }
253 plains = append(plains, plainBR)
254 if err := s.index.Set(parts[0], parts[1]+"/"+parts[2]); err != nil {
255 return err
256 }
257 }
258 s.recordMeta(&metaBlob{br: br, plains: plains})
259 return nil
260}
261
262func (s *storage) readAllMetaBlobs() error {
263 type encMB struct {

Callers 1

readAllMetaBlobsMethod · 0.95

Calls 6

decryptBlobMethod · 0.95
recordMetaMethod · 0.95
BytesBufferFunction · 0.92
PutBufferFunction · 0.92
ParseKnownFunction · 0.92
SetMethod · 0.65

Tested by

no test coverage detected