WIFI-1698: Services - RadSEC certificates

WIFI-1717: Gateway: Handle table state changes for APC_State
This commit is contained in:
Mike Hansen
2021-03-15 11:49:08 -04:00
parent 1e0fd00d98
commit ea6e5cf761
4 changed files with 101 additions and 36 deletions

View File

@@ -103,6 +103,9 @@ import com.telecominfraproject.wlan.status.models.Status;
import com.telecominfraproject.wlan.status.models.StatusCode; import com.telecominfraproject.wlan.status.models.StatusCode;
import com.telecominfraproject.wlan.status.models.StatusDataType; import com.telecominfraproject.wlan.status.models.StatusDataType;
import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData; import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent.ApcMode;
import sts.OpensyncStats.Report; import sts.OpensyncStats.Report;
import traffic.NetworkMetadata.FlowReport; import traffic.NetworkMetadata.FlowReport;
@@ -2393,7 +2396,8 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
public void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId, public void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId,
RowUpdateOperation rowUpdateOperation) { RowUpdateOperation rowUpdateOperation) {
LOG.info("apcStateDbTableUpdate {} operations on AP {} with values {} ", rowUpdateOperation, apId, apcStateAttributes); LOG.info("apcStateDbTableUpdate {} operations on AP {} with values {} ", rowUpdateOperation, apId,
apcStateAttributes);
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
@@ -2418,7 +2422,27 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
ApcElectionEvent electionEvent = new ApcElectionEvent(RealTimeEventType.APC_Election_event, customerId,
customerId, equipmentId, System.currentTimeMillis());
if (rowUpdateOperation.equals(RowUpdateOperation.DELETE)) { if (rowUpdateOperation.equals(RowUpdateOperation.DELETE)) {
try {
electionEvent.setApcBackupDesignatedRouterIpAddress(
InetAddress.getByName(apcStateAttributes.get("backupDesignatedRouterIp")));
} catch (UnknownHostException e) {
LOG.error("UnknownHost for backupDesignatedRouterIp", e);
}
try {
electionEvent.setApcDesignatedRouterIpAddress(
InetAddress.getByName(apcStateAttributes.get("designatedRouterIp")));
} catch (UnknownHostException e) {
LOG.error("UnknownHost for designatedRouterIp", e);
}
electionEvent.setApcMode(ApcMode.valueOf(apcStateAttributes.get("mode")));
electionEvent.setEnabled(Boolean.valueOf(apcStateAttributes.get("enabled")));
electionEvent.setLocationId(ce.getLocationId());
electionEvent.setRadiusProxyAddress(null);
Status protocolStatus; Status protocolStatus;
EquipmentProtocolStatusData protocolStatusData; EquipmentProtocolStatusData protocolStatusData;
protocolStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.PROTOCOL); protocolStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.PROTOCOL);
@@ -2428,10 +2452,10 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
protocolStatusData.setIsApcConnected(false); protocolStatusData.setIsApcConnected(false);
protocolStatusData.setReportedApcAddress(null); protocolStatusData.setReportedApcAddress(null);
protocolStatusData.setRadiusProxyAddress(null); protocolStatusData.setRadiusProxyAddress(null);
protocolStatus.setDetails(protocolStatusData); protocolStatus.setDetails(protocolStatusData);
protocolStatus = statusServiceInterface.update(protocolStatus); protocolStatus = statusServiceInterface.update(protocolStatus);
electionEvent.setLocalIpAddress(protocolStatusData.getReportedIpV4Addr());
LOG.info("apcStateDbTableUpdate for {} protocolStatus {}", rowUpdateOperation, protocolStatus); LOG.info("apcStateDbTableUpdate for {} protocolStatus {}", rowUpdateOperation, protocolStatus);
} }
} else { } else {
@@ -2442,34 +2466,43 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (protocolStatus != null) { if (protocolStatus != null) {
protocolStatusData = (EquipmentProtocolStatusData) protocolStatus.getDetails(); protocolStatusData = (EquipmentProtocolStatusData) protocolStatus.getDetails();
protocolStatusData.setLastApcUpdate(System.currentTimeMillis()); protocolStatusData.setLastApcUpdate(System.currentTimeMillis());
String mode = apcStateAttributes.get("mode");
if (apcStateAttributes.containsKey("mode")) { String drAddr = apcStateAttributes.get("designatedRouterIp");
String mode = apcStateAttributes.get("mode"); String bdrAddr = apcStateAttributes.get("backupDesignatedRouterIp");
if (mode.equals("DR")) { if (mode.equals("DR")) {
String drAddr = apcStateAttributes.get("designatedRouterIp"); protocolStatusData.setReportedApcAddress(InetAddress.getByName(drAddr));
protocolStatusData.setReportedApcAddress(InetAddress.getByName(drAddr)); protocolStatusData.setRadiusProxyAddress(InetAddress.getByName(drAddr));
protocolStatusData.setRadiusProxyAddress(InetAddress.getByName(drAddr)); protocolStatusData
protocolStatusData .setIsApcConnected((drAddr == null || drAddr.equals("0.0.0.0")) ? false : true);
.setIsApcConnected((drAddr == null || drAddr.equals("0.0.0.0")) ? false : true); } else if (mode.equals("BDR")) {
} else if (mode.equals("BDR")) { protocolStatusData.setReportedApcAddress(InetAddress.getByName(bdrAddr));
String bdrAddr = apcStateAttributes.get("backupDesignatedRouterIp"); protocolStatusData.setRadiusProxyAddress(InetAddress.getByName(bdrAddr));
protocolStatusData.setReportedApcAddress(InetAddress.getByName(bdrAddr)); protocolStatusData
protocolStatusData.setRadiusProxyAddress(InetAddress.getByName(bdrAddr)); .setIsApcConnected((bdrAddr == null || bdrAddr.equals("0.0.0.0")) ? false : true);
protocolStatusData } else if (mode.equals("SR")) {
.setIsApcConnected((bdrAddr == null || bdrAddr.equals("0.0.0.0")) ? false : true); // TODO: do we set for this scenario?
} else if (mode.equals("SR")) { } else if (mode.equals("NC")) {
// TODO: do we set for this scenario? protocolStatusData.setIsApcConnected(false);
} else if (mode.equals("NC")) {
protocolStatusData.setIsApcConnected(false);
}
} }
protocolStatus.setDetails(protocolStatusData); protocolStatus.setDetails(protocolStatusData);
protocolStatus = statusServiceInterface.update(protocolStatus); protocolStatus = statusServiceInterface.update(protocolStatus);
electionEvent.setApcDesignatedRouterIpAddress(
InetAddress.getByName(drAddr));
electionEvent.setApcBackupDesignatedRouterIpAddress(
InetAddress.getByName(bdrAddr));
electionEvent.setLocalIpAddress(protocolStatusData.getReportedIpV4Addr());
electionEvent.setApcMode(ApcMode.valueOf(apcStateAttributes.get("mode")));
electionEvent.setEnabled(Boolean.valueOf(apcStateAttributes.get("enabled")));
electionEvent.setLocationId(ce.getLocationId());
LOG.info("apcStateDbTableUpdate for {} protocolStatus {}", rowUpdateOperation, protocolStatus); LOG.info("apcStateDbTableUpdate for {} protocolStatus {}", rowUpdateOperation, protocolStatus);
} }
} catch (UnknownHostException e) { } catch (UnknownHostException e) {
LOG.error("Unknown host for radius proxy.", e); LOG.error("Unknown host for radius proxy.", e);
} }
} }
mqttMessageProcessor.publishSystemEventFromTableStateMonitor(electionEvent);
} }
} }

View File

@@ -72,6 +72,7 @@ import com.telecominfraproject.wlan.status.models.Status;
import com.telecominfraproject.wlan.status.models.StatusCode; import com.telecominfraproject.wlan.status.models.StatusCode;
import com.telecominfraproject.wlan.status.models.StatusDataType; import com.telecominfraproject.wlan.status.models.StatusDataType;
import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData; import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData;
import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
import sts.OpensyncStats; import sts.OpensyncStats;
import sts.OpensyncStats.AssocType; import sts.OpensyncStats.AssocType;
@@ -269,6 +270,10 @@ public class MqttStatsPublisher {
} }
public void publishSystemEventFromTableStateMonitor(SystemEvent event) {
cloudEventDispatcherInterface.publishEvent(event);
}
void publishEvents(Report report, int customerId, long equipmentId, String apId, long locationId) { void publishEvents(Report report, int customerId, long equipmentId, String apId, long locationId) {
realtimeEventPublisher.publishSipCallEvents(customerId, equipmentId, locationId, report.getVideoVoiceReportList()); realtimeEventPublisher.publishSipCallEvents(customerId, equipmentId, locationId, report.getVideoVoiceReportList());

View File

@@ -69,14 +69,13 @@ public class OvsdbRadSecConfig extends OvsdbDaoBase {
private void configureRadiusServers(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig, List<Operation> operations) private void configureRadiusServers(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig, List<Operation> operations)
throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException { throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException {
for (RadSecConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails()) for (RadSecConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails())
.getRadSecConfigurations()) { .getRadSecConfigurations()) {
Map<String, Value> updateColumns = new HashMap<>(); Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress())); updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress()));
updateColumns.put("client_cert", new Atom<>(externalFileStoreURL + rsc.getClientCert().getApExportUrl())); getCertificateUrls(rsc, updateColumns);
updateColumns.put("radius_config_name", new Atom<>(rsc.getName())); updateColumns.put("radius_config_name", new Atom<>(rsc.getName()));
updateColumns.put("client_key", new Atom<>(externalFileStoreURL + rsc.getClientKey().getApExportUrl()));
updateColumns.put("ca_cert", new Atom<>(externalFileStoreURL + rsc.getCaCert().getApExportUrl()));
updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase())); updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase()));
Row row = new Row(updateColumns); Row row = new Row(updateColumns);
operations.add(new Insert(radiusConfigDbTable, row)); operations.add(new Insert(radiusConfigDbTable, row));
@@ -92,6 +91,24 @@ public class OvsdbRadSecConfig extends OvsdbDaoBase {
} }
} }
private void getCertificateUrls(RadSecConfiguration rsc, Map<String, Value> updateColumns) {
String clientCertFilestoreUrl = externalFileStoreURL + rsc.getClientCert().getApExportUrl();
String clientKeyFilestoreUrl = externalFileStoreURL + rsc.getClientKey().getApExportUrl();
String caCertFilestoreUrl = externalFileStoreURL + rsc.getCaCert().getApExportUrl();
if (!clientCertFilestoreUrl.contains("filestore")) {
clientCertFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getClientCert().getApExportUrl();
}
if (!clientKeyFilestoreUrl.contains("filestore")) {
clientKeyFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getClientKey().getApExportUrl();
}
if (!caCertFilestoreUrl.contains("filestore")) {
caCertFilestoreUrl = externalFileStoreURL + "/filestore/" + rsc.getCaCert().getApExportUrl();
}
updateColumns.put("client_cert", new Atom<>(clientCertFilestoreUrl));
updateColumns.put("client_key", new Atom<>(clientKeyFilestoreUrl));
updateColumns.put("ca_cert", new Atom<>(caCertFilestoreUrl));
}
private void configureRealmForRadiusServers(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig) private void configureRealmForRadiusServers(OvsdbClient ovsdbClient, OpensyncAPConfig apConfig)
throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException { throws OvsdbClientException, InterruptedException, ExecutionException, TimeoutException {
List<Operation> operations; List<Operation> operations;

View File

@@ -699,8 +699,21 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
captiveMap.put("login_success_text", captiveProfileDetails.getSuccessPageMarkdownText()); captiveMap.put("login_success_text", captiveProfileDetails.getSuccessPageMarkdownText());
captiveMap.put("authentication", captiveMap.put("authentication",
getCaptiveAuthentication(captiveProfileDetails.getAuthenticationType())); getCaptiveAuthentication(captiveProfileDetails.getAuthenticationType()));
if (!externalFileStoreURL.endsWith("/filestore/")) { if (captiveProfileDetails.getLogoFile() != null) {
externalFileStoreURL = externalFileStoreURL + "/filestore/"; String splashLogoUrl = externalFileStoreURL + captiveProfileDetails.getLogoFile().getApExportUrl();
if (!splashLogoUrl.contains("filestore")) {
splashLogoUrl = externalFileStoreURL + "/filestore/" + captiveProfileDetails.getLogoFile().getApExportUrl();
}
captiveMap.put("splash_page_logo",
splashLogoUrl);
}
if (captiveProfileDetails.getBackgroundFile() != null) {
String splashBackgroundUrl = externalFileStoreURL + captiveProfileDetails.getBackgroundFile().getApExportUrl();
if (!splashBackgroundUrl.contains("filestore")) {
splashBackgroundUrl = externalFileStoreURL + "/filestore/" + captiveProfileDetails.getBackgroundFile().getApExportUrl();
}
captiveMap.put("splash_page_background_logo",
splashBackgroundUrl);
} }
if (captiveProfileDetails.getAuthenticationType() if (captiveProfileDetails.getAuthenticationType()
.equals(CaptivePortalAuthenticationType.username)) { .equals(CaptivePortalAuthenticationType.username)) {
@@ -711,16 +724,13 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
mfi.setFileCategory(FileCategory.UsernamePasswordList); mfi.setFileCategory(FileCategory.UsernamePasswordList);
mfi.setFileType(FileType.TEXT); mfi.setFileType(FileType.TEXT);
mfi.setApExportUrl(userFilepath.getFileName().toString()); mfi.setApExportUrl(userFilepath.getFileName().toString());
captiveMap.put("username_password_file", externalFileStoreURL + mfi.getApExportUrl()); String usernamePasswordFileUrl = externalFileStoreURL + mfi.getApExportUrl();
} if (!usernamePasswordFileUrl.contains("filestore")) {
if (captiveProfileDetails.getLogoFile() != null) { usernamePasswordFileUrl = externalFileStoreURL + "/filestore/" + mfi.getApExportUrl();
captiveMap.put("splash_page_logo", }
externalFileStoreURL + captiveProfileDetails.getLogoFile().getApExportUrl()); captiveMap.put("username_password_file", usernamePasswordFileUrl);
}
if (captiveProfileDetails.getBackgroundFile() != null) {
captiveMap.put("splash_page_background_logo",
externalFileStoreURL + captiveProfileDetails.getBackgroundFile().getApExportUrl());
} }
LOG.debug("captiveMap {}", captiveMap); LOG.debug("captiveMap {}", captiveMap);
walledGardenAllowlist.addAll(captiveProfileDetails.getWalledGardenAllowlist()); walledGardenAllowlist.addAll(captiveProfileDetails.getWalledGardenAllowlist());