diff --git a/src/__tests__/ioc-creation.test.js b/src/__tests__/ioc-creation.test.js index 6bc7d7bed92d828d511bf77379ce3fc8ad9eecdf..e8882ca40647530e5e2630b68bf227505e3f9e40 100644 --- a/src/__tests__/ioc-creation.test.js +++ b/src/__tests__/ioc-creation.test.js @@ -88,11 +88,9 @@ defineFeature(feature, (test) => { // owner: "testuser", // id: 1, // status: null, - // createdBy: "testuser", // latestVersion: { // id: 1, // version: 1, - // createdBy: "testuser", // createdAt: "2021-08-04T14:35:41.037+00:00", // namingName: "TEST-IOC-1", // sourceUrl: "http://test-ioc.git", @@ -112,11 +110,9 @@ defineFeature(feature, (test) => { // owner: "testuser", // id: iocId, // status: null, - // createdBy: "testuser", // latestVersion: { // id: 1, // version: 1, - // createdBy: "testuser", // createdAt: "2021-08-04T14:35:41.037+00:00", // namingName: "TEST-IOC-1", // sourceUrl: "http://test-ioc.git", diff --git a/src/api/SwaggerApi.js b/src/api/SwaggerApi.js index bca2b3bcb9ac183437a3c521fac340b533720c4c..4d04c5dc2e11b0df21e3e830e6e1ea4fa6c0c4b9 100644 --- a/src/api/SwaggerApi.js +++ b/src/api/SwaggerApi.js @@ -188,7 +188,7 @@ function useCallAndUnpack(fcn, unpacker = x => x) { export function unpackIOC(ioc) { ioc = { ...ioc }; - const { id, description, owner, createdBy, active, + const { id, description, owner, active, activeDeployment, namingName, gitProjectId, externalNameId, sourceUrl, sourceVersion, sourceVersionShort, operationInProgress, alerts } = ioc; @@ -196,7 +196,6 @@ export function unpackIOC(ioc) { id: id, description: description, owner: owner, - createdBy: createdBy, activeDeployment: activeDeployment, active: active, gitProjectId: gitProjectId, diff --git a/src/mocks/fixtures/IOCDetails.json b/src/mocks/fixtures/IOCDetails.json index 4e3dd774210e8206e10e758d65e0b98c3bd84ce8..13fabb62830c34c1f22cbebcca5812695641dcf8 100644 --- a/src/mocks/fixtures/IOCDetails.json +++ b/src/mocks/fixtures/IOCDetails.json @@ -3,7 +3,6 @@ "id": 1, "description": "This is a test IOC for demonstrating the deployment tool", "owner": "johnsparger", - "createdBy": "johnsparger", "namingName": "CCCE:SC-IOC-003", "externalNameId": 238364, "gitProjectId": 5215, @@ -19,7 +18,6 @@ "id": 2, "description": "Test IOC for CCCE", "owner": "johnsparger", - "createdBy": "johnsparger", "namingName": "CCCE:SC-IOC-001", "externalNameId": 238032, "gitProjectId": 4801, diff --git a/src/mocks/fixtures/ccce-api.json b/src/mocks/fixtures/ccce-api.json index b380ee2177f24201b5627d93db28b44c0cf1ac70..732689d46e489d4c2029a20f7d65b93a83eba775 100644 --- a/src/mocks/fixtures/ccce-api.json +++ b/src/mocks/fixtures/ccce-api.json @@ -3,7 +3,7 @@ "info": { "title": "CCCE API", "description": "CCCE backend", - "version": "0.0.3" + "version": "0.0.5" }, "servers": [ { @@ -44,13 +44,13 @@ } ], "paths": { - "/api/v1/deployments/{ioc_id}/undeploy_in_db": { + "/api/v1/iocs/{ioc_id}/undeploy_in_db": { "put": { "tags": [ - "Deployments" + "IOCs" ], - "summary": "Undeploy in DB", - "description": "Marks an IOC in DB as undeployed - will not call AWX", + "summary": "Undeploy in database", + "description": "Marks an IOC in database as undeployed - will not call AWX", "operationId": "unDeployInDb", "parameters": [ { @@ -65,46 +65,6 @@ } ], "responses": { - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GeneralException" - } - } - } - }, - "404": { - "description": "Not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GeneralException" - } - } - } - }, - "403": { - "description": "Forbidden: user doesn't have the necessary permissions to undeploy", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GeneralException" - } - } - } - }, - "422": { - "description": "IOC is not deployed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GeneralException" - } - } - } - }, "200": { "description": "Undeployment created", "content": { @@ -118,8 +78,8 @@ } } }, - "500": { - "description": "Service exception", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -128,8 +88,8 @@ } } }, - "409": { - "description": "Ongoing deployment, or undeployment for IOC", + "403": { + "description": "Forbidden: user doesn't have the necessary permissions to undeploy", "content": { "application/json": { "schema": { @@ -137,35 +97,9 @@ } } } - } - }, - "security": [ - { - "bearerAuth": [] - } - ] - } - }, - "/api/v1/awx/jobs": { - "put": { - "tags": [ - "AWX" - ], - "summary": "Update an AWX job's status", - "operationId": "updateJob", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AwxJobMeta" - } - } }, - "required": true - }, - "responses": { - "401": { - "description": "Unauthorized", + "404": { + "description": "Not found", "content": { "application/json": { "schema": { @@ -174,8 +108,8 @@ } } }, - "404": { - "description": "Job not found", + "409": { + "description": "Ongoing deployment, or undeployment for IOC", "content": { "application/json": { "schema": { @@ -184,8 +118,8 @@ } } }, - "500": { - "description": "Service exception", + "422": { + "description": "IOC is not deployed", "content": { "application/json": { "schema": { @@ -194,8 +128,8 @@ } } }, - "200": { - "description": "Job updated", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -207,7 +141,7 @@ }, "security": [ { - "apiKey": [] + "bearerAuth": [] } ] } @@ -297,22 +231,22 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "A paged array of IOCs", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/PagedIocResponse" } } } }, - "200": { - "description": "A paged array of IOCs", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PagedIocResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -346,18 +280,18 @@ "required": true }, "responses": { - "401": { - "description": "Unauthorized", + "201": { + "description": "IOC created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/Ioc" } } } }, - "424": { - "description": "Metadata file not found, or not processable", + "400": { + "description": "Incomplete request", "content": { "application/json": { "schema": { @@ -366,8 +300,8 @@ } } }, - "422": { - "description": "Unprocessable request", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -376,8 +310,8 @@ } } }, - "400": { - "description": "Incomplete request", + "403": { + "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", "content": { "application/json": { "schema": { @@ -396,8 +330,8 @@ } } }, - "503": { - "description": "Remote service exception", + "422": { + "description": "Unprocessable request", "content": { "application/json": { "schema": { @@ -406,8 +340,8 @@ } } }, - "403": { - "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", + "424": { + "description": "Metadata file not found, or not processable", "content": { "application/json": { "schema": { @@ -426,12 +360,12 @@ } } }, - "201": { - "description": "IOC created", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Ioc" + "$ref": "#/components/schemas/GeneralException" } } } @@ -444,12 +378,12 @@ ] } }, - "/api/v1/deployments/{ioc_id}/undeploy": { + "/api/v1/iocs/{ioc_id}/undeployment_job": { "post": { "tags": [ - "Deployments" + "IOCs" ], - "summary": "Start undeployment", + "summary": "Create undeployment job", "operationId": "createUndeployment", "parameters": [ { @@ -474,12 +408,15 @@ "required": true }, "responses": { - "422": { - "description": "IOC is not deployed correctly", + "201": { + "description": "Undeployment created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/Deployment" + } } } } @@ -524,8 +461,8 @@ } } }, - "503": { - "description": "Remote service exception", + "422": { + "description": "IOC is not deployed correctly", "content": { "application/json": { "schema": { @@ -534,21 +471,18 @@ } } }, - "201": { - "description": "Undeployment created", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Deployment" - } + "$ref": "#/components/schemas/GeneralException" } } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -565,12 +499,12 @@ ] } }, - "/api/v1/deployments/{ioc_id}/stop": { + "/api/v1/iocs/{ioc_id}/stop_job": { "post": { "tags": [ - "Deployments" + "IOCs" ], - "summary": "Stop an existing IOC", + "summary": "Create stop job for an existing IOC", "operationId": "stopIoc", "parameters": [ { @@ -585,18 +519,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "201": { + "description": "IOC stop initiated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/AdHocCommand" } } } }, - "404": { - "description": "IOC not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -605,8 +539,8 @@ } } }, - "409": { - "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", + "403": { + "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", "content": { "application/json": { "schema": { @@ -615,8 +549,8 @@ } } }, - "503": { - "description": "Remote service exception", + "404": { + "description": "IOC not found", "content": { "application/json": { "schema": { @@ -625,8 +559,8 @@ } } }, - "403": { - "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", + "409": { + "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", "content": { "application/json": { "schema": { @@ -655,12 +589,12 @@ } } }, - "201": { - "description": "IOC stop initiated", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdHocCommand" + "$ref": "#/components/schemas/GeneralException" } } } @@ -673,12 +607,12 @@ ] } }, - "/api/v1/deployments/{ioc_id}/start": { + "/api/v1/iocs/{ioc_id}/start_job": { "post": { "tags": [ - "Deployments" + "IOCs" ], - "summary": "Start an existing IOC", + "summary": "Create start job for an existing IOC", "operationId": "startIoc", "parameters": [ { @@ -693,18 +627,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "201": { + "description": "IOC start initiated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/AdHocCommand" } } } }, - "404": { - "description": "IOC not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -713,18 +647,18 @@ } } }, - "201": { - "description": "IOC start initiated", + "403": { + "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdHocCommand" + "$ref": "#/components/schemas/GeneralException" } } } }, - "409": { - "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", + "404": { + "description": "IOC not found", "content": { "application/json": { "schema": { @@ -733,8 +667,8 @@ } } }, - "503": { - "description": "Remote service exception", + "409": { + "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", "content": { "application/json": { "schema": { @@ -743,8 +677,8 @@ } } }, - "403": { - "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", + "422": { + "description": "IOC has no active deployment", "content": { "application/json": { "schema": { @@ -753,8 +687,8 @@ } } }, - "422": { - "description": "IOC has no active deployment", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -763,8 +697,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -781,12 +715,12 @@ ] } }, - "/api/v1/deployments/{ioc_id}/deploy": { + "/api/v1/iocs/{ioc_id}/deployment_job": { "post": { "tags": [ - "Deployments" + "IOCs" ], - "summary": "Update and deploy an existing IOC", + "summary": "Create a deployment job for an existing IOC", "operationId": "updateAndDeployIoc", "parameters": [ { @@ -811,6 +745,26 @@ "required": true }, "responses": { + "201": { + "description": "Deployment created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Deployment" + } + } + } + }, + "400": { + "description": "Incomplete request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralException" + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -821,6 +775,16 @@ } } }, + "403": { + "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralException" + } + } + } + }, "404": { "description": "IOC not found", "content": { @@ -831,8 +795,8 @@ } } }, - "424": { - "description": "Metadata file not found, or not processable", + "409": { + "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", "content": { "application/json": { "schema": { @@ -841,18 +805,18 @@ } } }, - "201": { - "description": "Deployment created", + "422": { + "description": "CSEntry host not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Deployment" + "$ref": "#/components/schemas/GeneralException" } } } }, - "409": { - "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", + "424": { + "description": "Metadata file not found, or not processable", "content": { "application/json": { "schema": { @@ -861,8 +825,8 @@ } } }, - "400": { - "description": "Incomplete request", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -880,9 +844,35 @@ } } } + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, + "/api/v1/awx/jobs": { + "post": { + "tags": [ + "AWX" + ], + "summary": "Update an AWX job's status", + "operationId": "updateJob", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AwxJobMeta" + } + } }, - "403": { - "description": "Forbidden: User doesn't have the necessary permissions in Gitlab", + "required": true + }, + "responses": { + "200": { + "description": "Job updated", "content": { "application/json": { "schema": { @@ -891,8 +881,18 @@ } } }, - "422": { - "description": "CSEntry host not found", + "401": { + "description": "Unauthorized", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralException" + } + } + } + }, + "404": { + "description": "Job not found", "content": { "application/json": { "schema": { @@ -914,7 +914,7 @@ }, "security": [ { - "bearerAuth": [] + "apiKey": [] } ] } @@ -928,8 +928,18 @@ "description": "Renewing valid, non-expired JWT token", "operationId": "tokenRenew", "responses": { - "503": { - "description": "Login server unavailable", + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } + } + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -938,12 +948,12 @@ } } }, - "200": { - "description": "Ok", + "403": { + "description": "Permission denied", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -957,6 +967,16 @@ } } } + }, + "503": { + "description": "Login server unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralException" + } + } + } } }, "security": [ @@ -985,8 +1005,18 @@ "required": true }, "responses": { - "503": { - "description": "Login server unavailable", + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LoginResponse" + } + } + } + }, + "401": { + "description": "Bad username, and/or password", "content": { "application/json": { "schema": { @@ -995,12 +1025,12 @@ } } }, - "200": { - "description": "Ok", + "403": { + "description": "User doesn't have permission to log in", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LoginResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -1015,8 +1045,8 @@ } } }, - "403": { - "description": "Bad username, and/or password", + "503": { + "description": "Login server unavailable", "content": { "application/json": { "schema": { @@ -1048,18 +1078,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Found IOC", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/IocDetails" } } } }, - "404": { - "description": "Ioc not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1068,12 +1098,12 @@ } } }, - "200": { - "description": "Found IOC", + "404": { + "description": "Ioc not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IocDetails" + "$ref": "#/components/schemas/GeneralException" } } } @@ -1109,18 +1139,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "204": { + "description": "IOC deleted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "string" } } } - }, - "404": { - "description": "IOC not found", + }, + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1129,18 +1159,18 @@ } } }, - "204": { - "description": "IOC deleted", + "403": { + "description": "Forbidden: User doesn't have the necessary permissions", "content": { "application/json": { "schema": { - "type": "string" + "$ref": "#/components/schemas/GeneralException" } } } }, - "409": { - "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", + "404": { + "description": "IOC not found", "content": { "application/json": { "schema": { @@ -1149,8 +1179,8 @@ } } }, - "503": { - "description": "Remote service exception", + "409": { + "description": "Concurrent deployment, undeployment, start or stop for IOC is ongoing", "content": { "application/json": { "schema": { @@ -1159,8 +1189,8 @@ } } }, - "403": { - "description": "Forbidden: User doesn't have the necessary permissions", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -1169,8 +1199,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -1215,18 +1245,18 @@ "required": true }, "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "IOC updated", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/Ioc" } } } }, - "404": { - "description": "Ioc not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1235,8 +1265,8 @@ } } }, - "422": { - "description": "Unprocessable request", + "403": { + "description": "Forbidden: User doesn't have the necessary permissions", "content": { "application/json": { "schema": { @@ -1245,8 +1275,8 @@ } } }, - "503": { - "description": "Remote service exception", + "404": { + "description": "Ioc not found", "content": { "application/json": { "schema": { @@ -1255,8 +1285,8 @@ } } }, - "403": { - "description": "Forbidden: User doesn't have the necessary permissions", + "409": { + "description": "IOC already created or concurrent deployment, undeployment, start or stop for IOC is ongoing", "content": { "application/json": { "schema": { @@ -1265,18 +1295,18 @@ } } }, - "200": { - "description": "IOC updated", + "422": { + "description": "Unprocessable request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Ioc" + "$ref": "#/components/schemas/GeneralException" } } } }, - "409": { - "description": "IOC already created or concurrent deployment, undeployment, start or stop for IOC is ongoing", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -1285,8 +1315,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -1331,22 +1361,22 @@ "summary": "Own IOCs' statistics", "operationId": "personalStatistics", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Personal statistics", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/PersonalStatisticsResponse" } } } }, - "200": { - "description": "Personal statistics", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PersonalStatisticsResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -1377,22 +1407,22 @@ "summary": "Set of statistics", "operationId": "generalStatistics", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Statistics about IOCs, deployments, and hosts", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/GeneralStatisticsResponse" } } } }, - "200": { - "description": "Statistics about IOCs, deployments, and hosts", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralStatisticsResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -1462,25 +1492,25 @@ "summary": "Deployment statistics", "operationId": "deploymentStatistics", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Statistics about IOCs, deployments, and hosts", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/DeploymentStatisticsResponse" + } } } } }, - "200": { - "description": "Statistics about IOCs, deployments, and hosts", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DeploymentStatisticsResponse" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -1506,25 +1536,25 @@ "summary": "Deployed IOC history from DB for statistics", "operationId": "iocDeploymentHistory", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "History about deployed IOCs from DB for statistics", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/ActiveIOCSForHistoryResponse" + } } } } }, - "200": { - "description": "History about deployed IOCs from DB for statistics", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ActiveIOCSForHistoryResponse" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -1550,25 +1580,25 @@ "summary": "Currently active IOC statistics", "operationId": "currentlyActiveIocs", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Statistics about currently active IOCs", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/ActiveIocStatisticsResponse" + } } } } }, - "200": { - "description": "Statistics about currently active IOCs", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ActiveIocStatisticsResponse" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -1594,18 +1624,21 @@ "summary": "Active IOC history from Prometheus for statistics", "operationId": "activeIocHistory", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "History about active IOCs for statistics", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/ActiveIOCSForHistoryResponse" + } } } } }, - "500": { - "description": "Service exception", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1614,15 +1647,12 @@ } } }, - "200": { - "description": "History about active IOCs for statistics", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ActiveIOCSForHistoryResponse" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -1649,18 +1679,21 @@ } ], "responses": { - "500": { - "description": "Service exception", + "200": { + "description": "Naming names, and IDs from CCDB", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/NameResponse" + } } } } }, - "503": { - "description": "Remote service unreachable", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -1669,21 +1702,18 @@ } } }, - "200": { - "description": "Naming names, and IDs from CCDB", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NameResponse" - } + "$ref": "#/components/schemas/GeneralException" } } } }, - "401": { - "description": "Unauthorized", + "503": { + "description": "Remote service unreachable", "content": { "application/json": { "schema": { @@ -1729,12 +1759,12 @@ } ], "responses": { - "500": { - "description": "Service exception", + "200": { + "description": "Log lines", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/LokiResponse" } } } @@ -1749,8 +1779,8 @@ } } }, - "503": { - "description": "Logging server unavailable", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -1759,12 +1789,12 @@ } } }, - "200": { - "description": "Log lines", + "503": { + "description": "Logging server unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LokiResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -1797,22 +1827,22 @@ } ], "responses": { - "500": { - "description": "Service exception", + "200": { + "description": "Log lines", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/IocStatusResponse" } } } }, - "200": { - "description": "Log lines", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/IocStatusResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -1827,8 +1857,8 @@ } } }, - "401": { - "description": "Unauthorized", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -1878,12 +1908,12 @@ } ], "responses": { - "500": { - "description": "Service exception", + "200": { + "description": "Log lines", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/LokiResponse" } } } @@ -1898,8 +1928,8 @@ } } }, - "503": { - "description": "Logging server unavailable", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -1908,12 +1938,12 @@ } } }, - "200": { - "description": "Log lines", + "503": { + "description": "Logging server unavailable", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LokiResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -1934,25 +1964,25 @@ "summary": "List own IOCs with alarms", "operationId": "listOwnIocsWithAlarms", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Array of own IOC with alarms", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/IocWithAlarm" + } } } } }, - "200": { - "description": "Array of own IOC with alarms", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IocWithAlarm" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -2013,29 +2043,29 @@ } } ], - "responses": { - "401": { - "description": "Unauthorized", + "responses": { + "200": { + "description": "A paged array of CSEntry hosts", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/PagedCSEntryHostResponse" } } } }, - "200": { - "description": "A paged array of CSEntry hosts", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PagedCSEntryHostResponse" + "$ref": "#/components/schemas/GeneralException" } } } }, - "503": { - "description": "Remote server exception", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -2044,8 +2074,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote server exception", "content": { "application/json": { "schema": { @@ -2077,18 +2107,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Found Host", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/CSEntryHostWithStatus" } } } }, - "404": { - "description": "Not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2097,8 +2127,8 @@ } } }, - "503": { - "description": "Remote server exception", + "404": { + "description": "Not found", "content": { "application/json": { "schema": { @@ -2107,18 +2137,18 @@ } } }, - "200": { - "description": "Found Host", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CSEntryHostWithStatus" + "$ref": "#/components/schemas/GeneralException" } } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote server exception", "content": { "application/json": { "schema": { @@ -2170,22 +2200,22 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Found Host", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/PagedAssociatedIocs" } } } }, - "200": { - "description": "Found Host", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PagedAssociatedIocs" + "$ref": "#/components/schemas/GeneralException" } } } @@ -2295,16 +2325,6 @@ } ], "responses": { - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GeneralException" - } - } - } - }, "200": { "description": "List of Tags and CommitIds for a specific GitLab repo", "content": { @@ -2318,8 +2338,8 @@ } } }, - "503": { - "description": "Git exception", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2337,6 +2357,16 @@ } } } + }, + "503": { + "description": "Git exception", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralException" + } + } + } } } } @@ -2370,16 +2400,6 @@ } ], "responses": { - "401": { - "description": "Unauthorized", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GeneralException" - } - } - } - }, "200": { "description": "List of Tags and CommitIds for a specific GitLab repo", "content": { @@ -2393,8 +2413,8 @@ } } }, - "503": { - "description": "Git exception", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2412,6 +2432,16 @@ } } } + }, + "503": { + "description": "Git exception", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GeneralException" + } + } + } } }, "security": [ @@ -2429,18 +2459,18 @@ "summary": "Current-user information", "operationId": "userInfo", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Information about the current user", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/UserInfoResponse" } } } }, - "404": { - "description": "Not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2449,18 +2479,18 @@ } } }, - "200": { - "description": "Information about the current user", + "404": { + "description": "Not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UserInfoResponse" + "$ref": "#/components/schemas/GeneralException" } } } }, - "503": { - "description": "Git exception", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -2469,8 +2499,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Git exception", "content": { "application/json": { "schema": { @@ -2506,25 +2536,25 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Information about the current user", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/UserInfoResponse" + } } } } }, - "200": { - "description": "Information about the current user", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/UserInfoResponse" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -2539,8 +2569,8 @@ } } }, - "503": { - "description": "Git exception", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -2549,8 +2579,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Git exception", "content": { "application/json": { "schema": { @@ -2575,18 +2605,21 @@ "summary": "List IOC projects", "operationId": "listProjects", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "List of Gitlab projects of allowed groups", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "$ref": "#/components/schemas/GitProject" + } } } } }, - "503": { - "description": "Git exception", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2605,15 +2638,12 @@ } } }, - "200": { - "description": "List of Gitlab projects of allowed groups", + "503": { + "description": "Git exception", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GitProject" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -2738,22 +2768,22 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "A paged array of deployments", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/PagedDeploymentResponse" } } } }, - "200": { - "description": "A paged array of deployments", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PagedDeploymentResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -2791,18 +2821,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "A deployment with details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/DeploymentInfoDetails" } } } }, - "404": { - "description": "Deployment not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2811,12 +2841,12 @@ } } }, - "200": { - "description": "A deployment with details", + "404": { + "description": "Deployment not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DeploymentInfoDetails" + "$ref": "#/components/schemas/GeneralException" } } } @@ -2854,18 +2884,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "AWX job details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/AwxJobDetails" } } } }, - "404": { - "description": "Deployment not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2874,18 +2904,18 @@ } } }, - "200": { - "description": "AWX job details", + "404": { + "description": "Deployment not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AwxJobDetails" + "$ref": "#/components/schemas/GeneralException" } } } }, - "503": { - "description": "Remote service exception", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -2894,8 +2924,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -2927,18 +2957,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "AWX job log", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/AwxJobLog" } } } }, - "404": { - "description": "Deployment not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -2947,8 +2977,8 @@ } } }, - "503": { - "description": "Remote service exception", + "404": { + "description": "Deployment not found", "content": { "application/json": { "schema": { @@ -2957,18 +2987,18 @@ } } }, - "200": { - "description": "AWX job log", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AwxJobLog" + "$ref": "#/components/schemas/GeneralException" } } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -3035,22 +3065,22 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "A command with details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/PagedCommandResponse" } } } }, - "200": { - "description": "A command with details", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PagedCommandResponse" + "$ref": "#/components/schemas/GeneralException" } } } @@ -3065,8 +3095,8 @@ } } }, - "503": { - "description": "Remote service exception", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -3075,8 +3105,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -3108,22 +3138,22 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "A command descriptor", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/AdHocCommand" } } } }, - "200": { - "description": "A command descriptor", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdHocCommand" + "$ref": "#/components/schemas/GeneralException" } } } @@ -3138,8 +3168,8 @@ } } }, - "503": { - "description": "Remote service exception", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -3148,8 +3178,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -3181,18 +3211,18 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Ongoing command (if exists)", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/AdHocCommand" } } } }, - "404": { - "description": "IOC not found", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { @@ -3201,18 +3231,18 @@ } } }, - "200": { - "description": "Ongoing command (if exists)", + "404": { + "description": "IOC not found", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AdHocCommand" + "$ref": "#/components/schemas/GeneralException" } } } }, - "503": { - "description": "Remote service exception", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -3221,8 +3251,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -3254,28 +3284,28 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "A command with details", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/AwxCommandDetails" } } } }, - "200": { - "description": "A command with details", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/AwxCommandDetails" + "$ref": "#/components/schemas/GeneralException" } } } }, - "503": { - "description": "Remote service exception", + "404": { + "description": "AWX command not found", "content": { "application/json": { "schema": { @@ -3294,8 +3324,8 @@ } } }, - "404": { - "description": "AWX command not found", + "503": { + "description": "Remote service exception", "content": { "application/json": { "schema": { @@ -3315,22 +3345,22 @@ "summary": "Get announcements", "operationId": "fetchAnnouncements", "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Announcements text", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "$ref": "#/components/schemas/Announcements" } } } }, - "200": { - "description": "Announcements text", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Announcements" + "$ref": "#/components/schemas/GeneralException" } } } @@ -3358,25 +3388,25 @@ } ], "responses": { - "401": { - "description": "Unauthorized", + "200": { + "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "array", + "items": { + "type": "string" + } } } } }, - "200": { - "description": "Ok", + "401": { + "description": "Unauthorized", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/GeneralException" } } } @@ -3391,8 +3421,8 @@ } } }, - "503": { - "description": "Login server unavailable", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -3401,8 +3431,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Login server unavailable", "content": { "application/json": { "schema": { @@ -3428,6 +3458,19 @@ "description": "Get user roles from authorization service", "operationId": "getUserRoles", "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, "401": { "description": "Unauthorized", "content": { @@ -3438,21 +3481,18 @@ } } }, - "200": { - "description": "Ok", + "403": { + "description": "Permission denied", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "string" - } + "$ref": "#/components/schemas/GeneralException" } } } }, - "503": { - "description": "Login server unavailable", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { @@ -3461,8 +3501,8 @@ } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Login server unavailable", "content": { "application/json": { "schema": { @@ -3488,28 +3528,28 @@ "description": "Logging out the user", "operationId": "logout", "responses": { - "503": { - "description": "Login server unavailable or remote error", + "200": { + "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GeneralException" + "type": "object" } } } }, - "200": { - "description": "Ok", + "500": { + "description": "Service exception", "content": { "application/json": { "schema": { - "type": "object" + "$ref": "#/components/schemas/GeneralException" } } } }, - "500": { - "description": "Service exception", + "503": { + "description": "Login server unavailable or remote error", "content": { "application/json": { "schema": { @@ -3529,17 +3569,6 @@ }, "components": { "schemas": { - "GeneralException": { - "type": "object", - "properties": { - "error": { - "type": "string" - }, - "description": { - "type": "string" - } - } - }, "Deployment": { "type": "object", "properties": { @@ -3633,34 +3662,16 @@ } } }, - "AwxJobMeta": { + "GeneralException": { "type": "object", "properties": { - "id": { - "type": "integer", - "format": "int64" - }, - "started": { - "type": "string", - "format": "date-time" - }, - "finished": { - "type": "string", - "format": "date-time" + "error": { + "type": "string" }, - "status": { - "type": "string", - "enum": [ - "pending", - "waiting", - "running", - "failed", - "canceled", - "successful" - ] + "description": { + "type": "string" } - }, - "description": "Job to update" + } }, "CreateIoc": { "type": "object", @@ -3683,7 +3694,8 @@ "type": "string", "enum": [ "ERROR", - "WARNING" + "WARNING", + "INFO" ] }, "message": { @@ -3707,9 +3719,6 @@ "owner": { "type": "string" }, - "createdBy": { - "type": "string" - }, "namingName": { "type": "string" }, @@ -3814,6 +3823,35 @@ }, "description": "IOC to update" }, + "AwxJobMeta": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "started": { + "type": "string", + "format": "date-time" + }, + "finished": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "enum": [ + "pending", + "waiting", + "running", + "failed", + "canceled", + "successful" + ] + } + }, + "description": "Job to update" + }, "LoginResponse": { "type": "object", "properties": { @@ -3880,6 +3918,25 @@ "numberOfActiveDeployments": { "type": "integer", "format": "int64" + }, + "numberOfHostsWithIssue": { + "type": "integer", + "format": "int64" + }, + "numberOfIocHostsOnTechnicalNetwork": { + "type": "integer", + "format": "int64" + }, + "numberOfIocHostsWithIocsDeployed": { + "type": "integer", + "format": "int64" + }, + "networkScopesIocCount": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } } } }, @@ -4001,7 +4058,8 @@ "type": "string", "enum": [ "ERROR", - "WARNING" + "WARNING", + "INFO" ] }, "alerts": { @@ -4097,9 +4155,6 @@ "owner": { "type": "string" }, - "createdBy": { - "type": "string" - }, "namingName": { "type": "string" }, @@ -4150,9 +4205,6 @@ "owner": { "type": "string" }, - "createdBy": { - "type": "string" - }, "namingName": { "type": "string" }, @@ -4186,7 +4238,8 @@ "type": "string", "enum": [ "ERROR", - "WARNING" + "WARNING", + "INFO" ] }, "active": { @@ -4238,7 +4291,8 @@ "type": "string", "enum": [ "ERROR", - "WARNING" + "WARNING", + "INFO" ] } } diff --git a/src/test/ccce-api.json b/src/test/ccce-api.json index b417f4543aaa0039a76e93d7ec34282d330874b7..e9c52f8e57a0aceb191578bedbe8cbc88211efcd 100644 --- a/src/test/ccce-api.json +++ b/src/test/ccce-api.json @@ -1 +1 @@ -{"openapi":"3.0.1","info":{"title":"CCCE API","description":"CCCE backend","version":"0.0.4"},"servers":[{"url":"http://localhost:8080","description":"CCCE Deployment Backend"}],"tags":[{"name":"Broadcasts"},{"name":"IOCs"},{"name":"Naming"},{"name":"Authentication"},{"name":"AWX"},{"name":"Statistics"},{"name":"Hosts"},{"name":"Deployments"},{"name":"Git"},{"name":"Monitoring"}],"paths":{"/api/v1/iocs/{ioc_id}/undeploy_in_db":{"put":{"tags":["IOCs"],"summary":"Undeploy in database","description":"Marks an IOC in database as undeployed - will not call AWX","operationId":"unDeployInDb","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to undeploy","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"Ongoing deployment, or undeployment for IOC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Undeployment created","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}}}}},"422":{"description":"IOC is not deployed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: user doesn't have the necessary permissions to undeploy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs":{"get":{"tags":["IOCs"],"summary":"List IOCs","operationId":"listIocs","parameters":[{"name":"deployment_status","in":"query","description":"IOC's current deployment status","required":false,"schema":{"type":"string","enum":["ALL","DEPLOYED","NOT_DEPLOYED"]}},{"name":"owner","in":"query","description":"User name","required":false,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Search text (Search for Naming name, Owner)","required":false,"schema":{"type":"string"}},{"name":"order_by","in":"query","description":"Order by","required":false,"schema":{"type":"string","enum":["ID","OWNER","IOC_NAME"]}},{"name":"order_asc","in":"query","description":"Order Ascending","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A paged array of IOCs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedIocResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}},"post":{"tags":["IOCs"],"summary":"Create a new IOC","operationId":"createIoc","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIoc"}}},"required":true},"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"IOC already created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"IOC created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ioc"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"424":{"description":"Metadata file not found, or not processable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"400":{"description":"Incomplete request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"Unprocessable request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/undeployment_job":{"post":{"tags":["IOCs"],"summary":"Create undeployment job","operationId":"createUndeployment","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to undeploy","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Undeployment"}}},"required":true},"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"IOC is not deployed correctly","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"Undeployment created","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: user doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/stop_job":{"post":{"tags":["IOCs"],"summary":"Create stop job for an existing IOC","operationId":"stopIoc","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to stop","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"IOC has no active deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"IOC stop initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/start_job":{"post":{"tags":["IOCs"],"summary":"Create start job for an existing IOC","operationId":"startIoc","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to start","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"IOC has no active deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"IOC start initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/deployment_job":{"post":{"tags":["IOCs"],"summary":"Create a deployment job for an existing IOC","operationId":"updateAndDeployIoc","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to deploy","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAndDeployIoc"}}},"required":true},"responses":{"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"424":{"description":"Metadata file not found, or not processable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"CSEntry host not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"400":{"description":"Incomplete request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"Deployment created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/awx/jobs":{"post":{"tags":["AWX"],"summary":"Update an AWX job's status","operationId":"updateJob","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxJobMeta"}}},"required":true},"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Job updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"apiKey":[]}]}},"/api/v1/authentication/renew":{"post":{"tags":["Authentication"],"summary":"Renewing JWT token","description":"Renewing valid, non-expired JWT token","operationId":"tokenRenew","responses":{"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/authentication/login":{"post":{"tags":["Authentication"],"summary":"Login user and acquire JWT token","description":"Login user with username, and password in order to acquire JWT token","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Login"}}},"required":true},"responses":{"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"Bad username, and/or password","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"User doesn't have permission to log in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/iocs/{ioc_id}":{"get":{"tags":["IOCs"],"summary":"Find IOC details by ID","operationId":"getIoc","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Found IOC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IocDetails"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Ioc not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}},"delete":{"tags":["IOCs"],"summary":"Deletes a single IOC based on the ID supplied","operationId":"deleteIoc","parameters":[{"name":"ioc_id","in":"path","description":"Id of IOC to delete","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"204":{"description":"IOC deleted","content":{"application/json":{"schema":{"type":"string"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["IOCs"],"summary":"Updating an IOC by ID","operationId":"updateIoc","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IOCUpdateRequest"}}},"required":true},"responses":{"409":{"description":"IOC already created or concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"IOC updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ioc"}}}},"422":{"description":"Unprocessable request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Ioc not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/healthcheck":{"get":{"tags":["health-check-controller"],"operationId":"getHealthCheck","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/statistics/my_iocs":{"get":{"tags":["Statistics"],"summary":"Own IOCs' statistics","operationId":"personalStatistics","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Personal statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalStatisticsResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/statistics/general":{"get":{"tags":["Statistics"],"summary":"Set of statistics","operationId":"generalStatistics","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about IOCs, deployments, and hosts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralStatisticsResponse"}}}}}}},"/api/v1/statistics/general/ioc_statistics":{"get":{"tags":["Statistics"],"summary":"IOC statistics","operationId":"iocStatistics","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about IOCs deployed to hosts","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentOnHost"}}}}}}}},"/api/v1/statistics/general/deployment_statistics":{"get":{"tags":["Statistics"],"summary":"Deployment statistics","operationId":"deploymentStatistics","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about IOCs, deployments, and hosts","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentStatisticsResponse"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/statistics/general/deployed_ioc_history":{"get":{"tags":["Statistics"],"summary":"Deployed IOC history from DB for statistics","operationId":"iocDeploymentHistory","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"History about deployed IOCs from DB for statistics","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActiveIOCSForHistoryResponse"}}}}}}}},"/api/v1/statistics/general/active_ioc_statistics":{"get":{"tags":["Statistics"],"summary":"Currently active IOC statistics","operationId":"currentlyActiveIocs","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about currently active IOCs","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActiveIocStatisticsResponse"}}}}}}}},"/api/v1/statistics/general/active_ioc_history":{"get":{"tags":["Statistics"],"summary":"Active IOC history from Prometheus for statistics","operationId":"activeIocHistory","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"History about active IOCs for statistics","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActiveIOCSForHistoryResponse"}}}}}}}},"/api/v1/naming/ioc_names_by_name":{"get":{"tags":["Naming"],"summary":"Fetches IOC names by name from CCDB","operationId":"fetchIOCByName","parameters":[{"name":"ioc_name","in":"query","description":"IOC name","required":false,"schema":{"type":"string"}}],"responses":{"503":{"description":"Remote service unreachable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Naming names, and IDs from CCDB","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NameResponse"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/monitoring/syslog/host/{host_name}":{"get":{"tags":["Monitoring"],"summary":"Fetches syslog lines for a specific host","operationId":"fetchSyslogLines","parameters":[{"name":"host_name","in":"path","description":"Host name (without network part)","required":true,"schema":{"type":"string"}},{"name":"time_range","in":"query","description":"Time range (in minutes)","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Log lines","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LokiResponse"}}}},"503":{"description":"Logging server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/monitoring/status/{ioc_id}":{"get":{"tags":["Monitoring"],"summary":"Fetches the Prometheus status of the IOC","operationId":"fetchIocStatus","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of the IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Log lines","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IocStatusResponse"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Ioc not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/monitoring/procserv/host/{host_name}/{ioc_name}":{"get":{"tags":["Monitoring"],"summary":"Fetches procServ Log lines for a specific host","operationId":"fetchProcServLogLines","parameters":[{"name":"host_name","in":"path","description":"Host name (without network part)","required":true,"schema":{"type":"string"}},{"name":"ioc_name","in":"path","description":"Name of the IOC to get procServ logs","required":true,"schema":{"type":"string"}},{"name":"time_range","in":"query","description":"Time range (in minutes)","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Log lines","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LokiResponse"}}}},"503":{"description":"Logging server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/my_iocs_with_alarms":{"get":{"tags":["IOCs"],"summary":"List own IOCs with alarms","operationId":"listOwnIocsWithAlarms","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Array of own IOC with alarms","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IocWithAlarm"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/hosts":{"get":{"tags":["Hosts"],"summary":"List CSEntry hosts","operationId":"listHosts","parameters":[{"name":"query","in":"query","description":"Search text, this query string is passed directly to Elasticsearch. E.g.: To search all hosts where the string \"archiver\" appears in any field, use \"archiver\".To restrict the search to only the name field, use \"name:archiver\".Note that if you pass \"name:arch\", this will not match archiver as elasticsearch uses keywords for string matching. In this case you’d need to use a wildcard: \"name:arch*\".","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"maximum":100,"type":"string"}}],"responses":{"200":{"description":"A paged array of CSEntry hosts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedCSEntryHostResponse"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote server exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/hosts/{host_csentry_id}/with_status":{"get":{"tags":["Hosts"],"summary":"Find host by CSEntry ID and get status","operationId":"findHostById","parameters":[{"name":"host_csentry_id","in":"path","description":"Unique CSEntry ID of the host","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote server exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Found Host","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSEntryHostWithStatus"}}}}}}},"/api/v1/hosts/{host_csentry_id}/iocs":{"get":{"tags":["Hosts"],"summary":"Find associated IOCs for the host","operationId":"findAssociatedIocsByHostId","parameters":[{"name":"host_csentry_id","in":"path","description":"Unique CSEntry ID of the host","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"maximum":100,"type":"string"}}],"responses":{"200":{"description":"Found Host","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedAssociatedIocs"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/hosts/{host_csentry_id}/info":{"get":{"tags":["Hosts"],"summary":"Find host by CSEntry ID","operationId":"findCSentryHostById","parameters":[{"name":"host_csentry_id","in":"path","description":"Unique CSEntry ID of the host","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Found Host","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetHost"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/git_helper/{project_id}/tags_and_commits":{"get":{"tags":["Git"],"summary":"List Tags and CommitIds","operationId":"listTagsAndCommitIds","parameters":[{"name":"project_id","in":"path","description":"Git repo project ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"reference","in":"query","description":"Git reference","required":false,"schema":{"type":"string"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"List of Tags and CommitIds for a specific GitLab repo","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitReference"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/git_helper/{project_id}/tags_and_commits/search":{"get":{"tags":["Git"],"summary":"Searches Tags and Commits by reference","operationId":"searchTagsAndCommitsByRefName","parameters":[{"name":"project_id","in":"path","description":"Git repo project ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"reference","in":"query","description":"Git short reference","required":false,"schema":{"type":"string"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"List of Tags and CommitIds for a specific GitLab repo","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitReference"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/git_helper/user_info":{"get":{"tags":["Git"],"summary":"Current-user information","operationId":"userInfo","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Information about the current user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/git_helper/user_info/{user_name}":{"get":{"tags":["Git"],"summary":"User information","operationId":"infoFromUserName","parameters":[{"name":"user_name","in":"path","description":"The username to retrieve info from","required":true,"schema":{"type":"string"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Information about the current user","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserInfoResponse"}}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/git_helper/projects":{"get":{"tags":["Git"],"summary":"List IOC projects","operationId":"listProjects","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"List of Gitlab projects of allowed groups","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitProject"}}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/deployments":{"get":{"tags":["Deployments"],"summary":"List deployments","operationId":"listDeployments","parameters":[{"name":"ioc_id","in":"query","description":"IOC ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"host_csentry_id","in":"query","description":"Host CSEntry ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"status","in":"query","description":"Status","required":false,"schema":{"type":"string","enum":["QUEUED","PENDING","RUNNING","SUCCESSFUL","FAILED","FINISHED"]}},{"name":"user","in":"query","description":"User name","required":false,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Search text (Search for IOC name, IOC version, Host name, Description, Created by)","required":false,"schema":{"type":"string"}},{"name":"order_by","in":"query","description":"Order by","required":false,"schema":{"type":"string","enum":["ID","CREATED_BY","CREATED_AT","START_TIME","FINISHED_AT","IOC_NAME","GIT_REFERENCE"]}},{"name":"order_asc","in":"query","description":"Order Ascending","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A paged array of deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedDeploymentResponse"}}}}}}},"/api/v1/deployments/{deployment_id}":{"get":{"tags":["Deployments"],"summary":"Get deployment details","operationId":"fetchDeployment","parameters":[{"name":"deployment_id","in":"path","description":"Unique ID of deployment","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A deployment with details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfoDetails"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/jobs/{awx_job_id}":{"get":{"tags":["Deployments"],"summary":"Get deployment job details","operationId":"fetchDeploymentJobDetails","parameters":[{"name":"awx_job_id","in":"path","description":"Unique ID of AWX job","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"AWX job details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxJobDetails"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/jobs/{awx_job_id}/log":{"get":{"tags":["Deployments"],"summary":"Get deployment job log","operationId":"fetchDeploymentJobLog","parameters":[{"name":"awx_job_id","in":"path","description":"Unique ID of AWX job","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"AWX job log","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxJobLog"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/deployments/commands":{"get":{"tags":["Deployments"],"summary":"Get ad-hoc command list for a specific deployment","operationId":"listCommandsByDeployment","parameters":[{"name":"ioc_id","in":"query","description":"Unique ID of IOC","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"deployment_id","in":"query","description":"Unique ID of deployment","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A command with details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedCommandResponse"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/commands/{command_id}":{"get":{"tags":["Deployments"],"summary":"Get ad-hoc command","operationId":"fetchCommand","parameters":[{"name":"command_id","in":"path","description":"Unique ID of command","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Ad-hoc command not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A command descriptor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}}}}},"/api/v1/deployments/commands/ongoing/{ioc_id}":{"get":{"tags":["Deployments"],"summary":"Get list of ongoing ad-hoc commands for a specific IOC","operationId":"ongoingCommandByIoc","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of the IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ongoing command (if exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/commands/jobs/{awx_command_id}":{"get":{"tags":["Deployments"],"summary":"Get ad-hoc command details","operationId":"fetchCommandDetails","parameters":[{"name":"awx_command_id","in":"path","description":"Unique ID of AWX command","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"404":{"description":"AWX command not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A command with details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxCommandDetails"}}}}}}},"/api/v1/broadcasts/announcements":{"get":{"tags":["Broadcasts"],"summary":"Get announcements","operationId":"fetchAnnouncements","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Announcements text","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Announcements"}}}}}}},"/api/v1/authentication/users":{"get":{"tags":["Authentication"],"summary":"Get Deployment Tool users","description":"Get Deployment Tool users from authorization service","operationId":"getToolUsers","parameters":[{"name":"query","in":"query","description":"User name query","required":false,"schema":{"type":"string"}}],"responses":{"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Role not found by authorization service","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/authentication/roles":{"get":{"tags":["Authentication"],"summary":"Get user roles","description":"Get user roles from authorization service","operationId":"getUserRoles","responses":{"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/authentication/logout":{"delete":{"tags":["Authentication"],"summary":"Logout","description":"Logging out the user","operationId":"logout","responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Login server unavailable or remote error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object"}}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"GeneralException":{"type":"object","properties":{"error":{"type":"string"},"description":{"type":"string"}}},"Deployment":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"undeployment":{"type":"boolean"},"namingName":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"endDate":{"type":"string","format":"date-time"},"comment":{"type":"string"},"iocName":{"type":"string"},"host":{"$ref":"#/components/schemas/Host"},"status":{"type":"string","enum":["PENDING","JOB","QUEUED","ERROR"]},"awxJobId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersionShort":{"type":"string"},"jobStatus":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]}}},"Host":{"type":"object","properties":{"csEntryId":{"type":"integer","format":"int64"},"csEntryIdValid":{"type":"boolean"},"fqdn":{"type":"string"},"hostName":{"type":"string"},"network":{"type":"string"}}},"CreateIoc":{"type":"object","properties":{"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"}},"description":"IOC to create"},"Alert":{"type":"object","properties":{"type":{"type":"string","enum":["ERROR","WARNING","INFO"]},"message":{"type":"string"},"link":{"type":"string"}}},"Ioc":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"description":{"type":"string"},"owner":{"type":"string"},"createdBy":{"type":"string"},"namingName":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersion":{"type":"string"},"sourceVersionShort":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/Deployment"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"active":{"type":"boolean"}}},"Undeployment":{"type":"object","properties":{"comment":{"type":"string"}},"description":"Undeployment parameters"},"AdHocCommand":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"type":{"type":"string","enum":["START","STOP"]},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]},"iocName":{"type":"string"},"awxCommandId":{"type":"integer","format":"int64"}}},"UpdateAndDeployIoc":{"type":"object","properties":{"comment":{"type":"string"},"sourceVersion":{"type":"string"},"hostCSEntryId":{"type":"integer","format":"int64"}},"description":"IOC to update"},"AwxJobMeta":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"started":{"type":"string","format":"date-time"},"finished":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]}},"description":"Job to update"},"LoginResponse":{"type":"object","properties":{"token":{"type":"string"}}},"Login":{"type":"object","properties":{"userName":{"type":"string"},"password":{"type":"string"}}},"IOCUpdateRequest":{"type":"object","properties":{"owner":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"}}},"PersonalStatisticsResponse":{"type":"object","properties":{"numberOfActiveIocs":{"type":"integer","format":"int64"}}},"GeneralStatisticsResponse":{"type":"object","properties":{"numberOfActiveHosts":{"type":"integer","format":"int64"},"numberOfCreatedIocs":{"type":"integer","format":"int64"},"numberOfActiveIocs":{"type":"integer","format":"int64"},"numberOfDeployments":{"type":"integer","format":"int64"},"numberOfActiveDeployments":{"type":"integer","format":"int64"},"numberOfHostsWithIssue":{"type":"integer","format":"int64"},"numberOfIocHostsOnTechnicalNetwork":{"type":"integer","format":"int64"},"numberOfIocHostsWithIocsDeployed":{"type":"integer","format":"int64"},"networkScopesIocCount":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}}}},"DeploymentCount":{"type":"object","properties":{"iocCount":{"type":"integer","format":"int64"},"countingDate":{"type":"string","format":"date-time"}}},"DeploymentOnHost":{"type":"object","properties":{"network":{"type":"string"},"deployments":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentCount"}}}},"DeploymentStatisticsResponse":{"type":"object","properties":{"deploymentDate":{"type":"string","format":"date-time"},"numberOfDeployments":{"type":"integer","format":"int64"},"successfulDeployments":{"type":"integer","format":"int64"}}},"ActiveIOCSForHistoryResponse":{"type":"object","properties":{"iocCount":{"type":"integer","format":"int64"},"historyDate":{"type":"string","format":"date-time"}}},"ActiveIocStatisticsResponse":{"type":"object","properties":{"network":{"type":"string"},"iocCount":{"type":"integer","format":"int64"}}},"NameResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"}}},"LokiMessage":{"type":"object","properties":{"logDate":{"type":"string","format":"date-time"},"logMessage":{"type":"string"}}},"LokiResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"$ref":"#/components/schemas/LokiMessage"}}}},"IocStatusResponse":{"type":"object","properties":{"iocId":{"type":"integer","format":"int64"},"alertSeverity":{"type":"string","enum":["ERROR","WARNING","INFO"]},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"active":{"type":"boolean"}}},"ActiveDeployment":{"type":"object","properties":{"host":{"$ref":"#/components/schemas/DeploymentHostInfo"}}},"DeploymentHostInfo":{"type":"object","properties":{"externalHostId":{"type":"integer","format":"int64"}}},"IocInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"namingName":{"type":"string"},"owner":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/ActiveDeployment"}}},"PagedIocResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"iocList":{"type":"array","items":{"$ref":"#/components/schemas/IocInfo"}}}},"IocDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"description":{"type":"string"},"owner":{"type":"string"},"createdBy":{"type":"string"},"namingName":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersion":{"type":"string"},"sourceVersionShort":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/Deployment"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"operationInProgress":{"type":"boolean"},"active":{"type":"boolean"}}},"IocWithAlarm":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"description":{"type":"string"},"owner":{"type":"string"},"createdBy":{"type":"string"},"namingName":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersion":{"type":"string"},"sourceVersionShort":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/Deployment"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"alert":{"type":"string","enum":["ERROR","WARNING","INFO"]},"active":{"type":"boolean"}}},"HostInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"fqdn":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string"},"description":{"type":"string"},"network":{"type":"string"},"deviceType":{"type":"string"}}},"HostInfoWithStatus":{"type":"object","properties":{"csEntryHost":{"$ref":"#/components/schemas/HostInfo"},"status":{"type":"string","enum":["AVAILABLE","UNREACHABLE"]},"alert":{"type":"string","enum":["ERROR","WARNING","INFO"]}}},"PagedCSEntryHostResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"csEntryHosts":{"type":"array","items":{"$ref":"#/components/schemas/HostInfoWithStatus"}}}},"CSEntryHost":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"fqdn":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string"},"description":{"type":"string"},"user":{"type":"string"},"interfaces":{"type":"array","items":{"$ref":"#/components/schemas/CSEntryInterface"}},"is_ioc":{"type":"boolean"},"device_type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"ansible_vars":{"type":"object","additionalProperties":{"type":"object"}},"ansible_groups":{"type":"array","items":{"type":"string"}}}},"CSEntryHostWithStatus":{"type":"object","properties":{"csEntryHost":{"$ref":"#/components/schemas/CSEntryHost"},"assigned":{"type":"boolean"},"status":{"type":"string","enum":["AVAILABLE","UNREACHABLE"]},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}}}},"CSEntryInterface":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"network":{"type":"string"},"domain":{"type":"string"},"ip":{"type":"string"},"mac":{"type":"string"},"host":{"type":"string"},"cnames":{"type":"array","items":{"type":"string"}},"is_main":{"type":"boolean"}}},"PagedAssociatedIocs":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"deployedIocs":{"type":"array","items":{"$ref":"#/components/schemas/IocInfo"}}}},"TargetHost":{"type":"object","properties":{"externalId":{"type":"integer","format":"int64"},"fqdn":{"type":"string"},"hostName":{"type":"string"},"network":{"type":"string"}}},"GitReference":{"type":"object","properties":{"reference":{"type":"string"},"shortReference":{"type":"string"},"description":{"type":"string"},"commitDate":{"type":"string","format":"date-time"}}},"UserInfoResponse":{"type":"object","properties":{"fullName":{"type":"string"},"loginName":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"},"gitlabUserName":{"type":"string"}}},"GitProject":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"url":{"type":"string"}}},"DeploymentInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"undeployment":{"type":"boolean"},"namingName":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"host":{"$ref":"#/components/schemas/DeploymentHostInfo"}}},"PagedDeploymentResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"deployments":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"DeploymentInfoDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"undeployment":{"type":"boolean"},"namingName":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"endDate":{"type":"string","format":"date-time"},"comment":{"type":"string"},"host":{"$ref":"#/components/schemas/HostWithFqdn"},"status":{"type":"string","enum":["PENDING","JOB","QUEUED","ERROR"]},"awxJobId":{"type":"integer","format":"int64"},"iocId":{"type":"integer","format":"int64"},"awxJobUrl":{"type":"string"},"sourceUrl":{"type":"string"},"sourceVersionShort":{"type":"string"}}},"HostWithFqdn":{"type":"object","properties":{"csEntryId":{"type":"integer","format":"int64"},"csEntryIdValid":{"type":"boolean"},"fqdn":{"type":"string"}}},"AwxJobDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]},"started":{"type":"string","format":"date-time"},"finished":{"type":"string","format":"date-time"}}},"AwxJobLog":{"type":"object","properties":{"awxJobId":{"type":"integer","format":"int64"},"stdoutHtml":{"type":"string"},"elapsed":{"type":"number","format":"double"}}},"PagedCommandResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"commands":{"type":"array","items":{"$ref":"#/components/schemas/AdHocCommand"}}}},"AwxCommandDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]},"started":{"type":"string","format":"date-time"},"finished":{"type":"string","format":"date-time"}}},"Announcements":{"type":"object","properties":{"announcementsText":{"type":"string"}}}},"securitySchemes":{"apiKey":{"type":"apiKey","name":"CCCE-TOKEN","in":"header"},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}}} \ No newline at end of file +{"openapi":"3.0.1","info":{"title":"CCCE API","description":"CCCE backend","version":"0.0.5"},"servers":[{"url":"http://localhost:8080","description":"CCCE Deployment Backend"}],"tags":[{"name":"Broadcasts"},{"name":"IOCs"},{"name":"Naming"},{"name":"Authentication"},{"name":"AWX"},{"name":"Statistics"},{"name":"Hosts"},{"name":"Deployments"},{"name":"Git"},{"name":"Monitoring"}],"paths":{"/api/v1/iocs/{ioc_id}/undeploy_in_db":{"put":{"tags":["IOCs"],"summary":"Undeploy in database","description":"Marks an IOC in database as undeployed - will not call AWX","operationId":"unDeployInDb","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to undeploy","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Undeployment created","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: user doesn't have the necessary permissions to undeploy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"IOC is not deployed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"Ongoing deployment, or undeployment for IOC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs":{"get":{"tags":["IOCs"],"summary":"List IOCs","operationId":"listIocs","parameters":[{"name":"deployment_status","in":"query","description":"IOC's current deployment status","required":false,"schema":{"type":"string","enum":["ALL","DEPLOYED","NOT_DEPLOYED"]}},{"name":"owner","in":"query","description":"User name","required":false,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Search text (Search for Naming name, Owner)","required":false,"schema":{"type":"string"}},{"name":"order_by","in":"query","description":"Order by","required":false,"schema":{"type":"string","enum":["ID","OWNER","IOC_NAME"]}},{"name":"order_asc","in":"query","description":"Order Ascending","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A paged array of IOCs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedIocResponse"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}},"post":{"tags":["IOCs"],"summary":"Create a new IOC","operationId":"createIoc","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateIoc"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"424":{"description":"Metadata file not found, or not processable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"Unprocessable request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"400":{"description":"Incomplete request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"IOC already created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"IOC created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ioc"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/undeployment_job":{"post":{"tags":["IOCs"],"summary":"Create undeployment job","operationId":"createUndeployment","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to undeploy","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Undeployment"}}},"required":true},"responses":{"422":{"description":"IOC is not deployed correctly","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"Undeployment created","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}}}}},"403":{"description":"Forbidden: user doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/stop_job":{"post":{"tags":["IOCs"],"summary":"Create stop job for an existing IOC","operationId":"stopIoc","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to stop","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"IOC stop initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"IOC has no active deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/start_job":{"post":{"tags":["IOCs"],"summary":"Create start job for an existing IOC","operationId":"startIoc","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to start","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"IOC start initiated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"IOC has no active deployment","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/{ioc_id}/deployment_job":{"post":{"tags":["IOCs"],"summary":"Create a deployment job for an existing IOC","operationId":"updateAndDeployIoc","parameters":[{"name":"ioc_id","in":"path","description":"The id of the IOC to deploy","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAndDeployIoc"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"424":{"description":"Metadata file not found, or not processable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"400":{"description":"Incomplete request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions in Gitlab","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"201":{"description":"Deployment created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"422":{"description":"CSEntry host not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/awx/jobs":{"post":{"tags":["AWX"],"summary":"Update an AWX job's status","operationId":"updateJob","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxJobMeta"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Job not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Job updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"apiKey":[]}]}},"/api/v1/authentication/renew":{"post":{"tags":["Authentication"],"summary":"Renewing JWT token","description":"Renewing valid, non-expired JWT token","operationId":"tokenRenew","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/authentication/login":{"post":{"tags":["Authentication"],"summary":"Login user and acquire JWT token","description":"Login user with username, and password in order to acquire JWT token","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Login"}}},"required":true},"responses":{"403":{"description":"User doesn't have permission to log in","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginResponse"}}}},"401":{"description":"Bad username, and/or password","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/iocs/{ioc_id}":{"get":{"tags":["IOCs"],"summary":"Find IOC details by ID","operationId":"getIoc","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Ioc not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Found IOC","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IocDetails"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}},"delete":{"tags":["IOCs"],"summary":"Deletes a single IOC based on the ID supplied","operationId":"deleteIoc","parameters":[{"name":"ioc_id","in":"path","description":"Id of IOC to delete","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"204":{"description":"IOC deleted","content":{"application/json":{"schema":{"type":"string"}}}},"409":{"description":"Concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["IOCs"],"summary":"Updating an IOC by ID","operationId":"updateIoc","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IOCUpdateRequest"}}},"required":true},"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Ioc not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"422":{"description":"Unprocessable request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Forbidden: User doesn't have the necessary permissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"IOC updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ioc"}}}},"409":{"description":"IOC already created or concurrent deployment, undeployment, start or stop for IOC is ongoing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/healthcheck":{"get":{"tags":["health-check-controller"],"operationId":"getHealthCheck","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"type":"string"}}}}}}},"/api/v1/statistics/my_iocs":{"get":{"tags":["Statistics"],"summary":"Own IOCs' statistics","operationId":"personalStatistics","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Personal statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalStatisticsResponse"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/statistics/general":{"get":{"tags":["Statistics"],"summary":"Set of statistics","operationId":"generalStatistics","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about IOCs, deployments, and hosts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralStatisticsResponse"}}}}}}},"/api/v1/statistics/general/ioc_statistics":{"get":{"tags":["Statistics"],"summary":"IOC statistics","operationId":"iocStatistics","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about IOCs deployed to hosts","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentOnHost"}}}}}}}},"/api/v1/statistics/general/deployment_statistics":{"get":{"tags":["Statistics"],"summary":"Deployment statistics","operationId":"deploymentStatistics","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about IOCs, deployments, and hosts","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentStatisticsResponse"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/statistics/general/deployed_ioc_history":{"get":{"tags":["Statistics"],"summary":"Deployed IOC history from DB for statistics","operationId":"iocDeploymentHistory","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"History about deployed IOCs from DB for statistics","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActiveIOCSForHistoryResponse"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/statistics/general/active_ioc_statistics":{"get":{"tags":["Statistics"],"summary":"Currently active IOC statistics","operationId":"currentlyActiveIocs","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Statistics about currently active IOCs","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActiveIocStatisticsResponse"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/statistics/general/active_ioc_history":{"get":{"tags":["Statistics"],"summary":"Active IOC history from Prometheus for statistics","operationId":"activeIocHistory","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"History about active IOCs for statistics","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActiveIOCSForHistoryResponse"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/naming/ioc_names_by_name":{"get":{"tags":["Naming"],"summary":"Fetches IOC names by name from CCDB","operationId":"fetchIOCByName","parameters":[{"name":"ioc_name","in":"query","description":"IOC name","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Naming names, and IDs from CCDB","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NameResponse"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service unreachable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/monitoring/syslog/host/{host_name}":{"get":{"tags":["Monitoring"],"summary":"Fetches syslog lines for a specific host","operationId":"fetchSyslogLines","parameters":[{"name":"host_name","in":"path","description":"Host name (without network part)","required":true,"schema":{"type":"string"}},{"name":"time_range","in":"query","description":"Time range (in minutes)","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Log lines","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LokiResponse"}}}},"503":{"description":"Logging server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/monitoring/status/{ioc_id}":{"get":{"tags":["Monitoring"],"summary":"Fetches the Prometheus status of the IOC","operationId":"fetchIocStatus","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of the IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Log lines","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IocStatusResponse"}}}},"404":{"description":"Ioc not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/monitoring/procserv/host/{host_name}/{ioc_name}":{"get":{"tags":["Monitoring"],"summary":"Fetches procServ Log lines for a specific host","operationId":"fetchProcServLogLines","parameters":[{"name":"host_name","in":"path","description":"Host name (without network part)","required":true,"schema":{"type":"string"}},{"name":"ioc_name","in":"path","description":"Name of the IOC to get procServ logs","required":true,"schema":{"type":"string"}},{"name":"time_range","in":"query","description":"Time range (in minutes)","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Log lines","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LokiResponse"}}}},"503":{"description":"Logging server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/iocs/my_iocs_with_alarms":{"get":{"tags":["IOCs"],"summary":"List own IOCs with alarms","operationId":"listOwnIocsWithAlarms","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Array of own IOC with alarms","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IocWithAlarm"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/hosts":{"get":{"tags":["Hosts"],"summary":"List CSEntry hosts","operationId":"listHosts","parameters":[{"name":"query","in":"query","description":"Search text, this query string is passed directly to Elasticsearch. E.g.: To search all hosts where the string \"archiver\" appears in any field, use \"archiver\".To restrict the search to only the name field, use \"name:archiver\".Note that if you pass \"name:arch\", this will not match archiver as elasticsearch uses keywords for string matching. In this case you’d need to use a wildcard: \"name:arch*\".","required":false,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"maximum":100,"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A paged array of CSEntry hosts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedCSEntryHostResponse"}}}},"503":{"description":"Remote server exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/hosts/{host_csentry_id}/with_status":{"get":{"tags":["Hosts"],"summary":"Find host by CSEntry ID and get status","operationId":"findHostById","parameters":[{"name":"host_csentry_id","in":"path","description":"Unique CSEntry ID of the host","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Found Host","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSEntryHostWithStatus"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote server exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/hosts/{host_csentry_id}/iocs":{"get":{"tags":["Hosts"],"summary":"Find associated IOCs for the host","operationId":"findAssociatedIocsByHostId","parameters":[{"name":"host_csentry_id","in":"path","description":"Unique CSEntry ID of the host","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"maximum":100,"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Found Host","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedAssociatedIocs"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/hosts/{host_csentry_id}/info":{"get":{"tags":["Hosts"],"summary":"Find host by CSEntry ID","operationId":"findCSentryHostById","parameters":[{"name":"host_csentry_id","in":"path","description":"Unique CSEntry ID of the host","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Found Host","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetHost"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/git_helper/{project_id}/tags_and_commits":{"get":{"tags":["Git"],"summary":"List Tags and CommitIds","operationId":"listTagsAndCommitIds","parameters":[{"name":"project_id","in":"path","description":"Git repo project ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"reference","in":"query","description":"Git reference","required":false,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"List of Tags and CommitIds for a specific GitLab repo","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitReference"}}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/git_helper/{project_id}/tags_and_commits/search":{"get":{"tags":["Git"],"summary":"Searches Tags and Commits by reference","operationId":"searchTagsAndCommitsByRefName","parameters":[{"name":"project_id","in":"path","description":"Git repo project ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"reference","in":"query","description":"Git short reference","required":false,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"List of Tags and CommitIds for a specific GitLab repo","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitReference"}}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/git_helper/user_info":{"get":{"tags":["Git"],"summary":"Current-user information","operationId":"userInfo","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Information about the current user","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserInfoResponse"}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/git_helper/user_info/{user_name}":{"get":{"tags":["Git"],"summary":"User information","operationId":"infoFromUserName","parameters":[{"name":"user_name","in":"path","description":"The username to retrieve info from","required":true,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Information about the current user","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserInfoResponse"}}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/git_helper/projects":{"get":{"tags":["Git"],"summary":"List IOC projects","operationId":"listProjects","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"List of Gitlab projects of allowed groups","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/GitProject"}}}}},"503":{"description":"Git exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/deployments":{"get":{"tags":["Deployments"],"summary":"List deployments","operationId":"listDeployments","parameters":[{"name":"ioc_id","in":"query","description":"IOC ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"host_csentry_id","in":"query","description":"Host CSEntry ID","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"status","in":"query","description":"Status","required":false,"schema":{"type":"string","enum":["QUEUED","PENDING","RUNNING","SUCCESSFUL","FAILED","FINISHED"]}},{"name":"user","in":"query","description":"User name","required":false,"schema":{"type":"string"}},{"name":"query","in":"query","description":"Search text (Search for IOC name, IOC version, Host name, Description, Created by)","required":false,"schema":{"type":"string"}},{"name":"order_by","in":"query","description":"Order by","required":false,"schema":{"type":"string","enum":["ID","CREATED_BY","CREATED_AT","START_TIME","FINISHED_AT","IOC_NAME","GIT_REFERENCE"]}},{"name":"order_asc","in":"query","description":"Order Ascending","required":false,"schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A paged array of deployments","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedDeploymentResponse"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/{deployment_id}":{"get":{"tags":["Deployments"],"summary":"Get deployment details","operationId":"fetchDeployment","parameters":[{"name":"deployment_id","in":"path","description":"Unique ID of deployment","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A deployment with details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentInfoDetails"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/jobs/{awx_job_id}":{"get":{"tags":["Deployments"],"summary":"Get deployment job details","operationId":"fetchDeploymentJobDetails","parameters":[{"name":"awx_job_id","in":"path","description":"Unique ID of AWX job","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"AWX job details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxJobDetails"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/jobs/{awx_job_id}/log":{"get":{"tags":["Deployments"],"summary":"Get deployment job log","operationId":"fetchDeploymentJobLog","parameters":[{"name":"awx_job_id","in":"path","description":"Unique ID of AWX job","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"AWX job log","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxJobLog"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/deployments/commands":{"get":{"tags":["Deployments"],"summary":"Get ad-hoc command list for a specific deployment","operationId":"listCommandsByDeployment","parameters":[{"name":"ioc_id","in":"query","description":"Unique ID of IOC","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"deployment_id","in":"query","description":"Unique ID of deployment","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"page","in":"query","description":"Page offset","required":false,"schema":{"type":"integer","format":"int32"}},{"name":"limit","in":"query","description":"Page size","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Deployment not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A command with details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagedCommandResponse"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/commands/{command_id}":{"get":{"tags":["Deployments"],"summary":"Get ad-hoc command","operationId":"fetchCommand","parameters":[{"name":"command_id","in":"path","description":"Unique ID of command","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A command descriptor","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}},"404":{"description":"Ad-hoc command not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/commands/ongoing/{ioc_id}":{"get":{"tags":["Deployments"],"summary":"Get list of ongoing ad-hoc commands for a specific IOC","operationId":"ongoingCommandByIoc","parameters":[{"name":"ioc_id","in":"path","description":"Unique ID of the IOC","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"IOC not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ongoing command (if exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocCommand"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/deployments/commands/jobs/{awx_command_id}":{"get":{"tags":["Deployments"],"summary":"Get ad-hoc command details","operationId":"fetchCommandDetails","parameters":[{"name":"awx_command_id","in":"path","description":"Unique ID of AWX command","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"A command with details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AwxCommandDetails"}}}},"503":{"description":"Remote service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"AWX command not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}}}},"/api/v1/broadcasts/announcements":{"get":{"tags":["Broadcasts"],"summary":"Get announcements","operationId":"fetchAnnouncements","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Announcements text","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Announcements"}}}}}}},"/api/v1/authentication/users":{"get":{"tags":["Authentication"],"summary":"Get Deployment Tool users","description":"Get Deployment Tool users from authorization service","operationId":"getToolUsers","parameters":[{"name":"query","in":"query","description":"User name query","required":false,"schema":{"type":"string"}}],"responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"404":{"description":"Role not found by authorization service","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/authentication/roles":{"get":{"tags":["Authentication"],"summary":"Get user roles","description":"Get user roles from authorization service","operationId":"getUserRoles","responses":{"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"403":{"description":"Permission denied","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"503":{"description":"Login server unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/authentication/logout":{"delete":{"tags":["Authentication"],"summary":"Logout","description":"Logging out the user","operationId":"logout","responses":{"503":{"description":"Login server unavailable or remote error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}},"200":{"description":"Ok","content":{"application/json":{"schema":{"type":"object"}}}},"500":{"description":"Service exception","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneralException"}}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"Deployment":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"undeployment":{"type":"boolean"},"namingName":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"endDate":{"type":"string","format":"date-time"},"comment":{"type":"string"},"iocName":{"type":"string"},"host":{"$ref":"#/components/schemas/Host"},"status":{"type":"string","enum":["PENDING","JOB","QUEUED","ERROR"]},"awxJobId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersionShort":{"type":"string"},"jobStatus":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]}}},"Host":{"type":"object","properties":{"csEntryId":{"type":"integer","format":"int64"},"csEntryIdValid":{"type":"boolean"},"fqdn":{"type":"string"},"hostName":{"type":"string"},"network":{"type":"string"}}},"GeneralException":{"type":"object","properties":{"error":{"type":"string"},"description":{"type":"string"}}},"CreateIoc":{"type":"object","properties":{"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"}},"description":"IOC to create"},"Alert":{"type":"object","properties":{"type":{"type":"string","enum":["ERROR","WARNING","INFO"]},"message":{"type":"string"},"link":{"type":"string"}}},"Ioc":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"description":{"type":"string"},"owner":{"type":"string"},"namingName":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersion":{"type":"string"},"sourceVersionShort":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/Deployment"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"active":{"type":"boolean"}}},"Undeployment":{"type":"object","properties":{"comment":{"type":"string"}},"description":"Undeployment parameters"},"AdHocCommand":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"type":{"type":"string","enum":["START","STOP"]},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]},"iocName":{"type":"string"},"awxCommandId":{"type":"integer","format":"int64"}}},"UpdateAndDeployIoc":{"type":"object","properties":{"comment":{"type":"string"},"sourceVersion":{"type":"string"},"hostCSEntryId":{"type":"integer","format":"int64"}},"description":"IOC to update"},"AwxJobMeta":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"started":{"type":"string","format":"date-time"},"finished":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]}},"description":"Job to update"},"LoginResponse":{"type":"object","properties":{"token":{"type":"string"}}},"Login":{"type":"object","properties":{"userName":{"type":"string"},"password":{"type":"string"}}},"IOCUpdateRequest":{"type":"object","properties":{"owner":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"}}},"PersonalStatisticsResponse":{"type":"object","properties":{"numberOfActiveIocs":{"type":"integer","format":"int64"}}},"GeneralStatisticsResponse":{"type":"object","properties":{"numberOfActiveHosts":{"type":"integer","format":"int64"},"numberOfCreatedIocs":{"type":"integer","format":"int64"},"numberOfActiveIocs":{"type":"integer","format":"int64"},"numberOfDeployments":{"type":"integer","format":"int64"},"numberOfActiveDeployments":{"type":"integer","format":"int64"},"numberOfHostsWithIssue":{"type":"integer","format":"int64"},"numberOfIocHostsOnTechnicalNetwork":{"type":"integer","format":"int64"},"numberOfIocHostsWithIocsDeployed":{"type":"integer","format":"int64"},"networkScopesIocCount":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}}}},"DeploymentCount":{"type":"object","properties":{"iocCount":{"type":"integer","format":"int64"},"countingDate":{"type":"string","format":"date-time"}}},"DeploymentOnHost":{"type":"object","properties":{"network":{"type":"string"},"deployments":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentCount"}}}},"DeploymentStatisticsResponse":{"type":"object","properties":{"deploymentDate":{"type":"string","format":"date-time"},"numberOfDeployments":{"type":"integer","format":"int64"},"successfulDeployments":{"type":"integer","format":"int64"}}},"ActiveIOCSForHistoryResponse":{"type":"object","properties":{"iocCount":{"type":"integer","format":"int64"},"historyDate":{"type":"string","format":"date-time"}}},"ActiveIocStatisticsResponse":{"type":"object","properties":{"network":{"type":"string"},"iocCount":{"type":"integer","format":"int64"}}},"NameResponse":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"}}},"LokiMessage":{"type":"object","properties":{"logDate":{"type":"string","format":"date-time"},"logMessage":{"type":"string"}}},"LokiResponse":{"type":"object","properties":{"lines":{"type":"array","items":{"$ref":"#/components/schemas/LokiMessage"}}}},"IocStatusResponse":{"type":"object","properties":{"iocId":{"type":"integer","format":"int64"},"alertSeverity":{"type":"string","enum":["ERROR","WARNING","INFO"]},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"active":{"type":"boolean"}}},"ActiveDeployment":{"type":"object","properties":{"host":{"$ref":"#/components/schemas/DeploymentHostInfo"}}},"DeploymentHostInfo":{"type":"object","properties":{"externalHostId":{"type":"integer","format":"int64"}}},"IocInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"namingName":{"type":"string"},"owner":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/ActiveDeployment"}}},"PagedIocResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"iocList":{"type":"array","items":{"$ref":"#/components/schemas/IocInfo"}}}},"IocDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"description":{"type":"string"},"owner":{"type":"string"},"namingName":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersion":{"type":"string"},"sourceVersionShort":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/Deployment"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"operationInProgress":{"type":"boolean"},"active":{"type":"boolean"}}},"IocWithAlarm":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"description":{"type":"string"},"owner":{"type":"string"},"namingName":{"type":"string"},"externalNameId":{"type":"integer","format":"int64"},"gitProjectId":{"type":"integer","format":"int64"},"sourceUrl":{"type":"string"},"sourceVersion":{"type":"string"},"sourceVersionShort":{"type":"string"},"activeDeployment":{"$ref":"#/components/schemas/Deployment"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"alert":{"type":"string","enum":["ERROR","WARNING","INFO"]},"active":{"type":"boolean"}}},"HostInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"fqdn":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string"},"description":{"type":"string"},"network":{"type":"string"},"deviceType":{"type":"string"}}},"HostInfoWithStatus":{"type":"object","properties":{"csEntryHost":{"$ref":"#/components/schemas/HostInfo"},"status":{"type":"string","enum":["AVAILABLE","UNREACHABLE"]},"alert":{"type":"string","enum":["ERROR","WARNING","INFO"]}}},"PagedCSEntryHostResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"csEntryHosts":{"type":"array","items":{"$ref":"#/components/schemas/HostInfoWithStatus"}}}},"CSEntryHost":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"fqdn":{"type":"string"},"name":{"type":"string"},"scope":{"type":"string"},"description":{"type":"string"},"user":{"type":"string"},"interfaces":{"type":"array","items":{"$ref":"#/components/schemas/CSEntryInterface"}},"is_ioc":{"type":"boolean"},"device_type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"ansible_vars":{"type":"object","additionalProperties":{"type":"object"}},"ansible_groups":{"type":"array","items":{"type":"string"}}}},"CSEntryHostWithStatus":{"type":"object","properties":{"csEntryHost":{"$ref":"#/components/schemas/CSEntryHost"},"assigned":{"type":"boolean"},"status":{"type":"string","enum":["AVAILABLE","UNREACHABLE"]},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}}}},"CSEntryInterface":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"network":{"type":"string"},"domain":{"type":"string"},"ip":{"type":"string"},"mac":{"type":"string"},"host":{"type":"string"},"cnames":{"type":"array","items":{"type":"string"}},"is_main":{"type":"boolean"}}},"PagedAssociatedIocs":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"deployedIocs":{"type":"array","items":{"$ref":"#/components/schemas/IocInfo"}}}},"TargetHost":{"type":"object","properties":{"externalId":{"type":"integer","format":"int64"},"fqdn":{"type":"string"},"hostName":{"type":"string"},"network":{"type":"string"}}},"GitReference":{"type":"object","properties":{"reference":{"type":"string"},"shortReference":{"type":"string"},"description":{"type":"string"},"commitDate":{"type":"string","format":"date-time"}}},"UserInfoResponse":{"type":"object","properties":{"fullName":{"type":"string"},"loginName":{"type":"string"},"avatar":{"type":"string"},"email":{"type":"string"},"gitlabUserName":{"type":"string"}}},"GitProject":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"url":{"type":"string"}}},"DeploymentInfo":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"undeployment":{"type":"boolean"},"namingName":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"host":{"$ref":"#/components/schemas/DeploymentHostInfo"}}},"PagedDeploymentResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"deployments":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentInfo"}}}},"DeploymentInfoDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"createdBy":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"undeployment":{"type":"boolean"},"namingName":{"type":"string"},"gitProjectId":{"type":"integer","format":"int64"},"sourceVersion":{"type":"string"},"endDate":{"type":"string","format":"date-time"},"comment":{"type":"string"},"host":{"$ref":"#/components/schemas/HostWithFqdn"},"status":{"type":"string","enum":["PENDING","JOB","QUEUED","ERROR"]},"awxJobId":{"type":"integer","format":"int64"},"iocId":{"type":"integer","format":"int64"},"awxJobUrl":{"type":"string"},"sourceUrl":{"type":"string"},"sourceVersionShort":{"type":"string"}}},"HostWithFqdn":{"type":"object","properties":{"csEntryId":{"type":"integer","format":"int64"},"csEntryIdValid":{"type":"boolean"},"fqdn":{"type":"string"}}},"AwxJobDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]},"started":{"type":"string","format":"date-time"},"finished":{"type":"string","format":"date-time"}}},"AwxJobLog":{"type":"object","properties":{"awxJobId":{"type":"integer","format":"int64"},"stdoutHtml":{"type":"string"},"elapsed":{"type":"number","format":"double"}}},"PagedCommandResponse":{"type":"object","properties":{"totalCount":{"type":"integer","format":"int64"},"listSize":{"type":"integer","format":"int32"},"pageNumber":{"type":"integer","format":"int32"},"limit":{"type":"integer","format":"int32"},"commands":{"type":"array","items":{"$ref":"#/components/schemas/AdHocCommand"}}}},"AwxCommandDetails":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["pending","waiting","running","failed","canceled","successful"]},"started":{"type":"string","format":"date-time"},"finished":{"type":"string","format":"date-time"}}},"Announcements":{"type":"object","properties":{"announcementsText":{"type":"string"}}}},"securitySchemes":{"apiKey":{"type":"apiKey","name":"CCCE-TOKEN","in":"header"},"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}}} \ No newline at end of file