diff --git a/internal/api/handler.go b/internal/api/handler.go index 0d5fd322..a69725d2 100644 --- a/internal/api/handler.go +++ b/internal/api/handler.go @@ -52,6 +52,7 @@ func NewHandler() *gin.Engine { { v1Auth.HEAD("/check", authApi.Check) v1Auth.POST("/login", authApi.Login) + v1Auth.GET("/callback", authApi.Callback) v1Auth.POST("/callback", authApi.Callback) v1Auth.POST("/logout", authApi.Logout) } diff --git a/internal/api/v1/auth/callback.go b/internal/api/v1/auth/callback.go index 0bd9bfa7..04111172 100644 --- a/internal/api/v1/auth/callback.go +++ b/internal/api/v1/auth/callback.go @@ -8,7 +8,7 @@ import ( // @x-id "callback" // @Base /api/v1 -// @Summary Post Auth Callback +// @Summary Auth Callback // @Description Handles the callback from the provider after successful authentication // @Tags auth // @Produce plain @@ -18,6 +18,7 @@ import ( // @Failure 400 {string} string "OIDC: invalid request (missing state cookie or oauth state)" // @Failure 400 {string} string "Userpass: invalid request / credentials" // @Failure 500 {string} string "Internal server error" +// @Router /auth/callback [get] // @Router /auth/callback [post] func Callback(c *gin.Context) { auth.GetDefaultAuth().PostAuthCallbackHandler(c.Writer, c.Request) diff --git a/internal/api/v1/docs/docs.go b/internal/api/v1/docs/docs.go index c7273167..61471902 100644 --- a/internal/api/v1/docs/docs.go +++ b/internal/api/v1/docs/docs.go @@ -176,6 +176,54 @@ const docTemplate = `{ } }, "/auth/callback": { + "get": { + "description": "Handles the callback from the provider after successful authentication", + "produces": [ + "text/plain" + ], + "tags": [ + "auth" + ], + "summary": "Auth Callback", + "parameters": [ + { + "description": "Userpass only", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/auth.UserPassAuthCallbackRequest" + } + } + ], + "responses": { + "200": { + "description": "Userpass: OK", + "schema": { + "type": "string" + } + }, + "302": { + "description": "OIDC: Redirects to home page", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Userpass: invalid request / credentials", + "schema": { + "type": "string" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "type": "string" + } + } + }, + "x-id": "callback" + }, "post": { "description": "Handles the callback from the provider after successful authentication", "produces": [ @@ -184,7 +232,7 @@ const docTemplate = `{ "tags": [ "auth" ], - "summary": "Post Auth Callback", + "summary": "Auth Callback", "parameters": [ { "description": "Userpass only", @@ -1675,6 +1723,9 @@ const docTemplate = `{ "addr": { "type": "string" }, + "is_nerdctl": { + "type": "boolean" + }, "name": { "type": "string" }, @@ -2337,6 +2388,18 @@ const docTemplate = `{ "type" ], "properties": { + "container_runtime": { + "enum": [ + "docker", + "podman", + "nerdctl" + ], + "allOf": [ + { + "$ref": "#/definitions/agent.ContainerRuntime" + } + ] + }, "host": { "type": "string" }, @@ -2862,6 +2925,9 @@ const docTemplate = `{ "client": { "$ref": "#/definitions/PEMPairResponse" }, + "container_runtime": { + "$ref": "#/definitions/agent.ContainerRuntime" + }, "host": { "type": "string" } @@ -2942,6 +3008,19 @@ const docTemplate = `{ } } }, + "agent.ContainerRuntime": { + "type": "string", + "enum": [ + "docker", + "podman", + "nerdctl" + ], + "x-enum-varnames": [ + "ContainerRuntimeDocker", + "ContainerRuntimePodman", + "ContainerRuntimeNerdctl" + ] + }, "auth.UserPassAuthCallbackRequest": { "type": "object", "properties": { diff --git a/internal/api/v1/docs/swagger.json b/internal/api/v1/docs/swagger.json index 07ef8d20..988319df 100644 --- a/internal/api/v1/docs/swagger.json +++ b/internal/api/v1/docs/swagger.json @@ -172,6 +172,55 @@ } }, "/auth/callback": { + "get": { + "description": "Handles the callback from the provider after successful authentication", + "produces": [ + "text/plain" + ], + "tags": [ + "auth" + ], + "summary": "Auth Callback", + "parameters": [ + { + "description": "Userpass only", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/auth.UserPassAuthCallbackRequest" + } + } + ], + "responses": { + "200": { + "description": "Userpass: OK", + "schema": { + "type": "string" + } + }, + "302": { + "description": "OIDC: Redirects to home page", + "schema": { + "type": "string" + } + }, + "400": { + "description": "Userpass: invalid request / credentials", + "schema": { + "type": "string" + } + }, + "500": { + "description": "Internal server error", + "schema": { + "type": "string" + } + } + }, + "x-id": "callback", + "operationId": "callback" + }, "post": { "description": "Handles the callback from the provider after successful authentication", "produces": [ @@ -180,7 +229,7 @@ "tags": [ "auth" ], - "summary": "Post Auth Callback", + "summary": "Auth Callback", "parameters": [ { "description": "Userpass only", @@ -1704,6 +1753,11 @@ "x-nullable": false, "x-omitempty": false }, + "is_nerdctl": { + "type": "boolean", + "x-nullable": false, + "x-omitempty": false + }, "name": { "type": "string", "x-nullable": false, @@ -2644,6 +2698,20 @@ "type" ], "properties": { + "container_runtime": { + "enum": [ + "docker", + "podman", + "nerdctl" + ], + "allOf": [ + { + "$ref": "#/definitions/agent.ContainerRuntime" + } + ], + "x-nullable": false, + "x-omitempty": false + }, "host": { "type": "string", "x-nullable": false, @@ -3387,6 +3455,11 @@ "x-nullable": false, "x-omitempty": false }, + "container_runtime": { + "$ref": "#/definitions/agent.ContainerRuntime", + "x-nullable": false, + "x-omitempty": false + }, "host": { "type": "string", "x-nullable": false, @@ -3499,6 +3572,21 @@ "x-nullable": false, "x-omitempty": false }, + "agent.ContainerRuntime": { + "type": "string", + "enum": [ + "docker", + "podman", + "nerdctl" + ], + "x-enum-varnames": [ + "ContainerRuntimeDocker", + "ContainerRuntimePodman", + "ContainerRuntimeNerdctl" + ], + "x-nullable": false, + "x-omitempty": false + }, "auth.UserPassAuthCallbackRequest": { "type": "object", "properties": { diff --git a/internal/api/v1/docs/swagger.yaml b/internal/api/v1/docs/swagger.yaml index c32d221e..6c640c73 100644 --- a/internal/api/v1/docs/swagger.yaml +++ b/internal/api/v1/docs/swagger.yaml @@ -4,6 +4,8 @@ definitions: properties: addr: type: string + is_nerdctl: + type: boolean name: type: string version: @@ -452,6 +454,13 @@ definitions: - MetricsPeriod1mo NewAgentRequest: properties: + container_runtime: + allOf: + - $ref: '#/definitions/agent.ContainerRuntime' + enum: + - docker + - podman + - nerdctl host: type: string name: @@ -810,6 +819,8 @@ definitions: $ref: '#/definitions/PEMPairResponse' client: $ref: '#/definitions/PEMPairResponse' + container_runtime: + $ref: '#/definitions/agent.ContainerRuntime' host: type: string type: object @@ -861,6 +872,16 @@ definitions: status_codes: $ref: '#/definitions/LogFilter-StatusCodeRange' type: object + agent.ContainerRuntime: + enum: + - docker + - podman + - nerdctl + type: string + x-enum-varnames: + - ContainerRuntimeDocker + - ContainerRuntimePodman + - ContainerRuntimeNerdctl auth.UserPassAuthCallbackRequest: properties: password: @@ -1368,6 +1389,38 @@ paths: - agent x-id: verify /auth/callback: + get: + description: Handles the callback from the provider after successful authentication + parameters: + - description: Userpass only + in: body + name: body + required: true + schema: + $ref: '#/definitions/auth.UserPassAuthCallbackRequest' + produces: + - text/plain + responses: + "200": + description: 'Userpass: OK' + schema: + type: string + "302": + description: 'OIDC: Redirects to home page' + schema: + type: string + "400": + description: 'Userpass: invalid request / credentials' + schema: + type: string + "500": + description: Internal server error + schema: + type: string + summary: Auth Callback + tags: + - auth + x-id: callback post: description: Handles the callback from the provider after successful authentication parameters: @@ -1396,7 +1449,7 @@ paths: description: Internal server error schema: type: string - summary: Post Auth Callback + summary: Auth Callback tags: - auth x-id: callback