/
update_signals_route.ts
96 lines (91 loc) · 2.31 KB
/
update_signals_route.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
import Hapi from 'hapi';
import Joi from 'joi';
import { isFunction } from 'lodash/fp';
import { updateSignal } from '../alerts/update_signals';
import { UpdateSignalsRequest } from '../alerts/types';
import { updateSignalSchema } from './schemas';
export const createUpdateSignalsRoute: Hapi.ServerRoute = {
method: 'PUT',
path: '/api/siem/signals/{id?}',
options: {
tags: ['access:signals-all'],
validate: {
options: {
abortEarly: false,
},
params: {
id: Joi.when(Joi.ref('$payload.id'), {
is: Joi.exist(),
then: Joi.string().optional(),
otherwise: Joi.string().required(),
}),
},
payload: updateSignalSchema,
},
},
async handler(request: UpdateSignalsRequest, headers) {
const {
description,
enabled,
false_positives: falsePositives,
filter,
from,
immutable,
query,
language,
// eslint-disable-next-line @typescript-eslint/camelcase
saved_id: savedId,
filters,
id,
index,
interval,
// eslint-disable-next-line @typescript-eslint/camelcase
max_signals: maxSignals,
name,
severity,
size,
tags,
to,
type,
references,
} = request.payload;
const alertsClient = isFunction(request.getAlertsClient) ? request.getAlertsClient() : null;
const actionsClient = isFunction(request.getActionsClient) ? request.getActionsClient() : null;
if (!alertsClient || !actionsClient) {
return headers.response().code(404);
}
return updateSignal({
alertsClient,
actionsClient,
description,
enabled,
falsePositives,
filter,
from,
immutable,
query,
language,
savedId,
filters,
id: request.params.id ? request.params.id : id,
index,
interval,
maxSignals,
name,
severity,
size,
tags,
to,
type,
references,
});
},
};
export const updateSignalsRoute = (server: Hapi.Server) => {
server.route(createUpdateSignalsRoute);
};