func (r *NotaryRepository) bootstrapClient() (*tufclient.Client, error) { remote, err := getRemoteStore(r.baseURL, r.Gun) if err != nil { return nil, err } rootJSON, err := remote.GetMeta("root", 5<<20) if err != nil { return nil, err } root := &data.Signed{} err = json.Unmarshal(rootJSON, root) if err != nil { return nil, err } err = r.validateRoot(root) if err != nil { return nil, err } kdb := keys.NewDB() r.tufRepo = tuf.NewTufRepo(kdb, r.signer) err = r.tufRepo.SetRoot(root) if err != nil { return nil, err } return tufclient.NewClient( r.tufRepo, remote, kdb, ), nil }
func (r *NotaryRepository) bootstrapClient() (*tufclient.Client, error) { var rootJSON []byte remote, err := getRemoteStore(r.baseURL, r.gun, r.roundTrip) if err == nil { // if remote store successfully set up, try and get root from remote rootJSON, err = remote.GetMeta("root", maxSize) } // if remote store couldn't be setup, or we failed to get a root from it // load the root from cache (offline operation) if err != nil { if err, ok := err.(store.ErrMetaNotFound); ok { // if the error was MetaNotFound then we successfully contacted // the store and it doesn't know about the repo. return nil, err } rootJSON, err = r.fileStore.GetMeta("root", maxSize) if err != nil { // if cache didn't return a root, we cannot proceed return nil, store.ErrMetaNotFound{} } } // can't just unmarshal into SignedRoot because validate root // needs the root.Signed field to still be []byte for signature // validation root := &data.Signed{} err = json.Unmarshal(rootJSON, root) if err != nil { return nil, err } err = r.KeyStoreManager.ValidateRoot(root, r.gun) if err != nil { return nil, err } kdb := keys.NewDB() r.tufRepo = tuf.NewTufRepo(kdb, r.cryptoService) signedRoot, err := data.RootFromSigned(root) if err != nil { return nil, err } err = r.tufRepo.SetRoot(signedRoot) if err != nil { return nil, err } return tufclient.NewClient( r.tufRepo, remote, kdb, r.fileStore, ), nil }
func tufClient(args *docopt.Args) (*client.Client, error) { storePath, ok := args.String["--store"] if !ok { storePath = args.String["-s"] } local := store.FileSystemStore(storePath, nil) remote, err := client.HTTPRemoteStore(args.String["<url>"], nil) if err != nil { return nil, err } return client.NewClient(local, remote), nil }
func download(ctx *cli.Context) { if len(ctx.Args()) < 1 { fmt.Println("At least one target name must be provided.") return } var root []byte r := &data.Signed{} err := json.Unmarshal(root, r) if err != nil { fmt.Println("Could not read initial root.json") return } kdb := keys.NewDB() repo := tuf.NewTufRepo(kdb, nil) repo.SetRoot(r) remote, err := store.NewHTTPStore( ctx.String("host"), ctx.String("meta"), ctx.String("ext"), ctx.String("targets"), ) cached := store.NewFileCacheStore(remote, "/tmp/tuf") if err != nil { fmt.Println(err) return } client := client.NewClient(repo, cached, kdb) err = client.Update() if err != nil { fmt.Println(err) return } filename := filepath.Base(ctx.Args()[0]) f, err := os.OpenFile(filename, os.O_TRUNC|os.O_CREATE|os.O_RDWR, 0644) if err != nil { fmt.Println(err) return } defer f.Close() m := client.TargetMeta(ctx.Args()[0]) if m == nil { fmt.Println("Requested package not found.") return } err = client.DownloadTarget(f, ctx.Args()[0], m) if err != nil { fmt.Println(err) return } fmt.Println("Requested pacakge downloaded.") }
func bootstrapClient(remote store.RemoteStore, repo *tuf.TufRepo, kdb *keys.KeyDB) (*client.Client, error) { rootJSON, err := remote.GetMeta("root", 5<<20) if err != nil { return nil, err } root := &data.Signed{} err = json.Unmarshal(rootJSON, root) if err != nil { return nil, err } // TODO: Validate the root file against the key store err = repo.SetRoot(root) if err != nil { return nil, err } return client.NewClient( repo, remote, kdb, ), nil }
func bootstrapClient(gun string, remote store.RemoteStore, repo *tuf.TufRepo, kdb *keys.KeyDB) (*client.Client, error) { rootJSON, err := remote.GetMeta("root", 5<<20) root := &data.Signed{} err = json.Unmarshal(rootJSON, root) if err != nil { return nil, err } err = validateRoot(gun, root) if err != nil { return nil, err } err = repo.SetRoot(root) if err != nil { return nil, err } return client.NewClient( repo, remote, kdb, ), nil }