44 * you may not use this file except in compliance with the Elastic License.
55 */
66
7- import { RequestHandler , KibanaRequest } from 'src/core/server' ;
7+ import { RequestHandler } from 'src/core/server' ;
88import { TypeOf } from '@kbn/config-schema' ;
9+ import { AbortController } from 'abort-controller' ;
910import {
1011 GetAgentsResponse ,
1112 GetOneAgentResponse ,
@@ -32,13 +33,6 @@ import * as AgentService from '../../services/agents';
3233import * as APIKeyService from '../../services/api_keys' ;
3334import { appContextService } from '../../services/app_context' ;
3435
35- export function getInternalUserSOClient ( request : KibanaRequest ) {
36- // soClient as kibana internal users, be carefull on how you use it, security is not enabled
37- return appContextService . getSavedObjects ( ) . getScopedClient ( request , {
38- excludedWrappers : [ 'security' ] ,
39- } ) ;
40- }
41-
4236export const getAgentHandler : RequestHandler < TypeOf <
4337 typeof GetOneAgentRequestSchema . params
4438> > = async ( context , request , response ) => {
@@ -176,14 +170,20 @@ export const postAgentCheckinHandler: RequestHandler<
176170 TypeOf < typeof PostAgentCheckinRequestSchema . body >
177171> = async ( context , request , response ) => {
178172 try {
179- const soClient = getInternalUserSOClient ( request ) ;
173+ const soClient = appContextService . getInternalUserSOClient ( request ) ;
180174 const res = APIKeyService . parseApiKeyFromHeaders ( request . headers ) ;
181175 const agent = await AgentService . getAgentByAccessAPIKeyId ( soClient , res . apiKeyId ) ;
176+ const abortController = new AbortController ( ) ;
177+ request . events . aborted$ . subscribe ( ( ) => {
178+ abortController . abort ( ) ;
179+ } ) ;
180+ const signal = abortController . signal ;
182181 const { actions } = await AgentService . agentCheckin (
183182 soClient ,
184183 agent ,
185184 request . body . events || [ ] ,
186- request . body . local_metadata
185+ request . body . local_metadata ,
186+ { signal }
187187 ) ;
188188 const body : PostAgentCheckinResponse = {
189189 action : 'checkin' ,
@@ -198,16 +198,24 @@ export const postAgentCheckinHandler: RequestHandler<
198198 } ;
199199
200200 return response . ok ( { body } ) ;
201- } catch ( e ) {
202- if ( e . isBoom && e . output . statusCode === 404 ) {
203- return response . notFound ( {
204- body : { message : `Agent ${ request . params . agentId } not found` } ,
201+ } catch ( err ) {
202+ const logger = appContextService . getLogger ( ) ;
203+ if ( err . isBoom ) {
204+ if ( err . output . statusCode >= 500 ) {
205+ logger . error ( err ) ;
206+ }
207+
208+ return response . customError ( {
209+ statusCode : err . output . statusCode ,
210+ body : { message : err . output . payload . message } ,
205211 } ) ;
206212 }
207213
214+ logger . error ( err ) ;
215+
208216 return response . customError ( {
209217 statusCode : 500 ,
210- body : { message : e . message } ,
218+ body : { message : err . message } ,
211219 } ) ;
212220 }
213221} ;
@@ -218,7 +226,7 @@ export const postAgentEnrollHandler: RequestHandler<
218226 TypeOf < typeof PostAgentEnrollRequestSchema . body >
219227> = async ( context , request , response ) => {
220228 try {
221- const soClient = getInternalUserSOClient ( request ) ;
229+ const soClient = appContextService . getInternalUserSOClient ( request ) ;
222230 const { apiKeyId } = APIKeyService . parseApiKeyFromHeaders ( request . headers ) ;
223231 const enrollmentAPIKey = await APIKeyService . getEnrollmentAPIKeyById ( soClient , apiKeyId ) ;
224232
0 commit comments