Add a shared cache per worker for authorized tags
[e-mobility-charging-stations-simulator.git] / src / charging-station / ocpp / 1.6 / OCPP16IncomingRequestService.ts
index 45f3723c5a3b7db22aa6fbc4cff2f1db4853d417..7aad17a15e9a95d2ee3cfb173a89296d86cb1d06 100644 (file)
@@ -58,8 +58,11 @@ import {
   OCPP16StandardParametersKey,
   OCPP16SupportedFeatureProfiles,
 } from '../../../types/ocpp/1.6/Configuration';
+import { URL, fileURLToPath } from 'url';
 
 import type ChargingStation from '../../ChargingStation';
+import { ChargingStationConfigurationUtils } from '../../ChargingStationConfigurationUtils';
+import { ChargingStationUtils } from '../../ChargingStationUtils';
 import Constants from '../../../utils/Constants';
 import { DefaultResponse } from '../../../types/ocpp/Responses';
 import { ErrorType } from '../../../types/ocpp/ErrorType';
@@ -72,7 +75,6 @@ import { OCPP16ServiceUtils } from './OCPP16ServiceUtils';
 import { OCPPConfigurationKey } from '../../../types/ocpp/Configuration';
 import OCPPError from '../../../exception/OCPPError';
 import OCPPIncomingRequestService from '../OCPPIncomingRequestService';
-import { URL } from 'url';
 import Utils from '../../../utils/Utils';
 import fs from 'fs';
 import logger from '../../../utils/Logger';
@@ -301,7 +303,10 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
       }
     } else {
       for (const key of commandPayload.key) {
-        const keyFound = chargingStation.getConfigurationKey(key);
+        const keyFound = ChargingStationConfigurationUtils.getConfigurationKey(
+          chargingStation,
+          key
+        );
         if (keyFound) {
           if (Utils.isUndefined(keyFound.visible)) {
             keyFound.visible = true;
@@ -346,7 +351,11 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
         commandPayload
       );
     }
-    const keyToChange = chargingStation.getConfigurationKey(commandPayload.key, true);
+    const keyToChange = ChargingStationConfigurationUtils.getConfigurationKey(
+      chargingStation,
+      commandPayload.key,
+      true
+    );
     if (!keyToChange) {
       return Constants.OCPP_CONFIGURATION_RESPONSE_NOT_SUPPORTED;
     } else if (keyToChange && keyToChange.readonly) {
@@ -354,19 +363,26 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
     } else if (keyToChange && !keyToChange.readonly) {
       let valueChanged = false;
       if (keyToChange.value !== commandPayload.value) {
-        chargingStation.setConfigurationKeyValue(commandPayload.key, commandPayload.value, true);
+        ChargingStationConfigurationUtils.setConfigurationKeyValue(
+          chargingStation,
+          commandPayload.key,
+          commandPayload.value,
+          true
+        );
         valueChanged = true;
       }
       let triggerHeartbeatRestart = false;
       if (keyToChange.key === OCPP16StandardParametersKey.HeartBeatInterval && valueChanged) {
-        chargingStation.setConfigurationKeyValue(
+        ChargingStationConfigurationUtils.setConfigurationKeyValue(
+          chargingStation,
           OCPP16StandardParametersKey.HeartbeatInterval,
           commandPayload.value
         );
         triggerHeartbeatRestart = true;
       }
       if (keyToChange.key === OCPP16StandardParametersKey.HeartbeatInterval && valueChanged) {
-        chargingStation.setConfigurationKeyValue(
+        ChargingStationConfigurationUtils.setConfigurationKeyValue(
+          chargingStation,
           OCPP16StandardParametersKey.HeartBeatInterval,
           commandPayload.value
         );
@@ -496,7 +512,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
                 clearCurrentCP = true;
               }
               if (clearCurrentCP) {
-                connectorStatus.chargingProfiles[index] = {} as OCPP16ChargingProfile;
+                connectorStatus.chargingProfiles.splice(index, 1);
                 logger.debug(
                   `${chargingStation.logPrefix()} Matching charging profile(s) cleared on connector id ${
                     commandPayload.connectorId
@@ -599,7 +615,11 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
           if (
             chargingStation.getLocalAuthListEnabled() &&
             chargingStation.hasAuthorizedTags() &&
-            chargingStation.authorizedTags.find((value) => value === commandPayload.idTag)
+            chargingStation.authorizedTagsCache
+              .getAuthorizedTags(
+                ChargingStationUtils.getAuthorizationFile(chargingStation.stationInfo)
+              )
+              .find((value) => value === commandPayload.idTag)
           ) {
             connectorStatus.localAuthorizeIdTag = commandPayload.idTag;
             connectorStatus.idTagLocalAuthorized = true;
@@ -866,7 +886,7 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
       let ftpClient: Client;
       try {
         const logFiles = fs
-          .readdirSync(path.resolve(__dirname, '../../../../'))
+          .readdirSync(path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../'))
           .filter((file) => file.endsWith('.log'))
           .map((file) => path.join('./', file));
         const diagnosticsArchive = chargingStation.stationInfo.chargingStationId + '_logs.tar.gz';
@@ -895,7 +915,10 @@ export default class OCPP16IncomingRequestService extends OCPPIncomingRequestSer
             });
           });
           uploadResponse = await ftpClient.uploadFrom(
-            path.join(path.resolve(__dirname, '../../../../'), diagnosticsArchive),
+            path.join(
+              path.resolve(path.dirname(fileURLToPath(import.meta.url)), '../../../../'),
+              diagnosticsArchive
+            ),
             uri.pathname + diagnosticsArchive
           );
           if (uploadResponse.code === 226) {