/*-
* ============LICENSE_START=======================================================
* OPENECOMP - MSO
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ============LICENSE_END=========================================================
*/
package com.att.bpm.scripts
import groovy.util.Node;
import groovy.xml.XmlUtil
import java.text.SimpleDateFormat
import org.apache.commons.codec.binary.Base64
import org.apache.commons.codec.binary.Base64
import org.camunda.bpm.engine.runtime.Execution;
import org.slf4j.MDC;
import org.w3c.dom.Element
//import org.w3c.dom.NodeList
import org.openecomp.mso.bpmn.core.BPMNLogger
import org.openecomp.mso.logger.MessageEnum
import org.openecomp.mso.logger.MsoLogger
import org.openecomp.mso.utils.CryptoUtils
import org.openecomp.mso.bpmn.core.xml.XmlTool
class MsoUtils {
def initializeEndPoints(execution){
// use this placeholder to initialize end points, if called independently, this need to be set
execution.setVariable("AAIEndPoint","http://localhost:8080/SoapUIMocks")
}
def getNodeText(xmlInput,element){
def rtn=null
if(xmlInput!=null){
def xml= new XmlSlurper().parseText(xmlInput)
rtn= xml.'**'.find{node->node.name()==element}.text()
}
return rtn
}
def getMultNodes(xmlInput, element){
def nodes=null
if(xmlInput!=null){
def xml= new XmlSlurper().parseText(xmlInput)
nodes = xml.'**'.findAll{ node-> node.name() == element }*.text()
}
return nodes
}
def getNodeText1(xmlInput,element){
def rtn=null
if(xmlInput!=null){
def xml= new XmlSlurper().parseText(xmlInput)
rtn= xml.'**'.find{node->node.name()==element}
if (rtn != null){
rtn=rtn.text()
}
}
return rtn
}
def getNodeXml(xmlInput,element){
return getNodeXml(xmlInput, element, true)
}
def getNodeXml(xmlInput,element,incPreamble){
def fxml= new XmlSlurper().parseText(xmlInput)
def nodeToSerialize = fxml.'**'.find {it.name() == element}
if(nodeToSerialize==null){
return ""
}
def nodeAsText = XmlUtil.serialize(nodeToSerialize)
if (!incPreamble) {
nodeAsText = removeXmlPreamble(nodeAsText)
}
return nodeAsText
}
def nodeExists(xmlInput,element){
try {
def fxml= new XmlSlurper().parseText(xmlInput)
def nodeToSerialize = fxml.'**'.find {it.name() == element}
return nodeToSerialize!=null
} catch(Exception e) {
return false
}
}
/***** Utilities when using XmlParser *****/
/**
* Convert a Node into a String by deserializing it and formatting it.
*
* @param node Node to be converted.
* @return the Node as a String.
*/
def String nodeToString(Node node) {
def String nodeAsString = groovy.xml.XmlUtil.serialize(node)
nodeAsString = removeXmlPreamble(nodeAsString)
return formatXml(nodeAsString)
}
/**
* Get the specified child Node of the specified parent. If there are
* multiple children of the same name, only the first one is returned.
* If there are no children with the specified name, 'null' is returned.
*
* @param parent Parent Node in which to find a child.
* @param childNodeName Name of the child Node to get.
* @return the (first) child Node with the specified name or 'null'
* if a child Node with the specified name does not exist.
*/
def Node getChildNode(Node parent, String childNodeName) {
def NodeList nodeList = getIdenticalChildren(parent, childNodeName)
if (nodeList.size() == 0) {
return null
} else {
return nodeList.get(0)
}
}
/**
* Get the textual value of the specified child Node of the specified parent.
* If there are no children with the specified name, 'null' is returned.
*
* @param parent Parent Node in which to find a child.
* @param childNodeName Name of the child Node whose value to get.
* @return the textual value of child Node with the specified name or 'null'
* if a child Node with the specified name does not exist.
*/
def String getChildNodeText(Node parent, String childNodeName) {
def Node childNode = getChildNode(parent, childNodeName)
if (childNode == null) {
return null
} else {
return childNode.text()
}
}
/**
* Get all of the child nodes from the specified parent that have the
* specified name. The returned NodeList could be empty.
*
* @param parent Parent Node in which to find children.
* @param childNodeName Name of the children to get.
* @return a NodeList of all the children from the parent with the specified
* name. The list could be empty.
*/
def NodeList getIdenticalChildren(Node parent, String childNodeName) {
return (NodeList) parent.get(childNodeName)
}
/***** End of Utilities when using XmlParser *****/
/** these are covered under the common function above**/
def getSubscriberName(xmlInput,element){
def rtn=null
if(xmlInput!=null){
def xml= new XmlSlurper().parseText(xmlInput)
rtn= xml.'**'.find{node->node.name()==element}.text()
}
return rtn
}
def getTenantInformation(xmlInput,element){
def xml= new XmlSlurper().parseText(xmlInput)
def nodeToSerialize = xml.'**'.find {it.name() == 'service-information'}
def nodeAsText = XmlUtil.serialize(nodeToSerialize)
return nodeAsText
}
def getServiceInstanceId(xmlInput,element){
def xml= new XmlSlurper().parseText(xmlInput)
return ( xml.'**'.find{node->node.name()==element}.text() )
}
//for aai tenant url
def searchResourceLink(xmlInput, resourceType){
def fxml= new XmlSlurper().parseText(xmlInput)
def element = fxml.'**'.find {it.'resource-type' == resourceType}
return (element == null) ? null : element.'resource-link'.text()
}
def searchMetaData(xmlInput, searchName, searchValue){
def fxml= new XmlSlurper().parseText(xmlInput)
def ret = fxml.'**'.find {it.metaname.text() == searchName && it.metaval.text() == searchValue}
if(ret != null){
return ret.parent().parent()
}
return ret
}
def searchMetaDataNode(fxml, searchName, searchValue){
def ret = fxml.'**'.find {it.metaname.text() == searchName && it.metaval.text() == searchValue}
if(ret != null){
return ret.parent().parent()
}
return ret
}
// for Trinity L3 delete bonding
def getPBGFList(isDebugLogEnabled, xmlInput){
xmlInput = xmlInput.replaceAll("&", "&")
xmlInput = xmlInput.replaceAll("<", "<")
xmlInput = xmlInput.replaceAll(">", ">")
log("DEBUG", "getPBGFList: xmlInput " + xmlInput,isDebugLogEnabled)
ArrayList myNodes = new ArrayList()
if(nodeExists(xmlInput,"nbnc-response-information")){
def respInfo=getNodeXml(xmlInput,"nbnc-response-information", false)
if(respInfo!=null){
def fxml= new XmlSlurper().parseText(respInfo)
def myNode
fxml.'virtual-datacenter-list'.each { vdc ->
//we only want to add one BFG per VDC
log("DEBUG", "vdc " + vdc.text(),isDebugLogEnabled)
myNode = vdc.'**'.find {it.'border-element-tangibility'.text() =~ /PHYSICAL/}
log("DEBUG", "myNode " + myNode.text(),isDebugLogEnabled)
myNodes.add(XmlUtil.serialize(myNode))
}
}
return myNodes
}else{
return null
}
}
def getPBGFList(xmlInput){
getPBGFList("false", xmlInput)
}
def String decodeXML(xml) {
def String decodedXml = xml.replaceAll("&", "&")
decodedXml = decodedXml.replaceAll("<", "<")
decodedXml = decodedXml.replaceAll(">", ">")
}
def getMetaVal(node, name){
try{
return node.'**'.find {it.metaname.text() == name}.metaval.text()
}catch(Exception e){
return null
}
}
def getRelationshipVal(node, name){
try{
return node.'**'.find {it.'relationship-key'.text() == name}.'relationship-value'.text()
}catch(Exception e){
return null
}
}
def log(logmode,logtxt,isDebugLogEnabled="false"){
MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
if ("INFO"==logmode) {
msoLogger.info(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, logtxt);
} else if ("WARN"==logmode) {
msoLogger.warn (MessageEnum.BPMN_GENERAL_WARNING, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, logtxt);
} else if ("ERROR"==logmode) {
msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, logtxt);
} else {
BPMNLogger.debug(isDebugLogEnabled, logtxt);
}
}
def logContext(requestId, serviceInstanceId){
MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
msoLogger.setLogContext(requestId, serviceInstanceId);
}
def logMetrics(elapsedTime, logtxt){
MsoLogger metricsLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
metricsLogger.recordMetricEvent (elapsedTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
logtxt, "BPMN", MsoLogger.getServiceName(), null);
}
def logAudit(logtxt){
MsoLogger auditLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL);
long startTime = System.currentTimeMillis();
auditLogger.recordAuditEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, logtxt);
}
// headers: header - name-value
def getHeaderNameValue(xmlInput, nameAttribute){
def rtn=null
if(xmlInput!=null){
def xml= new XmlSlurper().parseText(xmlInput)
rtn= xml.'**'.find {header->header.'@name'.text() == nameAttribute}.'@value'
}
return rtn
}
/**
* Gets the children of the specified element.
*/
public String getChildNodes(xmlInput, element) {
def xml= new XmlSlurper().parseText(xmlInput)
def thisElement = xml.'**'.find {it.name() == element}
StringBuilder out = new StringBuilder()
if (thisElement != null) {
thisElement.children().each() {
String nodeAsText = removeXmlPreamble(XmlUtil.serialize(it))
if (out.length() > 0) {
out.append(System.lineSeparator())
}
out.append(nodeAsText)
}
}
return out.toString();
}
/**
* Encodes a value so it can be used inside an XML text element.
* @param s the string to encode
* @return the encoded string
*/
public String xmlEncode(Object value) {
return XmlTool.encode(value)
}
/**
* Encodes a value so it can be used inside an XML attribute.
* @param s the string to encode
* @return the encoded string
*/
public String xmlEncodeAttr(Object value) {
return XmlTool.encodeAttr(value)
}
/**
* Decodes XML entities in a string value
* @param value a value with embedded XML entities
* @return the decoded string
*/
public String xmlDecode(Object value) {
return XmlTool.decode(value)
}
/**
* Removes the preamble, if present, from an XML document.
* Also, for historical reasons, this also trims leading and trailing
* whitespace from the resulting document. TODO: remove the trimming
* and fix unit tests that depend on EXACT xml format.
* @param xml the XML document
* @return a possibly modified document
*/
public String removeXmlPreamble(def xml) {
if (xml == null) {
return null
}
return XmlTool.removePreamble(xml).trim()
}
/**
* Removes namespaces and namespace declarations from an XML document.
* @param xml the XML document
* @return a possibly modified document
*/
public String removeXmlNamespaces(def xml) {
return XmlTool.removeNamespaces(xml);
}
/**
* Use formatXml instead. Note: this method inserts an XML preamble.
*/
@Deprecated
def formatXML(xmlInput) {
def parseXml = null
def formatXml = null
if (xmlInput !=null) {
parseXml = new XmlParser().parseText(xmlInput)
formatXml = XmlUtil.serialize(parseXml)
}
}
/**
* Reformats an XML document. The result will not contain an XML preamble
* or a trailing newline.
* @param xml the XML document
* @return a reformatted document
*/
public String formatXml(def xml) {
return XmlTool.normalize(xml);
}
// build single elements
def buildElements(xmlInput, elementList, parentName) {
String var = ""
def xmlBuild = ""
if (parentName != "") {
xmlBuild += ""
}
if (xmlInput != null) {
for (element in elementList) {
def xml= new XmlSlurper().parseText(xmlInput)
var = xml.'**'.find {it.name() == element}
if (var != null) {
xmlBuild += ""+var.toString()+""
}
}
}
if (parentName != "") {
xmlBuild += ""
}
return xmlBuild
}
// build the Unbounded elements
def buildElementsUnbounded(xmlInput, elementList, parentName) {
def varParents = ""
def var = ""
def xmlBuildUnbounded = ""
if (xmlInput != null) {
def xml= new XmlSlurper().parseText(xmlInput)
varParents = xml.'**'.findAll {it.name() == parentName}
//println " Unbounded ${parentName} - varParent.Size() - " + varParents.size()
for (i in 0..varParents.size()-1) {
if (parentName != "") {
xmlBuildUnbounded += ""
}
for (element in elementList) {
var = varParents[i].'*'.find {it.name() == element}
if (var != null) {
xmlBuildUnbounded += ""+var.toString()+""
//println " i = " + i + ", element: " + element + " = " + var.toString()
}
}
if (parentName != "") {
xmlBuildUnbounded += ""
}
}
}
return xmlBuildUnbounded
}
// Build internet-evc-access-information
def buildInternetEvcAccessInformation(xmlInput) {
def elementsInternetEvcAccessInformationList = ["internet-evc-speed-value", "internet-evc-speed-units", "ip-version"]
def rebuildInternetEvcAccess = ''
if (xmlInput != null) {
rebuildInternetEvcAccess = buildElements(xmlInput, elementsInternetEvcAccessInformationList, "internet-evc-access-information")
}
return rebuildInternetEvcAccess
}
// Build internet-service-change-details
def buildInternetServiceChangeDetails(xmlInput) {
def rebuildInternetServiceChangeDetails = ""
if (xmlInput != null) {
try { // optional
def internetServiceChangeDetails = getNodeXml(xmlInput, "internet-service-change-details").drop(38).trim()
rebuildInternetServiceChangeDetails = ""
rebuildInternetServiceChangeDetails += buildElements(internetServiceChangeDetails, ["internet-evc-speed-value"], "")
rebuildInternetServiceChangeDetails += buildElements(internetServiceChangeDetails, ["internet-evc-speed-units"], "")
def tProvidedV4LanPublicPrefixesChangesList = ["request-index", "v4-next-hop-address", "v4-lan-public-prefix", "v4-lan-public-prefix-length"]
rebuildInternetServiceChangeDetails += buildElementsUnbounded(internetServiceChangeDetails, tProvidedV4LanPublicPrefixesChangesList, "t-provided-v4-lan-public-prefixes")
try { // optional
def tProvidedV6LanPublicPrefixesChangesList = ["request-index", "v6-next-hop-address", "v6-lan-public-prefix", "v6-lan-public-prefix-length"]
rebuildInternetServiceChangeDetails += buildElementsUnbounded(internetServiceChangeDetails, tProvidedV6LanPublicPrefixesChangesList, "t-provided-v6-lan-public-prefixes")
} catch (Exception e) {
log("ERROR"," Optional - Exception INTERNET-SERVICE-CHANGE-DETAILS 't-provided-v6-lan-public-prefixes ")
}
rebuildInternetServiceChangeDetails += ""
} catch (Exception e) {
log("ERROR", " Optional - Exception INTERNET-SERVICE-CHANGE-DETAILS 'internet-service-change-details' ")
}
}
return rebuildInternetServiceChangeDetails
}
// Build vr-lan
def buildVrLan(xmlInput) {
def rebuildVrLan = ''
if (xmlInput != null) {
rebuildVrLan = ""
def vrLan = getNodeXml(xmlInput, "vr-lan").drop(38).trim()
rebuildVrLan += buildElements(vrLan, ["routing-protocol"], "")
// vr-lan-interface
def rebuildVrLanInterface = ""
def vrLanInterface = getNodeXml(vrLan, "vr-lan-interface").drop(38).trim()
rebuildVrLanInterface += buildVrLanInterfacePartial(vrLanInterface)
// dhcp
def dhcp = getNodeXml(vrLan, "dhcp").drop(38).trim()
def rebuildDhcp = buildDhcp(dhcp)
rebuildVrLanInterface += rebuildDhcp
// pat
def pat = getNodeXml(vrLan, "pat").drop(38).trim()
def rebuildPat = buildPat(pat)
rebuildVrLanInterface += rebuildPat
// nat
def rebuildNat = ""
try { // optional
def nat = getNodeXml(vrLan, "nat").drop(38).trim()
rebuildNat = buildNat(nat)
} catch (Exception e) {
log("ERROR", " Optional - Exception 'nat' ")
}
rebuildVrLanInterface += rebuildNat
// firewall-lite
def firewallLite = getNodeXml(vrLan, "firewall-lite").drop(38).trim()
def rebuildFirewallLite = buildFirewallLite(firewallLite)
rebuildVrLanInterface += rebuildFirewallLite
// static-routes
def rebuildStaticRoutes = ""
try { // optional
def staticRoutes = getNodeXml(vrLan, "static-routes").drop(38).trim()
rebuildStaticRoutes = buildStaticRoutes(staticRoutes)
} catch (Exception e) {
log("ERROR", " Optional - Exception 'static-routes' ")
}
rebuildVrLanInterface += rebuildStaticRoutes
rebuildVrLan += rebuildVrLanInterface
rebuildVrLan += ""
rebuildVrLan += ""
}
log("DEBUG", " rebuildVrLan - " + rebuildVrLan)
return rebuildVrLan
}
// Build vr-lan-interface
def buildVrLanInterfacePartial(xmlInput) {
def rebuildingVrLanInterface = ''
if (xmlInput != null) {
def vrLanInterfaceList = ["vr-designation", "v4-vr-lan-prefix", "v4-vr-lan-address", "v4-vr-lan-prefix-length", "v6-vr-lan-prefix", "v6-vr-lan-address", "v6-vr-lan-prefix-length", "v4-vce-loopback-address", "v6-vce-wan-address"]
rebuildingVrLanInterface += buildElements(xmlInput, vrLanInterfaceList, "")
rebuildingVrLanInterface += ""
try { // optional
def tProvidedV4LanPublicPrefixes = getNodeXml(xmlInput, "v4-public-lan-prefixes").drop(38).trim()
def tProvidedV4LanPublicPrefixesList = ["request-index", "v4-next-hop-address", "v4-lan-public-prefix", "v4-lan-public-prefix-length" ]
rebuildingVrLanInterface += buildElementsUnbounded(xmlInput, tProvidedV4LanPublicPrefixesList, "t-provided-v4-lan-public-prefixes")
} catch (Exception ex) {
log("ERROR", " Optional - Exception VR-LAN INTERFACE 'v4-public-lan-prefixes' ")
}
rebuildingVrLanInterface += ""
rebuildingVrLanInterface += ""
try { // optional
def tProvidedV6LanPublicPrefixes = getNodeXml(xmlInput, "v6-public-lan-prefixes").drop(38).trim()
def tProvidedV6LanPublicPrefixesList = ["request-index", "v6-next-hop-address", "v6-lan-public-prefix", "v6-lan-public-prefix-length" ]
rebuildingVrLanInterface += buildElementsUnbounded(xmlInput, tProvidedV6LanPublicPrefixesList, "t-provided-v6-lan-public-prefixes")
} catch (Exception e) {
log("ERROR", " Optional - Exception VR-LAN INTERFACE 'v6-public-lan-prefixes' ")
}
rebuildingVrLanInterface += ""
}
log("DEBUG", " rebuildingVrLanInterface - " + rebuildingVrLanInterface)
return rebuildingVrLanInterface
}
// Build dhcp
def buildDhcp(xmlInput) {
def rebuildingDhcp = ''
if (xmlInput != null) {
def dhcpData = new XmlSlurper().parseText(xmlInput)
rebuildingDhcp = ""
def dhcpList1 = ["v4-dhcp-server-enabled", "v6-dhcp-server-enabled", "use-v4-default-pool", "v4-dhcp-default-pool-prefix", "v4-dhcp-default-pool-prefix-length"]
rebuildingDhcp += buildElements(xmlInput, dhcpList1, "")
try { // optional
def excludedV4DhcpAddressesFromDefaultPoolList = ["excluded-v4-address"]
rebuildingDhcp += buildElementsUnbounded(xmlInput, excludedV4DhcpAddressesFromDefaultPoolList, "excluded-v4-dhcp-addresses-from-default-pool")
} catch (Exception e) {
log("ERROR", " Optional - Exception DHCP 'excluded-v4-dhcp-addresses-from-default-pool' ")
}
try { // optional
def v4DhcpPools = dhcpData.'**'.findAll {it.name() == "v4-dhcp-pools"}
def v4DhcpPoolsSize = v4DhcpPools.size()
// println " v4DhcpPoolsSize = " + v4DhcpPools.size()
for (i in 0..v4DhcpPoolsSize-1) {
def v4DhcpPool = v4DhcpPools[i]
def v4DhcpPoolXml = XmlUtil.serialize(v4DhcpPool)
rebuildingDhcp += ""
def v4DhcpPoolsList1 = ["v4-dhcp-pool-prefix", "v4-dhcp-pool-prefix-length" ]
rebuildingDhcp += buildElements(v4DhcpPoolXml, v4DhcpPoolsList1, "")
try { // optional
def excludedV4AddressesList = ["excluded-v4-address"]
rebuildingDhcp += buildElementsUnbounded(v4DhcpPoolXml, excludedV4AddressesList, "excluded-v4-addresses")
} catch (Exception e) {
log("ERROR", " Optional - Exception DHCP 'excluded-v4-addresses' ")
}
def v4DhcpPoolsList2 = ["v4-dhcp-relay-gateway-address", "v4-dhcp-relay-next-hop-address"]
rebuildingDhcp += buildElements(v4DhcpPoolXml, v4DhcpPoolsList2, "")
rebuildingDhcp += ""
}
} catch (Exception e) {
log("ERROR"," Optional - Exception DHCP 'v4-dhcp-pools' ")
}
def dhcpList2 = ["use-v6-default-pool", "v6-dhcp-default-pool-prefix", "v6-dhcp-default-pool-prefix-length"]
rebuildingDhcp += buildElements(xmlInput, dhcpList2, "")
try { // optional
def excludedV6DhcpAddressesFromDdefaultPoolList = ["excluded-v6-address"]
rebuildingDhcp += buildElementsUnbounded(xmlInput, excludedV6DhcpAddressesFromDdefaultPoolList, "excluded-v6-dhcp-addresses-from-default-pool")
} catch (Exception e) {
log("ERROR", " Optional - Exception DHCP 'excluded-v6-dhcp-addresses-from-default-pool' ")
}
try { // optional
def v6DhcpPools = dhcpData.'**'.findAll {it.name() == "v6-dhcp-pools"}
def v6DhcpPoolsSize = v6DhcpPools.size()
//println " v6DhcpPoolsSize = " + v6DhcpPools.size()
for (i in 0..v6DhcpPoolsSize-1) {
def v6DhcpPool = v6DhcpPools[i]
def v6DhcpPoolXml = XmlUtil.serialize(v6DhcpPool)
rebuildingDhcp += ""
def v6DhcpPoolsList1 = ["v6-dhcp-pool-prefix", "v6-dhcp-pool-prefix-length"]
rebuildingDhcp += buildElements(v6DhcpPoolXml, v6DhcpPoolsList1, "")
try { // optional
def excludedV6AddressesList = ["excluded-v6-address"]
rebuildingDhcp += buildElementsUnbounded(v6DhcpPoolXml, excludedV6AddressesList, "excluded-v6-addresses")
} catch (Exception e) {
log("ERROR", " Optional - Exception DHCP 'excluded-v6-addresses' ")
}
def v6DhcpPoolsList2 = ["v6-dhcp-relay-gateway-address", "v6-dhcp-relay-next-hop-address"]
rebuildingDhcp += buildElements(v6DhcpPoolXml, v6DhcpPoolsList2, "")
rebuildingDhcp += ""
}
} catch (Exception e) {
log("ERROR", " Optional - Exception DHCP 'v6-dhcp-pools' ")
}
rebuildingDhcp += ""
}
log("DEBUG", " rebuildingDhcp - " + rebuildingDhcp)
return rebuildingDhcp
}
// Build pat
def buildPat(xmlInput) {
def rebuildingPat = ''
if (xmlInput != null) {
rebuildingPat = ""
def patList = ["v4-pat-enabled", "use-v4-default-pool", "v4-pat-default-pool-prefix", "v4-pat-default-pool-prefix-length"]
rebuildingPat += buildElements(xmlInput, patList, "")
try { // optional
def v4PatPools = getNodeXml(xmlInput, "v4-pat-pools").drop(38).trim()
def v4PatPoolsList = ["v4-pat-pool-prefix", "v4-pat-pool-prefix-length", "v4-pat-pool-next-hop-address"]
rebuildingPat += buildElementsUnbounded(xmlInput, v4PatPoolsList, "v4-pat-pools")
} catch (Exception e) {
log("ERROR", " Optional - Exception 'v4-pat-pool-next-hop-address' ")
}
rebuildingPat += ""
}
log("DEBUG", " rebuildingPat - " + rebuildingPat)
return rebuildingPat
}
// Build nat
def buildNat(xmlInput) {
def rebuildingNat = ''
if (xmlInput != null) {
rebuildingNat = ""
rebuildingNat += buildElements(xmlInput, ["v4-nat-enabled"], "")
try { // optional
def v4NatMappingEntries = getNodeXml(xmlInput, "v4-nat-mapping-entries").drop(38).trim()
def v4NatMappingEntriesList = ["v4-nat-internal", "v4-nat-next-hop-address", "v4-nat-external"]
rebuildingNat += buildElementsUnbounded(xmlInput, v4NatMappingEntriesList, "v4-nat-mapping-entries")
} catch (Exception e) {
log("ERROR", " Optional - Exception 'v4-nat-external' ")
}
rebuildingNat += ""
}
log("DEBUG", " rebuildingNat - " + rebuildingNat)
return rebuildingNat
}
// Build firewall-lite
def buildFirewallLite(xmlInput) {
def rebuildingFirewallLite = ''
if (xmlInput != null) {
def firewallLiteData = new XmlSlurper().parseText(xmlInput)
rebuildingFirewallLite = ""
def firewallLiteList = ["stateful-firewall-lite-v4-enabled", "stateful-firewall-lite-v6-enabled"]
rebuildingFirewallLite += buildElements(xmlInput, firewallLiteList, "")
try { // optional
def v4FirewallPacketFilters = firewallLiteData.'**'.findAll {it.name() == "v4-firewall-packet-filters"}
def v4FirewallPacketFiltersSize = v4FirewallPacketFilters.size()
//println " v4FirewallPacketFiltersSize = " + v4FirewallPacketFilters.size()
for (i in 0..v4FirewallPacketFiltersSize-1) {
def v4FirewallPacketFilter = v4FirewallPacketFilters[i]
def v4FirewallPacketFilterXml = XmlUtil.serialize(v4FirewallPacketFilter)
rebuildingFirewallLite += ""
def v4FirewallPacketFiltersList = ["v4-firewall-prefix", "v4-firewall-prefix-length", "allow-icmp-ping"]
rebuildingFirewallLite += buildElements(v4FirewallPacketFilterXml, v4FirewallPacketFiltersList, "")
try { // optional
def udpPortsList = ["port-number"]
rebuildingFirewallLite += buildElementsUnbounded(v4FirewallPacketFilterXml, udpPortsList, "udp-ports")
} catch (Exception e) {
log("ERROR", " Optional - Exception FIREWALL-LITE v4 'udp-ports' ")
}
try { // optional
def tcpPortsList = ["port-number"]
rebuildingFirewallLite += buildElementsUnbounded(v4FirewallPacketFilterXml, tcpPortsList, "tcp-ports")
} catch (Exception e) {
log("ERROR", " Optional - Exception FIREWALL-LITE v4 'tcp-ports' ")
}
rebuildingFirewallLite += ""
}
} catch (Exception e) {
log("ERROR", " Optional - Exception FIREWALL-LITE 'v4-firewall-packet-filters' ")
}
try { // optional
def v6FirewallPacketFilters = firewallLiteData.'**'.findAll {it.name() == "v6-firewall-packet-filters"}
def v6FirewallPacketFiltersSize = v6FirewallPacketFilters.size()
//println " v6FirewallPacketFiltersSize = " + v6FirewallPacketFilters.size()
for (i in 0..v6FirewallPacketFiltersSize-1) {
def v6FirewallPacketFilter = v6FirewallPacketFilters[i]
def v6FirewallPacketFilterXml = XmlUtil.serialize(v6FirewallPacketFilter)
rebuildingFirewallLite += ""
def v6FirewallPacketFiltersList = ["v6-firewall-prefix", "v6-firewall-prefix-length", "allow-icmp-ping"]
rebuildingFirewallLite += buildElements(v6FirewallPacketFilterXml, v6FirewallPacketFiltersList, "")
try { // optional
def udpPortsList = ["port-number"]
rebuildingFirewallLite += buildElementsUnbounded(v6FirewallPacketFilterXml, udpPortsList, "udp-ports")
} catch (Exception e) {
log("ERROR", " Optional - Exception FIREWALL-LITE v6 'udp-ports' ")
}
try { // optional
def tcpPortsList = ["port-number"]
rebuildingFirewallLite += buildElementsUnbounded(v6FirewallPacketFilterXml, tcpPortsList, "tcp-ports")
} catch (Exception e) {
log("ERROR", " Optional - Exception FIREWALL-LITE v6 'tcp-ports' ")
}
rebuildingFirewallLite += ""
}
} catch (Exception e) {
log("ERROR", " Optional - Exception FIREWALL-LITE 'v6-firewall-packet-filters' ")
}
rebuildingFirewallLite+= ""
}
log("DEBUG", " rebuildingFirewallLite - " + rebuildingFirewallLite)
return rebuildingFirewallLite
}
def buildStaticRoutes(xmlInput) {
def rebuildingStaticRoutes = ''
if (xmlInput != null) {
rebuildingStaticRoutes = ""
def v4StaticRouteslist = ["v4-static-route-prefix","v4-static-route-prefix-length", "v4-next-hop-address"]
rebuildingStaticRoutes += buildElementsUnbounded(xmlInput, v4StaticRouteslist, "v4-static-routes")
def v6StaticRouteslist = ["v6-static-route-prefix","v6-static-route-prefix-length", "v6-next-hop-address"]
rebuildingStaticRoutes += buildElementsUnbounded(xmlInput, v6StaticRouteslist, "v6-static-routes")
rebuildingStaticRoutes += ""
}
log("DEBUG", " rebuildingStaticRoutes - " + rebuildingStaticRoutes)
return rebuildingStaticRoutes
}
public String generateCurrentTimeInUtc(){
final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());
return utcTime;
}
public String generateCurrentTimeInGMT(){
final SimpleDateFormat sdf = new SimpleDateFormat("E, d MMM yyyy h:m:s z");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
final String utcTime = sdf.format(new Date());
return utcTime;
}
/**
* @param encryptedAuth: encrypted credentials from urn properties
* @param msoKey: key to use to decrypt from urn properties
* @return base 64 encoded basic auth credentials
*/
def getBasicAuth(encryptedAuth, msoKey){
try {
def auth = decrypt(encryptedAuth, msoKey)
byte[] encoded = Base64.encodeBase64(auth.getBytes())
String encodedString = new String(encoded)
encodedString = "Basic " + encodedString
return encodedString
} catch (Exception ex) {
log("ERROR", "Unable to encode basic auth")
throw ex
}
}
def encrypt(toEncrypt, msokey){
try {
String result = CryptoUtils.encrypt(toEncrypt, msokey);
return result
}
catch (Exception e) {
log("ERROR", "Failed to encrypt credentials")
}
}
def decrypt(toDecrypt, msokey){
try {
String result = CryptoUtils.decrypt(toDecrypt, msokey);
return result
}
catch (Exception e) {
log("ERROR", "Failed to decrypt credentials")
throw e
}
}
/**
* Return URL with qualified host name (if any) or urn mapping
* @param String url from urn mapping
* @return String url with qualified host name
*/
public String getQualifiedHostNameForCallback(String urnCallbackUrl) {
def callbackUrlToUse = urnCallbackUrl
try{
//swap host name with qualified host name from the jboss properties
def qualifiedHostName = System.getProperty("jboss.qualified.host.name")
if(qualifiedHostName!=null){
log("DEBUG", "qualifiedHostName:\n" + qualifiedHostName)
callbackUrlToUse = callbackUrlToUse.replaceAll("(http://)(.*)(:8080*)", {orig, first, torepl, last -> "${first}${qualifiedHostName}${last}"})
}
}catch(Exception e){
log("DEBUG", "unable to grab qualified host name, using what's in urn properties for callbackurl. Exception was: " + e.printStackTrace())
}
return callbackUrlToUse
}
/**
* Retrieves text context of the element if the element exists, returns empty string otherwise
* @param com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl element to parse
* param String tagName tagName
* @return String text content of the element
*/
public String getElementText(Element element, String tagName) {
String text = ""
org.w3c.dom.NodeList nodeList = element.getElementsByTagNameNS("*", tagName)
if (nodeList != null && nodeList.length > 0) {
text = nodeList.item(0).getTextContent()
}
return text
}
}