-
Notifications
You must be signed in to change notification settings - Fork 5
/
secret.go
127 lines (110 loc) · 4.27 KB
/
secret.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package v1
import (
"net/http"
"github.com/dana-team/platform-backend/src/controllers"
"github.com/dana-team/platform-backend/src/types"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
k8serrors "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/client-go/kubernetes"
)
// secretHandler handles the request of the client to the Kubernetes cluster.
func secretHandler(handler func(controller controllers.SecretController, c *gin.Context) (interface{}, error)) gin.HandlerFunc {
return func(c *gin.Context) {
client, exists := c.Get("kubeClient")
if !exists {
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "Kubernetes client not found"})
return
}
ctxLogger, exists := c.Get("logger")
if !exists {
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": "Logger not found in context"})
return
}
logger := ctxLogger.(*zap.Logger)
kubeClient := client.(kubernetes.Interface)
context := c.Request.Context()
secretController := controllers.NewSecretController(kubeClient, context, logger)
result, err := handler(secretController, c)
if err != nil {
c.AbortWithStatusJSON(int(err.(*k8serrors.StatusError).ErrStatus.Code), gin.H{"error": "Operation failed", "details": err.Error()})
return
}
c.JSON(http.StatusOK, result)
}
}
// CreateSecret creates a new secret in a specific namespace.
func CreateSecret() gin.HandlerFunc {
return func(c *gin.Context) {
var uriRequest types.SecretNamespaceUriRequest
if err := c.BindUri(&uriRequest); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid request", "details": err.Error()})
return
}
var request types.CreateSecretRequest
if err := c.BindJSON(&request); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid request", "details": err.Error()})
return
}
secretHandler(func(controller controllers.SecretController, c *gin.Context) (interface{}, error) {
return controller.CreateSecret(uriRequest.NamespaceName, request)
})(c)
}
}
// GetSecrets gets all secrets in a specific namespace.
func GetSecrets() gin.HandlerFunc {
return func(c *gin.Context) {
var request types.SecretNamespaceUriRequest
if err := c.BindUri(&request); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid request", "details": err.Error()})
return
}
secretHandler(func(controller controllers.SecretController, c *gin.Context) (interface{}, error) {
return controller.GetSecrets(request.NamespaceName)
})(c)
}
}
// GetSecret gets a specific secret from a specific namespace.
func GetSecret() gin.HandlerFunc {
return func(c *gin.Context) {
var request types.SecretUriRequest
if err := c.BindUri(&request); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid request", "details": err.Error()})
return
}
secretHandler(func(controller controllers.SecretController, c *gin.Context) (interface{}, error) {
return controller.GetSecret(request.NamespaceName, request.SecretName)
})(c)
}
}
// UpdateSecret updates a specific secret in a specific namespace.
func UpdateSecret() gin.HandlerFunc {
return func(c *gin.Context) {
var uriRequest types.SecretUriRequest
if err := c.BindUri(&uriRequest); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid request", "details": err.Error()})
return
}
var request types.UpdateSecretRequest
if err := c.BindJSON(&request); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid request", "details": err.Error()})
return
}
secretHandler(func(controller controllers.SecretController, c *gin.Context) (interface{}, error) {
return controller.UpdateSecret(uriRequest.NamespaceName, uriRequest.SecretName, request)
})(c)
}
}
// DeleteSecret deletes a specific secret in a specific namespace.
func DeleteSecret() gin.HandlerFunc {
return func(c *gin.Context) {
var request types.SecretUriRequest
if err := c.BindUri(&request); err != nil {
c.AbortWithStatusJSON(http.StatusBadRequest, gin.H{"error": "Invalid request", "details": err.Error()})
return
}
secretHandler(func(controller controllers.SecretController, c *gin.Context) (interface{}, error) {
return controller.DeleteSecret(request.NamespaceName, request.SecretName)
})(c)
}
}