From 9391bfc520c55ff66c1547561bd3189dd911c8cb Mon Sep 17 00:00:00 2001
From: Ashley Cui <acui@redhat.com>
Date: Tue, 2 Mar 2021 16:14:10 -0500
Subject: Add version field to secret compat list/inspect api

Docker api expects secrets endpoint to have a version field. So, the
version field is added into the compat endpoint only. The version field
is always 1, since Docker uses the version to keep track of updates to
the secret, and currently we cannot update a secret.

Signed-off-by: Ashley Cui <acui@redhat.com>
---
 pkg/api/handlers/compat/secrets.go | 32 ++++++++++++++++++++++++++++++--
 pkg/api/server/register_secrets.go |  4 ++--
 2 files changed, 32 insertions(+), 4 deletions(-)

(limited to 'pkg/api')

diff --git a/pkg/api/handlers/compat/secrets.go b/pkg/api/handlers/compat/secrets.go
index c5ee8c324..86e3887a4 100644
--- a/pkg/api/handlers/compat/secrets.go
+++ b/pkg/api/handlers/compat/secrets.go
@@ -40,7 +40,21 @@ func ListSecrets(w http.ResponseWriter, r *http.Request) {
 		utils.InternalServerError(w, err)
 		return
 	}
-	utils.WriteResponse(w, http.StatusOK, reports)
+	if utils.IsLibpodRequest(r) {
+		utils.WriteResponse(w, http.StatusOK, reports)
+		return
+	}
+	// Docker compat expects a version field that increments when the secret is updated
+	// We currently can't update a secret, so we default the version to 1
+	compatReports := make([]entities.SecretInfoReportCompat, 0, len(reports))
+	for _, report := range reports {
+		compatRep := entities.SecretInfoReportCompat{
+			SecretInfoReport: *report,
+			Version:          entities.SecretVersion{Index: 1},
+		}
+		compatReports = append(compatReports, compatRep)
+	}
+	utils.WriteResponse(w, http.StatusOK, compatReports)
 }
 
 func InspectSecret(w http.ResponseWriter, r *http.Request) {
@@ -59,7 +73,21 @@ func InspectSecret(w http.ResponseWriter, r *http.Request) {
 		utils.SecretNotFound(w, name, errs[0])
 		return
 	}
-	utils.WriteResponse(w, http.StatusOK, reports[0])
+	if len(reports) < 1 {
+		utils.InternalServerError(w, err)
+		return
+	}
+	if utils.IsLibpodRequest(r) {
+		utils.WriteResponse(w, http.StatusOK, reports[0])
+		return
+	}
+	// Docker compat expects a version field that increments when the secret is updated
+	// We currently can't update a secret, so we default the version to 1
+	compatReport := entities.SecretInfoReportCompat{
+		SecretInfoReport: *reports[0],
+		Version:          entities.SecretVersion{Index: 1},
+	}
+	utils.WriteResponse(w, http.StatusOK, compatReport)
 }
 
 func RemoveSecret(w http.ResponseWriter, r *http.Request) {
diff --git a/pkg/api/server/register_secrets.go b/pkg/api/server/register_secrets.go
index 1c5f5954b..531623845 100644
--- a/pkg/api/server/register_secrets.go
+++ b/pkg/api/server/register_secrets.go
@@ -115,7 +115,7 @@ func (s *APIServer) registerSecretHandlers(r *mux.Router) error {
 	// parameters:
 	// responses:
 	//   '200':
-	//     "$ref": "#/responses/SecretListResponse"
+	//     "$ref": "#/responses/SecretListCompatResponse"
 	//   '500':
 	//      "$ref": "#/responses/InternalError"
 	r.Handle(VersionedPath("/secrets"), s.APIHandler(compat.ListSecrets)).Methods(http.MethodGet)
@@ -158,7 +158,7 @@ func (s *APIServer) registerSecretHandlers(r *mux.Router) error {
 	// - application/json
 	// responses:
 	//   '200':
-	//     "$ref": "#/responses/SecretInspectResponse"
+	//     "$ref": "#/responses/SecretInspectCompatResponse"
 	//   '404':
 	//     "$ref": "#/responses/NoSuchSecret"
 	//   '500':
-- 
cgit v1.2.3-54-g00ecf