2 // ========================LICENSE_START=================================
5 // Copyright (C) 2022: Nordix Foundation
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 // ========================LICENSE_END===================================
28 "github.com/labstack/echo/v4"
29 "helm.sh/helm/v3/pkg/cli"
30 "oransc.org/nonrtric/capifcore/internal/discoverserviceapi"
31 "oransc.org/nonrtric/capifcore/internal/invokermanagementapi"
32 "oransc.org/nonrtric/capifcore/internal/providermanagementapi"
33 "oransc.org/nonrtric/capifcore/internal/securityapi"
35 "github.com/deepmap/oapi-codegen/pkg/middleware"
36 echomiddleware "github.com/labstack/echo/v4/middleware"
37 log "github.com/sirupsen/logrus"
38 "oransc.org/nonrtric/capifcore/internal/discoverservice"
39 "oransc.org/nonrtric/capifcore/internal/helmmanagement"
40 "oransc.org/nonrtric/capifcore/internal/invokermanagement"
41 "oransc.org/nonrtric/capifcore/internal/providermanagement"
42 "oransc.org/nonrtric/capifcore/internal/publishservice"
43 "oransc.org/nonrtric/capifcore/internal/publishserviceapi"
44 security "oransc.org/nonrtric/capifcore/internal/securityservice"
48 var helmManager helmmanagement.HelmManager
52 var port = flag.Int("port", 8090, "Port for CAPIF Core Function HTTP server")
53 flag.StringVar(&url, "url", "http://chartmuseum:8080", "ChartMuseum url")
54 flag.StringVar(&repoName, "repoName", "local-dev", "Repository name")
55 var logLevelStr = flag.String("loglevel", "Info", "Log level")
58 if loglevel, err := log.ParseLevel(*logLevelStr); err == nil {
59 log.SetLevel(loglevel)
63 fmt.Printf("Adding %s to Helm Repo\n", url)
64 helmManager = helmmanagement.NewHelmManager(cli.New())
65 err := helmManager.AddToRepo(repoName, url)
67 log.Fatal(err.Error())
70 go startWebServer(getEcho(), *port)
72 log.Info("Server started and listening on port: ", *port)
77 func getEcho() *echo.Echo {
78 // This is how you set up a basic Echo router
81 e.Use(echomiddleware.Logger())
84 // Register ProviderManagement
85 providerManagerSwagger, err := providermanagementapi.GetSwagger()
87 log.Fatalf("Error loading ProviderManagement swagger spec\n: %s", err)
89 providerManagerSwagger.Servers = nil
90 providerManager := providermanagement.NewProviderManager()
91 group = e.Group("/api-provider-management/v1")
92 group.Use(middleware.OapiRequestValidator(providerManagerSwagger))
93 providermanagementapi.RegisterHandlersWithBaseURL(e, providerManager, "/api-provider-management/v1")
95 // Register PublishService
96 publishServiceSwagger, err := publishserviceapi.GetSwagger()
98 log.Fatalf("Error loading PublishService swagger spec\n: %s", err)
100 publishServiceSwagger.Servers = nil
101 publishService := publishservice.NewPublishService(providerManager, helmManager)
102 group = e.Group("/published-apis/v1")
103 group.Use(middleware.OapiRequestValidator(publishServiceSwagger))
104 publishserviceapi.RegisterHandlersWithBaseURL(e, publishService, "/published-apis/v1")
106 // Register DiscoverService
107 discoverServiceSwagger, err := discoverserviceapi.GetSwagger()
109 log.Fatalf("Error loading DiscoverService swagger spec\n: %s", err)
111 discoverServiceSwagger.Servers = nil
112 discoverService := discoverservice.NewDiscoverService(publishService)
113 group = e.Group("/service-apis/v1")
114 group.Use(middleware.OapiRequestValidator(discoverServiceSwagger))
115 discoverserviceapi.RegisterHandlersWithBaseURL(e, discoverService, "/service-apis/v1")
117 // Register InvokerManagement
118 invokerManagerSwagger, err := invokermanagementapi.GetSwagger()
120 log.Fatalf("Error loading InvokerManagement swagger spec\n: %s", err)
122 invokerManagerSwagger.Servers = nil
123 invokerManager := invokermanagement.NewInvokerManager(publishService)
124 group = e.Group("/api-invoker-management/v1")
125 group.Use(middleware.OapiRequestValidator(invokerManagerSwagger))
126 invokermanagementapi.RegisterHandlersWithBaseURL(e, invokerManager, "/api-invoker-management/v1")
129 securitySwagger, err := publishserviceapi.GetSwagger()
131 log.Fatalf("Error loading Security swagger spec\n: %s", err)
133 securitySwagger.Servers = nil
134 securityService := security.NewSecurity(providerManager, publishService, invokerManager)
135 group = e.Group("/capif-security/v1")
136 group.Use(middleware.OapiRequestValidator(securitySwagger))
137 securityapi.RegisterHandlersWithBaseURL(e, securityService, "/capif-security/v1")
144 func startWebServer(e *echo.Echo, port int) {
145 e.Logger.Fatal(e.Start(fmt.Sprintf("0.0.0.0:%d", port)))
148 func keepServerAlive() {
149 forever := make(chan int)
153 func hello(c echo.Context) error {
154 return c.String(http.StatusOK, "Hello, World!\n")