import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
+
/**
- * This is the base class for all Servlets in the provisioning code.
- * It provides standard constants and some common methods.
+ * This is the base class for all Servlets in the provisioning code. It provides standard constants and some common
+ * methods.
*
* @author Robert Eby
* @version $Id: BaseServlet.java,v 1.16 2014/03/12 19:45:40 eby Exp $
*/
@SuppressWarnings("serial")
public class BaseServlet extends HttpServlet implements ProvDataProvider {
- public static final String BEHALF_HEADER = "X-ATT-DR-ON-BEHALF-OF";
- public static final String FEED_BASECONTENT_TYPE = "application/vnd.att-dr.feed";
- public static final String FEED_CONTENT_TYPE = "application/vnd.att-dr.feed; version=2.0";
+
+ public static final String BEHALF_HEADER = "X-ATT-DR-ON-BEHALF-OF";
+ static final String FEED_BASECONTENT_TYPE = "application/vnd.att-dr.feed";
+ public static final String FEED_CONTENT_TYPE = "application/vnd.att-dr.feed; version=2.0";
public static final String FEEDFULL_CONTENT_TYPE = "application/vnd.att-dr.feed-full; version=2.0";
public static final String FEEDLIST_CONTENT_TYPE = "application/vnd.att-dr.feed-list; version=1.0";
- public static final String SUB_BASECONTENT_TYPE = "application/vnd.att-dr.subscription";
- public static final String SUB_CONTENT_TYPE = "application/vnd.att-dr.subscription; version=2.0";
- public static final String SUBFULL_CONTENT_TYPE = "application/vnd.att-dr.subscription-full; version=2.0";
- public static final String SUBLIST_CONTENT_TYPE = "application/vnd.att-dr.subscription-list; version=1.0";
+ static final String SUB_BASECONTENT_TYPE = "application/vnd.att-dr.subscription";
+ public static final String SUB_CONTENT_TYPE = "application/vnd.att-dr.subscription; version=2.0";
+ public static final String SUBFULL_CONTENT_TYPE = "application/vnd.att-dr.subscription-full; version=2.0";
+ static final String SUBLIST_CONTENT_TYPE = "application/vnd.att-dr.subscription-list; version=1.0";
//Adding groups functionality, ...1610
- public static final String GROUP_BASECONTENT_TYPE = "application/vnd.att-dr.group";
- public static final String GROUP_CONTENT_TYPE = "application/vnd.att-dr.group; version=2.0";
- public static final String GROUPFULL_CONTENT_TYPE = "application/vnd.att-dr.group-full; version=2.0";
+ static final String GROUP_BASECONTENT_TYPE = "application/vnd.att-dr.group";
+ public static final String GROUP_CONTENT_TYPE = "application/vnd.att-dr.group; version=2.0";
+ static final String GROUPFULL_CONTENT_TYPE = "application/vnd.att-dr.group-full; version=2.0";
public static final String GROUPLIST_CONTENT_TYPE = "application/vnd.att-dr.fegrouped-list; version=1.0";
- public static final String LOGLIST_CONTENT_TYPE = "application/vnd.att-dr.log-list; version=1.0";
+ public static final String LOGLIST_CONTENT_TYPE = "application/vnd.att-dr.log-list; version=1.0";
public static final String PROVFULL_CONTENT_TYPE1 = "application/vnd.att-dr.provfeed-full; version=1.0";
public static final String PROVFULL_CONTENT_TYPE2 = "application/vnd.att-dr.provfeed-full; version=2.0";
- public static final String CERT_ATTRIBUTE = "javax.servlet.request.X509Certificate";
-
- public static final String DB_PROBLEM_MSG = "There has been a problem with the DB. It is suggested you try the operation again.";
-
- public static final int DEFAULT_MAX_FEEDS = 10000;
- public static final int DEFAULT_MAX_SUBS = 100000;
- public static final int DEFAULT_POKETIMER1 = 5;
- public static final int DEFAULT_POKETIMER2 = 30;
- public static final String DEFAULT_DOMAIN = "web.att.com";
- public static final String DEFAULT_PROVSRVR_NAME = "feeds-drtr.web.att.com";
- public static final String RESEARCH_SUBNET = "135.207.136.128/25";
- public static final String STATIC_ROUTING_NODES = ""; //Adding new param for static Routing - Rally:US664862-1610
-
- /** A boolean to trigger one time "provisioning changed" event on startup */
- private static boolean startmsg_flag = true;
- /** This POD should require SSL connections from clients; pulled from the DB (PROV_REQUIRE_SECURE) */
- private static boolean require_secure = true;
- /** This POD should require signed, recognized certificates from clients; pulled from the DB (PROV_REQUIRE_CERT) */
- private static boolean require_cert = true;
- /** The set of authorized addresses and networks; pulled from the DB (PROV_AUTH_ADDRESSES) */
+ public static final String CERT_ATTRIBUTE = "javax.servlet.request.X509Certificate";
+
+ static final String DB_PROBLEM_MSG = "There has been a problem with the DB. It is suggested you try the operation again.";
+
+ private static final int DEFAULT_MAX_FEEDS = 10000;
+ private static final int DEFAULT_MAX_SUBS = 100000;
+ private static final int DEFAULT_POKETIMER1 = 5;
+ private static final int DEFAULT_POKETIMER2 = 30;
+ private static final String DEFAULT_DOMAIN = "onap";
+ private static final String DEFAULT_PROVSRVR_NAME = "dmaap-dr-prov";
+ private static final String RESEARCH_SUBNET = "10.42.0.0/16";
+ private static final String STATIC_ROUTING_NODES = ""; //Adding new param for static Routing - Rally:US664862-1610
+
+ /**
+ * A boolean to trigger one time "provisioning changed" event on startup
+ */
+ private static boolean startmsgFlag = true;
+ /**
+ * This POD should require SSL connections from clients; pulled from the DB (PROV_REQUIRE_SECURE)
+ */
+ private static boolean requireSecure = true;
+ /**
+ * This POD should require signed, recognized certificates from clients; pulled from the DB (PROV_REQUIRE_CERT)
+ */
+ private static boolean requireCert = true;
+ /**
+ * The set of authorized addresses and networks; pulled from the DB (PROV_AUTH_ADDRESSES)
+ */
private static Set<String> authorizedAddressesAndNetworks = new HashSet<String>();
- /** The set of authorized names; pulled from the DB (PROV_AUTH_SUBJECTS) */
+ /**
+ * The set of authorized names; pulled from the DB (PROV_AUTH_SUBJECTS)
+ */
private static Set<String> authorizedNames = new HashSet<String>();
- /** The FQDN of the initially "active" provisioning server in this Data Router ecosystem */
- private static String initial_active_pod;
- /** The FQDN of the initially "standby" provisioning server in this Data Router ecosystem */
- private static String initial_standby_pod;
- /** The FQDN of this provisioning server in this Data Router ecosystem */
- private static String this_pod;
- /** "Timer 1" - used to determine when to notify nodes of provisioning changes */
- private static long poke_timer1;
- /** "Timer 2" - used to determine when to notify nodes of provisioning changes */
- private static long poke_timer2;
- /** Array of nodes names and/or FQDNs */
+ /**
+ * The FQDN of the initially "active" provisioning server in this Data Router ecosystem
+ */
+ private static String initialActivePod;
+ /**
+ * The FQDN of the initially "standby" provisioning server in this Data Router ecosystem
+ */
+ private static String initialStandbyPod;
+ /**
+ * The FQDN of this provisioning server in this Data Router ecosystem
+ */
+ private static String thisPod;
+ /**
+ * "Timer 1" - used to determine when to notify nodes of provisioning changes
+ */
+ private static long pokeTimer1;
+ /**
+ * "Timer 2" - used to determine when to notify nodes of provisioning changes
+ */
+ private static long pokeTimer2;
+ /**
+ * Array of nodes names and/or FQDNs
+ */
private static String[] nodes = new String[0];
- /** Array of node IP addresses */
+ /**
+ * Array of node IP addresses
+ */
private static InetAddress[] nodeAddresses = new InetAddress[0];
- /** Array of POD IP addresses */
+ /**
+ * Array of POD IP addresses
+ */
private static InetAddress[] podAddresses = new InetAddress[0];
- /** The maximum number of feeds allowed; pulled from the DB (PROV_MAXFEED_COUNT) */
- protected static int max_feeds = 0;
- /** The maximum number of subscriptions allowed; pulled from the DB (PROV_MAXSUB_COUNT) */
- protected static int max_subs = 0;
- /** The current number of feeds in the system */
- protected static int active_feeds = 0;
- /** The current number of subscriptions in the system */
- protected static int active_subs = 0;
- /** The domain used to generate a FQDN from the "bare" node names */
- public static String prov_domain = "web.att.com";
- /** The standard FQDN of the provisioning server in this Data Router ecosystem */
- public static String prov_name = "feeds-drtr.web.att.com";
- /** The standard FQDN of the ACTIVE provisioning server in this Data Router ecosystem */
- public static String active_prov_name = "feeds-drtr.web.att.com";
- /** Special subnet that is allowed access to /internal */
- protected static String special_subnet = RESEARCH_SUBNET;
-
- /** Special subnet that is allowed access to /internal to Lab Machine */
- protected static String special_subnet_secondary = RESEARCH_SUBNET;
- protected static String static_routing_nodes = STATIC_ROUTING_NODES; //Adding new param for static Routing - Rally:US664862-1610
-
- /** This logger is used to log provisioning events */
+ /**
+ * The maximum number of feeds allowed; pulled from the DB (PROV_MAXFEED_COUNT)
+ */
+ static int maxFeeds = 0;
+ /**
+ * The maximum number of subscriptions allowed; pulled from the DB (PROV_MAXSUB_COUNT)
+ */
+ static int maxSubs = 0;
+ /**
+ * The current number of feeds in the system
+ */
+ static int activeFeeds = 0;
+ /**
+ * The current number of subscriptions in the system
+ */
+ static int activeSubs = 0;
+ /**
+ * The domain used to generate a FQDN from the "bare" node names
+ */
+ private static String provDomain = "web.att.com";
+ /**
+ * The standard FQDN of the provisioning server in this Data Router ecosystem
+ */
+ public static String provName = "feeds-drtr.web.att.com";
+ /**
+ * The standard FQDN of the ACTIVE provisioning server in this Data Router ecosystem
+ */
+ public static String activeProvName = "feeds-drtr.web.att.com";
+ /**
+ * Special subnet that is allowed access to /internal
+ */
+ private static String researchSubnet = RESEARCH_SUBNET;
+ /**
+ * Special subnet that is allowed access to /internal to Lab Machine
+ */
+ private static String researchSubnet1 = RESEARCH_SUBNET;
+ private static String staticRoutingNodes = STATIC_ROUTING_NODES; //Adding new param for static Routing - Rally:US664862-1610
+
+ /**
+ * This logger is used to log provisioning events
+ */
protected static Logger eventlogger;
- /** This logger is used to log internal events (errors, etc.) */
+ /**
+ * This logger is used to log internal events (errors, etc.)
+ */
protected static Logger intlogger;
- /** Authorizer - interface to the Policy Engine */
+ /**
+ * Authorizer - interface to the Policy Engine
+ */
protected static Authorizer authz;
- /** The Synchronizer used to sync active DB to standby one */
- protected static SynchronizerTask synctask = null;
+ /**
+ * The Synchronizer used to sync active DB to standby one
+ */
+ private static SynchronizerTask synctask = null;
//Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047.
private InetAddress thishost;
private InetAddress loopback;
private static Boolean mailSendFlag = false;
- public static final String MAILCONFIG_FILE = "mail.properties";
+ private static final String MAILCONFIG_FILE = "mail.properties";
private static Properties mailprops;
+
+ //DMAAP-597 (Tech Dept) REST request source IP auth relaxation to accommodate OOM kubernetes deploy
+ private static String isAddressAuthEnabled = (new DB()).getProperties()
+ .getProperty("org.onap.dmaap.datarouter.provserver.isaddressauthenabled", "false");
+
/**
* Initialize data common to all the provisioning server servlets.
*/
protected BaseServlet() {
- if (eventlogger == null)
+ if (eventlogger == null) {
eventlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.events");
- if (intlogger == null)
- intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");
- if (authz == null)
+ }
+ if (intlogger == null) {
+ intlogger = Logger.getLogger("org.onap.dmaap.datarouter.provisioning.internal");
+ }
+ if (authz == null) {
authz = new ProvAuthorizer(this);
- if (startmsg_flag) {
- startmsg_flag = false;
+ }
+ if (startmsgFlag) {
+ startmsgFlag = false;
provisioningParametersChanged();
}
if (synctask == null) {
synctask = SynchronizerTask.getSynchronizer();
}
String name = this.getClass().getName();
- intlogger.info("PROV0002 Servlet "+name+" started.");
+ intlogger.info("PROV0002 Servlet " + name + " started.");
}
+
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
thishost = InetAddress.getLocalHost();
loopback = InetAddress.getLoopbackAddress();
- checkHttpsRelaxation(); //Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047.
+ //checkHttpsRelaxation(); //Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047.
} catch (UnknownHostException e) {
// ignore
}
}
- protected int getIdFromPath(HttpServletRequest req) {
+
+ int getIdFromPath(HttpServletRequest req) {
String path = req.getPathInfo();
- if (path == null || path.length() < 2)
+ if (path == null || path.length() < 2) {
return -1;
+ }
try {
return Integer.parseInt(path.substring(1));
} catch (NumberFormatException e) {
return -1;
}
}
+
/**
* Read the request's input stream and return a JSONObject from it
+ *
* @param req the HTTP request
* @return the JSONObject, or null if the stream cannot be parsed
*/
- protected JSONObject getJSONfromInput(HttpServletRequest req) {
+ JSONObject getJSONfromInput(HttpServletRequest req) {
JSONObject jo = null;
try {
jo = new JSONObject(new JSONTokener(req.getInputStream()));
- if (intlogger.isDebugEnabled())
- intlogger.debug("JSON: "+jo.toString());
+ if (intlogger.isDebugEnabled()) {
+ intlogger.debug("JSON: " + jo.toString());
+ }
} catch (Exception e) {
- intlogger.info("Error reading JSON: "+e);
+ intlogger.info("Error reading JSON: " + e);
}
return jo;
}
+
/**
- * Check if the remote host is authorized to perform provisioning.
- * Is the request secure?
- * Is it coming from an authorized IP address or network (configured via PROV_AUTH_ADDRESSES)?
- * Does it have a valid client certificate (configured via PROV_AUTH_SUBJECTS)?
+ * Check if the remote host is authorized to perform provisioning. Is the request secure? Is it coming from an
+ * authorized IP address or network (configured via PROV_AUTH_ADDRESSES)? Does it have a valid client certificate
+ * (configured via PROV_AUTH_SUBJECTS)?
+ *
* @param request the request
* @return an error string, or null if all is OK
*/
- protected String isAuthorizedForProvisioning(HttpServletRequest request) {
+ String isAuthorizedForProvisioning(HttpServletRequest request) {
+ if (!Boolean.parseBoolean(isAddressAuthEnabled)) {
+ return null;
+ }
// Is the request https?
- if (require_secure && !request.isSecure()) {
+ if (requireSecure && !request.isSecure()) {
return "Request must be made over an HTTPS connection.";
}
found |= addressMatchesNetwork(ip, addrnet);
}
if (!found) {
- return "Unauthorized address: "+remote;
+ return "Unauthorized address: " + remote;
}
} catch (UnknownHostException e) {
- return "Unauthorized address: "+remote;
+ return "Unauthorized address: " + remote;
}
// Does remote have a valid certificate?
- if (require_cert) {
+ if (requireCert) {
X509Certificate certs[] = (X509Certificate[]) request.getAttribute(CERT_ATTRIBUTE);
if (certs == null || certs.length == 0) {
return "Client certificate is missing.";
// No problems!
return null;
}
+
/**
* Check if the remote IP address is authorized to see the /internal URL tree.
+ *
* @param request the HTTP request
* @return true iff authorized
*/
- protected boolean isAuthorizedForInternal(HttpServletRequest request) {
+ boolean isAuthorizedForInternal(HttpServletRequest request) {
+
try {
+ if (!Boolean.parseBoolean(isAddressAuthEnabled)) {
+ return true;
+ }
InetAddress ip = InetAddress.getByName(request.getRemoteAddr());
for (InetAddress node : getNodeAddresses()) {
- if (node != null && ip.equals(node))
+ if (node != null && ip.equals(node)) {
return true;
+ }
}
for (InetAddress pod : getPodAddresses()) {
- if (pod != null && ip.equals(pod))
+ if (pod != null && ip.equals(pod)) {
return true;
+ }
}
- if (thishost != null && ip.equals(thishost))
+ if (thishost != null && ip.equals(thishost)) {
return true;
- if (loopback != null && ip.equals(loopback))
+ }
+ if (loopback != null && ip.equals(loopback)) {
return true;
+ }
// Also allow the "special subnet" access
- if (addressMatchesNetwork(ip, special_subnet_secondary))
+ if (addressMatchesNetwork(ip, researchSubnet1)) {
return true;
- if (addressMatchesNetwork(ip, special_subnet))
+ }
+ if (addressMatchesNetwork(ip, researchSubnet)) {
return true;
+ }
} catch (UnknownHostException e) {
// ignore
}
return false;
}
+
/**
* Check if an IP address matches a network address.
+ *
* @param ip the IP address
* @param s the network address; a bare IP address may be matched also
* @return true if they intersect
*/
- protected static boolean addressMatchesNetwork(InetAddress ip, String s) {
+ private static boolean addressMatchesNetwork(InetAddress ip, String s) {
int mlen = -1;
int n = s.indexOf("/");
if (n >= 0) {
- mlen = Integer.parseInt(s.substring(n+1));
+ mlen = Integer.parseInt(s.substring(n + 1));
s = s.substring(0, n);
}
try {
InetAddress i2 = InetAddress.getByName(s);
byte[] b1 = ip.getAddress();
byte[] b2 = i2.getAddress();
- if (b1.length != b2.length)
+ if (b1.length != b2.length) {
return false;
+ }
if (mlen > 0) {
byte[] masks = {
- (byte)0x00, (byte)0x80, (byte)0xC0, (byte)0xE0,
- (byte)0xF0, (byte)0xF8, (byte)0xFC, (byte)0xFE
+ (byte) 0x00, (byte) 0x80, (byte) 0xC0, (byte) 0xE0,
+ (byte) 0xF0, (byte) 0xF8, (byte) 0xFC, (byte) 0xFE
};
- byte mask = masks[mlen%8];
- for (n = mlen/8; n < b1.length; n++) {
+ byte mask = masks[mlen % 8];
+ for (n = mlen / 8; n < b1.length; n++) {
b1[n] &= mask;
b2[n] &= mask;
mask = 0;
}
}
- for (n = 0; n < b1.length; n++)
- if (b1[n] != b2[n])
+ for (n = 0; n < b1.length; n++) {
+ if (b1[n] != b2[n]) {
return false;
+ }
+ }
} catch (UnknownHostException e) {
return false;
}
return true;
}
+
/**
- * Something has changed in the provisioning data.
- * Start the timers that will cause the pre-packaged JSON string to be regenerated,
- * and cause nodes and the other provisioning server to be notified.
+ * Something has changed in the provisioning data. Start the timers that will cause the pre-packaged JSON string to
+ * be regenerated, and cause nodes and the other provisioning server to be notified.
*/
public static void provisioningDataChanged() {
long now = System.currentTimeMillis();
Poker p = Poker.getPoker();
- p.setTimers(now + (poke_timer1 * 1000L), now + (poke_timer2 * 1000L));
+ p.setTimers(now + (pokeTimer1 * 1000L), now + (pokeTimer2 * 1000L));
}
+
/**
* Something in the parameters has changed, reload all parameters from the DB.
*/
public static void provisioningParametersChanged() {
- Map<String,String> map = Parameters.getParameters();
- require_secure = getBoolean(map, Parameters.PROV_REQUIRE_SECURE);
- require_cert = getBoolean(map, Parameters.PROV_REQUIRE_CERT);
+ Map<String, String> map = Parameters.getParameters();
+ requireSecure = getBoolean(map, Parameters.PROV_REQUIRE_SECURE);
+ requireCert = getBoolean(map, Parameters.PROV_REQUIRE_CERT);
authorizedAddressesAndNetworks = getSet(map, Parameters.PROV_AUTH_ADDRESSES);
- authorizedNames = getSet (map, Parameters.PROV_AUTH_SUBJECTS);
- nodes = getSet (map, Parameters.NODES).toArray(new String[0]);
- max_feeds = getInt (map, Parameters.PROV_MAXFEED_COUNT, DEFAULT_MAX_FEEDS);
- max_subs = getInt (map, Parameters.PROV_MAXSUB_COUNT, DEFAULT_MAX_SUBS);
- poke_timer1 = getInt (map, Parameters.PROV_POKETIMER1, DEFAULT_POKETIMER1);
- poke_timer2 = getInt (map, Parameters.PROV_POKETIMER2, DEFAULT_POKETIMER2);
- prov_domain = getString (map, Parameters.PROV_DOMAIN, DEFAULT_DOMAIN);
- prov_name = getString (map, Parameters.PROV_NAME, DEFAULT_PROVSRVR_NAME);
- active_prov_name = getString (map, Parameters.PROV_ACTIVE_NAME, prov_name);
- special_subnet = getString (map, Parameters.PROV_SPECIAL_SUBNET, RESEARCH_SUBNET);
- static_routing_nodes = getString (map, Parameters.STATIC_ROUTING_NODES, ""); //Adding new param for static Routing - Rally:US664862-1610
- initial_active_pod = getString (map, Parameters.ACTIVE_POD, "");
- initial_standby_pod = getString (map, Parameters.STANDBY_POD, "");
- static_routing_nodes = getString (map, Parameters.STATIC_ROUTING_NODES, ""); //Adding new param for static Routing - Rally:US664862-1610
- active_feeds = Feed.countActiveFeeds();
- active_subs = Subscription.countActiveSubscriptions();
+ authorizedNames = getSet(map, Parameters.PROV_AUTH_SUBJECTS);
+ nodes = getSet(map, Parameters.NODES).toArray(new String[0]);
+ maxFeeds = getInt(map, Parameters.PROV_MAXFEED_COUNT, DEFAULT_MAX_FEEDS);
+ maxSubs = getInt(map, Parameters.PROV_MAXSUB_COUNT, DEFAULT_MAX_SUBS);
+ pokeTimer1 = getInt(map, Parameters.PROV_POKETIMER1, DEFAULT_POKETIMER1);
+ pokeTimer2 = getInt(map, Parameters.PROV_POKETIMER2, DEFAULT_POKETIMER2);
+ provDomain = getString(map, Parameters.PROV_DOMAIN, DEFAULT_DOMAIN);
+ provName = getString(map, Parameters.PROV_NAME, DEFAULT_PROVSRVR_NAME);
+ activeProvName = getString(map, Parameters.PROV_ACTIVE_NAME, provName);
+ researchSubnet = getString(map, Parameters.PROV_SPECIAL_SUBNET, RESEARCH_SUBNET);
+ staticRoutingNodes = getString(map, Parameters.STATIC_ROUTING_NODES,
+ ""); //Adding new param for static Routing - Rally:US664862-1610
+ initialActivePod = getString(map, Parameters.ACTIVE_POD, "");
+ initialStandbyPod = getString(map, Parameters.STANDBY_POD, "");
+ staticRoutingNodes = getString(map, Parameters.STATIC_ROUTING_NODES,
+ ""); //Adding new param for static Routing - Rally:US664862-1610
+ activeFeeds = Feed.countActiveFeeds();
+ activeSubs = Subscription.countActiveSubscriptions();
try {
- this_pod = InetAddress.getLocalHost().getHostName();
+ thisPod = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
- this_pod = "";
+ thisPod = "";
intlogger.warn("PROV0014 Cannot determine the name of this provisioning server.");
}
// Normalize the nodes, and fill in nodeAddresses
InetAddress[] na = new InetAddress[nodes.length];
for (int i = 0; i < nodes.length; i++) {
- if (nodes[i].indexOf('.') < 0)
- nodes[i] += "." + prov_domain;
try {
na[i] = InetAddress.getByName(nodes[i]);
- intlogger.debug("PROV0003 DNS lookup: "+nodes[i]+" => "+na[i].toString());
+ intlogger.debug("PROV0003 DNS lookup: " + nodes[i] + " => " + na[i].toString());
} catch (UnknownHostException e) {
na[i] = null;
- intlogger.warn("PROV0004 Cannot lookup "+nodes[i]+": "+e);
+ intlogger.warn("PROV0004 Cannot lookup " + nodes[i] + ": " + e);
}
}
//Reset Nodes arr after - removing static routing Nodes, Rally Userstory - US664862 .
List<String> filterNodes = new ArrayList<>();
- for (int i = 0; i < nodes.length; i++) {
- if(!static_routing_nodes.contains(nodes[i])){
- filterNodes.add(nodes[i]);
+ for (String node : nodes) {
+ if (!staticRoutingNodes.contains(node)) {
+ filterNodes.add(node);
}
}
- String [] filteredNodes = filterNodes.toArray(new String[filterNodes.size()]);
- nodes = filteredNodes;
+ nodes = filterNodes.toArray(new String[filterNodes.size()]);
nodeAddresses = na;
NodeClass.setNodes(nodes); // update NODES table
String[] pods = getPods();
na = new InetAddress[pods.length];
for (int i = 0; i < pods.length; i++) {
- if (pods[i].indexOf('.') < 0)
- pods[i] += "." + prov_domain;
try {
na[i] = InetAddress.getByName(pods[i]);
- intlogger.debug("PROV0003 DNS lookup: "+pods[i]+" => "+na[i].toString());
+ intlogger.debug("PROV0003 DNS lookup: " + pods[i] + " => " + na[i].toString());
} catch (UnknownHostException e) {
na[i] = null;
- intlogger.warn("PROV0004 Cannot lookup "+pods[i]+": "+e);
+ intlogger.warn("PROV0004 Cannot lookup " + pods[i] + ": " + e);
}
}
podAddresses = na;
ThrottleFilter.configure();
// Check if we are active or standby POD
- if (!isInitialActivePOD() && !isInitialStandbyPOD())
+ if (!isInitialActivePOD() && !isInitialStandbyPOD()) {
intlogger.warn("PROV0015 This machine is neither the active nor the standby POD.");
+ }
}
- /**Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047.
- * Load mail properties.
- * @author vs215k
+ /**
+ * Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047. Load mail properties.
*
- **/
+ * @author vs215k
+ **/
private void loadMailProperties() {
if (mailprops == null) {
mailprops = new Properties();
try {
mailprops.load(inStream);
} catch (IOException e) {
- intlogger.fatal("PROV9003 Opening properties: "+e.getMessage());
+ intlogger.fatal("PROV9003 Opening properties: " + e.getMessage());
e.printStackTrace();
System.exit(1);
- }
- finally {
+ } finally {
try {
inStream.close();
- }
- catch (IOException e) {
+ } catch (IOException e) {
}
}
}
}
- /**Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047.
- * Check if HTTPS Relexaction is enabled
- * @author vs215k
+ /**
+ * Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047. Check if HTTPS Relexaction is enabled
*
- **/
+ * @author vs215k
+ **/
private void checkHttpsRelaxation() {
- if(mailSendFlag == false) {
+ if (!mailSendFlag) {
Properties p = (new DB()).getProperties();
- intlogger.info("HTTPS relaxatio: "+p.get("org.onap.dmaap.datarouter.provserver.https.relaxation"));
+ intlogger.info("HTTPS relaxation: " + p.get("org.onap.dmaap.datarouter.provserver.https.relaxation"));
- if(p.get("org.onap.dmaap.datarouter.provserver.https.relaxation").equals("true")) {
+ if (p.get("org.onap.dmaap.datarouter.provserver.https.relaxation").equals("true")) {
try {
- notifyPSTeam(p.get("org.onap.dmaap.datarouter.provserver.https.relax.notify").toString());
- }
- catch (Exception e) {
+ notifyPSTeam(p.get("org.onap.dmaap.datarouter.provserver.https.relax.notify").toString());
+ } catch (Exception e) {
e.printStackTrace();
}
- }
+ }
mailSendFlag = true;
}
}
- /**Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047.
- * @author vs215k
+ /**
+ * Data Router Subscriber HTTPS Relaxation feature USERSTORYID:US674047.
+ *
* @param email - list of email ids to notify if HTTP relexcation is enabled.
- **/
+ * @author vs215k
+ **/
private void notifyPSTeam(String email) throws Exception {
loadMailProperties(); //Load HTTPS Relex mail properties.
String[] emails = email.split(Pattern.quote("|"));
try {
- Message msg = new MimeMessage(session);
- msg.setFrom(new InternetAddress(mailprops.get("com.att.dmaap.datarouter.mail.from").toString()));
+ Message msg = new MimeMessage(session);
+ msg.setFrom(new InternetAddress(mailprops.get("com.att.dmaap.datarouter.mail.from").toString()));
- InternetAddress[] addressTo = new InternetAddress[emails.length];
- for ( int x =0 ; x < emails.length; x++) {
- addressTo[x] = new InternetAddress(emails[x]);
- }
+ InternetAddress[] addressTo = new InternetAddress[emails.length];
+ for (int x = 0; x < emails.length; x++) {
+ addressTo[x] = new InternetAddress(emails[x]);
+ }
- msg.addRecipients(Message.RecipientType.TO, addressTo);
- msg.setSubject(mailprops.get("com.att.dmaap.datarouter.mail.subject").toString());
- htmlPart.setContent(mailprops.get("com.att.dmaap.datarouter.mail.body").toString().replace("[SERVER]", InetAddress.getLocalHost().getHostName()), "text/html");
- mp.addBodyPart(htmlPart);
- msg.setContent(mp);
+ msg.addRecipients(Message.RecipientType.TO, addressTo);
+ msg.setSubject(mailprops.get("com.att.dmaap.datarouter.mail.subject").toString());
+ htmlPart.setContent(mailprops.get("com.att.dmaap.datarouter.mail.body").toString()
+ .replace("[SERVER]", InetAddress.getLocalHost().getHostName()), "text/html");
+ mp.addBodyPart(htmlPart);
+ msg.setContent(mp);
- System.out.println(mailprops.get("com.att.dmaap.datarouter.mail.body").toString().replace("[SERVER]", InetAddress.getLocalHost().getHostName()));
+ System.out.println(mailprops.get("com.att.dmaap.datarouter.mail.body").toString()
+ .replace("[SERVER]", InetAddress.getLocalHost().getHostName()));
- Transport.send(msg);
- intlogger.info("HTTPS relaxation mail is sent to - : "+email);
+ Transport.send(msg);
+ intlogger.info("HTTPS relaxation mail is sent to - : " + email);
} catch (AddressException e) {
- intlogger.error("Invalid email address, unable to send https relaxation mail to - : "+email);
+ intlogger.error("Invalid email address, unable to send https relaxation mail to - : " + email);
} catch (MessagingException e) {
- intlogger.error("Invalid email address, unable to send https relaxation mail to - : "+email);
+ intlogger.error("Invalid email address, unable to send https relaxation mail to - : " + email);
}
}
/**
* Get an array of all node names in the DR network.
+ *
* @return an array of Strings
*/
public static String[] getNodes() {
return nodes;
}
+
/**
* Get an array of all node InetAddresses in the DR network.
+ *
* @return an array of InetAddresses
*/
public static InetAddress[] getNodeAddresses() {
return nodeAddresses;
}
+
/**
* Get an array of all POD names in the DR network.
+ *
* @return an array of Strings
*/
public static String[] getPods() {
- return new String[] { initial_active_pod, initial_standby_pod };
+ return new String[]{initialActivePod, initialStandbyPod};
}
+
/**
* Get an array of all POD InetAddresses in the DR network.
+ *
* @return an array of InetAddresses
*/
- public static InetAddress[] getPodAddresses() {
+ private static InetAddress[] getPodAddresses() {
return podAddresses;
}
+
/**
- * Gets the FQDN of the initially ACTIVE provisioning server (POD).
- * Note: this used to be called isActivePOD(), however, that is a misnomer, as the active status
- * could shift to the standby POD without these parameters changing. Hence, the function names
- * have been changed to more accurately reflect their purpose.
+ * Gets the FQDN of the initially ACTIVE provisioning server (POD). Note: this used to be called isActivePOD(),
+ * however, that is a misnomer, as the active status could shift to the standby POD without these parameters
+ * changing. Hence, the function names have been changed to more accurately reflect their purpose.
+ *
* @return the FQDN
*/
public static boolean isInitialActivePOD() {
- return this_pod.equals(initial_active_pod);
+ return thisPod.equals(initialActivePod);
}
+
/**
- * Gets the FQDN of the initially STANDBY provisioning server (POD).
- * Note: this used to be called isStandbyPOD(), however, that is a misnomer, as the standby status
- * could shift to the active POD without these parameters changing. Hence, the function names
- * have been changed to more accurately reflect their purpose.
+ * Gets the FQDN of the initially STANDBY provisioning server (POD). Note: this used to be called isStandbyPOD(),
+ * however, that is a misnomer, as the standby status could shift to the active POD without these parameters
+ * changing. Hence, the function names have been changed to more accurately reflect their purpose.
+ *
* @return the FQDN
*/
public static boolean isInitialStandbyPOD() {
- return this_pod.equals(initial_standby_pod);
+ return thisPod.equals(initialStandbyPod);
}
+
/**
* INSERT an {@link Insertable} bean into the database.
+ *
* @param bean the bean representing a row to insert
* @return true if the INSERT was successful
*/
protected boolean doInsert(Insertable bean) {
- boolean rv = false;
+ boolean rv;
DB db = new DB();
Connection conn = null;
try {
rv = bean.doInsert(conn);
} catch (SQLException e) {
rv = false;
- intlogger.warn("PROV0005 doInsert: "+e.getMessage());
+ intlogger.warn("PROV0005 doInsert: " + e.getMessage());
e.printStackTrace();
} finally {
- if (conn != null)
+ if (conn != null) {
db.release(conn);
+ }
}
return rv;
}
+
/**
* UPDATE an {@link Updateable} bean in the database.
+ *
* @param bean the bean representing a row to update
* @return true if the UPDATE was successful
*/
protected boolean doUpdate(Updateable bean) {
- boolean rv = false;
+ boolean rv;
DB db = new DB();
Connection conn = null;
try {
rv = bean.doUpdate(conn);
} catch (SQLException e) {
rv = false;
- intlogger.warn("PROV0006 doUpdate: "+e.getMessage());
+ intlogger.warn("PROV0006 doUpdate: " + e.getMessage());
e.printStackTrace();
} finally {
- if (conn != null)
+ if (conn != null) {
db.release(conn);
+ }
}
return rv;
}
+
/**
* DELETE an {@link Deleteable} bean from the database.
+ *
* @param bean the bean representing a row to delete
* @return true if the DELETE was successful
*/
protected boolean doDelete(Deleteable bean) {
- boolean rv = false;
+ boolean rv;
DB db = new DB();
Connection conn = null;
try {
rv = bean.doDelete(conn);
} catch (SQLException e) {
rv = false;
- intlogger.warn("PROV0007 doDelete: "+e.getMessage());
+ intlogger.warn("PROV0007 doDelete: " + e.getMessage());
e.printStackTrace();
} finally {
- if (conn != null)
+ if (conn != null) {
db.release(conn);
+ }
}
return rv;
}
- private static boolean getBoolean(Map<String,String> map, String name) {
+
+ private static boolean getBoolean(Map<String, String> map, String name) {
String s = map.get(name);
return (s != null) && s.equalsIgnoreCase("true");
}
- private static String getString(Map<String,String> map, String name, String dflt) {
+
+ private static String getString(Map<String, String> map, String name, String dflt) {
String s = map.get(name);
return (s != null) ? s : dflt;
}
- private static int getInt(Map<String,String> map, String name, int dflt) {
+
+ private static int getInt(Map<String, String> map, String name, int dflt) {
try {
String s = map.get(name);
return Integer.parseInt(s);
return dflt;
}
}
- private static Set<String> getSet(Map<String,String> map, String name) {
+
+ private static Set<String> getSet(Map<String, String> map, String name) {
Set<String> set = new HashSet<String>();
String s = map.get(name);
if (s != null) {
if (pp != null) {
for (String t : pp) {
String t2 = t.trim();
- if (t2.length() > 0)
+ if (t2.length() > 0) {
set.add(t2);
+ }
}
}
}
}
/**
- * A class used to encapsulate a Content-type header, separating out the "version" attribute
- * (which defaults to "1.0" if missing).
+ * A class used to encapsulate a Content-type header, separating out the "version" attribute (which defaults to
+ * "1.0" if missing).
*/
public class ContentHeader {
+
private String type = "";
private Map<String, String> map = new HashMap<String, String>();
- public ContentHeader() {
+
+ ContentHeader() {
this("", "1.0");
}
- public ContentHeader(String t, String v) {
+
+ ContentHeader(String t, String v) {
type = t.trim();
map.put("version", v);
}
+
public String getType() {
return type;
}
+
public String getAttribute(String key) {
String s = map.get(key);
- if (s == null)
+ if (s == null) {
s = "";
+ }
return s;
}
}
/**
* Get the ContentHeader from an HTTP request.
+ *
* @param req the request
* @return the header, encapsulated in a ContentHeader object
*/
- public ContentHeader getContentHeader(HttpServletRequest req) {
+ ContentHeader getContentHeader(HttpServletRequest req) {
ContentHeader ch = new ContentHeader();
String s = req.getHeader("Content-Type");
if (s != null) {
int ix = pp[i].indexOf('=');
if (ix > 0) {
String k = pp[i].substring(0, ix).trim();
- String v = pp[i].substring(ix+1).trim();
- ch.map.put(k, v);
+ String v = pp[i].substring(ix + 1).trim();
+ ch.map.put(k, v);
} else {
ch.map.put(pp[i].trim(), "");
}
}
return ch;
}
+
// Methods for the Policy Engine classes - ProvDataProvider interface
@Override
public String getFeedOwner(String feedId) {
try {
int n = Integer.parseInt(feedId);
Feed f = Feed.getFeedById(n);
- if (f != null)
+ if (f != null) {
return f.getPublisher();
+ }
} catch (NumberFormatException e) {
// ignore
}
return null;
}
+
@Override
public String getFeedClassification(String feedId) {
try {
int n = Integer.parseInt(feedId);
Feed f = Feed.getFeedById(n);
- if (f != null)
+ if (f != null) {
return f.getAuthorization().getClassification();
+ }
} catch (NumberFormatException e) {
// ignore
}
return null;
}
+
@Override
public String getSubscriptionOwner(String subId) {
try {
int n = Integer.parseInt(subId);
Subscription s = Subscription.getSubscriptionById(n);
- if (s != null)
+ if (s != null) {
return s.getSubscriber();
+ }
} catch (NumberFormatException e) {
// ignore
}
*/
private boolean isUserMemberOfGroup(Group group, String user) {
- String groupdetails = group.getMembers().replace("]", "").replace("[", "");
- String s[] = groupdetails.split("},");
+ String groupDetails = group.getMembers().replace("]", "").replace("[", "");
+ String[] s = groupDetails.split("},");
- for(int i=0; i < s.length; i++) {
- JSONObject jsonObj = null;
- try {
- jsonObj = new JSONObject(s[i]+"}");
- if(jsonObj.get("id").equals(user))
- return true;
- } catch (JSONException e) {
- e.printStackTrace();
+ for (String value : s) {
+ JSONObject jsonObj;
+ try {
+ jsonObj = new JSONObject(value + "}");
+ if (jsonObj.get("id").equals(user)) {
+ return true;
}
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
}
return false;
Feed f = Feed.getFeedById(n);
if (f != null) {
int groupid = f.getGroupid();
- if(groupid > 0) {
+ if (groupid > 0) {
Group group = Group.getGroupById(groupid);
- if(isUserMemberOfGroup(group, owner)) {
+ assert group != null;
+ if (isUserMemberOfGroup(group, owner)) {
return group.getAuthid();
}
}
Subscription s = Subscription.getSubscriptionById(n);
if (s != null) {
int groupid = s.getGroupid();
- if(groupid > 0) {
+ if (groupid > 0) {
Group group = Group.getGroupById(groupid);
- if(isUserMemberOfGroup(group, owner)) {
+ assert group != null;
+ if (isUserMemberOfGroup(group, owner)) {
return group.getAuthid();
}
}
* @Method - setIpAndFqdnForEelf - Rally:US664892
* @Params - method, prints method name in EELF log.
*/
- protected void setIpAndFqdnForEelf(String method) {
+ void setIpAndFqdnForEelf(String method) {
MDC.clear();
MDC.put(MDC_SERVICE_NAME, method);
try {