blob: 36b2b87712d369397e038f459f50cacfa69d91da [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This is a helper script that regenerates the initial test metadata.
package main
import (
"encoding/json"
"io/ioutil"
"log"
"os"
"path/filepath"
"time"
tuf "github.com/theupdateframework/go-tuf"
"github.com/theupdateframework/go-tuf/sign"
)
var expirationDate = time.Date(2100, time.January, 1, 0, 0, 0, 0, time.UTC)
func loadKeys(repo *tuf.Repo, role string, path string) {
f, err := os.Open(path)
if err != nil {
log.Fatal(err)
}
var persistedKeys struct {
Encrypted bool `json:"encrypted"`
Data []*sign.PrivateKey `json:"data"`
}
if err := json.NewDecoder(f).Decode(&persistedKeys); err != nil {
log.Fatal(err)
}
for _, key := range persistedKeys.Data {
if err := repo.AddPrivateKeyWithExpires(role, key, expirationDate); err != nil {
log.Fatalf("failed to add private key: %s", err)
}
}
}
func main() {
tempdir, err := ioutil.TempDir(".", "")
if err != nil {
log.Fatal(err)
}
defer os.RemoveAll(tempdir)
repo, err := tuf.NewRepo(tuf.FileSystemStore(tempdir, nil))
if err != nil {
log.Fatalf("failed to create repository: %s", err)
}
if err := repo.Init(true); err != nil {
log.Fatalf("failed init init: %s", err)
}
loadKeys(repo, "root", "keys/root.json")
loadKeys(repo, "targets", "keys/targets.json")
loadKeys(repo, "snapshot", "keys/snapshot.json")
loadKeys(repo, "timestamp", "keys/timestamp.json")
if repo.AddTargetsWithExpires([]string{}, nil, expirationDate); err != nil {
log.Fatalf("failed to create targets: %s", err)
}
if err := repo.SnapshotWithExpires(tuf.CompressionTypeNone, expirationDate); err != nil {
log.Fatalf("failed to create snapshot: %s", err)
}
if err := repo.TimestampWithExpires(expirationDate); err != nil {
log.Fatalf("failed to create timestamp: %s", err)
}
if err := repo.Commit(); err != nil {
log.Fatalf("failed to commit: %s", err)
}
// Delete the old metadata.
if _, err := os.Stat("repository"); err == nil {
if err := os.RemoveAll("repository"); err != nil {
log.Fatal(err)
}
}
if err := os.Rename(filepath.Join(tempdir, "repository"), "repository"); err != nil {
log.Fatal(err)
}
}