Fixed ci type check errors for alerting and actions properties for SIEM RouteHandlerContext (#59400) (#59442)

* Fixed ci type check errors for alerting and actions optional properties on RouteHandlerContext

* Reverted git revert b83f81458c
This commit is contained in:
Yuliia Naumenko 2020-03-05 09:55:49 -08:00 committed by GitHub
parent 3538d5ac92
commit ee29a5d339
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
54 changed files with 144 additions and 29 deletions

View file

@ -63,7 +63,7 @@ describe('add_prepackaged_rules_route', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const request = addPrepackagedRulesRequest();
const response = await server.inject(request, context);

View file

@ -33,6 +33,9 @@ export const addPrepackedRulesRoute = (router: IRouter) => {
const siemResponse = buildSiemResponse(response);
try {
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const clusterClient = context.core.elasticsearch.dataClient;

View file

@ -39,7 +39,7 @@ describe('create_rules_bulk', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getReadBulkRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -35,11 +35,14 @@ export const createRulesBulkRoute = (router: IRouter) => {
},
},
async (context, request, response) => {
const siemResponse = buildSiemResponse(response);
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const clusterClient = context.core.elasticsearch.dataClient;
const siemClient = context.siem.getSiemClient();
const siemResponse = buildSiemResponse(response);
if (!actionsClient || !alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -41,7 +41,7 @@ describe('create_rules', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getCreateRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -59,6 +59,9 @@ export const createRulesRoute = (router: IRouter): void => {
const siemResponse = buildSiemResponse(response);
try {
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const clusterClient = context.core.elasticsearch.dataClient;

View file

@ -82,7 +82,7 @@ describe('delete_rules', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getDeleteBulkRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -32,10 +32,14 @@ export const deleteRulesBulkRoute = (router: IRouter) => {
},
};
const handler: Handler = async (context, request, response) => {
const siemResponse = buildSiemResponse(response);
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const savedObjectsClient = context.core.savedObjects.client;
const siemResponse = buildSiemResponse(response);
if (!actionsClient || !alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -56,7 +56,7 @@ describe('delete_rules', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getDeleteRequest(), context);
expect(response.status).toEqual(404);

View file

@ -33,6 +33,9 @@ export const deleteRulesRoute = (router: IRouter) => {
try {
const { id, rule_id: ruleId } = request.query;
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();

View file

@ -27,8 +27,11 @@ export const exportRulesRoute = (router: IRouter, config: LegacyServices['config
},
},
async (context, request, response) => {
const alertsClient = context.alerting.getAlertsClient();
const siemResponse = buildSiemResponse(response);
if (!context.alerting) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
if (!alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -36,7 +36,7 @@ describe('find_rules', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getFindRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -32,6 +32,9 @@ export const findRulesRoute = (router: IRouter) => {
try {
const { query } = request;
if (!context.alerting) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const savedObjectsClient = context.core.savedObjects.client;

View file

@ -29,7 +29,7 @@ describe('find_statuses', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(ruleStatusRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -34,9 +34,12 @@ export const findRulesStatusesRoute = (router: IRouter) => {
},
async (context, request, response) => {
const { query } = request;
const siemResponse = buildSiemResponse(response);
if (!context.alerting) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const savedObjectsClient = context.core.savedObjects.client;
const siemResponse = buildSiemResponse(response);
if (!alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -58,7 +58,7 @@ describe('get_prepackaged_rule_status_route', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getPrepackagedRulesStatusRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -28,8 +28,11 @@ export const getPrepackagedRulesStatusRoute = (router: IRouter) => {
},
},
async (context, request, response) => {
const alertsClient = context.alerting.getAlertsClient();
const siemResponse = buildSiemResponse(response);
if (!context.alerting) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
if (!alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -78,14 +78,14 @@ describe('import_rules_route', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(request, context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });
});
test('returns 404 if actionsClient is not available on the route', async () => {
context.actions.getActionsClient = jest.fn();
context.actions!.getActionsClient = jest.fn();
const response = await server.inject(request, context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -54,12 +54,16 @@ export const importRulesRoute = (router: IRouter, config: LegacyServices['config
},
},
async (context, request, response) => {
const siemResponse = buildSiemResponse(response);
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const clusterClient = context.core.elasticsearch.dataClient;
const savedObjectsClient = context.core.savedObjects.client;
const siemClient = context.siem.getSiemClient();
const siemResponse = buildSiemResponse(response);
if (!actionsClient || !alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -48,7 +48,7 @@ describe('patch_rules_bulk', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getPatchBulkRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -30,10 +30,14 @@ export const patchRulesBulkRoute = (router: IRouter) => {
},
},
async (context, request, response) => {
const siemResponse = buildSiemResponse(response);
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const savedObjectsClient = context.core.savedObjects.client;
const siemResponse = buildSiemResponse(response);
if (!actionsClient || !alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -49,7 +49,7 @@ describe('patch_rules', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getPatchRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -60,6 +60,10 @@ export const patchRulesRoute = (router: IRouter) => {
const siemResponse = buildSiemResponse(response);
try {
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const savedObjectsClient = context.core.savedObjects.client;

View file

@ -36,7 +36,7 @@ describe('read_signals', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getReadRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -30,9 +30,13 @@ export const readRulesRoute = (router: IRouter) => {
},
async (context, request, response) => {
const { id, rule_id: ruleId } = request.query;
const siemResponse = buildSiemResponse(response);
if (!context.alerting) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const savedObjectsClient = context.core.savedObjects.client;
const siemResponse = buildSiemResponse(response);
try {
if (!alertsClient) {

View file

@ -53,7 +53,7 @@ describe('update_rules_bulk', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getUpdateBulkRequest(), context);
expect(response.status).toEqual(404);
expect(response.body).toEqual({ message: 'Not Found', status_code: 404 });

View file

@ -30,11 +30,15 @@ export const updateRulesBulkRoute = (router: IRouter) => {
},
},
async (context, request, response) => {
const siemResponse = buildSiemResponse(response);
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const savedObjectsClient = context.core.savedObjects.client;
const siemClient = context.siem.getSiemClient();
const siemResponse = buildSiemResponse(response);
if (!actionsClient || !alertsClient) {
return siemResponse.error({ statusCode: 404 });

View file

@ -50,7 +50,7 @@ describe('update_rules', () => {
});
test('returns 404 if alertClient is not available on the route', async () => {
context.alerting.getAlertsClient = jest.fn();
context.alerting!.getAlertsClient = jest.fn();
const response = await server.inject(getUpdateRequest(), context);
expect(response.status).toEqual(404);

View file

@ -60,6 +60,9 @@ export const updateRulesRoute = (router: IRouter) => {
const siemResponse = buildSiemResponse(response);
try {
if (!context.alerting || !context.actions) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
const actionsClient = context.actions.getActionsClient();
const savedObjectsClient = context.core.savedObjects.client;

View file

@ -19,9 +19,13 @@ export const readTagsRoute = (router: IRouter) => {
},
},
async (context, request, response) => {
const alertsClient = context.alerting.getAlertsClient();
const siemResponse = buildSiemResponse(response);
if (!context.alerting) {
return siemResponse.error({ statusCode: 404 });
}
const alertsClient = context.alerting.getAlertsClient();
if (!alertsClient) {
return siemResponse.error({ statusCode: 404 });
}

View file

@ -41,6 +41,9 @@ export const createActionRoute = (router: IRouter, licenseState: LicenseState) =
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.actions) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' });
}
const actionsClient = context.actions.getActionsClient();
const action = req.body;
const actionRes: ActionResult = await actionsClient.create({ action });

View file

@ -41,6 +41,9 @@ export const deleteActionRoute = (router: IRouter, licenseState: LicenseState) =
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.actions) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' });
}
const actionsClient = context.actions.getActionsClient();
const { id } = req.params;
await actionsClient.delete({ id });

View file

@ -57,6 +57,9 @@ export const findActionRoute = (router: IRouter, licenseState: LicenseState) =>
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.actions) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' });
}
const actionsClient = context.actions.getActionsClient();
const query = req.query;
const options: FindOptions['options'] = {

View file

@ -36,6 +36,9 @@ export const getActionRoute = (router: IRouter, licenseState: LicenseState) => {
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.actions) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' });
}
const actionsClient = context.actions.getActionsClient();
const { id } = req.params;
return res.ok({

View file

@ -58,7 +58,7 @@ describe('listActionTypesRoute', () => {
}
`);
expect(context.actions.listTypes).toHaveBeenCalledTimes(1);
expect(context.actions!.listTypes).toHaveBeenCalledTimes(1);
expect(res.ok).toHaveBeenCalledWith({
body: listTypes,

View file

@ -29,6 +29,9 @@ export const listActionTypesRoute = (router: IRouter, licenseState: LicenseState
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.actions) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' });
}
return res.ok({
body: context.actions.listTypes(),
});

View file

@ -43,6 +43,9 @@ export const updateActionRoute = (router: IRouter, licenseState: LicenseState) =
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.actions) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for actions' });
}
const actionsClient = context.actions.getActionsClient();
const { id } = req.params;
const { name, config, secrets } = req.body;

View file

@ -22,7 +22,7 @@ export interface Services {
declare module 'src/core/server' {
interface RequestHandlerContext {
actions: {
actions?: {
getActionsClient: () => ActionsClient;
listTypes: ActionTypeRegistry['list'];
};

View file

@ -57,6 +57,9 @@ export const createAlertRoute = (router: IRouter, licenseState: LicenseState) =>
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const alert = req.body;
const alertRes: Alert = await alertsClient.create({ data: alert });

View file

@ -36,6 +36,9 @@ export const deleteAlertRoute = (router: IRouter, licenseState: LicenseState) =>
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
await alertsClient.delete({ id });

View file

@ -36,6 +36,9 @@ export const disableAlertRoute = (router: IRouter, licenseState: LicenseState) =
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
await alertsClient.disable({ id });

View file

@ -36,6 +36,9 @@ export const enableAlertRoute = (router: IRouter, licenseState: LicenseState) =>
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
await alertsClient.enable({ id });

View file

@ -57,6 +57,9 @@ export const findAlertRoute = (router: IRouter, licenseState: LicenseState) => {
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const query = req.query;
const options: FindOptions['options'] = {

View file

@ -36,6 +36,9 @@ export const getAlertRoute = (router: IRouter, licenseState: LicenseState) => {
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
return res.ok({

View file

@ -36,6 +36,9 @@ export const getAlertStateRoute = (router: IRouter, licenseState: LicenseState)
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
const state = await alertsClient.getAlertState({ id });

View file

@ -70,7 +70,7 @@ describe('listAlertTypesRoute', () => {
}
`);
expect(context.alerting.listTypes).toHaveBeenCalledTimes(1);
expect(context.alerting!.listTypes).toHaveBeenCalledTimes(1);
expect(res.ok).toHaveBeenCalledWith({
body: listTypes,

View file

@ -29,6 +29,9 @@ export const listAlertTypesRoute = (router: IRouter, licenseState: LicenseState)
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
return res.ok({
body: context.alerting.listTypes(),
});

View file

@ -36,6 +36,9 @@ export const muteAllAlertRoute = (router: IRouter, licenseState: LicenseState) =
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
await alertsClient.muteAll({ id });

View file

@ -37,6 +37,9 @@ export const muteAlertInstanceRoute = (router: IRouter, licenseState: LicenseSta
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { alertId, alertInstanceId } = req.params;
await alertsClient.muteInstance({ alertId, alertInstanceId });

View file

@ -36,6 +36,9 @@ export const unmuteAllAlertRoute = (router: IRouter, licenseState: LicenseState)
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
await alertsClient.unmuteAll({ id });

View file

@ -37,6 +37,9 @@ export const unmuteAlertInstanceRoute = (router: IRouter, licenseState: LicenseS
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { alertId, alertInstanceId } = req.params;
await alertsClient.unmuteInstance({ alertId, alertInstanceId });

View file

@ -57,6 +57,9 @@ export const updateAlertRoute = (router: IRouter, licenseState: LicenseState) =>
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
const { name, actions, params, schedule, tags } = req.body;

View file

@ -36,6 +36,9 @@ export const updateApiKeyRoute = (router: IRouter, licenseState: LicenseState) =
res: KibanaResponseFactory
): Promise<IKibanaResponse<any>> {
verifyApiAccess(licenseState);
if (!context.alerting) {
return res.badRequest({ body: 'RouteHandlerContext is not registered for alerting' });
}
const alertsClient = context.alerting.getAlertsClient();
const { id } = req.params;
await alertsClient.updateApiKey({ id });

View file

@ -21,7 +21,7 @@ export type SpaceIdToNamespaceFunction = (spaceId?: string) => string | undefine
declare module 'src/core/server' {
interface RequestHandlerContext {
alerting: {
alerting?: {
getAlertsClient: () => AlertsClient;
listTypes: AlertTypeRegistry['list'];
};