diff --git a/CLAUDE.md b/CLAUDE.md index 6674f171f..bb8a968ad 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -32,8 +32,8 @@ go test -run TestName -v ./internal/job/... # Run a single test ## Architecture (Quick Reference) -- **`cmd/`** - Cobra CLI commands (`client`, `node agent`, `api server`, `nats server`) -- **`internal/api/`** - Echo REST API by domain (`node/`, `job/`, `health/`, `audit/`, `common/`). Types are OpenAPI-generated (`*.gen.go`). Combined OpenAPI spec: `internal/api/gen/api.yaml` +- **`cmd/`** - Cobra CLI commands (`client`, `node agent`, `controller.api`, `nats server`) +- **`internal/controller/api/`** - Echo REST API by domain (`node/`, `job/`, `health/`, `audit/`, `common/`). Types are OpenAPI-generated (`*.gen.go`). Combined OpenAPI spec: `internal/controller/api/gen/api.yaml` - **`internal/job/`** - Job domain types, subject routing. `client/` for high-level ops - **`internal/agent/`** - Node agent: consumer/handler/processor pipeline for job execution - **`internal/provider/`** - Operation implementations: `node/{host,disk,mem,load}`, `network/{dns,ping}`, `process/` (process metrics) @@ -50,7 +50,7 @@ domain as a reference. Read the existing files before creating new ones. ### Step 1: OpenAPI Spec + Code Generation -Create `internal/api/{domain}/gen/` with three hand-written files: +Create `internal/controller/api/{domain}/gen/` with three hand-written files: - `api.yaml` — OpenAPI spec with paths, schemas, and `BearerAuth` security - `cfg.yaml` — oapi-codegen config (`strict-server: true`, import-mapping @@ -133,7 +133,7 @@ input must be validated, and the spec must declare how: ### Step 2: Handler Implementation -Create `internal/api/{domain}/`: +Create `internal/controller/api/{domain}/`: - `types.go` — domain struct, dependency interfaces (e.g., `Checker`) - `{domain}.go` — `New()` factory, compile-time interface check: @@ -150,10 +150,10 @@ Create `internal/api/{domain}/`: wrong permissions (403), valid token (200). Uses `api.New()` + `server.GetXxxHandler()` + `server.RegisterHandlers()` to wire through `scopeMiddleware`. - See existing examples in `internal/api/job/` and - `internal/api/audit/`. + See existing examples in `internal/controller/api/job/` and + `internal/controller/api/audit/`. -### Step 3: Server Wiring (4 files in `internal/api/`) +### Step 3: Server Wiring (4 files in `internal/controller/api/`) - `handler_{domain}.go` — `Get{Domain}Handler()` method that wraps the handler with `NewStrictHandler` + `scopeMiddleware`. Define @@ -167,21 +167,21 @@ Create `internal/api/{domain}/`: ### Step 4: Startup Wiring -- `cmd/api_server_start.go` — initialize the handler with real +- `cmd/controller_start.go` — initialize the handler with real dependencies and pass `api.With{Domain}Handler(h)` to `api.New()` ### Step 5: Update SDK The SDK client library lives in `pkg/sdk/client/`. Its generated HTTP client uses the same combined OpenAPI spec as the server -(`internal/api/gen/api.yaml`). Follow the rules in +(`internal/controller/api/gen/api.yaml`). Follow the rules in @docs/docs/sidebar/sdk/guidelines.md — especially: never expose `gen` types in public method signatures, add JSON tags to all result types, and wrap errors with context. **When modifying existing API specs:** -1. Make changes to `internal/api/{domain}/gen/api.yaml` in this repo +1. Make changes to `internal/controller/api/{domain}/gen/api.yaml` in this repo 2. Run `just generate` to regenerate server code (this also regenerates the combined spec via `redocly join`) 3. Run `go generate ./pkg/sdk/client/gen/...` to regenerate the SDK client diff --git a/cmd/api.go b/cmd/api.go deleted file mode 100644 index 5150af18b..000000000 --- a/cmd/api.go +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) 2024 John Dewey - -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to -// deal in the Software without restriction, including without limitation the -// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -// Package cmd provides CLI commands for OSAPI. -package cmd - -import ( - "github.com/spf13/cobra" -) - -// apiCmd represents the api command. -var apiCmd = &cobra.Command{ - Use: "api", - Short: "The api subcommand", -} - -func init() { - rootCmd.AddCommand(apiCmd) -} diff --git a/cmd/client.go b/cmd/client.go index c8c7f7336..7a1c23913 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -58,12 +58,12 @@ var clientCmd = &cobra.Command{ "client configuration", slog.String("config_file", viper.ConfigFileUsed()), slog.Bool("debug", appConfig.Debug), - slog.String("api.client.url", appConfig.API.URL), + slog.String("controller.client.url", appConfig.Controller.Client.URL), ) sdkClient = client.New( - appConfig.API.URL, - appConfig.API.Client.Security.BearerToken, + appConfig.Controller.Client.URL, + appConfig.Controller.Client.Security.BearerToken, client.WithLogger(logger), ) }, @@ -82,5 +82,5 @@ func init() { clientCmd.PersistentFlags(). StringP("target", "T", "_any", "Target: _any, _all, hostname, or label (group:web.dev)") - _ = viper.BindPFlag("api.client.url", clientCmd.PersistentFlags().Lookup("url")) + _ = viper.BindPFlag("controller.client.url", clientCmd.PersistentFlags().Lookup("url")) } diff --git a/cmd/client_api.go b/cmd/client_controller.go similarity index 85% rename from cmd/client_api.go rename to cmd/client_controller.go index dac511716..f81a85931 100644 --- a/cmd/client_api.go +++ b/cmd/client_controller.go @@ -24,12 +24,12 @@ import ( "github.com/spf13/cobra" ) -// clientAPICmd represents the api parent command. -var clientAPICmd = &cobra.Command{ - Use: "api", - Short: "API server commands", +// clientControllerCmd represents the controller parent command. +var clientControllerCmd = &cobra.Command{ + Use: "controller", + Short: "Controller commands", } func init() { - clientCmd.AddCommand(clientAPICmd) + clientCmd.AddCommand(clientControllerCmd) } diff --git a/cmd/client_api_status.go b/cmd/client_controller_status.go similarity index 81% rename from cmd/client_api_status.go rename to cmd/client_controller_status.go index 0cd344bff..026445fdd 100644 --- a/cmd/client_api_status.go +++ b/cmd/client_controller_status.go @@ -28,11 +28,11 @@ import ( "github.com/retr0h/osapi/internal/cli" ) -// clientAPIStatusCmd shows health status for the API server. -var clientAPIStatusCmd = &cobra.Command{ +// clientControllerStatusCmd shows health status for the controller. +var clientControllerStatusCmd = &cobra.Command{ Use: "status", - Short: "API server component health", - Long: `Show health status for all registered API servers.`, + Short: "Controller component health", + Long: `Show health status for all registered controllers.`, Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() @@ -48,10 +48,10 @@ var clientAPIStatusCmd = &cobra.Command{ } fmt.Println() - displayComponentTable(resp.Data.Registry, "api") + displayComponentTable(resp.Data.Registry, "controller") }, } func init() { - clientAPICmd.AddCommand(clientAPIStatusCmd) + clientControllerCmd.AddCommand(clientControllerStatusCmd) } diff --git a/cmd/api_server.go b/cmd/controller.go similarity index 62% rename from cmd/api_server.go rename to cmd/controller.go index e716cfbb6..cec62a04c 100644 --- a/cmd/api_server.go +++ b/cmd/controller.go @@ -32,10 +32,12 @@ import ( "github.com/retr0h/osapi/internal/config" ) -// apiServerCmd represents the apiServer command. -var apiServerCmd = &cobra.Command{ - Use: "server", - Short: "The server subcommand", +// controllerCmd represents the controller command. +var controllerCmd = &cobra.Command{ + Use: "controller", + Short: "Manage the controller process", + Long: `Manage the control plane process. The controller runs the REST API, +component heartbeat, and condition notification watcher.`, PersistentPreRun: func(_ *cobra.Command, _ []string) { cli.ValidateDistribution(logger) @@ -51,32 +53,32 @@ var apiServerCmd = &cobra.Command{ } logger.Debug( - "api server configuration", + "controller configuration", slog.String("config_file", viper.ConfigFileUsed()), slog.Bool("debug", appConfig.Debug), - slog.Int("api.server.port", appConfig.API.Port), - slog.String("api.server.nats.host", appConfig.API.NATS.Host), - slog.Int("api.server.nats.port", appConfig.API.NATS.Port), - slog.String("api.server.nats.client_name", appConfig.API.NATS.ClientName), - slog.String("api.server.nats.namespace", appConfig.API.NATS.Namespace), - slog.String("api.server.nats.auth.type", appConfig.API.NATS.Auth.Type), + slog.Int("controller.api.port", appConfig.Controller.API.Port), + slog.String("controller.nats.host", appConfig.Controller.NATS.Host), + slog.Int("controller.nats.port", appConfig.Controller.NATS.Port), + slog.String("controller.nats.client_name", appConfig.Controller.NATS.ClientName), + slog.String("controller.nats.namespace", appConfig.Controller.NATS.Namespace), + slog.String("controller.nats.auth.type", appConfig.Controller.NATS.Auth.Type), slog.String( - "api.server.security.cors.allow_origins", - strings.Join(appConfig.API.Server.Security.CORS.AllowOrigins, ","), + "controller.api.security.cors.allow_origins", + strings.Join(appConfig.Controller.API.Security.CORS.AllowOrigins, ","), ), slog.String( - "api.server.security.signing_key", - maskedAppConfig.API.Server.Security.SigningKey, + "controller.api.security.signing_key", + maskedAppConfig.Controller.API.Security.SigningKey, ), ) }, } func init() { - apiCmd.AddCommand(apiServerCmd) + rootCmd.AddCommand(controllerCmd) - apiServerCmd.PersistentFlags(). + controllerCmd.PersistentFlags(). IntP("port", "p", 8080, "Port the server will bind to") - _ = viper.BindPFlag("api.server.port", apiServerCmd.PersistentFlags().Lookup("port")) + _ = viper.BindPFlag("controller.api.port", controllerCmd.PersistentFlags().Lookup("port")) } diff --git a/cmd/api_server_setup.go b/cmd/controller_setup.go similarity index 96% rename from cmd/api_server_setup.go rename to cmd/controller_setup.go index e61395f46..f2010dc55 100644 --- a/cmd/api_server_setup.go +++ b/cmd/controller_setup.go @@ -35,16 +35,17 @@ import ( "github.com/nats-io/nats.go/jetstream" natsclient "github.com/osapi-io/nats-client/pkg/client" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/health" "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/cli" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/health" + "github.com/retr0h/osapi/internal/controller/notify" "github.com/retr0h/osapi/internal/job" jobclient "github.com/retr0h/osapi/internal/job/client" "github.com/retr0h/osapi/internal/messaging" - "github.com/retr0h/osapi/internal/notify" "github.com/retr0h/osapi/internal/provider/process" "github.com/retr0h/osapi/internal/validation" ) @@ -88,10 +89,10 @@ type natsBundle struct { objStore file.ObjectStoreManager } -// setupAPIServer connects to NATS, creates the API server with all handlers, +// setupController connects to NATS, creates the API server with all handlers, // and returns the server manager and NATS bundle. It is used by the standalone // API server start and combined start commands. -func setupAPIServer( +func setupController( ctx context.Context, log *slog.Logger, connCfg config.NATSConnection, @@ -135,12 +136,12 @@ func setupAPIServer( ) sm := api.New(appConfig, log, serverOpts...) - registerAPIHandlers( + registerControllerHandlers( sm, b.jobClient, checker, metricsProvider, metricsHandler, metricsPath, auditStore, b.objStore, ) - startAPIHeartbeat(ctx, log, b.registryKV) + startControllerHeartbeat(ctx, log, b.registryKV) startConditionWatcher(ctx, log, b.registryKV) return sm, b @@ -505,7 +506,7 @@ func newMetricsProvider( entry.CPUPercent = reg.Process.CPUPercent entry.MemBytes = reg.Process.RSSBytes } - case "api", "nats": + case "controller", "nats": var reg job.ComponentRegistration if err := json.Unmarshal(kvEntry.Value(), ®); err != nil { continue @@ -565,7 +566,7 @@ func createAuditStore( return store, []api.Option{api.WithAuditStore(store)} } -func registerAPIHandlers( +func registerControllerHandlers( sm ServerManager, jc jobclient.JobClient, checker health.Checker, @@ -639,10 +640,10 @@ func startConditionWatcher( }() } -// startAPIHeartbeat resolves the local hostname, creates a ComponentHeartbeat +// startControllerHeartbeat resolves the local hostname, creates a ComponentHeartbeat // for the API server, and starts it in a background goroutine. The heartbeat // deregisters when ctx is cancelled. -func startAPIHeartbeat( +func startControllerHeartbeat( ctx context.Context, log *slog.Logger, registryKV jetstream.KeyValue, @@ -650,18 +651,18 @@ func startAPIHeartbeat( hostname, err := os.Hostname() if err != nil { log.Warn( - "failed to resolve hostname for API heartbeat, using 'unknown'", + "failed to resolve hostname for controller heartbeat, using 'unknown'", slog.String("error", err.Error()), ) hostname = "unknown" } - hb := api.NewComponentHeartbeat( + hb := controller.NewComponentHeartbeat( log, registryKV, hostname, "0.1.0", - "api", + "controller", process.New(), 10*time.Second, process.ConditionThresholds{ diff --git a/cmd/api_server_start.go b/cmd/controller_start.go similarity index 76% rename from cmd/api_server_start.go rename to cmd/controller_start.go index 1c67c4315..01bfc78db 100644 --- a/cmd/api_server_start.go +++ b/cmd/controller_start.go @@ -30,16 +30,19 @@ import ( "github.com/retr0h/osapi/internal/telemetry" ) -// apiServerStartCmd represents the apiServerStart command. -var apiServerStartCmd = &cobra.Command{ +// controllerStartCmd represents the controller start command. +var controllerStartCmd = &cobra.Command{ Use: "start", - Short: "Start the server", - Long: `Start the API server. -`, + Short: "Start the controller", + Long: `Start the control plane process (API server, heartbeat, notifications).`, Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() - shutdownTracer, err := telemetry.InitTracer(ctx, "osapi-api", appConfig.Telemetry.Tracing) + shutdownTracer, err := telemetry.InitTracer( + ctx, + "osapi-controller", + appConfig.Telemetry.Tracing, + ) if err != nil { cli.LogFatal(logger, "failed to initialize tracer", err) } @@ -51,10 +54,10 @@ var apiServerStartCmd = &cobra.Command{ cli.LogFatal(logger, "failed to initialize meter", err) } - job.Init(appConfig.API.NATS.Namespace) + job.Init(appConfig.Controller.NATS.Namespace) - log := logger.With("component", "api") - sm, b := setupAPIServer(ctx, log, appConfig.API.NATS, metricsHandler, metricsPath) + log := logger.With("component", "controller") + sm, b := setupController(ctx, log, appConfig.Controller.NATS, metricsHandler, metricsPath) sm.Start() cli.RunServer(ctx, sm, func() { @@ -66,5 +69,5 @@ var apiServerStartCmd = &cobra.Command{ } func init() { - apiServerCmd.AddCommand(apiServerStartCmd) + controllerCmd.AddCommand(controllerStartCmd) } diff --git a/cmd/nats_heartbeat.go b/cmd/nats_heartbeat.go index a32c63829..72475199b 100644 --- a/cmd/nats_heartbeat.go +++ b/cmd/nats_heartbeat.go @@ -29,9 +29,9 @@ import ( "github.com/nats-io/nats.go/jetstream" natsclient "github.com/osapi-io/nats-client/pkg/client" - "github.com/retr0h/osapi/internal/api" "github.com/retr0h/osapi/internal/cli" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller" "github.com/retr0h/osapi/internal/messaging" "github.com/retr0h/osapi/internal/provider/process" ) @@ -83,7 +83,7 @@ func startNATSHeartbeat( return } - hb := api.NewComponentHeartbeat( + hb := controller.NewComponentHeartbeat( log, registryKV, hostname, @@ -120,7 +120,7 @@ func startNATSHeartbeatFromKV( hostname = "unknown" } - hb := api.NewComponentHeartbeat( + hb := controller.NewComponentHeartbeat( log, registryKV, hostname, diff --git a/cmd/root.go b/cmd/root.go index 2f20922c0..8a6d5b1b5 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -18,6 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. +// Package cmd provides CLI commands for OSAPI. package cmd import ( diff --git a/cmd/start.go b/cmd/start.go index 81b283d6a..a35041ea7 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -59,10 +59,10 @@ func (c *compositeLifecycle) Stop(ctx context.Context) { var startCmd = &cobra.Command{ Use: "start", Short: "Start all components (NATS, API server, agent)", - Long: `Start the embedded NATS server, API server, and agent in a single process. + Long: `Start the embedded NATS server, controller, and agent in a single process. This is the recommended way to run OSAPI on a single host. All three components -start in order (NATS → API → agent) and shut down gracefully on SIGINT/SIGTERM. +start in order (NATS → controller → agent) and shut down gracefully on SIGINT/SIGTERM. `, Run: func(cmd *cobra.Command, _ []string) { ctx := cmd.Context() @@ -89,12 +89,12 @@ start in order (NATS → API → agent) and shut down gracefully on SIGINT/SIGTE natsLog := logger.With("component", "nats") natsServer := setupNATSServer(ctx, natsLog) - sm, apiBundle := setupAPIServer( - ctx, logger.With("component", "api"), - appConfig.API.NATS, metricsHandler, metricsPath, + sm, controllerBundle := setupController( + ctx, logger.With("component", "controller"), + appConfig.Controller.NATS, metricsHandler, metricsPath, ) - startNATSHeartbeatFromKV(ctx, natsLog, apiBundle.registryKV) + startNATSHeartbeatFromKV(ctx, natsLog, controllerBundle.registryKV) agentServer, agentBundle := setupAgent( ctx, logger.With("component", "agent"), appConfig.Agent.NATS, @@ -113,7 +113,7 @@ start in order (NATS → API → agent) and shut down gracefully on SIGINT/SIGTE _ = shutdownMeter(context.Background()) _ = shutdownTracer(context.Background()) cli.CloseNATSClient(agentBundle.nc) - cli.CloseNATSClient(apiBundle.nc) + cli.CloseNATSClient(controllerBundle.nc) }) }, } diff --git a/cmd/token_generate.go b/cmd/token_generate.go index 009f29aec..a76f2190f 100644 --- a/cmd/token_generate.go +++ b/cmd/token_generate.go @@ -48,7 +48,7 @@ var tokenGenerateCmd = &cobra.Command{ This command allows you to customize the token properties for various use cases. `, Run: func(cmd *cobra.Command, _ []string) { - signingKey := appConfig.API.Server.Security.SigningKey + signingKey := appConfig.Controller.API.Security.SigningKey roles, _ := cmd.Flags().GetStringSlice("roles") subject, _ := cmd.Flags().GetString("subject") permissions, _ := cmd.Flags().GetStringSlice("permissions") diff --git a/cmd/token_validate.go b/cmd/token_validate.go index 10ddfd63e..c4e9daf7f 100644 --- a/cmd/token_validate.go +++ b/cmd/token_validate.go @@ -47,7 +47,7 @@ var tokenValidateCmd = &cobra.Command{ This command ensures that the token is authentic, has not expired, and conforms to the expected roles and audience. `, Run: func(cmd *cobra.Command, _ []string) { - signingKey := appConfig.API.Server.Security.SigningKey + signingKey := appConfig.Controller.API.Security.SigningKey tokenString, _ := cmd.Flags().GetString("token") var tm TokenValidator = authtoken.New(logger) diff --git a/configs/osapi.yaml b/configs/osapi.yaml index 6f9f8d66c..0ecbced6f 100644 --- a/configs/osapi.yaml +++ b/configs/osapi.yaml @@ -1,23 +1,13 @@ --- debug: true -api: +controller: client: url: http://0.0.0.0:8080 security: - # admin - # bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6WyJhZG1pbiJdLCJpc3MiOiJvc2FwaSIsInN1YiI6ImpvaG5AZGV3ZXkud3MiLCJhdWQiOlsiaHR0cHM6Ly9sb2NhbGhvc3QiLCJodHRwOi8vbG9jYWxob3N0Il0sImV4cCI6MTc0MDg2NDIxNywiaWF0IjoxNzMyOTE1NDE3fQ.0YBwFSKXs2G16TACO-uDsIklPhaYNw63-q95IeNuneU - # read bearer_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlcyI6WyJhZG1pbiJdLCJpc3MiOiJvc2FwaSIsInN1YiI6ImpvaG5AZGV3ZXkud3MiLCJhdWQiOlsiaHR0cHM6Ly9sb2NhbGhvc3QiLCJodHRwOi8vbG9jYWxob3N0Il0sImV4cCI6MTc3ODk2MjI3MiwiaWF0IjoxNzcxMjc2MjcyfQ.G_Ezc7J1lGPQdAtWumObuCFMMi4zPIErNk7dD__66Rk - server: + api: port: 8080 - nats: - host: localhost - port: 4222 - client_name: osapi-api - namespace: osapi - auth: - type: none security: # openssl rand -hex 32 signing_key: 111fdb0cfd9788fa6af8815f856a0374bf7a0174ad62fa8b98ec07a55f68d8d8 @@ -41,6 +31,13 @@ api: # - network:read # - network:write # - health:read + nats: + host: localhost + port: 4222 + client_name: osapi-api + namespace: osapi + auth: + type: none nats: server: diff --git a/docs/docs/sidebar/architecture/architecture.md b/docs/docs/sidebar/architecture/architecture.md index fdc55cfee..82f6528e0 100644 --- a/docs/docs/sidebar/architecture/architecture.md +++ b/docs/docs/sidebar/architecture/architecture.md @@ -9,7 +9,7 @@ OSAPI turns Linux servers into managed appliances. You install a single binary, point it at a config file, and get a REST API and CLI for querying and changing system configuration — hostname, DNS, disk usage, memory, load averages, and more. State-changing operations run asynchronously through a job queue so the -API server itself never needs root privileges. +controller itself never needs root privileges. ## The Three Processes @@ -19,21 +19,27 @@ spread across many. ### NATS Server A lightweight message broker that stores job state and routes messages between -the API server and agents. OSAPI embeds a NATS server with JetStream enabled, so +the controller and agents. OSAPI embeds a NATS server with JetStream enabled, so you don't need to install anything extra — just run `osapi nats server start`. For production deployments with multiple hosts, you can point everything at an external NATS cluster instead of the embedded one. Just change the `nats.server` section in `osapi.yaml`. -### API Server +### Controller -An HTTP server that exposes a REST API. It handles authentication (JWT), -validates requests, and translates them into jobs that get published to NATS. -The API server never executes system commands directly — it creates a job and -returns a job ID. Clients poll for results. +The control plane process. It runs several sub-components: -Start it with `osapi api server start`. +- **REST API** — an HTTP server that handles authentication (JWT), validates + requests, and translates them into jobs published to NATS. The controller + never executes system commands directly — it creates a job and returns a job + ID. Clients poll for results. +- **Component heartbeat** — registers the controller in the agent registry so + `health status` can report its state. +- **Condition watcher** — monitors the registry KV for condition transitions and + dispatches notifications. + +Start it with `osapi controller start`. ### Agent @@ -54,7 +60,7 @@ The simplest setup. All three processes run on the same machine: graph TD subgraph host["Linux Host"] CLI["CLI"] - API["API Server"] + API["Controller"] Agent["Agent"] NATS["NATS (embedded)"] @@ -73,7 +79,7 @@ approach for single-host deployments: osapi start ``` -The CLI on the same host talks to the API server over localhost. This is useful +The CLI on the same host talks to the controller over localhost. This is useful for managing a single appliance or for development. ### Multi-Host @@ -85,7 +91,7 @@ the job routing system delivers work to the right place. ```mermaid graph TD CLI["CLI"] - API["API Server"] + API["Controller"] NATS["NATS (shared)"] W1["Agent (web-01)"] W2["Agent (web-02)"] @@ -113,7 +119,7 @@ When you run a command like `osapi client node hostname`: ```mermaid sequenceDiagram participant CLI - participant API as API Server + participant API as Controller participant NATS participant Agent @@ -128,7 +134,7 @@ sequenceDiagram API-->>CLI: 200 (result + job_id) ``` -The API server never touches the operating system directly. It's a thin +The controller never touches the operating system directly. It's a thin coordination layer between clients and agents. ## Further Reading diff --git a/docs/docs/sidebar/architecture/system-architecture.md b/docs/docs/sidebar/architecture/system-architecture.md index 17d986879..b066b7fc9 100644 --- a/docs/docs/sidebar/architecture/system-architecture.md +++ b/docs/docs/sidebar/architecture/system-architecture.md @@ -17,7 +17,7 @@ The system is organized into six layers, top to bottom: | -------------------------- | --------------------------------------- | ---------------------------------------------------------------------------------------- | | **CLI** | `cmd/` | Cobra command tree (thin wiring) | | **SDK Client** | `pkg/sdk/osapi` | OpenAPI-generated client used by CLI | -| **REST API** | `internal/api/` | Echo server with JWT middleware | +| **REST API** | `internal/controller/api/` | Echo server with JWT middleware | | **Job Client** | `internal/job/client/` | Business logic for job CRUD and status | | **NATS JetStream** | (external) | KV `job-queue`, Stream `JOBS`, KV `job-responses`, KV `agent-registry` | | **Agent / Provider Layer** | `internal/agent/`, `internal/provider/` | Consumes jobs, executes providers, evaluates conditions, drain lifecycle, heartbeat | @@ -26,7 +26,7 @@ The system is organized into six layers, top to bottom: ```mermaid graph TD CLI["CLI (cmd/)"] --> SDK["SDK Client (pkg/sdk/osapi)"] - SDK --> API["REST API (internal/api/)"] + SDK --> API["REST API (internal/controller/api/)"] API --> JobClient["Job Client (internal/job/client/)"] JobClient --> NATS["NATS JetStream"] NATS --> Agent["Agent (internal/agent/)"] @@ -42,7 +42,7 @@ execute the matching provider, and write results back to KV. The `osapi` binary exposes four top-level command groups: -- **`osapi api server start`** — starts the REST API server (Echo + JWT +- **`osapi controller start`** — starts the REST controller (Echo + JWT middleware) - **`osapi agent start`** — starts an agent that subscribes to NATS subjects and processes operations @@ -60,20 +60,20 @@ The CLI is a [Cobra][] command tree. Each file maps to a single command (e.g., wiring: it parses flags, reads config via Viper, and delegates to the appropriate internal package. -### REST API (`internal/api/`) +### REST API (`internal/controller/api/`) -The API server is built on [Echo][] with handlers generated from an OpenAPI spec +The controller is built on [Echo][] with handlers generated from an OpenAPI spec via [oapi-codegen][] (`*.gen.go` files). Domain handlers are organized into subpackages: -| Package | Responsibility | -| ---------------------- | ----------------------------------------------------------------------------------- | -| `internal/api/node/` | Node endpoints (hostname, status, disk, memory, load, network/dns, command/exec) | -| `internal/api/docker/` | Docker container endpoints (create, list, inspect, start, stop, remove, exec, pull) | -| `internal/api/job/` | Job queue endpoints (get, list, delete, retry, status) | -| `internal/api/health/` | Health check endpoints (liveness, readiness, status) | -| `internal/api/common/` | Shared middleware, error handling, collection responses | -| (metrics) | Prometheus endpoint (`/metrics`) via OpenTelemetry | +| Package | Responsibility | +| --------------------------------- | ----------------------------------------------------------------------------------- | +| `internal/controller/api/node/` | Node endpoints (hostname, status, disk, memory, load, network/dns, command/exec) | +| `internal/controller/api/docker/` | Docker container endpoints (create, list, inspect, start, stop, remove, exec, pull) | +| `internal/controller/api/job/` | Job queue endpoints (get, list, delete, retry, status) | +| `internal/controller/api/health/` | Health check endpoints (liveness, readiness, status) | +| `internal/controller/api/common/` | Shared middleware, error handling, collection responses | +| (metrics) | Prometheus endpoint (`/metrics`) via OpenTelemetry | All state-changing operations are dispatched as jobs through the job client layer rather than executed inline. Responses follow a uniform collection @@ -119,7 +119,7 @@ provider interface and registering it in the agent's processor dispatch. ### Agent Lifecycle (`internal/agent/`) -All three runtime components — the API server, NATS server, and each agent — +All three runtime components — the controller, NATS server, and each agent — heartbeat into a shared registry KV bucket (`agent-registry`) at regular intervals. Each heartbeat record includes process metrics (CPU percent, RSS bytes, goroutine count) collected by `internal/provider/process`. This gives @@ -189,9 +189,9 @@ agent: group: 'web.dev' ``` -## Health Checks (`internal/api/health/`) +## Health Checks (`internal/controller/api/health/`) -The API server exposes three health check endpoints following the Kubernetes +The controller exposes three health check endpoints following the Kubernetes liveness/readiness probe pattern. These endpoints live outside the `/api/v1/` prefix at `/health` because they serve infrastructure concerns rather than business operations. diff --git a/docs/docs/sidebar/features/health-checks.md b/docs/docs/sidebar/features/health-checks.md index a0f9c37f3..420ff0d15 100644 --- a/docs/docs/sidebar/features/health-checks.md +++ b/docs/docs/sidebar/features/health-checks.md @@ -5,9 +5,9 @@ sidebar_position: 5 # Health Checks OSAPI exposes health endpoints for load balancers, monitoring systems, and -operational tooling. These endpoints report whether the API server is alive, +operational tooling. These endpoints report whether the controller is alive, ready to serve traffic, and the status of its dependencies. All three runtime -components (API server, agent, NATS server) participate in a shared component +components (controller, agent, NATS server) participate in a shared component registry so operators can see the health of the entire deployment from a single endpoint. @@ -26,7 +26,7 @@ orchestrators (e.g., Kubernetes liveness probes) to detect hung processes. ### Readiness (`/health/ready`) -Checks connectivity to NATS and KV stores. Returns `200 OK` when the API server +Checks connectivity to NATS and KV stores. Returns `200 OK` when the controller can process requests, or `503 Service Unavailable` when dependencies are down. Use this for load balancer health checks to avoid routing traffic to an unready instance. diff --git a/docs/docs/sidebar/features/notifications.md b/docs/docs/sidebar/features/notifications.md index 0e333c286..8b7238518 100644 --- a/docs/docs/sidebar/features/notifications.md +++ b/docs/docs/sidebar/features/notifications.md @@ -6,8 +6,8 @@ condition transitions and dispatches events through a pluggable backend. ## How It Works -Every component (agent, API server, NATS server) evaluates conditions on each -heartbeat and writes them to the registry KV bucket. A watcher on the API server +Every component (agent, controller, NATS server) evaluates conditions on each +heartbeat and writes them to the registry KV bucket. A watcher on the controller detects transitions: - **Fired**: a condition becomes active (e.g., `DiskPressure` crosses threshold) @@ -91,7 +91,7 @@ See [Configuration](../usage/configuration.md) for the full reference. ## Architecture -The watcher runs as a background goroutine in the API server. It monitors the +The watcher runs as a background goroutine in the controller. It monitors the registry KV bucket using NATS KV Watch. On each update it compares the previous condition set to the current one and emits `ConditionEvent`s for transitions. diff --git a/docs/docs/sidebar/intro.md b/docs/docs/sidebar/intro.md index ea7cfd23d..5ba66759b 100644 --- a/docs/docs/sidebar/intro.md +++ b/docs/docs/sidebar/intro.md @@ -63,7 +63,7 @@ Or start each component separately: ```bash osapi nats server start & -osapi api server start & +osapi controller start & osapi agent start & ``` diff --git a/docs/docs/sidebar/usage/configuration.md b/docs/docs/sidebar/usage/configuration.md index be150ca53..f36f133ec 100644 --- a/docs/docs/sidebar/usage/configuration.md +++ b/docs/docs/sidebar/usage/configuration.md @@ -26,14 +26,14 @@ uppercased: | Config Key | Environment Variable | | ------------------------------------------------ | ------------------------------------------------------ | | `debug` | `OSAPI_DEBUG` | -| `api.server.port` | `OSAPI_API_SERVER_PORT` | -| `api.server.nats.host` | `OSAPI_API_SERVER_NATS_HOST` | -| `api.server.nats.port` | `OSAPI_API_SERVER_NATS_PORT` | -| `api.server.nats.client_name` | `OSAPI_API_SERVER_NATS_CLIENT_NAME` | -| `api.server.nats.namespace` | `OSAPI_API_SERVER_NATS_NAMESPACE` | -| `api.server.nats.auth.type` | `OSAPI_API_SERVER_NATS_AUTH_TYPE` | -| `api.server.security.signing_key` | `OSAPI_API_SERVER_SECURITY_SIGNING_KEY` | -| `api.client.security.bearer_token` | `OSAPI_API_CLIENT_SECURITY_BEARER_TOKEN` | +| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | +| `controller.api.nats.host` | `OSAPI_CONTROLLER_API_NATS_HOST` | +| `controller.api.nats.port` | `OSAPI_CONTROLLER_API_NATS_PORT` | +| `controller.api.nats.client_name` | `OSAPI_CONTROLLER_API_NATS_CLIENT_NAME` | +| `controller.api.nats.namespace` | `OSAPI_CONTROLLER_API_NATS_NAMESPACE` | +| `controller.api.nats.auth.type` | `OSAPI_CONTROLLER_API_NATS_AUTH_TYPE` | +| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | +| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | | `nats.server.host` | `OSAPI_NATS_SERVER_HOST` | | `nats.server.port` | `OSAPI_NATS_SERVER_PORT` | | `nats.server.namespace` | `OSAPI_NATS_SERVER_NAMESPACE` | @@ -91,10 +91,10 @@ Environment variables take precedence over file values. Two fields carry a `required` validation tag and must be set before the server or client will start: -| Key | Purpose | -| ---------------------------------- | ----------------------------- | -| `api.server.security.signing_key` | HS256 key for signing JWTs | -| `api.client.security.bearer_token` | JWT sent with client requests | +| Key | Purpose | +| ----------------------------------------- | ----------------------------- | +| `controller.api.security.signing_key` | HS256 key for signing JWTs | +| `controller.client.security.bearer_token` | JWT sent with client requests | Generate a signing key with `openssl rand -hex 32`. Generate a bearer token with `osapi token generate`. @@ -102,7 +102,7 @@ Generate a signing key with `openssl rand -hex 32`. Generate a bearer token with ## Authentication Each NATS connection supports pluggable authentication. Set the `auth.type` -field in the relevant section (`nats.server`, `api.server.nats`, or +field in the relevant section (`nats.server`, `controller.api.nats`, or `agent.nats`): | Type | Description | Extra Fields | @@ -117,7 +117,7 @@ The embedded NATS server (`nats.server.auth`) accepts a list of users or nkeys: ```yaml nats: - server: + api: auth: type: user_pass users: @@ -127,12 +127,12 @@ nats: ### Client-Side Auth -API server and agent connections (`api.server.nats.auth`, `agent.nats.auth`) +API server and agent connections (`controller.api.nats.auth`, `agent.nats.auth`) authenticate as a single identity: ```yaml -api: - server: +controller: + api: nats: auth: type: user_pass @@ -154,13 +154,13 @@ of permissions: ### Custom Roles -You can define custom roles in the `api.server.security.roles` section. Custom -roles override the default permission mapping for the same name, or define -entirely new role names: +You can define custom roles in the `controller.api.security.roles` section. +Custom roles override the default permission mapping for the same name, or +define entirely new role names: ```yaml -api: - server: +controller: + api: security: roles: ops: @@ -198,8 +198,8 @@ NATS cluster without collisions. | `job-queue` (KV bucket) | `osapi-job-queue` | Set the same namespace value in `nats.server.namespace`, -`api.server.nats.namespace`, and `agent.nats.namespace` so all components agree -on naming. An empty string disables prefixing. +`controller.api.nats.namespace`, and `agent.nats.namespace` so all components +agree on naming. An empty string disables prefixing. ## Full Reference @@ -210,7 +210,7 @@ Values shown are representative defaults from the repository's config file. # Enable verbose logging. debug: true -api: +controller: client: # Base URL the CLI client connects to. url: 'http://0.0.0.0:8080' @@ -219,7 +219,7 @@ api: # Generate with: osapi token generate bearer_token: '' - server: + api: # Port the REST API server listens on. port: 8080 nats: @@ -256,7 +256,7 @@ api: # - health:read nats: - server: + api: # Hostname the embedded NATS server binds to. host: 'localhost' # Port the embedded NATS server binds to. @@ -471,14 +471,14 @@ agent: ## Section Reference -### `api.client` +### `controller.client` | Key | Type | Description | | ----------------------- | ------ | ---------------------------------- | | `url` | string | Base URL the CLI client targets | | `security.bearer_token` | string | JWT for client auth (**required**) | -### `api.server` +### `controller.api` | Key | Type | Description | | ----------------------------- | -------- | ------------------------------------ | diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 0d1921521..80fb3aadd 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -401,7 +401,7 @@ const config: Config = { docsPluginId: 'classic', config: { osapi: { - specPath: '../internal/api/gen/api.yaml', + specPath: '../internal/controller/api/gen/api.yaml', outputDir: 'docs/gen/api', sidebarOptions: { groupPathsBy: 'tag', diff --git a/docs/plans/2026-03-19-rename-api-to-controller-design.md b/docs/plans/2026-03-19-rename-api-to-controller-design.md new file mode 100644 index 000000000..920374c9f --- /dev/null +++ b/docs/plans/2026-03-19-rename-api-to-controller-design.md @@ -0,0 +1,210 @@ +# Rename API Server to Controller — Design Spec + +## Goal + +Rename the "API server" to "controller" to reflect its role as the control plane +process that owns multiple sub-components (REST API, notification watcher, +heartbeat, and future metrics server). + +## Motivation + +The API server today does more than serve HTTP: + +- Runs the REST API (Echo) +- Runs the notification watcher (condition monitoring) +- Runs the component heartbeat +- Will run a metrics/ops server in the future + +"Controller" captures what it actually is — the control plane process. The API +is just one thing it exposes. + +## Config Changes + +### Before + +```yaml +api: + client: + url: 'http://localhost:8080' + security: + bearer_token: '' + server: + port: 8080 + nats: + host: localhost + port: 4222 + client_name: osapi-api + namespace: osapi + auth: + type: none + security: + signing_key: '' + cors: + allow_origins: [...] + roles: {} +``` + +### After + +```yaml +controller: + client: + url: 'http://localhost:8080' + security: + bearer_token: '' + api: + port: 8080 + security: + signing_key: '' + cors: + allow_origins: [...] + roles: {} + nats: + host: localhost + port: 4222 + client_name: osapi-api + namespace: osapi + auth: + type: none +``` + +Key changes: + +- `api` → `controller` (top-level) +- `api.server` → `controller.api` (the HTTP server config) +- `api.server.nats` → `controller.nats` (moved up, not nested under api) +- `api.client` → `controller.client` (unchanged structure) + +### Go config types + +```go +// Controller replaces the old API struct. +type Controller struct { + Client Client `mapstructure:"client"` + API APIServer `mapstructure:"api" mask:"struct"` + NATS NATSConnection `mapstructure:"nats"` +} + +// APIServer holds the HTTP server config (port + security). +// Replaces the old Server struct minus the NATS connection +// (which moves to Controller.NATS). +type APIServer struct { + Port int `mapstructure:"port"` + Security ServerSecurity `mapstructure:"security" mask:"struct"` +} +``` + +The `validate:"required"` tags on `signing_key` and `bearer_token` remain on +their existing structs (`ServerSecurity`, `ClientSecurity`). Validation works +the same way — Viper unmarshals into the new structure and the validator walks +the nested structs. + +### Environment variable mapping + +| Config Key | Environment Variable | +| -------------------------------------------- | -------------------------------------------------- | +| `controller.client.url` | `OSAPI_CONTROLLER_CLIENT_URL` | +| `controller.client.security.bearer_token` | `OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN` | +| `controller.api.port` | `OSAPI_CONTROLLER_API_PORT` | +| `controller.api.security.signing_key` | `OSAPI_CONTROLLER_API_SECURITY_SIGNING_KEY` | +| `controller.api.security.cors.allow_origins` | `OSAPI_CONTROLLER_API_SECURITY_CORS_ALLOW_ORIGINS` | +| `controller.nats.host` | `OSAPI_CONTROLLER_NATS_HOST` | +| `controller.nats.port` | `OSAPI_CONTROLLER_NATS_PORT` | +| `controller.nats.client_name` | `OSAPI_CONTROLLER_NATS_CLIENT_NAME` | +| `controller.nats.namespace` | `OSAPI_CONTROLLER_NATS_NAMESPACE` | +| `controller.nats.auth.type` | `OSAPI_CONTROLLER_NATS_AUTH_TYPE` | + +## CLI Changes + +| Before | After | +| ------------------------ | ------------------------ | +| `osapi api server start` | `osapi controller start` | + +Unchanged: + +- `osapi client *` — all client commands stay the same +- `osapi agent start` +- `osapi nats server start` +- `osapi start` (all-in-one) — calls controller instead of API server + +## Code Changes + +### Directory moves + +| From | To | +| ------------------ | ----------------------------- | +| `internal/api/` | `internal/controller/api/` | +| `internal/notify/` | `internal/controller/notify/` | + +### New files + +| File | Purpose | +| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------- | +| `internal/controller/controller.go` | Controller struct with Start/Stop. Owns the API server, heartbeat, and condition watcher. Implements `cli.Lifecycle`. | +| `cmd/controller.go` | `controllerCmd` parent command | +| `cmd/controller_start.go` | `controller start` subcommand | +| `cmd/controller_setup.go` | Setup logic (moved from `api_server_setup.go`), config paths updated | + +### Removed files + +| File | Reason | +| ------------------------- | ------------------------------------- | +| `cmd/api_server.go` | Replaced by `cmd/controller.go` | +| `cmd/api_server_start.go` | Replaced by `cmd/controller_start.go` | +| `cmd/api_server_setup.go` | Replaced by `cmd/controller_setup.go` | + +### Modified files + +| File | Change | +| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| `internal/config/types.go` | Replace `API` struct with `Controller` containing `APIServer`, `Client`, `NATSConnection`. Update `Config` struct field. | +| `cmd/start.go` | Call controller instead of API server | +| `cmd/client.go` | `appConfig.API` → `appConfig.Controller` | +| `cmd/client_*.go` | Update all config references | +| `test/integration/integration_test.go` | Update `api server start` → `controller start` in test harness | + +### Heartbeat + +`internal/api/heartbeat.go` moves to `internal/controller/heartbeat.go`. The +heartbeat registers the controller as a component in the registry KV. It is a +controller lifecycle concern — the API server doesn't need to know about it. The +agent has its own heartbeat in `internal/agent/` which is unrelated. + +### Notify + +`internal/notify/` moves to `internal/controller/notify/`. The condition watcher +monitors the registry KV and dispatches notifications. It runs as a goroutine +owned by the controller — it has no reason to exist outside the controller +process. + +## What doesn't change + +- All REST API paths (`/node/`, `/job/`, `/health/`, etc.) +- `osapi client *` CLI commands +- SDK client (`pkg/sdk/client/`) — no config references, only HTTP +- Agent code (`internal/agent/`) +- NATS server code +- OpenAPI specs and generated code (stays under `internal/controller/api/`) + +## Docs updates + +- `docs/docs/sidebar/usage/configuration.md` — full config reference with new + `controller.*` keys and env var table +- `docs/docs/sidebar/architecture/architecture.md` — rename "API Server" to + "Controller" in process descriptions +- `docs/docs/sidebar/architecture/system-architecture.md` — update package + layout, handler structure references +- `docs/docs/sidebar/usage/cli/` — update command docs for `controller start` +- `docs/docs/sidebar/development/development.md` — quick reference commands +- `docs/docs/sidebar/features/health-checks.md` — update references +- `docs/docs/sidebar/features/notifications.md` — update references +- `CLAUDE.md` — update architecture section (`internal/api/` → + `internal/controller/api/`), cmd references, config references + +## Breaking changes + +- Config: `api.*` → `controller.*` +- Env vars: `OSAPI_API_*` → `OSAPI_CONTROLLER_*` +- CLI: `osapi api server start` → `osapi controller start` +- Integration tests: `api server start` → `controller start` +- `osapi.yaml`: must be updated before upgrading diff --git a/docs/plans/2026-03-19-rename-api-to-controller.md b/docs/plans/2026-03-19-rename-api-to-controller.md new file mode 100644 index 000000000..2f6484779 --- /dev/null +++ b/docs/plans/2026-03-19-rename-api-to-controller.md @@ -0,0 +1,620 @@ +# Rename API Server to Controller Implementation Plan + +> **For agentic workers:** REQUIRED: Use superpowers:subagent-driven-development +> (if subagents available) or superpowers:executing-plans to implement this +> plan. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Rename the "API server" to "controller" across config, CLI, code +structure, and docs to reflect its role as the control plane process. + +**Architecture:** Move `internal/api/` to `internal/controller/api/` and +`internal/notify/` to `internal/controller/notify/`. Create a new +`internal/controller/controller.go` that owns the API server, heartbeat, and +condition watcher. Rename `osapi api server start` to `osapi controller start`. +Update all config from `api.*` to `controller.*`. + +**Tech Stack:** Go 1.25, Cobra CLI, Viper config, Echo HTTP + +--- + +## Chunk 1: Config types and YAML + +### Task 1: Update config types + +**Files:** + +- Modify: `internal/config/types.go` + +- [ ] **Step 1: Replace API struct with Controller** + +Replace the `API` struct and `Server` struct with `Controller` and `APIServer`: + +```go +// Controller holds the control plane configuration. +type Controller struct { + Client Client `mapstructure:"client"` + API APIServer `mapstructure:"api" mask:"struct"` + NATS NATSConnection `mapstructure:"nats"` +} + +// APIServer holds the HTTP server config (port + security). +type APIServer struct { + Port int `mapstructure:"port"` + Security ServerSecurity `mapstructure:"security" mask:"struct"` +} +``` + +Update the `Config` struct field: + +```go +type Config struct { + Controller Controller `mapstructure:"controller" mask:"struct"` + Agent AgentConfig `mapstructure:"agent,omitempty"` + // ... rest unchanged +} +``` + +Remove the old `API` and `Server` structs. Keep `Client`, `ClientSecurity`, +`ServerSecurity`, `CORS`, `CustomRole`, `NATSConnection` unchanged. + +- [ ] **Step 2: Verify it compiles (it won't — many references to fix)** + +Run: `go build ./internal/config/...` Expected: PASS (the config package itself +should compile) + +- [ ] **Step 3: Commit** + +``` +refactor(config): rename API struct to Controller +``` + +--- + +### Task 2: Update config YAML files + +**Files:** + +- Modify: `osapi.yaml` +- Modify: `test/integration/osapi.yaml` + +- [ ] **Step 1: Update osapi.yaml** + +Replace the `api:` section: + +```yaml +controller: + client: + url: 'http://0.0.0.0:8080' + security: + bearer_token: '' + api: + port: 8080 + security: + signing_key: '' + cors: + allow_origins: + - 'http://localhost:3001' + - 'https://osapi-io.github.io' + nats: + host: 'localhost' + port: 4222 + client_name: 'osapi-api' + namespace: 'osapi' + auth: + type: 'none' +``` + +- [ ] **Step 2: Update test/integration/osapi.yaml** + +Same structure change: + +```yaml +controller: + client: + url: http://127.0.0.1:8080 + security: + bearer_token: placeholder + api: + port: 8080 + security: + signing_key: 111fdb0cfd9788fa6af8815f856a0374bf7a0174ad62fa8b98ec07a55f68d8d8 + cors: + allow_origins: [] + nats: + host: localhost + port: 4222 + client_name: osapi-api-integration + namespace: '' + auth: + type: none +``` + +- [ ] **Step 3: Commit** + +``` +refactor(config): rename api to controller in YAML files +``` + +--- + +## Chunk 2: Directory moves + +### Task 3: Move internal/api/ to internal/controller/api/ + +**Files:** + +- Move: `internal/api/` → `internal/controller/api/` +- Move: `internal/api/heartbeat.go` → `internal/controller/heartbeat.go` +- Move: `internal/api/heartbeat_test.go` → + `internal/controller/heartbeat_test.go` + +- [ ] **Step 1: Create directory and move files** + +```bash +mkdir -p internal/controller +git mv internal/api internal/controller/api +git mv internal/controller/api/heartbeat.go internal/controller/heartbeat.go +git mv internal/controller/api/heartbeat_test.go internal/controller/heartbeat_test.go +``` + +- [ ] **Step 2: Update package declaration in heartbeat files** + +Change `package api` to `package controller` in: + +- `internal/controller/heartbeat.go` +- `internal/controller/heartbeat_test.go` + +Update imports in heartbeat.go to reference `internal/controller/api` where +needed. + +- [ ] **Step 3: Update all import paths project-wide** + +Find and replace all occurrences: + +- `"github.com/retr0h/osapi/internal/api"` → + `"github.com/retr0h/osapi/internal/controller/api"` +- `"github.com/retr0h/osapi/internal/api/` → + `"github.com/retr0h/osapi/internal/controller/api/` + +Files that import `internal/api`: + +- `cmd/api_server_setup.go` (will become `cmd/controller_setup.go` in Task 5) +- `cmd/nats_heartbeat.go` +- `cmd/start.go` +- All `internal/api/handler_*.go` files (now under `internal/controller/api/`) +- All domain packages (`internal/controller/api/health/`, etc.) — these use + relative imports within the api package so they may not need changes + +- [ ] **Step 4: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 5: Commit** + +``` +refactor: move internal/api to internal/controller/api +``` + +--- + +### Task 4: Move internal/notify/ to internal/controller/notify/ + +**Files:** + +- Move: `internal/notify/` → `internal/controller/notify/` + +- [ ] **Step 1: Move directory** + +```bash +git mv internal/notify internal/controller/notify +``` + +- [ ] **Step 2: Update all import paths** + +Find and replace: + +- `"github.com/retr0h/osapi/internal/notify"` → + `"github.com/retr0h/osapi/internal/controller/notify"` + +Files that import `internal/notify`: + +- `cmd/api_server_setup.go` (will become `cmd/controller_setup.go`) + +- [ ] **Step 3: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 4: Commit** + +``` +refactor: move internal/notify to internal/controller/notify +``` + +--- + +## Chunk 3: Controller struct and CMD files + +### Task 5: Create controller.go + +**Files:** + +- Create: `internal/controller/controller.go` + +- [ ] **Step 1: Create the Controller struct** + +```go +package controller + +// Controller is the control plane process. It owns the API server, +// component heartbeat, and condition watcher. +type Controller struct { + apiServer *api.Server + // Additional fields will be added as heartbeat and watcher + // are refactored into this struct in future work. +} +``` + +For now this is a thin wrapper. The existing setup logic in +`cmd/api_server_setup.go` already manages the lifecycle. The controller struct +provides a home for future sub-component ownership. + +- [ ] **Step 2: Commit** + +``` +feat: add internal/controller/controller.go +``` + +--- + +### Task 6: Rename CMD files + +**Files:** + +- Remove: `cmd/api_server.go` +- Remove: `cmd/api_server_start.go` +- Remove: `cmd/api_server_setup.go` +- Create: `cmd/controller.go` +- Create: `cmd/controller_start.go` +- Create: `cmd/controller_setup.go` + +- [ ] **Step 1: Move and rename files** + +```bash +git mv cmd/api_server.go cmd/controller.go +git mv cmd/api_server_start.go cmd/controller_start.go +git mv cmd/api_server_setup.go cmd/controller_setup.go +``` + +- [ ] **Step 2: Update cmd/controller.go** + +Rename `apiServerCmd` to `controllerCmd`. Change: + +- `Use: "server"` → `Use: "start"` +- Parent command: registered under `rootCmd` not `apiCmd` +- Remove the `apiCmd` parent entirely +- Update all `appConfig.API` references to `appConfig.Controller` +- Update log messages from "api server" to "controller" + +The command becomes `osapi controller start` (two levels: controller → start). +Actually per the spec it's just `osapi controller start` where `controller` is +the parent and `start` is the subcommand. Keep the parent for future subcommands +(e.g., `controller status`). + +- [ ] **Step 3: Update cmd/controller_start.go** + +- Rename `apiServerStartCmd` to `controllerStartCmd` +- Update `Use` and `Short` descriptions +- Change `appConfig.API.NATS` to `appConfig.Controller.NATS` +- Update import from `internal/api` to `internal/controller/api` + +- [ ] **Step 4: Update cmd/controller_setup.go** + +- Rename `setupAPIServer` to `setupController` +- Rename `registerAPIHandlers` to `registerControllerHandlers` +- Rename `startAPIHeartbeat` to `startControllerHeartbeat` +- Update all `appConfig.API` to `appConfig.Controller`: + - `appConfig.API.Port` → `appConfig.Controller.API.Port` + - `appConfig.API.NATS` → `appConfig.Controller.NATS` + - `appConfig.API.Server.Security.SigningKey` → + `appConfig.Controller.API.Security.SigningKey` + - `appConfig.API.Server.Security.CORS.AllowOrigins` → + `appConfig.Controller.API.Security.CORS.AllowOrigins` + - `appConfig.API.Server.Security.Roles` → + `appConfig.Controller.API.Security.Roles` +- Update import paths: + + - `internal/api` → `internal/controller/api` + - `internal/notify` → `internal/controller/notify` + +- [ ] **Step 5: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 6: Commit** + +``` +refactor: rename api server cmd to controller +``` + +--- + +### Task 7: Update cmd/start.go + +**Files:** + +- Modify: `cmd/start.go` + +- [ ] **Step 1: Update references** + +- `setupAPIServer` → `setupController` +- `appConfig.API.NATS` → `appConfig.Controller.NATS` +- `apiBundle` → `controllerBundle` +- Update `Short` and `Long` descriptions: "API server" → "controller" +- Update log component label: `"component", "api"` → `"component", "controller"` + +- [ ] **Step 2: Verify compilation** + +Run: `go build ./...` + +- [ ] **Step 3: Commit** + +``` +refactor: update start.go for controller rename +``` + +--- + +### Task 8: Update client and token commands + +**Files:** + +- Modify: `cmd/client.go` +- Modify: `cmd/token_generate.go` +- Modify: `cmd/token_validate.go` + +- [ ] **Step 1: Update cmd/client.go** + +- `appConfig.API.URL` → `appConfig.Controller.Client.URL` +- `appConfig.API.Client.Security.BearerToken` → + `appConfig.Controller.Client.Security.BearerToken` +- Viper binding: `"api.client.url"` → `"controller.client.url"` +- Log message: `"api.client.url"` → `"controller.client.url"` + +- [ ] **Step 2: Update cmd/token_generate.go** + +- All `appConfig.API` references → `appConfig.Controller` + +- [ ] **Step 3: Update cmd/token_validate.go** + +- All `appConfig.API` references → `appConfig.Controller` + +- [ ] **Step 4: Update cmd/nats_heartbeat.go** + +- Update import from `internal/api` to `internal/controller/api` + +- [ ] **Step 5: Verify compilation and run tests** + +Run: `go build ./... && go test ./cmd/... -count=1` + +- [ ] **Step 6: Commit** + +``` +refactor: update client and token commands for controller config +``` + +--- + +## Chunk 4: Integration tests and verification + +### Task 9: Update integration tests + +**Files:** + +- Modify: `test/integration/integration_test.go` +- Modify: `test/integration/osapi.yaml` (already done in Task 2) + +- [ ] **Step 1: Update serverEnv()** + +```go +func serverEnv() []string { + return append(os.Environ(), + fmt.Sprintf("OSAPI_NATS_SERVER_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_NATS_SERVER_STORE_DIR=%s", storeDir), + fmt.Sprintf("OSAPI_CONTROLLER_API_PORT=%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_NATS_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_AGENT_NATS_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + ) +} +``` + +- [ ] **Step 2: Update clientEnv()** + +```go +func clientEnv() []string { + return append(os.Environ(), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_URL=http://127.0.0.1:%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + ) +} +``` + +- [ ] **Step 3: Verify full build and unit tests** + +```bash +go build ./... +go test ./... -count=1 +``` + +- [ ] **Step 4: Run integration tests** + +```bash +just go::unit-int +``` + +- [ ] **Step 5: Commit** + +``` +refactor: update integration tests for controller config +``` + +--- + +## Chunk 5: Documentation + +### Task 10: Update CLAUDE.md + +**Files:** + +- Modify: `CLAUDE.md` + +- [ ] **Step 1: Update architecture section** + +- `cmd/` description: replace "api server" with "controller" +- `internal/api/` → `internal/controller/api/` +- Add `internal/controller/` description +- Add `internal/controller/notify/` description +- Update "Adding a New API Domain" section paths +- Update config references throughout + +- [ ] **Step 2: Commit** + +``` +docs: update CLAUDE.md for controller rename +``` + +--- + +### Task 11: Update Docusaurus docs + +**Files:** + +- Modify: `docs/docs/sidebar/usage/configuration.md` +- Modify: `docs/docs/sidebar/architecture/architecture.md` +- Modify: `docs/docs/sidebar/architecture/system-architecture.md` +- Modify: `docs/docs/sidebar/development/development.md` +- Modify: `docs/docs/sidebar/features/health-checks.md` +- Modify: `docs/docs/sidebar/features/notifications.md` +- Modify: `docs/docs/sidebar/intro.md` + +- [ ] **Step 1: Update configuration.md** + +Replace all `api.*` config keys with `controller.*` in: + +- YAML examples +- Environment variable table +- Section reference tables + +- [ ] **Step 2: Update architecture.md** + +- "API Server" → "Controller" in process descriptions +- `osapi api server start` → `osapi controller start` + +- [ ] **Step 3: Update system-architecture.md** + +- Package layout: `internal/api/` → `internal/controller/api/` +- Handler structure references + +- [ ] **Step 4: Update development.md** + +- Quick reference: `osapi api server start` → `osapi controller start` + +- [ ] **Step 5: Update feature docs** + +- health-checks.md: update any "API server" references +- notifications.md: update any "API server" references + +- [ ] **Step 6: Update intro.md** + +- Quickstart section: update startup commands if they reference + `api server start` + +- [ ] **Step 7: Verify docs build** + +```bash +just docs::build +``` + +- [ ] **Step 8: Commit** + +``` +docs: update all docs for controller rename +``` + +--- + +## Chunk 6: Final verification + +### Task 12: Full verification + +- [ ] **Step 1: Build** + +```bash +go build ./... +``` + +- [ ] **Step 2: Unit tests** + +```bash +go test ./... -count=1 +``` + +- [ ] **Step 3: Lint** + +```bash +just go::vet +``` + +- [ ] **Step 4: Integration tests** + +```bash +just go::unit-int +``` + +- [ ] **Step 5: Verify CLI** + +```bash +go run main.go controller start --help +go run main.go start --help +go run main.go client --help +``` + +- [ ] **Step 6: Docs build** + +```bash +just docs::build +``` + +- [ ] **Step 7: Final commit if any fixups needed** + +--- + +## Files Modified Summary + +| File | Change | +| ------------------------------------------------------- | -------------------------------------------- | +| `internal/config/types.go` | `API` → `Controller`, `Server` → `APIServer` | +| `osapi.yaml` | `api:` → `controller:` | +| `test/integration/osapi.yaml` | `api:` → `controller:` | +| `internal/api/` → `internal/controller/api/` | Directory move | +| `internal/notify/` → `internal/controller/notify/` | Directory move | +| `internal/controller/heartbeat.go` | Moved from `internal/api/`, package rename | +| `internal/controller/heartbeat_test.go` | Moved from `internal/api/`, package rename | +| `internal/controller/controller.go` | New file | +| `cmd/api_server.go` → `cmd/controller.go` | Rename + update | +| `cmd/api_server_start.go` → `cmd/controller_start.go` | Rename + update | +| `cmd/api_server_setup.go` → `cmd/controller_setup.go` | Rename + update | +| `cmd/start.go` | Config path updates | +| `cmd/client.go` | Config path + viper binding updates | +| `cmd/token_generate.go` | Config path updates | +| `cmd/token_validate.go` | Config path updates | +| `cmd/nats_heartbeat.go` | Import path update | +| `test/integration/integration_test.go` | Env var updates | +| `CLAUDE.md` | Architecture references | +| `docs/docs/sidebar/usage/configuration.md` | Full config reference | +| `docs/docs/sidebar/architecture/architecture.md` | Process descriptions | +| `docs/docs/sidebar/architecture/system-architecture.md` | Package layout | +| `docs/docs/sidebar/development/development.md` | Quick reference | +| `docs/docs/sidebar/features/health-checks.md` | References | +| `docs/docs/sidebar/features/notifications.md` | References | +| `docs/docs/sidebar/intro.md` | Startup commands | diff --git a/internal/config/schema_public_test.go b/internal/config/schema_public_test.go index a20975a80..4f618e86e 100644 --- a/internal/config/schema_public_test.go +++ b/internal/config/schema_public_test.go @@ -42,13 +42,13 @@ func (s *ConfigPublicTestSuite) TestValidate() { { name: "valid config", config: config.Config{ - API: config.API{ + Controller: config.Controller{ Client: config.Client{ Security: config.ClientSecurity{ BearerToken: "test-bearer-token", }, }, - Server: config.Server{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-signing-key", }, @@ -60,13 +60,13 @@ func (s *ConfigPublicTestSuite) TestValidate() { { name: "missing signing key", config: config.Config{ - API: config.API{ + Controller: config.Controller{ Client: config.Client{ Security: config.ClientSecurity{ BearerToken: "test-bearer-token", }, }, - Server: config.Server{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "", }, @@ -79,13 +79,13 @@ func (s *ConfigPublicTestSuite) TestValidate() { { name: "missing bearer token", config: config.Config{ - API: config.API{ + Controller: config.Controller{ Client: config.Client{ Security: config.ClientSecurity{ BearerToken: "", }, }, - Server: config.Server{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-signing-key", }, diff --git a/internal/config/schema_test.go b/internal/config/schema_test.go index 665d69d38..f423d3de0 100644 --- a/internal/config/schema_test.go +++ b/internal/config/schema_test.go @@ -41,13 +41,13 @@ func (s *ConfigTestSuite) TestValidateRegisterValidatorsError() { } c := &Config{ - API: API{ + Controller: Controller{ Client: Client{ Security: ClientSecurity{ BearerToken: "test-token", }, }, - Server: Server{ + API: APIServer{ Security: ServerSecurity{ SigningKey: "test-key", }, diff --git a/internal/config/types.go b/internal/config/types.go index bea0f8b5f..3d46ee33f 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -23,7 +23,7 @@ package config // Config represents the root structure of the YAML configuration file. // This struct is used to unmarshal configuration data from Viper. type Config struct { - API API `mapstructure:"api" mask:"struct"` + Controller Controller `mapstructure:"controller" mask:"struct"` Agent AgentConfig `mapstructure:"agent,omitempty"` NATS NATS `mapstructure:"nats"` Telemetry Telemetry `mapstructure:"telemetry"` @@ -227,10 +227,19 @@ type NATSConnection struct { Auth NATSAuth `mapstructure:"auth,omitempty"` } -// API configuration settings. -type API struct { - Client - Server `mask:"struct"` +// Controller holds the control plane configuration. +type Controller struct { + Client Client `mapstructure:"client"` + API APIServer `mapstructure:"api" mask:"struct"` + NATS NATSConnection `mapstructure:"nats"` +} + +// APIServer holds the HTTP server config (port + security). +type APIServer struct { + // Port the server will bind to. + Port int `mapstructure:"port"` + // Security contains security-related configuration for the server, such as CORS and tokens. + Security ServerSecurity `mapstructure:"security" mask:"struct"` } // Client configuration settings. @@ -241,16 +250,6 @@ type Client struct { Security ClientSecurity `mapstructure:"security" mask:"struct"` } -// Server configuration settings. -type Server struct { - // Port the server will bind to. - Port int `mapstructure:"port"` - // NATS connection settings for the API server. - NATS NATSConnection `mapstructure:"nats"` - // Security contains security-related configuration for the server, such as CORS and tokens. - Security ServerSecurity `mapstructure:"security" mask:"struct"` -} - // CustomRole defines a named set of permissions that can be assigned to tokens. type CustomRole struct { // Permissions granted to this role. diff --git a/internal/api/agent/agent.go b/internal/controller/api/agent/agent.go similarity index 96% rename from internal/api/agent/agent.go rename to internal/controller/api/agent/agent.go index 0a0a0cd9b..321b3e402 100644 --- a/internal/api/agent/agent.go +++ b/internal/controller/api/agent/agent.go @@ -24,7 +24,7 @@ package agent import ( "log/slog" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/agent/agent_drain.go b/internal/controller/api/agent/agent_drain.go similarity index 97% rename from internal/api/agent/agent_drain.go rename to internal/controller/api/agent/agent_drain.go index 9bedd39ad..27cc507b6 100644 --- a/internal/api/agent/agent_drain.go +++ b/internal/controller/api/agent/agent_drain.go @@ -25,7 +25,7 @@ import ( "fmt" "strings" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/agent/agent_drain_public_test.go b/internal/controller/api/agent/agent_drain_public_test.go similarity index 98% rename from internal/api/agent/agent_drain_public_test.go rename to internal/controller/api/agent/agent_drain_public_test.go index 002e8a3e6..91e2c163c 100644 --- a/internal/api/agent/agent_drain_public_test.go +++ b/internal/controller/api/agent/agent_drain_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) @@ -401,8 +401,8 @@ func (s *AgentDrainPublicTestSuite) TestDrainAgentRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentDrainTestSigningKey, }, diff --git a/internal/api/agent/agent_get.go b/internal/controller/api/agent/agent_get.go similarity index 96% rename from internal/api/agent/agent_get.go rename to internal/controller/api/agent/agent_get.go index be5e733d0..d9e05da0d 100644 --- a/internal/api/agent/agent_get.go +++ b/internal/controller/api/agent/agent_get.go @@ -24,7 +24,7 @@ import ( "context" "strings" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" ) // GetAgentDetails retrieves detailed information about a specific agent. diff --git a/internal/api/agent/agent_get_public_test.go b/internal/controller/api/agent/agent_get_public_test.go similarity index 97% rename from internal/api/agent/agent_get_public_test.go rename to internal/controller/api/agent/agent_get_public_test.go index 22e846a43..039713ba1 100644 --- a/internal/api/agent/agent_get_public_test.go +++ b/internal/controller/api/agent/agent_get_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/host" @@ -326,8 +326,8 @@ func (s *AgentGetPublicTestSuite) TestGetAgentDetailsRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentGetTestSigningKey, }, diff --git a/internal/api/agent/agent_list.go b/internal/controller/api/agent/agent_list.go similarity index 99% rename from internal/api/agent/agent_list.go rename to internal/controller/api/agent/agent_list.go index 9b72a693f..387ffc11f 100644 --- a/internal/api/agent/agent_list.go +++ b/internal/controller/api/agent/agent_list.go @@ -25,7 +25,7 @@ import ( "fmt" "time" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/agent/agent_list_public_test.go b/internal/controller/api/agent/agent_list_public_test.go similarity index 98% rename from internal/api/agent/agent_list_public_test.go rename to internal/controller/api/agent/agent_list_public_test.go index 4818b557a..26a10172e 100644 --- a/internal/api/agent/agent_list_public_test.go +++ b/internal/controller/api/agent/agent_list_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/host" @@ -470,8 +470,8 @@ func (s *AgentListPublicTestSuite) TestGetAgentRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentListTestSigningKey, }, diff --git a/internal/api/agent/agent_list_test.go b/internal/controller/api/agent/agent_list_test.go similarity index 100% rename from internal/api/agent/agent_list_test.go rename to internal/controller/api/agent/agent_list_test.go diff --git a/internal/api/agent/agent_undrain.go b/internal/controller/api/agent/agent_undrain.go similarity index 97% rename from internal/api/agent/agent_undrain.go rename to internal/controller/api/agent/agent_undrain.go index 84b9e376c..247f675d7 100644 --- a/internal/api/agent/agent_undrain.go +++ b/internal/controller/api/agent/agent_undrain.go @@ -25,7 +25,7 @@ import ( "fmt" "strings" - "github.com/retr0h/osapi/internal/api/agent/gen" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/agent/agent_undrain_public_test.go b/internal/controller/api/agent/agent_undrain_public_test.go similarity index 98% rename from internal/api/agent/agent_undrain_public_test.go rename to internal/controller/api/agent/agent_undrain_public_test.go index 3ebab922b..3d2b1c841 100644 --- a/internal/api/agent/agent_undrain_public_test.go +++ b/internal/controller/api/agent/agent_undrain_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apiagent "github.com/retr0h/osapi/internal/api/agent" - "github.com/retr0h/osapi/internal/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apiagent "github.com/retr0h/osapi/internal/controller/api/agent" + "github.com/retr0h/osapi/internal/controller/api/agent/gen" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) @@ -415,8 +415,8 @@ func (s *AgentUndrainPublicTestSuite) TestUndrainAgentRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAgentUndrainTestSigningKey, }, diff --git a/internal/api/agent/gen/agent.gen.go b/internal/controller/api/agent/gen/agent.gen.go similarity index 99% rename from internal/api/agent/gen/agent.gen.go rename to internal/controller/api/agent/gen/agent.gen.go index 9c0f4d19d..9c03d731d 100644 --- a/internal/api/agent/gen/agent.gen.go +++ b/internal/controller/api/agent/gen/agent.gen.go @@ -13,7 +13,7 @@ import ( "github.com/labstack/echo/v4" "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/agent/gen/api.yaml b/internal/controller/api/agent/gen/api.yaml similarity index 100% rename from internal/api/agent/gen/api.yaml rename to internal/controller/api/agent/gen/api.yaml diff --git a/internal/api/agent/gen/cfg.yaml b/internal/controller/api/agent/gen/cfg.yaml similarity index 93% rename from internal/api/agent/gen/cfg.yaml rename to internal/controller/api/agent/gen/cfg.yaml index 7a7b0cc38..0e070653c 100644 --- a/internal/api/agent/gen/cfg.yaml +++ b/internal/controller/api/agent/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/api/agent/gen/generate.go b/internal/controller/api/agent/gen/generate.go similarity index 100% rename from internal/api/agent/gen/generate.go rename to internal/controller/api/agent/gen/generate.go diff --git a/internal/api/agent/types.go b/internal/controller/api/agent/types.go similarity index 100% rename from internal/api/agent/types.go rename to internal/controller/api/agent/types.go diff --git a/internal/api/agent/validate.go b/internal/controller/api/agent/validate.go similarity index 100% rename from internal/api/agent/validate.go rename to internal/controller/api/agent/validate.go diff --git a/internal/api/audit/audit.go b/internal/controller/api/audit/audit.go similarity index 96% rename from internal/api/audit/audit.go rename to internal/controller/api/audit/audit.go index cc727ac2c..5f7c497b6 100644 --- a/internal/api/audit/audit.go +++ b/internal/controller/api/audit/audit.go @@ -24,8 +24,8 @@ package audit import ( "log/slog" - "github.com/retr0h/osapi/internal/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // ensure that we've conformed to the `StrictServerInterface` with a compile-time check diff --git a/internal/api/audit/audit_export.go b/internal/controller/api/audit/audit_export.go similarity index 96% rename from internal/api/audit/audit_export.go rename to internal/controller/api/audit/audit_export.go index 5070fe741..51cecec11 100644 --- a/internal/api/audit/audit_export.go +++ b/internal/controller/api/audit/audit_export.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // GetAuditExport returns all audit log entries without pagination. diff --git a/internal/api/audit/audit_export_public_test.go b/internal/controller/api/audit/audit_export_public_test.go similarity index 96% rename from internal/api/audit/audit_export_public_test.go rename to internal/controller/api/audit/audit_export_public_test.go index 7ca1ece0c..d3afbed60 100644 --- a/internal/api/audit/audit_export_public_test.go +++ b/internal/controller/api/audit/audit_export_public_test.go @@ -32,12 +32,12 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - auditapi "github.com/retr0h/osapi/internal/api/audit" - "github.com/retr0h/osapi/internal/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) type AuditExportPublicTestSuite struct { @@ -262,8 +262,8 @@ func (s *AuditExportPublicTestSuite) TestGetAuditExportRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAuditExportTestSigningKey, }, diff --git a/internal/api/audit/audit_get.go b/internal/controller/api/audit/audit_get.go similarity index 96% rename from internal/api/audit/audit_get.go rename to internal/controller/api/audit/audit_get.go index d971389eb..ea7d336eb 100644 --- a/internal/api/audit/audit_get.go +++ b/internal/controller/api/audit/audit_get.go @@ -25,7 +25,7 @@ import ( "log/slog" "strings" - "github.com/retr0h/osapi/internal/api/audit/gen" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // GetAuditLogByID returns a single audit log entry by ID. diff --git a/internal/api/audit/audit_get_public_test.go b/internal/controller/api/audit/audit_get_public_test.go similarity index 96% rename from internal/api/audit/audit_get_public_test.go rename to internal/controller/api/audit/audit_get_public_test.go index f9df38a55..080d16fc0 100644 --- a/internal/api/audit/audit_get_public_test.go +++ b/internal/controller/api/audit/audit_get_public_test.go @@ -34,12 +34,12 @@ import ( openapi_types "github.com/oapi-codegen/runtime/types" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - auditapi "github.com/retr0h/osapi/internal/api/audit" - "github.com/retr0h/osapi/internal/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) type AuditGetPublicTestSuite struct { @@ -257,8 +257,8 @@ func (s *AuditGetPublicTestSuite) TestGetAuditLogByIDRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAuditGetTestSigningKey, }, diff --git a/internal/api/audit/audit_list.go b/internal/controller/api/audit/audit_list.go similarity index 97% rename from internal/api/audit/audit_list.go rename to internal/controller/api/audit/audit_list.go index 4a7181c87..b8057efbf 100644 --- a/internal/api/audit/audit_list.go +++ b/internal/controller/api/audit/audit_list.go @@ -26,8 +26,8 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/audit/audit_list_public_test.go b/internal/controller/api/audit/audit_list_public_test.go similarity index 97% rename from internal/api/audit/audit_list_public_test.go rename to internal/controller/api/audit/audit_list_public_test.go index 8b4cabe51..c11e3c3d9 100644 --- a/internal/api/audit/audit_list_public_test.go +++ b/internal/controller/api/audit/audit_list_public_test.go @@ -32,12 +32,12 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - auditapi "github.com/retr0h/osapi/internal/api/audit" - "github.com/retr0h/osapi/internal/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" + "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) type AuditListPublicTestSuite struct { @@ -349,8 +349,8 @@ func (s *AuditListPublicTestSuite) TestGetAuditLogsRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacAuditListTestSigningKey, }, diff --git a/internal/api/audit/fakes_public_test.go b/internal/controller/api/audit/fakes_public_test.go similarity index 97% rename from internal/api/audit/fakes_public_test.go rename to internal/controller/api/audit/fakes_public_test.go index 5683c2f46..50091f3f4 100644 --- a/internal/api/audit/fakes_public_test.go +++ b/internal/controller/api/audit/fakes_public_test.go @@ -24,8 +24,8 @@ import ( "context" "log/slog" - auditapi "github.com/retr0h/osapi/internal/api/audit" auditstore "github.com/retr0h/osapi/internal/audit" + auditapi "github.com/retr0h/osapi/internal/controller/api/audit" ) // fakeStore is a simple in-memory audit store for handler tests. diff --git a/internal/api/audit/gen/api.yaml b/internal/controller/api/audit/gen/api.yaml similarity index 100% rename from internal/api/audit/gen/api.yaml rename to internal/controller/api/audit/gen/api.yaml diff --git a/internal/api/audit/gen/audit.gen.go b/internal/controller/api/audit/gen/audit.gen.go similarity index 99% rename from internal/api/audit/gen/audit.gen.go rename to internal/controller/api/audit/gen/audit.gen.go index 5d18f94af..44c7c56ea 100644 --- a/internal/api/audit/gen/audit.gen.go +++ b/internal/controller/api/audit/gen/audit.gen.go @@ -14,7 +14,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/audit/gen/cfg.yaml b/internal/controller/api/audit/gen/cfg.yaml similarity index 93% rename from internal/api/audit/gen/cfg.yaml rename to internal/controller/api/audit/gen/cfg.yaml index d1720d59b..081db3a21 100644 --- a/internal/api/audit/gen/cfg.yaml +++ b/internal/controller/api/audit/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/api/audit/gen/generate.go b/internal/controller/api/audit/gen/generate.go similarity index 100% rename from internal/api/audit/gen/generate.go rename to internal/controller/api/audit/gen/generate.go diff --git a/internal/api/audit/types.go b/internal/controller/api/audit/types.go similarity index 100% rename from internal/api/audit/types.go rename to internal/controller/api/audit/types.go diff --git a/internal/api/common/gen/api.yaml b/internal/controller/api/common/gen/api.yaml similarity index 100% rename from internal/api/common/gen/api.yaml rename to internal/controller/api/common/gen/api.yaml diff --git a/internal/api/common/gen/cfg.yaml b/internal/controller/api/common/gen/cfg.yaml similarity index 100% rename from internal/api/common/gen/cfg.yaml rename to internal/controller/api/common/gen/cfg.yaml diff --git a/internal/api/common/gen/common.gen.go b/internal/controller/api/common/gen/common.gen.go similarity index 100% rename from internal/api/common/gen/common.gen.go rename to internal/controller/api/common/gen/common.gen.go diff --git a/internal/api/common/gen/generate.go b/internal/controller/api/common/gen/generate.go similarity index 100% rename from internal/api/common/gen/generate.go rename to internal/controller/api/common/gen/generate.go diff --git a/internal/api/docker/container.go b/internal/controller/api/docker/container.go similarity index 96% rename from internal/api/docker/container.go rename to internal/controller/api/docker/container.go index affe07025..18202f42f 100644 --- a/internal/api/docker/container.go +++ b/internal/controller/api/docker/container.go @@ -24,7 +24,7 @@ package container import ( "log/slog" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/docker/container_create.go b/internal/controller/api/docker/container_create.go similarity index 97% rename from internal/api/docker/container_create.go rename to internal/controller/api/docker/container_create.go index b147458e2..f02e62e3a 100644 --- a/internal/api/docker/container_create.go +++ b/internal/controller/api/docker/container_create.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_create_public_test.go b/internal/controller/api/docker/container_create_public_test.go similarity index 98% rename from internal/api/docker/container_create_public_test.go rename to internal/controller/api/docker/container_create_public_test.go index 85893a522..966c17da7 100644 --- a/internal/api/docker/container_create_public_test.go +++ b/internal/controller/api/docker/container_create_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -404,8 +404,8 @@ func (s *ContainerCreatePublicTestSuite) TestPostNodeContainerDockerRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerCreateTestSigningKey, }, diff --git a/internal/api/docker/container_exec.go b/internal/controller/api/docker/container_exec.go similarity index 98% rename from internal/api/docker/container_exec.go rename to internal/controller/api/docker/container_exec.go index 2704aac64..0b96c417a 100644 --- a/internal/api/docker/container_exec.go +++ b/internal/controller/api/docker/container_exec.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_exec_public_test.go b/internal/controller/api/docker/container_exec_public_test.go similarity index 98% rename from internal/api/docker/container_exec_public_test.go rename to internal/controller/api/docker/container_exec_public_test.go index 5b59f7342..d88eb4192 100644 --- a/internal/api/docker/container_exec_public_test.go +++ b/internal/controller/api/docker/container_exec_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -442,8 +442,8 @@ func (s *ContainerExecPublicTestSuite) TestPostNodeContainerDockerExecRBACHTTP() jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerExecTestSigningKey, }, diff --git a/internal/api/docker/container_image_remove.go b/internal/controller/api/docker/container_image_remove.go similarity index 97% rename from internal/api/docker/container_image_remove.go rename to internal/controller/api/docker/container_image_remove.go index 8df98dd70..f10bcf99e 100644 --- a/internal/api/docker/container_image_remove.go +++ b/internal/controller/api/docker/container_image_remove.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_image_remove_public_test.go b/internal/controller/api/docker/container_image_remove_public_test.go similarity index 97% rename from internal/api/docker/container_image_remove_public_test.go rename to internal/controller/api/docker/container_image_remove_public_test.go index debf424c6..2fac2eefe 100644 --- a/internal/api/docker/container_image_remove_public_test.go +++ b/internal/controller/api/docker/container_image_remove_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -377,8 +377,8 @@ func (s *ContainerImageRemovePublicTestSuite) TestDeleteNodeContainerDockerImage jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerImageRemoveTestSigningKey, }, diff --git a/internal/api/docker/container_inspect.go b/internal/controller/api/docker/container_inspect.go similarity index 98% rename from internal/api/docker/container_inspect.go rename to internal/controller/api/docker/container_inspect.go index 700b61778..8303082fd 100644 --- a/internal/api/docker/container_inspect.go +++ b/internal/controller/api/docker/container_inspect.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_inspect_public_test.go b/internal/controller/api/docker/container_inspect_public_test.go similarity index 97% rename from internal/api/docker/container_inspect_public_test.go rename to internal/controller/api/docker/container_inspect_public_test.go index 25488f12a..dfec173cf 100644 --- a/internal/api/docker/container_inspect_public_test.go +++ b/internal/controller/api/docker/container_inspect_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -320,8 +320,8 @@ func (s *ContainerInspectPublicTestSuite) TestGetNodeContainerDockerByIDRBACHTTP jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerInspectTestSigningKey, }, diff --git a/internal/api/docker/container_list.go b/internal/controller/api/docker/container_list.go similarity index 98% rename from internal/api/docker/container_list.go rename to internal/controller/api/docker/container_list.go index b4e4dbb49..2e43ef7e1 100644 --- a/internal/api/docker/container_list.go +++ b/internal/controller/api/docker/container_list.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_list_public_test.go b/internal/controller/api/docker/container_list_public_test.go similarity index 98% rename from internal/api/docker/container_list_public_test.go rename to internal/controller/api/docker/container_list_public_test.go index 61f9427b9..5a87008ca 100644 --- a/internal/api/docker/container_list_public_test.go +++ b/internal/controller/api/docker/container_list_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -418,8 +418,8 @@ func (s *ContainerListPublicTestSuite) TestGetNodeContainerDockerRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerListTestSigningKey, }, diff --git a/internal/api/docker/container_pull.go b/internal/controller/api/docker/container_pull.go similarity index 97% rename from internal/api/docker/container_pull.go rename to internal/controller/api/docker/container_pull.go index f42963c6e..e53f2776e 100644 --- a/internal/api/docker/container_pull.go +++ b/internal/controller/api/docker/container_pull.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_pull_public_test.go b/internal/controller/api/docker/container_pull_public_test.go similarity index 97% rename from internal/api/docker/container_pull_public_test.go rename to internal/controller/api/docker/container_pull_public_test.go index fd82c77a3..f36fd6eff 100644 --- a/internal/api/docker/container_pull_public_test.go +++ b/internal/controller/api/docker/container_pull_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -347,8 +347,8 @@ func (s *ContainerPullPublicTestSuite) TestPostNodeContainerDockerPullRBACHTTP() jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerPullTestSigningKey, }, diff --git a/internal/api/docker/container_remove.go b/internal/controller/api/docker/container_remove.go similarity index 97% rename from internal/api/docker/container_remove.go rename to internal/controller/api/docker/container_remove.go index 0693f0727..c88ee1fbe 100644 --- a/internal/api/docker/container_remove.go +++ b/internal/controller/api/docker/container_remove.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_remove_public_test.go b/internal/controller/api/docker/container_remove_public_test.go similarity index 97% rename from internal/api/docker/container_remove_public_test.go rename to internal/controller/api/docker/container_remove_public_test.go index a5130d5d5..e7a9bef4d 100644 --- a/internal/api/docker/container_remove_public_test.go +++ b/internal/controller/api/docker/container_remove_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -341,8 +341,8 @@ func (s *ContainerRemovePublicTestSuite) TestDeleteNodeContainerDockerByIDRBACHT jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerRemoveTestSigningKey, }, diff --git a/internal/api/docker/container_start.go b/internal/controller/api/docker/container_start.go similarity index 97% rename from internal/api/docker/container_start.go rename to internal/controller/api/docker/container_start.go index a3e4aa8da..9ff2fba58 100644 --- a/internal/api/docker/container_start.go +++ b/internal/controller/api/docker/container_start.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_start_public_test.go b/internal/controller/api/docker/container_start_public_test.go similarity index 97% rename from internal/api/docker/container_start_public_test.go rename to internal/controller/api/docker/container_start_public_test.go index 088c104a2..1c9656734 100644 --- a/internal/api/docker/container_start_public_test.go +++ b/internal/controller/api/docker/container_start_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -308,8 +308,8 @@ func (s *ContainerStartPublicTestSuite) TestPostNodeContainerDockerStartRBACHTTP jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerStartTestSigningKey, }, diff --git a/internal/api/docker/container_stop.go b/internal/controller/api/docker/container_stop.go similarity index 97% rename from internal/api/docker/container_stop.go rename to internal/controller/api/docker/container_stop.go index 46003dcf0..0b1e4d439 100644 --- a/internal/api/docker/container_stop.go +++ b/internal/controller/api/docker/container_stop.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/docker/gen" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/docker/container_stop_public_test.go b/internal/controller/api/docker/container_stop_public_test.go similarity index 97% rename from internal/api/docker/container_stop_public_test.go rename to internal/controller/api/docker/container_stop_public_test.go index fde52bf94..0cb8c4d5c 100644 --- a/internal/api/docker/container_stop_public_test.go +++ b/internal/controller/api/docker/container_stop_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apicontainer "github.com/retr0h/osapi/internal/api/docker" - "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apicontainer "github.com/retr0h/osapi/internal/controller/api/docker" + "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -377,8 +377,8 @@ func (s *ContainerStopPublicTestSuite) TestPostNodeContainerDockerStopRBACHTTP() jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacContainerStopTestSigningKey, }, diff --git a/internal/api/docker/convert.go b/internal/controller/api/docker/convert.go similarity index 100% rename from internal/api/docker/convert.go rename to internal/controller/api/docker/convert.go diff --git a/internal/api/docker/convert_test.go b/internal/controller/api/docker/convert_test.go similarity index 100% rename from internal/api/docker/convert_test.go rename to internal/controller/api/docker/convert_test.go diff --git a/internal/api/docker/gen/api.yaml b/internal/controller/api/docker/gen/api.yaml similarity index 100% rename from internal/api/docker/gen/api.yaml rename to internal/controller/api/docker/gen/api.yaml diff --git a/internal/api/docker/gen/cfg.yaml b/internal/controller/api/docker/gen/cfg.yaml similarity index 93% rename from internal/api/docker/gen/cfg.yaml rename to internal/controller/api/docker/gen/cfg.yaml index 042895cb1..35725ecf9 100644 --- a/internal/api/docker/gen/cfg.yaml +++ b/internal/controller/api/docker/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/api/docker/gen/docker.gen.go b/internal/controller/api/docker/gen/docker.gen.go similarity index 99% rename from internal/api/docker/gen/docker.gen.go rename to internal/controller/api/docker/gen/docker.gen.go index 2bf4fcc07..8e3bf54e8 100644 --- a/internal/api/docker/gen/docker.gen.go +++ b/internal/controller/api/docker/gen/docker.gen.go @@ -13,7 +13,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/docker/gen/generate.go b/internal/controller/api/docker/gen/generate.go similarity index 100% rename from internal/api/docker/gen/generate.go rename to internal/controller/api/docker/gen/generate.go diff --git a/internal/api/docker/test_ptr_public_test.go b/internal/controller/api/docker/test_ptr_public_test.go similarity index 100% rename from internal/api/docker/test_ptr_public_test.go rename to internal/controller/api/docker/test_ptr_public_test.go diff --git a/internal/api/docker/types.go b/internal/controller/api/docker/types.go similarity index 100% rename from internal/api/docker/types.go rename to internal/controller/api/docker/types.go diff --git a/internal/api/docker/validate.go b/internal/controller/api/docker/validate.go similarity index 100% rename from internal/api/docker/validate.go rename to internal/controller/api/docker/validate.go diff --git a/internal/api/file/file.go b/internal/controller/api/file/file.go similarity index 96% rename from internal/api/file/file.go rename to internal/controller/api/file/file.go index f5611db38..d67621a52 100644 --- a/internal/api/file/file.go +++ b/internal/controller/api/file/file.go @@ -24,7 +24,7 @@ package file import ( "log/slog" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // ensure that we've conformed to the `StrictServerInterface` with a compile-time check diff --git a/internal/api/file/file_delete.go b/internal/controller/api/file/file_delete.go similarity index 97% rename from internal/api/file/file_delete.go rename to internal/controller/api/file/file_delete.go index 7ffc88f5c..56b78422d 100644 --- a/internal/api/file/file_delete.go +++ b/internal/controller/api/file/file_delete.go @@ -28,7 +28,7 @@ import ( "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // DeleteFileByName delete a file from the Object Store. diff --git a/internal/api/file/file_delete_public_test.go b/internal/controller/api/file/file_delete_public_test.go similarity index 97% rename from internal/api/file/file_delete_public_test.go rename to internal/controller/api/file/file_delete_public_test.go index 900a9f46a..4755a87ba 100644 --- a/internal/api/file/file_delete_public_test.go +++ b/internal/controller/api/file/file_delete_public_test.go @@ -35,12 +35,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" ) type FileDeletePublicTestSuite struct { @@ -335,8 +335,8 @@ func (s *FileDeletePublicTestSuite) TestDeleteFileByNameRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDeleteTestSigningKey, }, diff --git a/internal/api/file/file_get.go b/internal/controller/api/file/file_get.go similarity index 97% rename from internal/api/file/file_get.go rename to internal/controller/api/file/file_get.go index d133b2203..80dcd986b 100644 --- a/internal/api/file/file_get.go +++ b/internal/controller/api/file/file_get.go @@ -30,7 +30,7 @@ import ( "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // GetFileByName get metadata for a specific file in the Object Store. diff --git a/internal/api/file/file_get_public_test.go b/internal/controller/api/file/file_get_public_test.go similarity index 97% rename from internal/api/file/file_get_public_test.go rename to internal/controller/api/file/file_get_public_test.go index 4ffb770b0..45ec781e4 100644 --- a/internal/api/file/file_get_public_test.go +++ b/internal/controller/api/file/file_get_public_test.go @@ -36,12 +36,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" ) type FileGetPublicTestSuite struct { @@ -330,8 +330,8 @@ func (s *FileGetPublicTestSuite) TestGetFileByNameRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacGetTestSigningKey, }, diff --git a/internal/api/file/file_list.go b/internal/controller/api/file/file_list.go similarity index 97% rename from internal/api/file/file_list.go rename to internal/controller/api/file/file_list.go index b14c08edb..808543134 100644 --- a/internal/api/file/file_list.go +++ b/internal/controller/api/file/file_list.go @@ -29,7 +29,7 @@ import ( "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // GetFiles list all files stored in the Object Store. diff --git a/internal/api/file/file_list_public_test.go b/internal/controller/api/file/file_list_public_test.go similarity index 97% rename from internal/api/file/file_list_public_test.go rename to internal/controller/api/file/file_list_public_test.go index f9e71d887..d88b21f66 100644 --- a/internal/api/file/file_list_public_test.go +++ b/internal/controller/api/file/file_list_public_test.go @@ -35,12 +35,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" ) type FileListPublicTestSuite struct { @@ -338,8 +338,8 @@ func (s *FileListPublicTestSuite) TestGetFilesRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacListTestSigningKey, }, diff --git a/internal/api/file/file_upload.go b/internal/controller/api/file/file_upload.go similarity index 98% rename from internal/api/file/file_upload.go rename to internal/controller/api/file/file_upload.go index cc93e9f27..9dfd4ac80 100644 --- a/internal/api/file/file_upload.go +++ b/internal/controller/api/file/file_upload.go @@ -32,7 +32,7 @@ import ( "github.com/nats-io/nats.go" "github.com/nats-io/nats.go/jetstream" - "github.com/retr0h/osapi/internal/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/file/file_upload_public_test.go b/internal/controller/api/file/file_upload_public_test.go similarity index 98% rename from internal/api/file/file_upload_public_test.go rename to internal/controller/api/file/file_upload_public_test.go index 284218e5f..69ee3421c 100644 --- a/internal/api/file/file_upload_public_test.go +++ b/internal/controller/api/file/file_upload_public_test.go @@ -39,12 +39,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apifile "github.com/retr0h/osapi/internal/api/file" - "github.com/retr0h/osapi/internal/api/file/gen" - "github.com/retr0h/osapi/internal/api/file/mocks" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apifile "github.com/retr0h/osapi/internal/controller/api/file" + "github.com/retr0h/osapi/internal/controller/api/file/gen" + "github.com/retr0h/osapi/internal/controller/api/file/mocks" ) type FileUploadPublicTestSuite struct { @@ -665,8 +665,8 @@ func (s *FileUploadPublicTestSuite) TestPostFileRBACHTTP() { objMock := tc.setupMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacUploadTestSigningKey, }, diff --git a/internal/api/file/gen/api.yaml b/internal/controller/api/file/gen/api.yaml similarity index 100% rename from internal/api/file/gen/api.yaml rename to internal/controller/api/file/gen/api.yaml diff --git a/internal/api/file/gen/cfg.yaml b/internal/controller/api/file/gen/cfg.yaml similarity index 93% rename from internal/api/file/gen/cfg.yaml rename to internal/controller/api/file/gen/cfg.yaml index 31b924dd1..c0f2fdae1 100644 --- a/internal/api/file/gen/cfg.yaml +++ b/internal/controller/api/file/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/api/file/gen/file.gen.go b/internal/controller/api/file/gen/file.gen.go similarity index 99% rename from internal/api/file/gen/file.gen.go rename to internal/controller/api/file/gen/file.gen.go index 3287df6f4..152a53f16 100644 --- a/internal/api/file/gen/file.gen.go +++ b/internal/controller/api/file/gen/file.gen.go @@ -14,7 +14,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/file/gen/generate.go b/internal/controller/api/file/gen/generate.go similarity index 100% rename from internal/api/file/gen/generate.go rename to internal/controller/api/file/gen/generate.go diff --git a/internal/api/file/mocks/generate.go b/internal/controller/api/file/mocks/generate.go similarity index 100% rename from internal/api/file/mocks/generate.go rename to internal/controller/api/file/mocks/generate.go diff --git a/internal/api/file/mocks/mocks.go b/internal/controller/api/file/mocks/mocks.go similarity index 100% rename from internal/api/file/mocks/mocks.go rename to internal/controller/api/file/mocks/mocks.go diff --git a/internal/api/file/mocks/types.gen.go b/internal/controller/api/file/mocks/types.gen.go similarity index 100% rename from internal/api/file/mocks/types.gen.go rename to internal/controller/api/file/mocks/types.gen.go diff --git a/internal/api/file/types.go b/internal/controller/api/file/types.go similarity index 100% rename from internal/api/file/types.go rename to internal/controller/api/file/types.go diff --git a/internal/api/file/validate.go b/internal/controller/api/file/validate.go similarity index 100% rename from internal/api/file/validate.go rename to internal/controller/api/file/validate.go diff --git a/internal/api/file/validate_test.go b/internal/controller/api/file/validate_test.go similarity index 100% rename from internal/api/file/validate_test.go rename to internal/controller/api/file/validate_test.go diff --git a/internal/api/gen/api.yaml b/internal/controller/api/gen/api.yaml similarity index 100% rename from internal/api/gen/api.yaml rename to internal/controller/api/gen/api.yaml diff --git a/internal/api/handler.go b/internal/controller/api/handler.go similarity index 100% rename from internal/api/handler.go rename to internal/controller/api/handler.go diff --git a/internal/api/handler_agent.go b/internal/controller/api/handler_agent.go similarity index 91% rename from internal/api/handler_agent.go rename to internal/controller/api/handler_agent.go index 52d0c18a6..a9c4e200a 100644 --- a/internal/api/handler_agent.go +++ b/internal/controller/api/handler_agent.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/agent" - agentGen "github.com/retr0h/osapi/internal/api/agent/gen" "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/controller/api/agent" + agentGen "github.com/retr0h/osapi/internal/controller/api/agent/gen" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetAgentHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, agentGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_audit.go b/internal/controller/api/handler_audit.go similarity index 91% rename from internal/api/handler_audit.go rename to internal/controller/api/handler_audit.go index 4cfb98517..2b56f13d2 100644 --- a/internal/api/handler_audit.go +++ b/internal/controller/api/handler_audit.go @@ -24,10 +24,10 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - audithandler "github.com/retr0h/osapi/internal/api/audit" - auditGen "github.com/retr0h/osapi/internal/api/audit/gen" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/authtoken" + audithandler "github.com/retr0h/osapi/internal/controller/api/audit" + auditGen "github.com/retr0h/osapi/internal/controller/api/audit/gen" ) // GetAuditHandler returns audit handler for registration. @@ -45,7 +45,7 @@ func (s *Server) GetAuditHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, auditGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_docker.go b/internal/controller/api/handler_docker.go similarity index 91% rename from internal/api/handler_docker.go rename to internal/controller/api/handler_docker.go index 1d672437d..50a3ec58b 100644 --- a/internal/api/handler_docker.go +++ b/internal/controller/api/handler_docker.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - docker "github.com/retr0h/osapi/internal/api/docker" - dockerGen "github.com/retr0h/osapi/internal/api/docker/gen" "github.com/retr0h/osapi/internal/authtoken" + docker "github.com/retr0h/osapi/internal/controller/api/docker" + dockerGen "github.com/retr0h/osapi/internal/controller/api/docker/gen" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetDockerHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, dockerGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_file.go b/internal/controller/api/handler_file.go similarity index 91% rename from internal/api/handler_file.go rename to internal/controller/api/handler_file.go index 8030d4628..0f4619f8d 100644 --- a/internal/api/handler_file.go +++ b/internal/controller/api/handler_file.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/file" - fileGen "github.com/retr0h/osapi/internal/api/file/gen" "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/controller/api/file" + fileGen "github.com/retr0h/osapi/internal/controller/api/file/gen" ) // GetFileHandler returns file handler for registration. @@ -44,7 +44,7 @@ func (s *Server) GetFileHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, fileGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_health.go b/internal/controller/api/handler_health.go similarity index 92% rename from internal/api/handler_health.go rename to internal/controller/api/handler_health.go index 18f68f80c..01a38a6c4 100644 --- a/internal/api/handler_health.go +++ b/internal/controller/api/handler_health.go @@ -26,9 +26,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/health" - healthGen "github.com/retr0h/osapi/internal/api/health/gen" "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/controller/api/health" + healthGen "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // unauthenticatedOperations lists operation IDs that skip auth. @@ -59,7 +59,7 @@ func (s *Server) GetHealthHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, healthGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_job.go b/internal/controller/api/handler_job.go similarity index 91% rename from internal/api/handler_job.go rename to internal/controller/api/handler_job.go index 74ce244af..951a4f2d8 100644 --- a/internal/api/handler_job.go +++ b/internal/controller/api/handler_job.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - apijob "github.com/retr0h/osapi/internal/api/job" - jobGen "github.com/retr0h/osapi/internal/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + jobGen "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetJobHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, jobGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_metrics.go b/internal/controller/api/handler_metrics.go similarity index 96% rename from internal/api/handler_metrics.go rename to internal/controller/api/handler_metrics.go index 69f69444e..8fdb04def 100644 --- a/internal/api/handler_metrics.go +++ b/internal/controller/api/handler_metrics.go @@ -25,7 +25,7 @@ import ( "github.com/labstack/echo/v4" - "github.com/retr0h/osapi/internal/api/metrics" + "github.com/retr0h/osapi/internal/controller/api/metrics" ) // GetMetricsHandler returns a handler that registers the Prometheus scrape endpoint. diff --git a/internal/api/handler_node.go b/internal/controller/api/handler_node.go similarity index 91% rename from internal/api/handler_node.go rename to internal/controller/api/handler_node.go index 2d502ea31..c54517807 100644 --- a/internal/api/handler_node.go +++ b/internal/controller/api/handler_node.go @@ -24,9 +24,9 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/node" - nodeGen "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/controller/api/node" + nodeGen "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job/client" ) @@ -45,7 +45,7 @@ func (s *Server) GetNodeHandler( return scopeMiddleware( handler, tokenManager, - s.appConfig.API.Server.Security.SigningKey, + s.appConfig.Controller.API.Security.SigningKey, nodeGen.BearerAuthScopes, s.customRoles, ) diff --git a/internal/api/handler_public_test.go b/internal/controller/api/handler_public_test.go similarity index 97% rename from internal/api/handler_public_test.go rename to internal/controller/api/handler_public_test.go index 5ea228d9a..5011b9e8d 100644 --- a/internal/api/handler_public_test.go +++ b/internal/controller/api/handler_public_test.go @@ -32,11 +32,11 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - fileMocks "github.com/retr0h/osapi/internal/api/file/mocks" - "github.com/retr0h/osapi/internal/api/health" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + fileMocks "github.com/retr0h/osapi/internal/controller/api/file/mocks" + "github.com/retr0h/osapi/internal/controller/api/health" "github.com/retr0h/osapi/internal/job/mocks" ) @@ -72,8 +72,8 @@ func (s *HandlerPublicTestSuite) SetupTest() { s.mockJobClient = mocks.NewMockJobClient(s.mockCtrl) appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-signing-key", }, diff --git a/internal/api/health/checker.go b/internal/controller/api/health/checker.go similarity index 100% rename from internal/api/health/checker.go rename to internal/controller/api/health/checker.go diff --git a/internal/api/health/checker_public_test.go b/internal/controller/api/health/checker_public_test.go similarity index 98% rename from internal/api/health/checker_public_test.go rename to internal/controller/api/health/checker_public_test.go index f58f9deb5..2e1e3e6c2 100644 --- a/internal/api/health/checker_public_test.go +++ b/internal/controller/api/health/checker_public_test.go @@ -27,7 +27,7 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api/health" + "github.com/retr0h/osapi/internal/controller/api/health" ) type CheckerPublicTestSuite struct { diff --git a/internal/api/health/gen/api.yaml b/internal/controller/api/health/gen/api.yaml similarity index 100% rename from internal/api/health/gen/api.yaml rename to internal/controller/api/health/gen/api.yaml diff --git a/internal/api/health/gen/cfg.yaml b/internal/controller/api/health/gen/cfg.yaml similarity index 93% rename from internal/api/health/gen/cfg.yaml rename to internal/controller/api/health/gen/cfg.yaml index 8c4514fba..778549d87 100644 --- a/internal/api/health/gen/cfg.yaml +++ b/internal/controller/api/health/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/api/health/gen/generate.go b/internal/controller/api/health/gen/generate.go similarity index 100% rename from internal/api/health/gen/generate.go rename to internal/controller/api/health/gen/generate.go diff --git a/internal/api/health/gen/health.gen.go b/internal/controller/api/health/gen/health.gen.go similarity index 99% rename from internal/api/health/gen/health.gen.go rename to internal/controller/api/health/gen/health.gen.go index 748988f27..5c5dd3923 100644 --- a/internal/api/health/gen/health.gen.go +++ b/internal/controller/api/health/gen/health.gen.go @@ -11,7 +11,7 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/health/health.go b/internal/controller/api/health/health.go similarity index 96% rename from internal/api/health/health.go rename to internal/controller/api/health/health.go index 1632bdbee..1917ab614 100644 --- a/internal/api/health/health.go +++ b/internal/controller/api/health/health.go @@ -25,7 +25,7 @@ import ( "log/slog" "time" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // ensure that we've conformed to the `StrictServerInterface` with a compile-time check diff --git a/internal/api/health/health_get.go b/internal/controller/api/health/health_get.go similarity index 95% rename from internal/api/health/health_get.go rename to internal/controller/api/health/health_get.go index 6bae78c61..a3056c625 100644 --- a/internal/api/health/health_get.go +++ b/internal/controller/api/health/health_get.go @@ -23,7 +23,7 @@ package health import ( "context" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // GetHealth liveness probe — always returns 200 if the process is running. diff --git a/internal/api/health/health_get_public_test.go b/internal/controller/api/health/health_get_public_test.go similarity index 94% rename from internal/api/health/health_get_public_test.go rename to internal/controller/api/health/health_get_public_test.go index 0ef6aedea..faa6de3e5 100644 --- a/internal/api/health/health_get_public_test.go +++ b/internal/controller/api/health/health_get_public_test.go @@ -31,10 +31,10 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/health" - "github.com/retr0h/osapi/internal/api/health/gen" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/health" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) type HealthGetPublicTestSuite struct { diff --git a/internal/api/health/health_ready_get.go b/internal/controller/api/health/health_ready_get.go similarity index 96% rename from internal/api/health/health_ready_get.go rename to internal/controller/api/health/health_ready_get.go index cc2e02dc7..10c090614 100644 --- a/internal/api/health/health_ready_get.go +++ b/internal/controller/api/health/health_ready_get.go @@ -23,7 +23,7 @@ package health import ( "context" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // GetHealthReady readiness probe — returns 200 when dependencies are reachable. diff --git a/internal/api/health/health_ready_get_public_test.go b/internal/controller/api/health/health_ready_get_public_test.go similarity index 96% rename from internal/api/health/health_ready_get_public_test.go rename to internal/controller/api/health/health_ready_get_public_test.go index 85d08ccbd..31f398c7e 100644 --- a/internal/api/health/health_ready_get_public_test.go +++ b/internal/controller/api/health/health_ready_get_public_test.go @@ -32,10 +32,10 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/health" - "github.com/retr0h/osapi/internal/api/health/gen" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/health" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) type HealthReadyGetPublicTestSuite struct { diff --git a/internal/api/health/health_status_get.go b/internal/controller/api/health/health_status_get.go similarity index 99% rename from internal/api/health/health_status_get.go rename to internal/controller/api/health/health_status_get.go index aa439e9a8..cd484c39b 100644 --- a/internal/api/health/health_status_get.go +++ b/internal/controller/api/health/health_status_get.go @@ -25,7 +25,7 @@ import ( "sync" "time" - "github.com/retr0h/osapi/internal/api/health/gen" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) // GetHealthStatus returns per-component health status with system metrics (authenticated). diff --git a/internal/api/health/health_status_get_public_test.go b/internal/controller/api/health/health_status_get_public_test.go similarity index 99% rename from internal/api/health/health_status_get_public_test.go rename to internal/controller/api/health/health_status_get_public_test.go index 136a7b61f..e9d48506a 100644 --- a/internal/api/health/health_status_get_public_test.go +++ b/internal/controller/api/health/health_status_get_public_test.go @@ -32,11 +32,11 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/health" - "github.com/retr0h/osapi/internal/api/health/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/health" + "github.com/retr0h/osapi/internal/controller/api/health/gen" ) type stubChecker struct{} @@ -782,8 +782,8 @@ func (s *HealthStatusGetPublicTestSuite) TestGetHealthStatusRBACHTTP() { } appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacHealthStatusTestSigningKey, }, diff --git a/internal/api/health/types.go b/internal/controller/api/health/types.go similarity index 100% rename from internal/api/health/types.go rename to internal/controller/api/health/types.go diff --git a/internal/api/job/gen/api.yaml b/internal/controller/api/job/gen/api.yaml similarity index 100% rename from internal/api/job/gen/api.yaml rename to internal/controller/api/job/gen/api.yaml diff --git a/internal/api/job/gen/cfg.yaml b/internal/controller/api/job/gen/cfg.yaml similarity index 93% rename from internal/api/job/gen/cfg.yaml rename to internal/controller/api/job/gen/cfg.yaml index a875ba7a1..b65457ef7 100644 --- a/internal/api/job/gen/cfg.yaml +++ b/internal/controller/api/job/gen/cfg.yaml @@ -26,6 +26,6 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: skip-prune: true diff --git a/internal/api/job/gen/generate.go b/internal/controller/api/job/gen/generate.go similarity index 100% rename from internal/api/job/gen/generate.go rename to internal/controller/api/job/gen/generate.go diff --git a/internal/api/job/gen/job.gen.go b/internal/controller/api/job/gen/job.gen.go similarity index 99% rename from internal/api/job/gen/job.gen.go rename to internal/controller/api/job/gen/job.gen.go index d09a7c2a3..09e468031 100644 --- a/internal/api/job/gen/job.gen.go +++ b/internal/controller/api/job/gen/job.gen.go @@ -13,7 +13,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/job/job.go b/internal/controller/api/job/job.go similarity index 96% rename from internal/api/job/job.go rename to internal/controller/api/job/job.go index 9d6437306..06f0552c2 100644 --- a/internal/api/job/job.go +++ b/internal/controller/api/job/job.go @@ -24,7 +24,7 @@ package job import ( "log/slog" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/job/job_delete.go b/internal/controller/api/job/job_delete.go similarity index 96% rename from internal/api/job/job_delete.go rename to internal/controller/api/job/job_delete.go index 7af15405e..681d5823b 100644 --- a/internal/api/job/job_delete.go +++ b/internal/controller/api/job/job_delete.go @@ -25,7 +25,7 @@ import ( "log/slog" "strings" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" ) // DeleteJobByID deletes a specific job by its ID. diff --git a/internal/api/job/job_delete_public_test.go b/internal/controller/api/job/job_delete_public_test.go similarity index 97% rename from internal/api/job/job_delete_public_test.go rename to internal/controller/api/job/job_delete_public_test.go index e0de9ba0f..957dff0b7 100644 --- a/internal/api/job/job_delete_public_test.go +++ b/internal/controller/api/job/job_delete_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) @@ -253,8 +253,8 @@ func (s *JobDeletePublicTestSuite) TestDeleteJobByIDRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobDeleteTestSigningKey, }, diff --git a/internal/api/job/job_get.go b/internal/controller/api/job/job_get.go similarity index 98% rename from internal/api/job/job_get.go rename to internal/controller/api/job/job_get.go index cd3c6610e..daabb3893 100644 --- a/internal/api/job/job_get.go +++ b/internal/controller/api/job/job_get.go @@ -28,7 +28,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" ) // GetJobByID retrieves details of a specific job by its ID. diff --git a/internal/api/job/job_get_public_test.go b/internal/controller/api/job/job_get_public_test.go similarity index 98% rename from internal/api/job/job_get_public_test.go rename to internal/controller/api/job/job_get_public_test.go index 67eaf5abc..51aaabd8f 100644 --- a/internal/api/job/job_get_public_test.go +++ b/internal/controller/api/job/job_get_public_test.go @@ -36,11 +36,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" ) @@ -587,8 +587,8 @@ func (s *JobGetPublicTestSuite) TestGetJobByIDRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobGetTestSigningKey, }, diff --git a/internal/api/job/job_list.go b/internal/controller/api/job/job_list.go similarity index 98% rename from internal/api/job/job_list.go rename to internal/controller/api/job/job_list.go index 60c8b62de..b89820dcf 100644 --- a/internal/api/job/job_list.go +++ b/internal/controller/api/job/job_list.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/job/client" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/job/job_list_public_test.go b/internal/controller/api/job/job_list_public_test.go similarity index 98% rename from internal/api/job/job_list_public_test.go rename to internal/controller/api/job/job_list_public_test.go index 104896538..ed4ce5aea 100644 --- a/internal/api/job/job_list_public_test.go +++ b/internal/controller/api/job/job_list_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" jobtypes "github.com/retr0h/osapi/internal/job" jobclient "github.com/retr0h/osapi/internal/job/client" jobmocks "github.com/retr0h/osapi/internal/job/mocks" @@ -509,8 +509,8 @@ func (s *JobListPublicTestSuite) TestListJobsRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobListTestSigningKey, }, diff --git a/internal/api/job/job_retry.go b/internal/controller/api/job/job_retry.go similarity index 97% rename from internal/api/job/job_retry.go rename to internal/controller/api/job/job_retry.go index 0d98392f3..51150bf6b 100644 --- a/internal/api/job/job_retry.go +++ b/internal/controller/api/job/job_retry.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/job/gen" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/job/job_retry_public_test.go b/internal/controller/api/job/job_retry_public_test.go similarity index 98% rename from internal/api/job/job_retry_public_test.go rename to internal/controller/api/job/job_retry_public_test.go index 6f735a980..10012a859 100644 --- a/internal/api/job/job_retry_public_test.go +++ b/internal/controller/api/job/job_retry_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/google/uuid" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apijob "github.com/retr0h/osapi/internal/api/job" - "github.com/retr0h/osapi/internal/api/job/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apijob "github.com/retr0h/osapi/internal/controller/api/job" + "github.com/retr0h/osapi/internal/controller/api/job/gen" "github.com/retr0h/osapi/internal/job/client" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -383,8 +383,8 @@ func (s *JobRetryPublicTestSuite) TestRetryJobByIDRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacJobRetryTestSigningKey, }, diff --git a/internal/api/job/types.go b/internal/controller/api/job/types.go similarity index 100% rename from internal/api/job/types.go rename to internal/controller/api/job/types.go diff --git a/internal/api/metrics/metrics.go b/internal/controller/api/metrics/metrics.go similarity index 100% rename from internal/api/metrics/metrics.go rename to internal/controller/api/metrics/metrics.go diff --git a/internal/api/metrics/metrics_get.go b/internal/controller/api/metrics/metrics_get.go similarity index 100% rename from internal/api/metrics/metrics_get.go rename to internal/controller/api/metrics/metrics_get.go diff --git a/internal/api/metrics/metrics_get_public_test.go b/internal/controller/api/metrics/metrics_get_public_test.go similarity index 97% rename from internal/api/metrics/metrics_get_public_test.go rename to internal/controller/api/metrics/metrics_get_public_test.go index 88c9e90c0..835c06ba2 100644 --- a/internal/api/metrics/metrics_get_public_test.go +++ b/internal/controller/api/metrics/metrics_get_public_test.go @@ -30,9 +30,9 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - "github.com/retr0h/osapi/internal/api/metrics" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + "github.com/retr0h/osapi/internal/controller/api/metrics" ) type MetricsGetPublicTestSuite struct { diff --git a/internal/api/metrics/types.go b/internal/controller/api/metrics/types.go similarity index 100% rename from internal/api/metrics/types.go rename to internal/controller/api/metrics/types.go diff --git a/internal/api/middleware.go b/internal/controller/api/middleware.go similarity index 98% rename from internal/api/middleware.go rename to internal/controller/api/middleware.go index a7626089b..78f583dbe 100644 --- a/internal/api/middleware.go +++ b/internal/controller/api/middleware.go @@ -28,8 +28,8 @@ import ( "github.com/labstack/echo/v4" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" - "github.com/retr0h/osapi/internal/api/common/gen" "github.com/retr0h/osapi/internal/authtoken" + "github.com/retr0h/osapi/internal/controller/api/common/gen" ) // Context key constants for injecting user identity into handlers. diff --git a/internal/api/middleware_audit.go b/internal/controller/api/middleware_audit.go similarity index 100% rename from internal/api/middleware_audit.go rename to internal/controller/api/middleware_audit.go diff --git a/internal/api/middleware_audit_test.go b/internal/controller/api/middleware_audit_test.go similarity index 100% rename from internal/api/middleware_audit_test.go rename to internal/controller/api/middleware_audit_test.go diff --git a/internal/api/middleware_test.go b/internal/controller/api/middleware_test.go similarity index 100% rename from internal/api/middleware_test.go rename to internal/controller/api/middleware_test.go diff --git a/internal/api/node/command_exec_post.go b/internal/controller/api/node/command_exec_post.go similarity index 98% rename from internal/api/node/command_exec_post.go rename to internal/controller/api/node/command_exec_post.go index 75e5bf050..8cd738bca 100644 --- a/internal/api/node/command_exec_post.go +++ b/internal/controller/api/node/command_exec_post.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/command_exec_post_public_test.go b/internal/controller/api/node/command_exec_post_public_test.go similarity index 98% rename from internal/api/node/command_exec_post_public_test.go rename to internal/controller/api/node/command_exec_post_public_test.go index 76f8c0d4c..b9de9f9e5 100644 --- a/internal/api/node/command_exec_post_public_test.go +++ b/internal/controller/api/node/command_exec_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/command" "github.com/retr0h/osapi/internal/validation" @@ -538,8 +538,8 @@ func (s *CommandExecPostPublicTestSuite) TestPostCommandExecRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacExecTestSigningKey, }, diff --git a/internal/api/node/command_shell_post.go b/internal/controller/api/node/command_shell_post.go similarity index 98% rename from internal/api/node/command_shell_post.go rename to internal/controller/api/node/command_shell_post.go index 05beb722b..8a43a34b4 100644 --- a/internal/api/node/command_shell_post.go +++ b/internal/controller/api/node/command_shell_post.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/command_shell_post_public_test.go b/internal/controller/api/node/command_shell_post_public_test.go similarity index 98% rename from internal/api/node/command_shell_post_public_test.go rename to internal/controller/api/node/command_shell_post_public_test.go index c04e930d6..bb94ca8c4 100644 --- a/internal/api/node/command_shell_post_public_test.go +++ b/internal/controller/api/node/command_shell_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/command" "github.com/retr0h/osapi/internal/validation" @@ -514,8 +514,8 @@ func (s *CommandShellPostPublicTestSuite) TestPostCommandShellRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacShellTestSigningKey, }, diff --git a/internal/api/node/file_deploy_post.go b/internal/controller/api/node/file_deploy_post.go similarity index 97% rename from internal/api/node/file_deploy_post.go rename to internal/controller/api/node/file_deploy_post.go index 79f249719..4656654d1 100644 --- a/internal/api/node/file_deploy_post.go +++ b/internal/controller/api/node/file_deploy_post.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/file_deploy_post_public_test.go b/internal/controller/api/node/file_deploy_post_public_test.go similarity index 98% rename from internal/api/node/file_deploy_post_public_test.go rename to internal/controller/api/node/file_deploy_post_public_test.go index d3c41dfcc..472dc038e 100644 --- a/internal/api/node/file_deploy_post_public_test.go +++ b/internal/controller/api/node/file_deploy_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" ) @@ -451,8 +451,8 @@ func (s *FileDeployPostPublicTestSuite) TestPostNodeFileDeployRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacFileDeployTestSigningKey, }, diff --git a/internal/api/node/file_status_post.go b/internal/controller/api/node/file_status_post.go similarity index 97% rename from internal/api/node/file_status_post.go rename to internal/controller/api/node/file_status_post.go index b02b24487..76f699f59 100644 --- a/internal/api/node/file_status_post.go +++ b/internal/controller/api/node/file_status_post.go @@ -24,7 +24,7 @@ import ( "context" "log/slog" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/file_status_post_public_test.go b/internal/controller/api/node/file_status_post_public_test.go similarity index 97% rename from internal/api/node/file_status_post_public_test.go rename to internal/controller/api/node/file_status_post_public_test.go index 51a4acc93..a1239d6da 100644 --- a/internal/api/node/file_status_post_public_test.go +++ b/internal/controller/api/node/file_status_post_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/file" "github.com/retr0h/osapi/internal/validation" @@ -380,8 +380,8 @@ func (s *FileStatusPostPublicTestSuite) TestPostNodeFileStatusRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacFileStatusTestSigningKey, }, diff --git a/internal/api/node/gen/api.yaml b/internal/controller/api/node/gen/api.yaml similarity index 100% rename from internal/api/node/gen/api.yaml rename to internal/controller/api/node/gen/api.yaml diff --git a/internal/api/node/gen/cfg.yaml b/internal/controller/api/node/gen/cfg.yaml similarity index 93% rename from internal/api/node/gen/cfg.yaml rename to internal/controller/api/node/gen/cfg.yaml index 62bf41194..dd2c0754c 100644 --- a/internal/api/node/gen/cfg.yaml +++ b/internal/controller/api/node/gen/cfg.yaml @@ -26,7 +26,7 @@ generate: echo-server: true strict-server: true import-mapping: - ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/api/common/gen + ../../common/gen/api.yaml: github.com/retr0h/osapi/internal/controller/api/common/gen output-options: # to make sure that all types are generated skip-prune: true diff --git a/internal/api/node/gen/generate.go b/internal/controller/api/node/gen/generate.go similarity index 100% rename from internal/api/node/gen/generate.go rename to internal/controller/api/node/gen/generate.go diff --git a/internal/api/node/gen/node.gen.go b/internal/controller/api/node/gen/node.gen.go similarity index 99% rename from internal/api/node/gen/node.gen.go rename to internal/controller/api/node/gen/node.gen.go index 0ccef9507..678e09b3d 100644 --- a/internal/api/node/gen/node.gen.go +++ b/internal/controller/api/node/gen/node.gen.go @@ -13,7 +13,7 @@ import ( "github.com/oapi-codegen/runtime" strictecho "github.com/oapi-codegen/runtime/strictmiddleware/echo" openapi_types "github.com/oapi-codegen/runtime/types" - externalRef0 "github.com/retr0h/osapi/internal/api/common/gen" + externalRef0 "github.com/retr0h/osapi/internal/controller/api/common/gen" ) const ( diff --git a/internal/api/node/network_dns_get_by_interface.go b/internal/controller/api/node/network_dns_get_by_interface.go similarity index 98% rename from internal/api/node/network_dns_get_by_interface.go rename to internal/controller/api/node/network_dns_get_by_interface.go index a9ba77278..c9f4c46b8 100644 --- a/internal/api/node/network_dns_get_by_interface.go +++ b/internal/controller/api/node/network_dns_get_by_interface.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/network_dns_get_by_interface_public_test.go b/internal/controller/api/node/network_dns_get_by_interface_public_test.go similarity index 98% rename from internal/api/node/network_dns_get_by_interface_public_test.go rename to internal/controller/api/node/network_dns_get_by_interface_public_test.go index 5659e94e0..3d20f3edd 100644 --- a/internal/api/node/network_dns_get_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_get_by_interface_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/network/dns" "github.com/retr0h/osapi/internal/validation" @@ -454,8 +454,8 @@ func (s *NetworkDNSGetByInterfacePublicTestSuite) TestGetNetworkDNSByInterfaceRB jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDNSGetTestSigningKey, }, diff --git a/internal/api/node/network_dns_put_by_interface.go b/internal/controller/api/node/network_dns_put_by_interface.go similarity index 98% rename from internal/api/node/network_dns_put_by_interface.go rename to internal/controller/api/node/network_dns_put_by_interface.go index 97e3d1c49..737cd53a8 100644 --- a/internal/api/node/network_dns_put_by_interface.go +++ b/internal/controller/api/node/network_dns_put_by_interface.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/validation" ) diff --git a/internal/api/node/network_dns_put_by_interface_public_test.go b/internal/controller/api/node/network_dns_put_by_interface_public_test.go similarity index 98% rename from internal/api/node/network_dns_put_by_interface_public_test.go rename to internal/controller/api/node/network_dns_put_by_interface_public_test.go index 1bb8b0de4..9eb571b80 100644 --- a/internal/api/node/network_dns_put_by_interface_public_test.go +++ b/internal/controller/api/node/network_dns_put_by_interface_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" ) @@ -529,8 +529,8 @@ func (s *NetworkDNSPutByInterfacePublicTestSuite) TestPutNetworkDNSRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDNSPutTestSigningKey, }, diff --git a/internal/api/node/network_ping_post.go b/internal/controller/api/node/network_ping_post.go similarity index 98% rename from internal/api/node/network_ping_post.go rename to internal/controller/api/node/network_ping_post.go index d2a95aef4..adf846cb9 100644 --- a/internal/api/node/network_ping_post.go +++ b/internal/controller/api/node/network_ping_post.go @@ -28,7 +28,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/network/ping" "github.com/retr0h/osapi/internal/validation" diff --git a/internal/api/node/network_ping_post_public_test.go b/internal/controller/api/node/network_ping_post_public_test.go similarity index 98% rename from internal/api/node/network_ping_post_public_test.go rename to internal/controller/api/node/network_ping_post_public_test.go index c2ee2dd72..8b4d70b44 100644 --- a/internal/api/node/network_ping_post_public_test.go +++ b/internal/controller/api/node/network_ping_post_public_test.go @@ -35,11 +35,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/network/ping" "github.com/retr0h/osapi/internal/validation" @@ -509,8 +509,8 @@ func (s *NetworkPingPostPublicTestSuite) TestPostNetworkPingRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacPingTestSigningKey, }, diff --git a/internal/api/node/node.go b/internal/controller/api/node/node.go similarity index 96% rename from internal/api/node/node.go rename to internal/controller/api/node/node.go index 2cf4bd8e7..de7631285 100644 --- a/internal/api/node/node.go +++ b/internal/controller/api/node/node.go @@ -24,7 +24,7 @@ package node import ( "log/slog" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job/client" ) diff --git a/internal/api/node/node_disk_get.go b/internal/controller/api/node/node_disk_get.go similarity index 98% rename from internal/api/node/node_disk_get.go rename to internal/controller/api/node/node_disk_get.go index 60ce97fe2..0b0edbd0d 100644 --- a/internal/api/node/node_disk_get.go +++ b/internal/controller/api/node/node_disk_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_disk_get_public_test.go b/internal/controller/api/node/node_disk_get_public_test.go similarity index 97% rename from internal/api/node/node_disk_get_public_test.go rename to internal/controller/api/node/node_disk_get_public_test.go index 86c93a7be..6b2926670 100644 --- a/internal/api/node/node_disk_get_public_test.go +++ b/internal/controller/api/node/node_disk_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/disk" @@ -368,8 +368,8 @@ func (s *NodeDiskGetPublicTestSuite) TestGetNodeDiskRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacDiskTestSigningKey, }, diff --git a/internal/api/node/node_hostname_get.go b/internal/controller/api/node/node_hostname_get.go similarity index 98% rename from internal/api/node/node_hostname_get.go rename to internal/controller/api/node/node_hostname_get.go index d15768fc6..39b1b6a25 100644 --- a/internal/api/node/node_hostname_get.go +++ b/internal/controller/api/node/node_hostname_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_hostname_get_public_test.go b/internal/controller/api/node/node_hostname_get_public_test.go similarity index 98% rename from internal/api/node/node_hostname_get_public_test.go rename to internal/controller/api/node/node_hostname_get_public_test.go index 60089ecba..1227a11b9 100644 --- a/internal/api/node/node_hostname_get_public_test.go +++ b/internal/controller/api/node/node_hostname_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -385,8 +385,8 @@ func (s *NodeHostnameGetPublicTestSuite) TestGetNodeHostnameRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacTestSigningKey, }, diff --git a/internal/api/node/node_load_get.go b/internal/controller/api/node/node_load_get.go similarity index 98% rename from internal/api/node/node_load_get.go rename to internal/controller/api/node/node_load_get.go index e98eea85e..fe955505b 100644 --- a/internal/api/node/node_load_get.go +++ b/internal/controller/api/node/node_load_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/node/load" ) diff --git a/internal/api/node/node_load_get_public_test.go b/internal/controller/api/node/node_load_get_public_test.go similarity index 97% rename from internal/api/node/node_load_get_public_test.go rename to internal/controller/api/node/node_load_get_public_test.go index 2307bf650..cb1142c94 100644 --- a/internal/api/node/node_load_get_public_test.go +++ b/internal/controller/api/node/node_load_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/load" "github.com/retr0h/osapi/internal/validation" @@ -347,8 +347,8 @@ func (s *NodeLoadGetPublicTestSuite) TestGetNodeLoadRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacLoadTestSigningKey, }, diff --git a/internal/api/node/node_memory_get.go b/internal/controller/api/node/node_memory_get.go similarity index 98% rename from internal/api/node/node_memory_get.go rename to internal/controller/api/node/node_memory_get.go index 46a0369f8..690294a53 100644 --- a/internal/api/node/node_memory_get.go +++ b/internal/controller/api/node/node_memory_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/node/mem" ) diff --git a/internal/api/node/node_memory_get_public_test.go b/internal/controller/api/node/node_memory_get_public_test.go similarity index 97% rename from internal/api/node/node_memory_get_public_test.go rename to internal/controller/api/node/node_memory_get_public_test.go index 1a8f3f027..089c3234d 100644 --- a/internal/api/node/node_memory_get_public_test.go +++ b/internal/controller/api/node/node_memory_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/mem" "github.com/retr0h/osapi/internal/validation" @@ -347,8 +347,8 @@ func (s *NodeMemoryGetPublicTestSuite) TestGetNodeMemoryRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacMemoryTestSigningKey, }, diff --git a/internal/api/node/node_os_get.go b/internal/controller/api/node/node_os_get.go similarity index 98% rename from internal/api/node/node_os_get.go rename to internal/controller/api/node/node_os_get.go index 1d9eaaf46..9549be4ad 100644 --- a/internal/api/node/node_os_get.go +++ b/internal/controller/api/node/node_os_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" "github.com/retr0h/osapi/internal/provider/node/host" ) diff --git a/internal/api/node/node_os_get_public_test.go b/internal/controller/api/node/node_os_get_public_test.go similarity index 97% rename from internal/api/node/node_os_get_public_test.go rename to internal/controller/api/node/node_os_get_public_test.go index 04c8d5463..9c006a112 100644 --- a/internal/api/node/node_os_get_public_test.go +++ b/internal/controller/api/node/node_os_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/host" "github.com/retr0h/osapi/internal/validation" @@ -346,8 +346,8 @@ func (s *NodeOSGetPublicTestSuite) TestGetNodeOSRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacOSTestSigningKey, }, diff --git a/internal/api/node/node_status_get.go b/internal/controller/api/node/node_status_get.go similarity index 98% rename from internal/api/node/node_status_get.go rename to internal/controller/api/node/node_status_get.go index 62eedc0c1..17332192d 100644 --- a/internal/api/node/node_status_get.go +++ b/internal/controller/api/node/node_status_get.go @@ -27,7 +27,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_status_get_public_test.go b/internal/controller/api/node/node_status_get_public_test.go similarity index 98% rename from internal/api/node/node_status_get_public_test.go rename to internal/controller/api/node/node_status_get_public_test.go index ba71ce29c..deebf1c69 100644 --- a/internal/api/node/node_status_get_public_test.go +++ b/internal/controller/api/node/node_status_get_public_test.go @@ -34,11 +34,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" jobtypes "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/provider/node/disk" @@ -456,8 +456,8 @@ func (s *NodeStatusGetPublicTestSuite) TestGetNodeStatusRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacStatusTestSigningKey, }, diff --git a/internal/api/node/node_status_get_test.go b/internal/controller/api/node/node_status_get_test.go similarity index 100% rename from internal/api/node/node_status_get_test.go rename to internal/controller/api/node/node_status_get_test.go diff --git a/internal/api/node/node_uptime_get.go b/internal/controller/api/node/node_uptime_get.go similarity index 98% rename from internal/api/node/node_uptime_get.go rename to internal/controller/api/node/node_uptime_get.go index a4f39aa2d..17e44f28d 100644 --- a/internal/api/node/node_uptime_get.go +++ b/internal/controller/api/node/node_uptime_get.go @@ -26,7 +26,7 @@ import ( "github.com/google/uuid" - "github.com/retr0h/osapi/internal/api/node/gen" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" ) diff --git a/internal/api/node/node_uptime_get_public_test.go b/internal/controller/api/node/node_uptime_get_public_test.go similarity index 97% rename from internal/api/node/node_uptime_get_public_test.go rename to internal/controller/api/node/node_uptime_get_public_test.go index 9757086ef..67b5baa10 100644 --- a/internal/api/node/node_uptime_get_public_test.go +++ b/internal/controller/api/node/node_uptime_get_public_test.go @@ -33,11 +33,11 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" - apinode "github.com/retr0h/osapi/internal/api/node" - "github.com/retr0h/osapi/internal/api/node/gen" "github.com/retr0h/osapi/internal/authtoken" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" + apinode "github.com/retr0h/osapi/internal/controller/api/node" + "github.com/retr0h/osapi/internal/controller/api/node/gen" "github.com/retr0h/osapi/internal/job" jobmocks "github.com/retr0h/osapi/internal/job/mocks" "github.com/retr0h/osapi/internal/validation" @@ -345,8 +345,8 @@ func (s *NodeUptimeGetPublicTestSuite) TestGetNodeUptimeRBACHTTP() { jobMock := tc.setupJobMock() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: rbacUptimeTestSigningKey, }, diff --git a/internal/api/node/types.go b/internal/controller/api/node/types.go similarity index 100% rename from internal/api/node/types.go rename to internal/controller/api/node/types.go diff --git a/internal/api/node/validate.go b/internal/controller/api/node/validate.go similarity index 100% rename from internal/api/node/validate.go rename to internal/controller/api/node/validate.go diff --git a/internal/api/server.go b/internal/controller/api/server.go similarity index 93% rename from internal/api/server.go rename to internal/controller/api/server.go index 3194d4fcf..2dcd0956d 100644 --- a/internal/api/server.go +++ b/internal/controller/api/server.go @@ -46,7 +46,7 @@ func New( // Initialize CORS configuration corsConfig := middleware.CORSConfig{} - allowOrigins := appConfig.API.Server.Security.CORS.AllowOrigins + allowOrigins := appConfig.Controller.API.Security.CORS.AllowOrigins if len(allowOrigins) > 0 { corsConfig.AllowOrigins = allowOrigins } @@ -60,7 +60,7 @@ func New( // Build custom roles map from config. var customRoles map[string][]string - if cfgRoles := appConfig.API.Server.Security.Roles; len(cfgRoles) > 0 { + if cfgRoles := appConfig.Controller.API.Security.Roles; len(cfgRoles) > 0 { customRoles = make(map[string][]string, len(cfgRoles)) for name, role := range cfgRoles { customRoles[name] = role.Permissions @@ -90,7 +90,7 @@ func New( func (s *Server) Start() { go func() { s.logger.Info("starting server") - listenAddr := fmt.Sprintf(":%d", s.appConfig.API.Port) + listenAddr := fmt.Sprintf(":%d", s.appConfig.Controller.API.Port) if err := s.Echo.Start(listenAddr); err != nil && err != http.ErrServerClosed { s.logger.Error( "failed to start server", diff --git a/internal/api/server_public_test.go b/internal/controller/api/server_public_test.go similarity index 92% rename from internal/api/server_public_test.go rename to internal/controller/api/server_public_test.go index 0cb251b4f..32fd402f9 100644 --- a/internal/api/server_public_test.go +++ b/internal/controller/api/server_public_test.go @@ -32,9 +32,9 @@ import ( "github.com/labstack/echo/v4" "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/api" auditstore "github.com/retr0h/osapi/internal/audit" "github.com/retr0h/osapi/internal/config" + "github.com/retr0h/osapi/internal/controller/api" ) type ServerPublicTestSuite struct { @@ -50,8 +50,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with default config", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", }, @@ -62,8 +62,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with custom roles", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", Roles: map[string]config.CustomRole{ @@ -79,8 +79,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with audit store option", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", }, @@ -94,8 +94,8 @@ func (s *ServerPublicTestSuite) TestNew() { { name: "creates server with CORS origins", appConfig: config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Security: config.ServerSecurity{ SigningKey: "test-key", CORS: config.CORS{ @@ -158,8 +158,8 @@ func (s *ServerPublicTestSuite) TestStartAndStop() { for _, tt := range tests { s.Run(tt.name, func() { appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Port: 0, Security: config.ServerSecurity{ SigningKey: "test-key", @@ -199,8 +199,8 @@ func (s *ServerPublicTestSuite) TestStartErrorPath() { port := ln.Addr().(*net.TCPAddr).Port appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Port: port, Security: config.ServerSecurity{ SigningKey: "test-key", @@ -234,8 +234,8 @@ func (s *ServerPublicTestSuite) TestStopErrorPath() { _ = ln.Close() appConfig := config.Config{ - API: config.API{ - Server: config.Server{ + Controller: config.Controller{ + API: config.APIServer{ Port: port, Security: config.ServerSecurity{ SigningKey: "test-key", diff --git a/internal/api/types.go b/internal/controller/api/types.go similarity index 100% rename from internal/api/types.go rename to internal/controller/api/types.go diff --git a/internal/api/heartbeat.go b/internal/controller/heartbeat.go similarity index 98% rename from internal/api/heartbeat.go rename to internal/controller/heartbeat.go index 62d0a7462..f5a61df6c 100644 --- a/internal/api/heartbeat.go +++ b/internal/controller/heartbeat.go @@ -18,7 +18,8 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package api +// Package controller provides the control plane process components. +package controller import ( "context" diff --git a/internal/api/heartbeat_test.go b/internal/controller/heartbeat_test.go similarity index 99% rename from internal/api/heartbeat_test.go rename to internal/controller/heartbeat_test.go index f001c46e2..07bfb1efe 100644 --- a/internal/api/heartbeat_test.go +++ b/internal/controller/heartbeat_test.go @@ -18,7 +18,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -package api +package controller import ( "context" diff --git a/internal/notify/log.go b/internal/controller/notify/log.go similarity index 100% rename from internal/notify/log.go rename to internal/controller/notify/log.go diff --git a/internal/notify/log_public_test.go b/internal/controller/notify/log_public_test.go similarity index 97% rename from internal/notify/log_public_test.go rename to internal/controller/notify/log_public_test.go index f84811d6b..3bda8ff92 100644 --- a/internal/notify/log_public_test.go +++ b/internal/controller/notify/log_public_test.go @@ -28,7 +28,7 @@ import ( "github.com/stretchr/testify/suite" - "github.com/retr0h/osapi/internal/notify" + "github.com/retr0h/osapi/internal/controller/notify" ) type LogNotifierPublicTestSuite struct { diff --git a/internal/notify/mocks/generate.go b/internal/controller/notify/mocks/generate.go similarity index 100% rename from internal/notify/mocks/generate.go rename to internal/controller/notify/mocks/generate.go diff --git a/internal/notify/mocks/types.gen.go b/internal/controller/notify/mocks/types.gen.go similarity index 95% rename from internal/notify/mocks/types.gen.go rename to internal/controller/notify/mocks/types.gen.go index c6f568158..1801f4d61 100644 --- a/internal/notify/mocks/types.gen.go +++ b/internal/controller/notify/mocks/types.gen.go @@ -9,7 +9,7 @@ import ( reflect "reflect" gomock "github.com/golang/mock/gomock" - notify "github.com/retr0h/osapi/internal/notify" + notify "github.com/retr0h/osapi/internal/controller/notify" ) // MockNotifier is a mock of Notifier interface. diff --git a/internal/notify/types.go b/internal/controller/notify/types.go similarity index 100% rename from internal/notify/types.go rename to internal/controller/notify/types.go diff --git a/internal/notify/watcher.go b/internal/controller/notify/watcher.go similarity index 100% rename from internal/notify/watcher.go rename to internal/controller/notify/watcher.go diff --git a/internal/notify/watcher_test.go b/internal/controller/notify/watcher_test.go similarity index 100% rename from internal/notify/watcher_test.go rename to internal/controller/notify/watcher_test.go diff --git a/justfile b/justfile index 213885a98..edae3c2d3 100644 --- a/justfile +++ b/justfile @@ -35,7 +35,7 @@ test: linux-tune # Generate code generate: - redocly join --prefix-tags-with-info-prop title -o internal/api/gen/api.yaml internal/api/*/gen/api.yaml + redocly join --prefix-tags-with-info-prop title -o internal/controller/api/gen/api.yaml internal/controller/api/*/gen/api.yaml just go::generate just docs::generate diff --git a/pkg/sdk/client/gen/generate.go b/pkg/sdk/client/gen/generate.go index 50ce9d2c4..5dd417165 100644 --- a/pkg/sdk/client/gen/generate.go +++ b/pkg/sdk/client/gen/generate.go @@ -21,4 +21,4 @@ // Package gen contains generated code for the OSAPI REST API client. package gen -//go:generate go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen -config cfg.yaml ../../../../internal/api/gen/api.yaml +//go:generate go tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen -config cfg.yaml ../../../../internal/controller/api/gen/api.yaml diff --git a/test/integration/integration_test.go b/test/integration/integration_test.go index 833b15929..4c954978d 100644 --- a/test/integration/integration_test.go +++ b/test/integration/integration_test.go @@ -155,17 +155,17 @@ func serverEnv() []string { return append(os.Environ(), fmt.Sprintf("OSAPI_NATS_SERVER_PORT=%d", natsPort), fmt.Sprintf("OSAPI_NATS_SERVER_STORE_DIR=%s", storeDir), - fmt.Sprintf("OSAPI_API_SERVER_PORT=%d", apiPort), - fmt.Sprintf("OSAPI_API_SERVER_NATS_PORT=%d", natsPort), + fmt.Sprintf("OSAPI_CONTROLLER_API_PORT=%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_NATS_PORT=%d", natsPort), fmt.Sprintf("OSAPI_AGENT_NATS_PORT=%d", natsPort), - fmt.Sprintf("OSAPI_API_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), ) } func clientEnv() []string { return append(os.Environ(), - fmt.Sprintf("OSAPI_API_CLIENT_URL=http://127.0.0.1:%d", apiPort), - fmt.Sprintf("OSAPI_API_CLIENT_SECURITY_BEARER_TOKEN=%s", token), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_URL=http://127.0.0.1:%d", apiPort), + fmt.Sprintf("OSAPI_CONTROLLER_CLIENT_SECURITY_BEARER_TOKEN=%s", token), ) } diff --git a/test/integration/osapi.yaml b/test/integration/osapi.yaml index f7cc155f0..6905c480d 100644 --- a/test/integration/osapi.yaml +++ b/test/integration/osapi.yaml @@ -1,24 +1,24 @@ --- debug: false -api: +controller: client: url: http://127.0.0.1:8080 security: bearer_token: placeholder - server: + api: port: 8080 - nats: - host: localhost - port: 4222 - client_name: osapi-api-integration - namespace: "" - auth: - type: none security: signing_key: 111fdb0cfd9788fa6af8815f856a0374bf7a0174ad62fa8b98ec07a55f68d8d8 cors: allow_origins: [] + nats: + host: localhost + port: 4222 + client_name: osapi-api-integration + namespace: "" + auth: + type: none nats: server: