func (m *memoryStore) WalkStagedTargets(paths []string, targetsFn targetsWalkFunc) error { if len(paths) == 0 { for path, dat := range m.files { meta, err := data.NewFileMeta(bytes.NewReader(dat), "sha256") if err != nil { return err } if err = targetsFn(path, meta); err != nil { return err } } return nil } for _, path := range paths { dat, ok := m.files[path] if !ok { return errors.ErrFileNotFound{Path: path} } meta, err := data.NewFileMeta(bytes.NewReader(dat), "sha256") if err != nil { return err } if err = targetsFn(path, meta); err != nil { return err } } return nil }
func tufAdd(cmd *cobra.Command, args []string) { if len(args) < 3 { cmd.Usage() fatalf("must specify a GUN, target, and path to target data") } gun := args[0] targetName := args[1] targetPath := args[2] kdb := keys.NewDB() signer := signed.NewSigner(NewCryptoService(gun)) repo := tuf.NewTufRepo(kdb, signer) b, err := ioutil.ReadFile(targetPath) if err != nil { fatalf(err.Error()) } filestore := bootstrapRepo(gun, repo) fmt.Println("Generating metadata for target") meta, err := data.NewFileMeta(bytes.NewBuffer(b)) if err != nil { fatalf(err.Error()) } fmt.Printf("Adding target \"%s\" with sha256 \"%s\" and size %d bytes.\n", targetName, meta.Hashes["sha256"], meta.Length) _, err = repo.AddTargets("targets", data.Files{targetName: meta}) if err != nil { fatalf(err.Error()) } saveRepo(repo, filestore) }
func snapshotExpired(ts *data.SignedTimestamp, snapshot []byte) bool { meta, err := data.NewFileMeta(bytes.NewReader(snapshot), "sha256") if err != nil { // if we can't generate FileMeta from the current snapshot, we should // continue to serve the old timestamp if it isn't time expired // because we won't be able to generate a new one. return false } hash := meta.Hashes["sha256"] return !bytes.Equal(hash, ts.Signed.Meta["snapshot"].Hashes["sha256"]) }
func (tr *TufRepo) UpdateTimestamp(s *data.Signed) error { jsonData, err := json.Marshal(s) if err != nil { return err } meta, err := data.NewFileMeta(bytes.NewReader(jsonData), "sha256") if err != nil { return err } tr.Timestamp.Signed.Meta["snapshot"] = meta tr.Timestamp.Dirty = true return nil }
func (tr *TufRepo) UpdateSnapshot(role string, s *data.Signed) error { jsonData, err := json.Marshal(s) if err != nil { return err } meta, err := data.NewFileMeta(bytes.NewReader(jsonData), "sha256") if err != nil { return err } tr.Snapshot.Signed.Meta[role] = meta tr.Snapshot.Dirty = true return nil }
// NewTarget is a helper method that returns a Target func NewTarget(targetName string, targetPath string) (*Target, error) { b, err := ioutil.ReadFile(targetPath) if err != nil { return nil, err } meta, err := data.NewFileMeta(bytes.NewBuffer(b)) if err != nil { return nil, err } return &Target{Name: targetName, Hashes: meta.Hashes, Length: meta.Length}, nil }
func cmdMeta(args *docopt.Args, repo *tuf.Repo) error { paths := args.All["<path>"].([]string) for _, file := range paths { reader, _ := os.Open(file) meta, _ := data.NewFileMeta(reader, "sha256") jsonBytes, err := json.Marshal(meta) if err != nil { return err } filename := fmt.Sprintf("%s.meta.json", file) err = ioutil.WriteFile(filename, jsonBytes, 0644) if err != nil { return err } } return nil }