@@ -18,11 +18,13 @@ import (
1818 "github.com/open-policy-agent/opa-control-plane/internal/metrics"
1919 "github.com/open-policy-agent/opa-control-plane/internal/server/chain"
2020 "github.com/open-policy-agent/opa-control-plane/internal/server/types"
21+ "github.com/open-policy-agent/opa-control-plane/internal/service"
2122)
2223
2324type Server struct {
2425 router * http.ServeMux
2526 db * database.Database
27+ svc * service.Service
2628 readyFn func (context.Context ) error
2729}
2830
@@ -57,6 +59,7 @@ func (s *Server) Init() *Server {
5759 setup ("GET" , "/v1/bundles/{bundle}" , s .v1BundlesGet )
5860 setup ("PUT" , "/v1/bundles/{bundle}" , s .v1BundlesPut )
5961 setup ("DELETE" , "/v1/bundles/{bundle}" , s .v1BundlesDelete )
62+ setup ("POST" , "/v1/bundles/{bundle}" , s .v1BundlesPost )
6063
6164 setup ("GET" , "/v1/stacks" , s .v1StacksList )
6265 setup ("GET" , "/v1/stacks/{stack}" , s .v1StacksGet )
@@ -76,6 +79,11 @@ func (s *Server) WithRouter(router *http.ServeMux) *Server {
7679 return s
7780}
7881
82+ func (s * Server ) WithService (svc * service.Service ) * Server {
83+ s .svc = svc
84+ return s
85+ }
86+
7987func (s * Server ) WithDatabase (db * database.Database ) * Server {
8088 s .db = db
8189 return s
@@ -167,6 +175,24 @@ func (s *Server) v1BundlesGet(w http.ResponseWriter, r *http.Request) {
167175 JSONOK (w , resp , pretty (r ))
168176}
169177
178+ func (s * Server ) v1BundlesPost (w http.ResponseWriter , r * http.Request ) {
179+ ctx := r .Context ()
180+
181+ name , err := url .PathUnescape (r .PathValue ("bundle" ))
182+ if err != nil {
183+ ErrorString (w , http .StatusBadRequest , types .CodeInvalidParameter , err )
184+ return
185+ }
186+
187+ if err := s .svc .Trigger (ctx , s .auth (r ), name ); err != nil {
188+ errorAuto (w , err )
189+ return
190+ }
191+
192+ resp := types.BundlesPostResponseV1 {}
193+ JSONOK (w , resp , pretty (r ))
194+ }
195+
170196func (s * Server ) v1BundlesDelete (w http.ResponseWriter , r * http.Request ) {
171197 ctx := r .Context ()
172198
0 commit comments