/**
* Copyright 2012 Radware and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* ### class description ###
*
* @author Gera Goft
* @version 0.1
*/
package com.radware.defenseflow.dp;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import me.prettyprint.cassandra.serializers.StringSerializer;
import org.opendaylight.defense4all.framework.core.ExceptionControlApp;
import org.opendaylight.defense4all.framework.core.FMHolder;
import org.opendaylight.defense4all.framework.core.HealthTracker;
import org.opendaylight.defense4all.framework.core.RepoCD;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SecurityConfig {
private static Logger log = LoggerFactory.getLogger(SecurityConfig.class);
/* SecurityConfiguration Repo columns */
public static final String KEY = "key";
public static final String MITIGATION_KEY = "mitigation_key";
public static final String PNKEY = "pnkey";
public static final String NETWORK_NAME = "configured_network_name";
public static final String BDOS_PROFILE_NAME = "bdos_profile_name";
public static final String OUT_OF_STATE_PROFILE_NAME = "out_of_state_profile_name";
public static final String DNS_PROFILE_NAME = "dns_profile_name";
public static final String SECURITY_POLICY_NAME = "security_policy_name";
public static final String DP_NAME_PREFIX = "dp_";
protected static ArrayList<RepoCD> securityConfigurationRCDs = null;
public String key;
public String mitigationKey;
public String pnkey;
public String configuredNetworkName;
public String bdosProfileName;
public String oosProfileName;
public String dnsProfileName;
public String securityPolicyName;
public List<String> configuredDPs;
public String generateAndSetKey() {
key = generateKey(configuredNetworkName, mitigationKey);
return key;
}
public static String generateKey(String networkName, String mitigationKey) {
StringBuilder sb = new StringBuilder();
sb.append(networkName); sb.append("_"); sb.append(mitigationKey);
return sb.toString();
}
/* ### Description ###
* @param param_name
*/
public SecurityConfig() {
key = null; mitigationKey = null; pnkey = null; configuredNetworkName = null; bdosProfileName = null;
oosProfileName = null; dnsProfileName = null; securityPolicyName = null; configuredDPs = null;
}
public SecurityConfig(SecurityConfig other) {
this.key = other.key; this.mitigationKey = other.mitigationKey; this.pnkey = other.pnkey;
this.configuredNetworkName = other.configuredNetworkName; this.bdosProfileName = other.bdosProfileName;
this.oosProfileName = other.oosProfileName; this.dnsProfileName = other.dnsProfileName;
this.securityPolicyName = other.securityPolicyName;
this.configuredDPs = new ArrayList<String>(); this.configuredDPs.addAll(other.configuredDPs);
}
public SecurityConfig(Hashtable<String, Object> row) throws ExceptionControlApp {
this();
try {
key = (String) row.get(KEY);
mitigationKey = (String) row.get(MITIGATION_KEY);
pnkey = (String) row.get(PNKEY);
configuredNetworkName = (String) row.get(NETWORK_NAME);
bdosProfileName = (String) row.get(BDOS_PROFILE_NAME);
oosProfileName = (String) row.get(OUT_OF_STATE_PROFILE_NAME);
dnsProfileName = (String) row.get(DNS_PROFILE_NAME);
securityPolicyName = (String) row.get(SECURITY_POLICY_NAME);
/* Retrieve all dpNames */
Iterator<Map.Entry<String,Object>> iter = row.entrySet().iterator();
Map.Entry<String,Object> entry; String key;
configuredDPs = new ArrayList<String>();
while(iter.hasNext()) {
entry = iter.next();
key = (String) entry.getKey();
if(key.startsWith(DP_NAME_PREFIX))
configuredDPs.add((String) (entry.getValue()));
}
} catch (Exception e) {
log.error("Excepted trying to inflate SecurityConfig from row.", e);
FMHolder.get().getHealthTracker().reportHealthIssue(HealthTracker.MINOR_HEALTH_ISSUE);
throw new ExceptionControlApp("Excepted trying to inflate SecurityConfig from row.", e);
}
}
public Hashtable<String, Object> toRow() {
/* Change any null value to empty, otherwise Hashtable.put() will throw an exception */
if(key == null) key = "";
if(mitigationKey == null ) mitigationKey = "";
if(pnkey == null ) pnkey = "";
if(configuredNetworkName == null) configuredNetworkName = "";
if(bdosProfileName == null) bdosProfileName = "";
if(oosProfileName == null) oosProfileName = "";
if(dnsProfileName == null) dnsProfileName = "";
if(securityPolicyName == null) securityPolicyName = "";
if(configuredDPs == null) configuredDPs = new ArrayList<String>();
Hashtable<String, Object> row = new Hashtable<String, Object>();
row.put(KEY, key);
row.put(MITIGATION_KEY, mitigationKey);
row.put(PNKEY, pnkey);
row.put(NETWORK_NAME, configuredNetworkName);
row.put(BDOS_PROFILE_NAME, bdosProfileName);
row.put(OUT_OF_STATE_PROFILE_NAME, oosProfileName);
row.put(DNS_PROFILE_NAME, dnsProfileName);
row.put(SECURITY_POLICY_NAME, securityPolicyName);
for(String dpName : configuredDPs)
row.put(DP_NAME_PREFIX + dpName, dpName);
return row;
}
public static List<RepoCD> getRCDs() {
if(securityConfigurationRCDs == null) {
RepoCD rcd;
securityConfigurationRCDs = new ArrayList<RepoCD>();
rcd = new RepoCD(KEY, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
rcd = new RepoCD(MITIGATION_KEY, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
rcd = new RepoCD(PNKEY, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
rcd = new RepoCD(NETWORK_NAME, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
rcd = new RepoCD(BDOS_PROFILE_NAME, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
rcd = new RepoCD(OUT_OF_STATE_PROFILE_NAME, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
rcd = new RepoCD(DNS_PROFILE_NAME, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
rcd = new RepoCD(SECURITY_POLICY_NAME, StringSerializer.get(), null); securityConfigurationRCDs.add(rcd);
}
return securityConfigurationRCDs;
}
}