X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Fcharging-station%2Focpp%2FOCPPRequestService.ts;h=e4890a91d8a6a88e2c8d282fcd603c2b2c31baef;hb=98fc1389a2464ce8738047f8990731ae31938ee5;hp=c089c86a1af4092dd57e1deb281dab48c9d7769a;hpb=b0342994636646699094b2d16a767d6d902d2bde;p=e-mobility-charging-stations-simulator.git diff --git a/src/charging-station/ocpp/OCPPRequestService.ts b/src/charging-station/ocpp/OCPPRequestService.ts index c089c86a..e4890a91 100644 --- a/src/charging-station/ocpp/OCPPRequestService.ts +++ b/src/charging-station/ocpp/OCPPRequestService.ts @@ -37,7 +37,10 @@ export default abstract class OCPPRequestService { protected constructor(version: OCPPVersion, ocppResponseService: OCPPResponseService) { this.version = version; - this.ajv = new Ajv(); + this.ajv = new Ajv({ + keywords: ['javaType'], + multipleOfPrecision: 2, + }); ajvFormats(this.ajv); this.ocppResponseService = ocppResponseService; this.requestHandler.bind(this); @@ -127,19 +130,23 @@ export default abstract class OCPPRequestService { protected validateRequestPayload( chargingStation: ChargingStation, - commandName: RequestCommand, - schema: JSONSchemaType, + commandName: RequestCommand | IncomingRequestCommand, payload: T ): boolean { if (chargingStation.getPayloadSchemaValidation() === false) { return true; } + const schema = this.getRequestPayloadValidationSchema(chargingStation, commandName); + if (schema === false) { + return true; + } const validate = this.ajv.compile(schema); + OCPPServiceUtils.convertDateToISOString(payload); if (validate(payload)) { return true; } logger.error( - `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: Request PDU is invalid: %j`, + `${chargingStation.logPrefix()} ${moduleName}.validateRequestPayload: Command '${commandName}' request PDU is invalid: %j`, validate.errors ); // OCPPError usage here is debatable: it's an error in the OCPP stack but not targeted to sendError(). @@ -327,6 +334,7 @@ export default abstract class OCPPRequestService { commandName, messagePayload as JsonType, ]); + this.validateRequestPayload(chargingStation, commandName, messagePayload as JsonType); messageToSend = JSON.stringify([ messageType, messageId, @@ -337,6 +345,7 @@ export default abstract class OCPPRequestService { // Response case MessageType.CALL_RESULT_MESSAGE: // Build response + // FIXME: Validate response payload messageToSend = JSON.stringify([messageType, messageId, messagePayload] as Response); break; // Error Message @@ -384,4 +393,9 @@ export default abstract class OCPPRequestService { commandParams?: JsonType, params?: RequestParams ): Promise; + + protected abstract getRequestPayloadValidationSchema( + chargingStation: ChargingStation, + commandName: RequestCommand | IncomingRequestCommand + ): JSONSchemaType | false; }