|
@@ -3,12 +3,15 @@ package api
|
|
|
import (
|
|
|
"fmt"
|
|
|
"mime"
|
|
|
+ "os"
|
|
|
+ "path"
|
|
|
"strings"
|
|
|
|
|
|
log "github.com/Sirupsen/logrus"
|
|
|
"github.com/docker/docker/engine"
|
|
|
"github.com/docker/docker/pkg/parsers"
|
|
|
"github.com/docker/docker/pkg/version"
|
|
|
+ "github.com/docker/docker/vendor/src/github.com/docker/libtrust"
|
|
|
)
|
|
|
|
|
|
const (
|
|
@@ -47,3 +50,25 @@ func MatchesContentType(contentType, expectedType string) bool {
|
|
|
}
|
|
|
return err == nil && mimetype == expectedType
|
|
|
}
|
|
|
+
|
|
|
+// LoadOrCreateTrustKey attempts to load the libtrust key at the given path,
|
|
|
+// otherwise generates a new one
|
|
|
+func LoadOrCreateTrustKey(trustKeyPath string) (libtrust.PrivateKey, error) {
|
|
|
+ err := os.MkdirAll(path.Dir(trustKeyPath), 0700)
|
|
|
+ if err != nil {
|
|
|
+ return nil, err
|
|
|
+ }
|
|
|
+ trustKey, err := libtrust.LoadKeyFile(trustKeyPath)
|
|
|
+ if err == libtrust.ErrKeyFileDoesNotExist {
|
|
|
+ trustKey, err = libtrust.GenerateECP256PrivateKey()
|
|
|
+ if err != nil {
|
|
|
+ return nil, fmt.Errorf("Error generating key: %s", err)
|
|
|
+ }
|
|
|
+ if err := libtrust.SaveKey(trustKeyPath, trustKey); err != nil {
|
|
|
+ return nil, fmt.Errorf("Error saving key file: %s", err)
|
|
|
+ }
|
|
|
+ } else if err != nil {
|
|
|
+ log.Fatalf("Error loading key file: %s", err)
|
|
|
+ }
|
|
|
+ return trustKey, nil
|
|
|
+}
|