adding remove

This commit is contained in:
David Lawrence 2015-06-18 19:33:47 -07:00
parent 0ce1572c20
commit 06abf201c3
3 changed files with 95 additions and 44 deletions

2
Godeps/Godeps.json generated
View File

@ -47,7 +47,7 @@
}, },
{ {
"ImportPath": "github.com/endophage/gotuf", "ImportPath": "github.com/endophage/gotuf",
"Rev": "429e2920d26a5703bb9cbdeaf893d3b79d6b2085" "Rev": "3addfe014482381c8bcd94c19327e2f12f9de1b6"
}, },
{ {
"ImportPath": "github.com/go-sql-driver/mysql", "ImportPath": "github.com/go-sql-driver/mysql",

View File

@ -387,6 +387,19 @@ func (tr *TufRepo) AddTargets(role string, targets data.Files) (data.Files, erro
return nil, nil return nil, nil
} }
func (tr *TufRepo) RemoveTargets(role string, targets data.Files) error {
t, ok := tr.Targets[role]
if !ok {
return errors.ErrInvalidRole{role}
}
for path, _ := range targets {
delete(t.Signed.Targets, path)
}
t.Dirty = true
return nil
}
func (tr *TufRepo) UpdateSnapshot(role string, s *data.Signed) error { func (tr *TufRepo) UpdateSnapshot(role string, s *data.Signed) error {
jsonData, err := json.Marshal(s) jsonData, err := json.Marshal(s)
if err != nil { if err != nil {

View File

@ -83,53 +83,16 @@ func tufAdd(cmd *cobra.Command, args []string) {
"json", "json",
"targets", "targets",
) )
if err != nil {
fatalf(err.Error())
}
b, err := ioutil.ReadFile(targetPath) b, err := ioutil.ReadFile(targetPath)
if err != nil { if err != nil {
fatalf(err.Error()) fatalf(err.Error())
} }
fmt.Println("Loading TUF Repository.") bootstrapRepo(gun, repo)
rootJSON, err := filestore.GetMeta("root", 0)
if err != nil {
fatalf(err.Error())
}
root := &data.Signed{}
err = json.Unmarshal(rootJSON, root)
if err != nil {
fatalf(err.Error())
}
repo.SetRoot(root)
targetsJSON, err := filestore.GetMeta("targets", 0)
if err != nil {
fatalf(err.Error())
}
targets := &data.Signed{}
err = json.Unmarshal(targetsJSON, targets)
if err != nil {
fatalf(err.Error())
}
repo.SetTargets("targets", targets)
snapshotJSON, err := filestore.GetMeta("snapshot", 0)
if err != nil {
fatalf(err.Error())
}
snapshot := &data.Signed{}
err = json.Unmarshal(snapshotJSON, snapshot)
if err != nil {
fatalf(err.Error())
}
repo.SetSnapshot(snapshot)
timestampJSON, err := filestore.GetMeta("timestamp", 0)
if err != nil {
fatalf(err.Error())
}
timestamp := &data.Signed{}
err = json.Unmarshal(timestampJSON, timestamp)
if err != nil {
fatalf(err.Error())
}
repo.SetTimestamp(timestamp)
fmt.Println("Generating metadata for target") fmt.Println("Generating metadata for target")
meta, err := data.NewFileMeta(bytes.NewBuffer(b)) meta, err := data.NewFileMeta(bytes.NewBuffer(b))
@ -289,6 +252,9 @@ func tufPublish(cmd *cobra.Command, args []string) {
"json", "json",
"targets", "targets",
) )
if err != nil {
fatalf(err.Error())
}
root, err := filestore.GetMeta("root", 0) root, err := filestore.GetMeta("root", 0)
if err != nil { if err != nil {
@ -326,10 +292,31 @@ func tufPublish(cmd *cobra.Command, args []string) {
} }
func tufRemove(cmd *cobra.Command, args []string) { func tufRemove(cmd *cobra.Command, args []string) {
if len(args) < 1 { if len(args) < 2 {
cmd.Usage() cmd.Usage()
fatalf("must specify a GUN") fatalf("must specify a GUN and target name")
} }
gun := args[0]
targetName := args[1]
kdb := keys.NewDB()
signer := signed.NewSigner(NewCryptoService(gun))
repo := tuf.NewTufRepo(kdb, signer)
filestore, err := store.NewFilesystemStore(
path.Join(viper.GetString("tufDir"), gun),
"metadata",
"json",
"targets",
)
if err != nil {
fatalf(err.Error())
}
bootstrapRepo(gun, repo)
repo.RemoveTargets("targets", targetName)
saveRepo(repo, filestore)
} }
func saveRepo(repo *tuf.TufRepo, filestore store.MetadataStore) error { func saveRepo(repo *tuf.TufRepo, filestore store.MetadataStore) error {
@ -389,3 +376,54 @@ func bootstrapClient(remote store.RemoteStore, repo *tuf.TufRepo, kdb *keys.KeyD
kdb, kdb,
), nil ), nil
} }
func bootstrapRepo(gun string, repo *tuf.TufRepo) {
filestore, err := store.NewFilesystemStore(
path.Join(viper.GetString("tufDir"), gun),
"metadata",
"json",
"targets",
)
fmt.Println("Loading TUF Repository.")
rootJSON, err := filestore.GetMeta("root", 0)
if err != nil {
fatalf(err.Error())
}
root := &data.Signed{}
err = json.Unmarshal(rootJSON, root)
if err != nil {
fatalf(err.Error())
}
repo.SetRoot(root)
targetsJSON, err := filestore.GetMeta("targets", 0)
if err != nil {
fatalf(err.Error())
}
targets := &data.Signed{}
err = json.Unmarshal(targetsJSON, targets)
if err != nil {
fatalf(err.Error())
}
repo.SetTargets("targets", targets)
snapshotJSON, err := filestore.GetMeta("snapshot", 0)
if err != nil {
fatalf(err.Error())
}
snapshot := &data.Signed{}
err = json.Unmarshal(snapshotJSON, snapshot)
if err != nil {
fatalf(err.Error())
}
repo.SetSnapshot(snapshot)
timestampJSON, err := filestore.GetMeta("timestamp", 0)
if err != nil {
fatalf(err.Error())
}
timestamp := &data.Signed{}
err = json.Unmarshal(timestampJSON, timestamp)
if err != nil {
fatalf(err.Error())
}
repo.SetTimestamp(timestamp)
}