@@ -133,27 +133,37 @@ const httpServer = http.createServer(function (req, res) {
133133 incomingData . push ( chunk ) ;
134134 } ) ;
135135 req . on ( "end" , function ( ) {
136- const requestData = incomingData . join ( "" ) ;
137- let parsedData = JSON . parse ( requestData ) ;
138- res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
139- res . end ( "" ) ;
140- if ( Array . isArray ( parsedData ) ) {
141- console . error ( "Incoming Data is an array, need to be single object" ) ;
142- return ;
143- }
144- // redirect because endpoint is in use there, leave null to ignore.
145- // ex http://123.123.123.123:9001/raw
146- // this need a test ping ok or throw for better.
147- if ( config [ "redirect_to_golbat_url" ] ) {
148- try {
149- redirect_post_golbat ( config [ "redirect_to_golbat_url" ] , config [ "redirect_to_golbat_token" ] , JSON . stringify ( parsedData ) ) ;
136+ try {
137+ const requestData = incomingData . join ( "" ) ;
138+ let parsedData = JSON . parse ( requestData ) ;
139+ res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
140+ res . end ( "" ) ;
141+ if ( Array . isArray ( parsedData ) ) {
142+ console . error ( "Incoming Data is an array, need to be single object" ) ;
143+ return ;
150144 }
151- catch ( err ) {
152- console . error ( "Endpoint golbat offline or bad!" + err ) ;
145+ // Validate required fields
146+ if ( ! parsedData [ 'contents' ] || ! Array . isArray ( parsedData [ 'contents' ] ) ) {
147+ console . error ( "Invalid golbat data: 'contents' field missing or not an array" ) ;
148+ return ;
153149 }
154- }
155- const identifier = parsedData [ 'username' ] ;
156- for ( let i = 0 ; i < parsedData [ 'contents' ] . length ; i ++ ) {
150+ if ( parsedData [ 'contents' ] . length === 0 ) {
151+ console . error ( "Invalid golbat data: 'contents' array is empty" ) ;
152+ return ;
153+ }
154+ // redirect because endpoint is in use there, leave null to ignore.
155+ // ex http://123.123.123.123:9001/raw
156+ // this need a test ping ok or throw for better.
157+ if ( config [ "redirect_to_golbat_url" ] ) {
158+ try {
159+ redirect_post_golbat ( config [ "redirect_to_golbat_url" ] , config [ "redirect_to_golbat_token" ] , JSON . stringify ( parsedData ) ) ;
160+ }
161+ catch ( err ) {
162+ console . error ( "Endpoint golbat offline or bad!" + err ) ;
163+ }
164+ }
165+ const identifier = parsedData [ 'username' ] ;
166+ for ( let i = 0 ; i < parsedData [ 'contents' ] . length ; i ++ ) {
157167 const rawRequest = parsedData [ 'contents' ] [ i ] . request || "" ;
158168 const rawResponse = parsedData [ 'contents' ] [ i ] . payload || "" ;
159169
@@ -191,6 +201,9 @@ const httpServer = http.createServer(function (req, res) {
191201 }
192202 }
193203 }
204+ } catch ( error ) {
205+ console . error ( "Error processing golbat request:" , error ) ;
206+ }
194207 } ) ;
195208 break ;
196209 case "/traffic" :
@@ -217,25 +230,34 @@ const httpServer = http.createServer(function (req, res) {
217230 incomingData . push ( chunk ) ;
218231 } ) ;
219232 req . on ( "end" , ( ) => {
220- const requestData = incomingData . join ( "" ) ;
221- let parsedData = JSON . parse ( requestData ) ;
222- res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
223- res . end ( "" ) ;
224- const parsedResponseData = decodePayload (
225- parsedData . contents ,
226- "response"
227- ) ;
228- if ( typeof parsedResponseData === "string" ) {
229- incomingProtoWebBufferInst . write ( { error : parsedResponseData } ) ;
230- } else {
231- for ( let parsedObject of parsedResponseData ) {
232- parsedObject . identifier =
233- parsedData [ "uuid" ] ||
234- parsedData [ "devicename" ] ||
235- parsedData [ "deviceName" ] ||
236- parsedData [ "instanceName" ] ;
237- incomingProtoWebBufferInst . write ( parsedObject ) ;
233+ try {
234+ const requestData = incomingData . join ( "" ) ;
235+ let parsedData = JSON . parse ( requestData ) ;
236+ res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
237+ res . end ( "" ) ;
238+ // Validate required fields
239+ if ( ! parsedData . contents ) {
240+ console . error ( "Invalid raw data: 'contents' field missing" ) ;
241+ return ;
242+ }
243+ const parsedResponseData = decodePayload (
244+ parsedData . contents ,
245+ "response"
246+ ) ;
247+ if ( typeof parsedResponseData === "string" ) {
248+ incomingProtoWebBufferInst . write ( { error : parsedResponseData } ) ;
249+ } else {
250+ for ( let parsedObject of parsedResponseData ) {
251+ parsedObject . identifier =
252+ parsedData [ "uuid" ] ||
253+ parsedData [ "devicename" ] ||
254+ parsedData [ "deviceName" ] ||
255+ parsedData [ "instanceName" ] ;
256+ incomingProtoWebBufferInst . write ( parsedObject ) ;
257+ }
238258 }
259+ } catch ( error ) {
260+ console . error ( "Error processing raw request:" , error ) ;
239261 }
240262 } ) ;
241263 break ;
@@ -244,22 +266,31 @@ const httpServer = http.createServer(function (req, res) {
244266 incomingData . push ( chunk ) ;
245267 } ) ;
246268 req . on ( "end" , function ( ) {
247- const requestData = incomingData . join ( "" ) ;
248- let parsedData = JSON . parse ( requestData ) ;
249- res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
250- res . end ( "" ) ;
251- const parsedRequestData = decodePayload ( parsedData . contents , "request" ) ;
252- if ( typeof parsedRequestData === "string" ) {
253- outgoingProtoWebBufferInst . write ( { error : parsedRequestData } ) ;
254- } else {
255- for ( let parsedObject of parsedRequestData ) {
256- parsedObject . identifier =
257- parsedData [ "uuid" ] ||
258- parsedData [ "devicename" ] ||
259- parsedData [ "deviceName" ] ||
260- parsedData [ "instanceName" ] ;
261- outgoingProtoWebBufferInst . write ( parsedObject ) ;
269+ try {
270+ const requestData = incomingData . join ( "" ) ;
271+ let parsedData = JSON . parse ( requestData ) ;
272+ res . writeHead ( 200 , { "Content-Type" : "application/json" } ) ;
273+ res . end ( "" ) ;
274+ // Validate required fields
275+ if ( ! parsedData . contents ) {
276+ console . error ( "Invalid debug data: 'contents' field missing" ) ;
277+ return ;
278+ }
279+ const parsedRequestData = decodePayload ( parsedData . contents , "request" ) ;
280+ if ( typeof parsedRequestData === "string" ) {
281+ outgoingProtoWebBufferInst . write ( { error : parsedRequestData } ) ;
282+ } else {
283+ for ( let parsedObject of parsedRequestData ) {
284+ parsedObject . identifier =
285+ parsedData [ "uuid" ] ||
286+ parsedData [ "devicename" ] ||
287+ parsedData [ "deviceName" ] ||
288+ parsedData [ "instanceName" ] ;
289+ outgoingProtoWebBufferInst . write ( parsedObject ) ;
290+ }
262291 }
292+ } catch ( error ) {
293+ console . error ( "Error processing debug request:" , error ) ;
263294 }
264295 } ) ;
265296 break ;
0 commit comments