Initial cleanup at loading JSON schemas
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 2.0 / OCPP20IncomingRequestService.ts
index 9d352181629e30cb3a59614cf5b4f8dc4e391bb1..7a0b1e6fc202eb5b7e22579aa69bf55a1e2ed396 100644 (file)
@@ -9,25 +9,22 @@ import type { JSONSchemaType } from 'ajv';
 import OCPPError from '../../../exception/OCPPError';
 import type { JsonObject, JsonType } from '../../../types/JsonType';
 import {
-  OCPP20ClearCacheRequest,
+  type OCPP20ClearCacheRequest,
   OCPP20IncomingRequestCommand,
 } from '../../../types/ocpp/2.0/Requests';
-import type { OCPP20ClearCacheResponse } from '../../../types/ocpp/2.0/Responses';
 import { ErrorType } from '../../../types/ocpp/ErrorType';
 import { OCPPVersion } from '../../../types/ocpp/OCPPVersion';
 import type { IncomingRequestHandler } from '../../../types/ocpp/Requests';
-import Constants from '../../../utils/Constants';
 import logger from '../../../utils/Logger';
 import type ChargingStation from '../../ChargingStation';
-import { ChargingStationUtils } from '../../ChargingStationUtils';
 import OCPPIncomingRequestService from '../OCPPIncomingRequestService';
 import { OCPP20ServiceUtils } from './OCPP20ServiceUtils';
 
 const moduleName = 'OCPP20IncomingRequestService';
 
 export default class OCPP20IncomingRequestService extends OCPPIncomingRequestService {
+  protected jsonSchemas: Map<OCPP20IncomingRequestCommand, JSONSchemaType<JsonObject>>;
   private incomingRequestHandlers: Map<OCPP20IncomingRequestCommand, IncomingRequestHandler>;
-  private jsonSchemas: Map<OCPP20IncomingRequestCommand, JSONSchemaType<JsonObject>>;
 
   public constructor() {
     if (new.target?.name === moduleName) {
@@ -40,15 +37,9 @@ export default class OCPP20IncomingRequestService extends OCPPIncomingRequestSer
     this.jsonSchemas = new Map<OCPP20IncomingRequestCommand, JSONSchemaType<JsonObject>>([
       [
         OCPP20IncomingRequestCommand.CLEAR_CACHE,
-        JSON.parse(
-          fs.readFileSync(
-            path.resolve(
-              path.dirname(fileURLToPath(import.meta.url)),
-              '../../../assets/json-schemas/ocpp/2.0/ClearCacheRequest.json'
-            ),
-            'utf8'
-          )
-        ) as JSONSchemaType<OCPP20ClearCacheRequest>,
+        this.parseJsonSchemaFile<OCPP20ClearCacheRequest>(
+          '../../../assets/json-schemas/ocpp/2.0/ClearCacheRequest.json'
+        ),
       ],
     ]);
     this.validatePayload.bind(this);
@@ -63,9 +54,9 @@ export default class OCPP20IncomingRequestService extends OCPPIncomingRequestSer
     let response: JsonType;
     if (
       chargingStation.getOcppStrictCompliance() === true &&
-      chargingStation.isInPendingState() === true /* &&
-       (commandName === OCPP20IncomingRequestCommand.REMOTE_START_TRANSACTION ||
-        commandName === OCPP20IncomingRequestCommand.REMOTE_STOP_TRANSACTION ) */
+      chargingStation.isInPendingState() === true &&
+      (commandName === OCPP20IncomingRequestCommand.REQUEST_START_TRANSACTION ||
+        commandName === OCPP20IncomingRequestCommand.REQUEST_STOP_TRANSACTION)
     ) {
       throw new OCPPError(
         ErrorType.SECURITY_ERROR,
@@ -141,7 +132,7 @@ export default class OCPP20IncomingRequestService extends OCPPIncomingRequestSer
     commandName: OCPP20IncomingRequestCommand,
     commandPayload: JsonType
   ): boolean {
-    if (this.jsonSchemas.has(commandName)) {
+    if (this.jsonSchemas.has(commandName) === true) {
       return this.validateIncomingRequestPayload(
         chargingStation,
         commandName,
@@ -150,15 +141,17 @@ export default class OCPP20IncomingRequestService extends OCPPIncomingRequestSer
       );
     }
     logger.warn(
-      `${chargingStation.logPrefix()} ${moduleName}.validatePayload: No JSON schema found for command ${commandName} PDU validation`
+      `${chargingStation.logPrefix()} ${moduleName}.validatePayload: No JSON schema found for command '${commandName}' PDU validation`
     );
     return false;
   }
 
-  private handleRequestClearCache(chargingStation: ChargingStation): OCPP20ClearCacheResponse {
-    chargingStation.authorizedTagsCache.deleteAuthorizedTags(
-      ChargingStationUtils.getAuthorizationFile(chargingStation.stationInfo)
-    );
-    return Constants.OCPP_RESPONSE_ACCEPTED;
+  private parseJsonSchemaFile<T extends JsonType>(relativePath: string): JSONSchemaType<T> {
+    return JSON.parse(
+      fs.readFileSync(
+        path.resolve(path.dirname(fileURLToPath(import.meta.url)), relativePath),
+        'utf8'
+      )
+    ) as JSONSchemaType<T>;
   }
 }