X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=capifcore%2Fmain.go;h=f8b9daf8f72c6edff6b71f3c287322a59e6e95d2;hb=4308df0663b45eb9d95b3babdf519a06ee76c15a;hp=cf416997a47f3e22ed75b64243dd343543b5f284;hpb=f5f140a783fbe4afcecf409f5712dd3e0d4d6ea4;p=nonrtric%2Fplt%2Fsme.git diff --git a/capifcore/main.go b/capifcore/main.go index cf41699..f8b9daf 100644 --- a/capifcore/main.go +++ b/capifcore/main.go @@ -25,17 +25,23 @@ import ( "fmt" "net/http" + "github.com/getkin/kin-openapi/openapi3" "github.com/labstack/echo/v4" "helm.sh/helm/v3/pkg/cli" + "oransc.org/nonrtric/capifcore/internal/common29122" "oransc.org/nonrtric/capifcore/internal/discoverserviceapi" + "oransc.org/nonrtric/capifcore/internal/eventsapi" "oransc.org/nonrtric/capifcore/internal/invokermanagementapi" + "oransc.org/nonrtric/capifcore/internal/keycloak" "oransc.org/nonrtric/capifcore/internal/providermanagementapi" "oransc.org/nonrtric/capifcore/internal/securityapi" "github.com/deepmap/oapi-codegen/pkg/middleware" echomiddleware "github.com/labstack/echo/v4/middleware" log "github.com/sirupsen/logrus" + config "oransc.org/nonrtric/capifcore/internal/config" "oransc.org/nonrtric/capifcore/internal/discoverservice" + "oransc.org/nonrtric/capifcore/internal/eventservice" "oransc.org/nonrtric/capifcore/internal/helmmanagement" "oransc.org/nonrtric/capifcore/internal/invokermanagement" "oransc.org/nonrtric/capifcore/internal/providermanagement" @@ -50,9 +56,13 @@ var repoName string func main() { var port = flag.Int("port", 8090, "Port for CAPIF Core Function HTTP server") - flag.StringVar(&url, "url", "http://localhost:8080", "ChartMuseum url") + var secPort = flag.Int("secPort", 4433, "Port for CAPIF Core Function HTTPS server") + flag.StringVar(&url, "chartMuseumUrl", "", "ChartMuseum URL") flag.StringVar(&repoName, "repoName", "capifcore", "Repository name") var logLevelStr = flag.String("loglevel", "Info", "Log level") + var certPath = flag.String("certPath", "certs/cert.pem", "Path for server certificate") + var keyPath = flag.String("keyPath", "certs/key.pem", "Path for server private key") + flag.Parse() if loglevel, err := log.ParseLevel(*logLevelStr); err == nil { @@ -60,14 +70,14 @@ func main() { } // Add repo - fmt.Printf("Adding %s to Helm Repo\n", url) helmManager = helmmanagement.NewHelmManager(cli.New()) err := helmManager.SetUpRepo(repoName, url) if err != nil { - log.Fatal(err.Error()) + log.Warnf("No Helm repo added due to: %s", err.Error()) } go startWebServer(getEcho(), *port) + go startHttpsWebServer(getEcho(), *secPort, *certPath, *keyPath) log.Info("Server started and listening on port: ", *port) @@ -75,11 +85,17 @@ func main() { } func getEcho() *echo.Echo { - // This is how you set up a basic Echo router e := echo.New() // Log all requests e.Use(echomiddleware.Logger()) + // Read configuration file + cfg, err := config.ReadKeycloakConfigFile("configs") + if err != nil { + log.Fatalf("Error loading configuration file\n: %s", err) + } + km := keycloak.NewKeycloakManager(cfg) + var group *echo.Group // Register ProviderManagement providerManagerSwagger, err := providermanagementapi.GetSwagger() @@ -92,52 +108,66 @@ func getEcho() *echo.Echo { group.Use(middleware.OapiRequestValidator(providerManagerSwagger)) providermanagementapi.RegisterHandlersWithBaseURL(e, providerManager, "/api-provider-management/v1") + // Register EventService + eventServiceSwagger, err := eventsapi.GetSwagger() + if err != nil { + log.Fatalf("Error loading EventService swagger spec\n: %s", err) + } + eventServiceSwagger.Servers = nil + eventService := eventservice.NewEventService(&http.Client{}) + group = e.Group("/capif-events/v1") + group.Use(middleware.OapiRequestValidator(eventServiceSwagger)) + eventsapi.RegisterHandlersWithBaseURL(e, eventService, "/capif-events/v1") + eventChannel := eventService.GetNotificationChannel() + // Register PublishService publishServiceSwagger, err := publishserviceapi.GetSwagger() if err != nil { log.Fatalf("Error loading PublishService swagger spec\n: %s", err) } publishServiceSwagger.Servers = nil - publishService := publishservice.NewPublishService(providerManager, helmManager) + publishService := publishservice.NewPublishService(providerManager, helmManager, eventChannel) group = e.Group("/published-apis/v1") group.Use(middleware.OapiRequestValidator(publishServiceSwagger)) publishserviceapi.RegisterHandlersWithBaseURL(e, publishService, "/published-apis/v1") - // Register DiscoverService - discoverServiceSwagger, err := discoverserviceapi.GetSwagger() - if err != nil { - log.Fatalf("Error loading DiscoverService swagger spec\n: %s", err) - } - discoverServiceSwagger.Servers = nil - discoverService := discoverservice.NewDiscoverService(publishService) - group = e.Group("/service-apis/v1") - group.Use(middleware.OapiRequestValidator(discoverServiceSwagger)) - discoverserviceapi.RegisterHandlersWithBaseURL(e, discoverService, "/service-apis/v1") - // Register InvokerManagement invokerManagerSwagger, err := invokermanagementapi.GetSwagger() if err != nil { log.Fatalf("Error loading InvokerManagement swagger spec\n: %s", err) } invokerManagerSwagger.Servers = nil - invokerManager := invokermanagement.NewInvokerManager(publishService) + invokerManager := invokermanagement.NewInvokerManager(publishService, eventChannel) group = e.Group("/api-invoker-management/v1") group.Use(middleware.OapiRequestValidator(invokerManagerSwagger)) invokermanagementapi.RegisterHandlersWithBaseURL(e, invokerManager, "/api-invoker-management/v1") + // Register DiscoverService + discoverServiceSwagger, err := discoverserviceapi.GetSwagger() + if err != nil { + log.Fatalf("Error loading DiscoverService swagger spec\n: %s", err) + } + discoverServiceSwagger.Servers = nil + discoverService := discoverservice.NewDiscoverService(invokerManager) + group = e.Group("/service-apis/v1") + group.Use(middleware.OapiRequestValidator(discoverServiceSwagger)) + discoverserviceapi.RegisterHandlersWithBaseURL(e, discoverService, "/service-apis/v1") + // Register Security - securitySwagger, err := publishserviceapi.GetSwagger() + securitySwagger, err := securityapi.GetSwagger() if err != nil { log.Fatalf("Error loading Security swagger spec\n: %s", err) } securitySwagger.Servers = nil - securityService := security.NewSecurity(providerManager, publishService, invokerManager) + securityService := security.NewSecurity(providerManager, publishService, invokerManager, km) group = e.Group("/capif-security/v1") group.Use(middleware.OapiRequestValidator(securitySwagger)) securityapi.RegisterHandlersWithBaseURL(e, securityService, "/capif-security/v1") e.GET("/", hello) + e.GET("/swagger/:apiName", getSwagger) + return e } @@ -145,11 +175,47 @@ func startWebServer(e *echo.Echo, port int) { e.Logger.Fatal(e.Start(fmt.Sprintf("0.0.0.0:%d", port))) } +func startHttpsWebServer(e *echo.Echo, port int, certPath string, keyPath string) { + e.Logger.Fatal(e.StartTLS(fmt.Sprintf("0.0.0.0:%d", port), certPath, keyPath)) +} + func keepServerAlive() { forever := make(chan int) <-forever } func hello(c echo.Context) error { - return c.String(http.StatusOK, "Hello, World!\n") + return c.String(http.StatusOK, "Hello, World!") +} + +func getSwagger(c echo.Context) error { + var swagger *openapi3.T + var err error + switch api := c.Param("apiName"); api { + case "provider": + swagger, err = providermanagementapi.GetSwagger() + case "publish": + swagger, err = publishserviceapi.GetSwagger() + case "invoker": + swagger, err = invokermanagementapi.GetSwagger() + case "discover": + swagger, err = discoverserviceapi.GetSwagger() + case "events": + swagger, err = eventsapi.GetSwagger() + case "security": + swagger, err = securityapi.GetSwagger() + default: + return c.JSON(http.StatusBadRequest, getProblemDetails("Invalid API name "+api, http.StatusBadRequest)) + } + if err != nil { + return c.JSON(http.StatusInternalServerError, getProblemDetails("Unable to get swagger for API", http.StatusInternalServerError)) + } + return c.JSON(http.StatusOK, swagger) +} + +func getProblemDetails(cause string, status int) common29122.ProblemDetails { + return common29122.ProblemDetails{ + Cause: &cause, + Status: &status, + } }