/** * */ package com.intel.mountwilson.util; import com.intel.mountwilson.common.TDPConfig; import com.intel.mountwilson.constant.HelperConstant; import com.intel.mountwilson.datamodel.HostDetailsEntityVO; import com.intel.mountwilson.datamodel.HostType; import com.intel.mountwilson.datamodel.HostType.hostOS; import com.intel.mountwilson.datamodel.HostType.hostVMM; import com.intel.mountwilson.datamodel.MLEDataVO; import com.intel.mountwilson.datamodel.MleDetailsEntityVO; import com.intel.mountwilson.datamodel.OEMDataVO; import java.util.Iterator; import com.intel.mountwilson.datamodel.OSDataVO; import com.intel.mountwilson.datamodel.TrustedHostVO; import com.intel.mtwilson.TrustAssertion; import com.intel.mtwilson.datatypes.ManifestData; import com.intel.mtwilson.datatypes.MleData; import com.intel.mtwilson.datatypes.OemData; import com.intel.mtwilson.datatypes.OsData; import com.intel.mtwilson.datatypes.TxtHost; import com.intel.mtwilson.datatypes.TxtHostRecord; import com.intel.mtwilson.datatypes.TxtHostRecord; import com.intel.mtwilson.saml.TrustAssertion.HostTrustAssertion; import com.intel.mtwilson.tls.policy.TlsPolicyChoice; import com.intel.mtwilson.tls.policy.TlsPolicyDescriptor; //import com.sun.jersey.core.util.MultivaluedMapImpl; import org.glassfish.jersey.internal.util.collection.MultivaluedStringMap; import java.io.StringReader; import java.io.StringWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TimeZone; import java.util.regex.Pattern; import javax.ws.rs.core.MultivaluedMap; import javax.xml.transform.OutputKeys; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; /** * @author yuvrajsx * */ public class ConverterUtil { //variable used to change date into given format to display on screen. //private static final DateFormat formatter= new SimpleDateFormat("MM/dd/yyyy hh:mm:ss"); public static String getOSAndVMMInfoString(MleDetailsEntityVO mleObject){ return mleObject.getOsName()+" "+mleObject.getOsVersion()+HelperConstant.OS_VMM_INFORMATION_SEPERATOR+mleObject.getMleName()+":"+mleObject.getMleVersion(); } public static TxtHost getTxtHostFromHostVO(HostDetailsEntityVO dataVO) { TxtHostRecord hostRecord = new TxtHostRecord(); hostRecord.AddOn_Connection_String = dataVO.getvCenterDetails(); hostRecord.BIOS_Name = dataVO.getBiosName(); hostRecord.BIOS_Oem=dataVO.getOemName(); hostRecord.BIOS_Version=dataVO.getBiosBuildNo(); hostRecord.Description=dataVO.getHostDescription(); hostRecord.Email=dataVO.getEmailAddress(); hostRecord.HostName=dataVO.getHostName(); hostRecord.IPAddress=dataVO.getHostName(); hostRecord.Port=Integer.parseInt(dataVO.getHostPort()); if( dataVO.getTlsPolicyId() != null && !dataVO.getTlsPolicyId().isEmpty() ) { TlsPolicyChoice tlsPolicyChoice = new TlsPolicyChoice(); tlsPolicyChoice.setTlsPolicyId(dataVO.getTlsPolicyId()); hostRecord.tlsPolicyChoice = tlsPolicyChoice; } else if (dataVO.getTlsPolicyType() != null && !dataVO.getTlsPolicyType().isEmpty() ) { TlsPolicyDescriptor tlsPolicyDescriptor = new TlsPolicyDescriptor(); tlsPolicyDescriptor.setPolicyType(dataVO.getTlsPolicyType()); if( dataVO.getTlsPolicyData() != null && !dataVO.getTlsPolicyData().isEmpty() ) { ArrayList<String> data = new ArrayList<>(); data.add(dataVO.getTlsPolicyData()); tlsPolicyDescriptor.setData(data); } TlsPolicyChoice tlsPolicyChoice = new TlsPolicyChoice(); tlsPolicyChoice.setTlsPolicyDescriptor(tlsPolicyDescriptor); hostRecord.tlsPolicyChoice = tlsPolicyChoice; } String[] osVMMInfo = dataVO.getVmmName().split(Pattern.quote(HelperConstant.OS_VMM_INFORMATION_SEPERATOR)); String osNameWithVer = osVMMInfo[0]; String osName; String osVer = ""; StringBuffer res = new StringBuffer(); String[] s = osNameWithVer.split(" "); osName = s[0]; if (s.length == 2) { osVer = s[1]; }else { for (int i = 1; i < s.length; i++) { res.append(s[i]+" "); } } String hypervisor = osVMMInfo[1]; hostRecord.VMM_Name=hypervisor; hostRecord.VMM_OSName=osName; hostRecord.VMM_OSVersion=osVer; hostRecord.VMM_Version=dataVO.getVmmBuildNo(); return new TxtHost(hostRecord); } public static TrustedHostVO getTrustedHostVoFromTrustAssertion(HostDetailsEntityVO hostDetailsEntityVO, TrustAssertion trustAssertion,String errorMessage){ TrustedHostVO hostVO = new TrustedHostVO(); hostVO.setHostName(hostDetailsEntityVO.getHostName()); if (trustAssertion != null) { HostTrustAssertion hostTrustAssertion = trustAssertion.getTrustAssertion(hostDetailsEntityVO.getHostName()); if (Boolean.parseBoolean(hostTrustAssertion.getStringAttribute(HelperConstant.Trusted_BIOS))) { hostVO.setBiosStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_TRUE)); }else { hostVO.setBiosStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_FALSE)); } if (Boolean.parseBoolean(hostTrustAssertion.getStringAttribute(HelperConstant.Trusted_VMM))) { hostVO.setVmmStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_TRUE)); }else { hostVO.setVmmStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_FALSE)); } if (Boolean.parseBoolean(hostTrustAssertion.getStringAttribute(HelperConstant.OVER_ALL_TRUSTRED))) { hostVO.setOverAllStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_TRUE)); hostVO.setOverAllStatusBoolean(true); }else { hostVO.setOverAllStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_FALSE)); hostVO.setOverAllStatusBoolean(false); } if (hostTrustAssertion.getStringAttribute(HelperConstant.ASSET_TAG) != null){ if (Boolean.parseBoolean(hostTrustAssertion.getStringAttribute(HelperConstant.ASSET_TAG))) { hostVO.setAssetTagStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_TRUE)); // String assetTagDetails = ""; StringBuilder atdBuilder = new StringBuilder(); // We need to retrive all the asset tag specific attributes and show it to the user Set<String> attributeNames = hostTrustAssertion.getAttributeNames(); for (String attrName : attributeNames) { if (attrName.startsWith("ATAG") && !attrName.contains("UUID")) { atdBuilder.append(hostTrustAssertion.getStringAttribute(attrName) + "\n"); } } hostVO.setAssetTagDetails(atdBuilder.toString()); }else { hostVO.setAssetTagStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_FALSE)); hostVO.setAssetTagDetails("Un-Trusted"); } } else { hostVO.setAssetTagStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_UNKNOWN)); hostVO.setAssetTagDetails("Not verified"); } if(trustAssertion.error() != null){ hostVO.setErrorMessage(trustAssertion.error().getMessage()); hostVO.setErrorCode(1); } // Bug: 457 - Refresh button is not updating the time stamp // hostVO.setUpdatedOn(trustAssertion.getDate().toString()); DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); hostVO.setUpdatedOn(df.format(trustAssertion.getDate())); } else { hostVO.setBiosStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_UNKNOWN)); hostVO.setVmmStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_UNKNOWN)); hostVO.setAssetTagStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_UNKNOWN)); hostVO.setOverAllStatus(TDPConfig.getConfiguration().getString(HelperConstant.IMAGE_TRUSTED_UNKNOWN)); hostVO.setOverAllStatusBoolean(false); hostVO.setErrorMessage(errorMessage); // Bug: 445 - To shown the updated date when the host is in the unknown state // hostVO.setUpdatedOn(new SimpleDateFormat("EEE MMM d HH:MM:ss z yyyy").format(new Date())); DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); df.setTimeZone(TimeZone.getTimeZone("UTC")); hostVO.setUpdatedOn(df.format(new Date())); hostVO.setErrorCode(1); } if (hostDetailsEntityVO.getVmmName() != null) { hostVO.setLocation(hostDetailsEntityVO.getLocation()); boolean skipAddingVMMImage = false; // We will use this flag for VMware and Citrix XenServer for which there is no separate OS & VMM. //Setting up a Image for os and hypervisor String s = hostDetailsEntityVO.getVmmName(); String biosName = s.split(Pattern.quote(HelperConstant.OS_VMM_INFORMATION_SEPERATOR))[0]; String hypervisor = s.split(Pattern.quote(HelperConstant.OS_VMM_INFORMATION_SEPERATOR))[1]; // Setting this flag will ensure that we process the VMs for that particular host type. // Since we are supporting only VMware at this time, we are setting it to true only for // hosts of VMware type. if ((biosName.toLowerCase().contains(HelperConstant.OS_IMAGE_VMWARE.toLowerCase()))){ hostVO.setVmm(true); }else { hostVO.setVmm(false); } //getting all Host OS Type from enum hostOS[] hostOSTypes = HostType.hostOS.values(); hostVO.setOsName(""); for (hostOS hostOSType : hostOSTypes) { if (biosName.toLowerCase().contains(hostOSType.getValue().toLowerCase())) { hostVO.setOsName(TDPConfig.getConfiguration().getString(HelperConstant.IMAGES_ROOT_PATH)+hostOSType.getImageName()); if (hostOSType.getVmmImageNeeded().contains("false")) skipAddingVMMImage = true; break; } } //getting all Host VMM Type from enum hostVMM[] hostVMMTypes = HostType.hostVMM.values(); hostVO.setHypervisorName(""); for (hostVMM hostOSType : hostVMMTypes) { if((hypervisor.toLowerCase().contains(hostOSType.getValue().toLowerCase())) && (skipAddingVMMImage == false)){ hostVO.setHypervisorName(TDPConfig.getConfiguration().getString(HelperConstant.IMAGES_ROOT_PATH)+hostOSType.getImageName()); break; } } //hostVO.setUpdatedOn(formatter.format(hostDetailsEntityVO.getUpdatedOn()));// // if (trustAssertion != null) // hostVO.setUpdatedOn(trustAssertion.getDate().toString()); // else // // Bug: 445 - To shown the updated date when the host is in the unknown state // hostVO.setUpdatedOn(new SimpleDateFormat("EEE MMM d HH:MM:ss z yyyy").format(new Date())); hostVO.setHostID(hostDetailsEntityVO.getHostId()); } return hostVO; } public static String formateXMLString(String inputXML){ StreamResult xmlOutput; try { Source xmlInput = new StreamSource(new StringReader(inputXML)); StringWriter stringWriter = new StringWriter(); xmlOutput = new StreamResult(stringWriter); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); transformer.transform(xmlInput, xmlOutput); } catch (Exception e) { throw new RuntimeException(e); // simple exception handling, please review it } return xmlOutput.getWriter().toString(); } public static HostDetailsEntityVO getHostVOObjectFromTxtHostRecord(TxtHostRecord txtHostDetail) { HostDetailsEntityVO entityVO = new HostDetailsEntityVO(); entityVO.setHostId(getConvertedHostName(txtHostDetail.HostName)); entityVO.setHostName(txtHostDetail.HostName); entityVO.setHostIPAddress(txtHostDetail.HostName); entityVO.setHostPort(txtHostDetail.Port.toString()); entityVO.setHostDescription(txtHostDetail.Description); entityVO.setBiosName(txtHostDetail.BIOS_Name); entityVO.setBiosBuildNo(txtHostDetail.BIOS_Version); entityVO.setVmmName(txtHostDetail.VMM_OSName+" "+txtHostDetail.VMM_OSVersion+HelperConstant.OS_VMM_INFORMATION_SEPERATOR+txtHostDetail.VMM_Name); entityVO.setVmmBuildNo(txtHostDetail.VMM_Version); entityVO.setvCenterDetails(txtHostDetail.AddOn_Connection_String); entityVO.setOemName(txtHostDetail.BIOS_Oem); entityVO.setLocation(txtHostDetail.Location); entityVO.setEmailAddress(txtHostDetail.Email); if( txtHostDetail.tlsPolicyChoice != null ) { if( txtHostDetail.tlsPolicyChoice.getTlsPolicyId() != null ) { entityVO.setTlsPolicyId(txtHostDetail.tlsPolicyChoice.getTlsPolicyId()); } else if( txtHostDetail.tlsPolicyChoice.getTlsPolicyDescriptor() != null ) { entityVO.setTlsPolicyType(txtHostDetail.tlsPolicyChoice.getTlsPolicyDescriptor().getPolicyType()); if( txtHostDetail.tlsPolicyChoice.getTlsPolicyDescriptor().getData() != null ) { Iterator<String> it = txtHostDetail.tlsPolicyChoice.getTlsPolicyDescriptor().getData().iterator(); if(it.hasNext()) { entityVO.setTlsPolicyData(it.next()); } } } } return entityVO; } private static String getConvertedHostName(String hostName) { String newHostID = hostName.replaceAll(Pattern.quote("."), "_"); return newHostID.replaceAll(Pattern.quote(" "), "_"); } public static List<MleDetailsEntityVO> getMleVOListWhereOEMNotNull(List<MleData> mleDataList) { List<MleDetailsEntityVO> detailsEntityVOs = new ArrayList<MleDetailsEntityVO>(); for (MleData data : mleDataList) { if (data.getOemName() != null && !(data.getOemName().length() == 0)) { MleDetailsEntityVO entityVO = new MleDetailsEntityVO(); entityVO.setMleId(null); entityVO.setMleName(data.getName()); entityVO.setMleVersion(data.getVersion()); entityVO.setAttestationType(data.getAttestationType()); entityVO.setMleType(data.getMleType()); //entityVO.setManifestList(data.getManifestList().toString()); entityVO.setOsName(data.getOsName()); entityVO.setOsVersion(data.getOsVersion()); entityVO.setOemName(data.getOemName()); detailsEntityVOs.add(entityVO); } } return detailsEntityVOs; } public static List<MleDetailsEntityVO> getMleVOListWhereOEMIsNull(List<MleData> searchMLE) { List<MleDetailsEntityVO> detailsEntityVOs = new ArrayList<MleDetailsEntityVO>(); for (MleData data : searchMLE) { if (data.getOemName() == null || data.getOemName().length() == 0) { MleDetailsEntityVO entityVO = new MleDetailsEntityVO(); entityVO.setMleId(null); entityVO.setMleName(data.getName()); entityVO.setMleVersion(data.getVersion()); entityVO.setAttestationType(data.getAttestationType()); entityVO.setMleType(data.getMleType()); //entityVO.setManifestList(data.getManifestList().toString()); entityVO.setOsName(data.getOsName()); entityVO.setOsVersion(data.getOsVersion()); entityVO.setOemName(data.getOemName()); detailsEntityVOs.add(entityVO); } } return detailsEntityVOs; } public static List<HostDetailsEntityVO> getHostVOListFromTxtHostRecord(List<TxtHostRecord> txtHostDetails) { List<HostDetailsEntityVO> detailsEntityVOs = new ArrayList<HostDetailsEntityVO>(); for (TxtHostRecord tblHostDetail : txtHostDetails) { detailsEntityVOs.add(getHostVOObjectFromTxtHostRecord(tblHostDetail)); } return detailsEntityVOs; } /** * Method convert OS List from Api CLient into List OS OSDataVO. * * @param osListFromApiClient * @return */ public static List<OSDataVO> getListToOSDataVO(List<OsData> osListFromApiClient){ List<OSDataVO> list = new ArrayList<OSDataVO>(); for (OsData data : osListFromApiClient) { OSDataVO osVo = new OSDataVO(); osVo.setOsName(data.getName()); osVo.setOsVersion(data.getVersion()); osVo.setOsDescription(data.getDescription()); list.add(osVo); } return list; } public static List<MLEDataVO> getListToMLEDataVO(List<MleData> mleDateFromApiClient){ List<MLEDataVO> list = new ArrayList<MLEDataVO>(); for (MleData data : mleDateFromApiClient) { list.add(getMleDataVoObject(data)); } return list; } public static MLEDataVO getMleDataVoObject(MleData data) { MLEDataVO mleVo = new MLEDataVO(); mleVo.setMleName(data.getName()); mleVo.setMleVersion(data.getVersion()); mleVo.setMleDescription(data.getDescription()); mleVo.setOsName(data.getOsName()); mleVo.setOsVersion(data.getOsVersion()); mleVo.setAttestation_Type(data.getAttestationType()); mleVo.setOemName(data.getOemName()); mleVo.setManifestList(getManifestListFromApiClient(data.getManifestList())); mleVo.setMleType(data.getMleType()); return mleVo; } public static MleData getMleApiClientObject(MLEDataVO dataVO) { MleData data = new MleData(); data.setName(dataVO.getMleName()); data.setVersion(dataVO.getMleVersion()); data.setMleType(dataVO.getMleType()); data.setOemName(dataVO.getOemName()); data.setOsName(dataVO.getOsName()); data.setOsVersion(dataVO.getOsVersion()); data.setAttestationType(dataVO.getAttestation_Type()); data.setDescription(dataVO.getMleDescription()); data.setManifestList(getApiClientManifestData(dataVO.getManifestList())); return data; } private static List<Map<String, String>> getManifestListFromApiClient(List<ManifestData> manifestList) { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> manifest; if (manifestList != null) { for (ManifestData manifestData : manifestList) { manifest = new HashMap<String, String>(); manifest.put("Name", manifestData.getName()); manifest.put("Value", manifestData.getValue()); list.add(manifest); } } return list; } private static List<ManifestData> getApiClientManifestData(List<Map<String, String>> manifestList) { List<ManifestData> list = new ArrayList<ManifestData>(); if (manifestList != null) { for (Map<String,String> map : manifestList) { list.add(new ManifestData(map.get("name"), map.get("value"))); } } return list; } public static Map<String, Object> getMLEDataVOToMap(MLEDataVO mleDataVO){ Map<String, Object> mleRestServices = new HashMap<String, Object>(); List<Map<String, String>> manifestList = new ArrayList<Map<String,String>>(); mleRestServices.put("Name",mleDataVO.getMleName()); mleRestServices.put("Version",mleDataVO.getMleVersion()); mleRestServices.put("Description",mleDataVO.getMleDescription()); mleRestServices.put("OsName",mleDataVO.getOsName()); mleRestServices.put("OsVersion",mleDataVO.getOsVersion()); mleRestServices.put("Attestation_Type",mleDataVO.getAttestation_Type()); mleRestServices.put("OemName",mleDataVO.getOemName()); mleRestServices.put("MLE_Type",mleDataVO.getMleType()); for (Map<String, String> manifest : mleDataVO.getManifestList()) { Map<String, String> tem = new HashMap<String, String>(); tem.put("Name", manifest.get("name")); tem.put("Value", manifest.get("value")); manifestList.add(tem); } mleRestServices.put("MLE_Manifests",manifestList); return mleRestServices; } public static Map<String, String> getOSDataVoMap(OSDataVO os){ Map<String, String> map = new HashMap<String, String>(); map.put("Name", os.getOsName()); map.put("Version", os.getOsVersion()); map.put("Description", os.getOsDescription()); return map; } public static MultivaluedMap<String, String> getOSDataMultivaluedMap(OSDataVO os){ //MultivaluedMap<String, String> map = new MultivaluedMapImpl(); MultivaluedMap<String, String> map = new MultivaluedStringMap(); map.add("Name", os.getOsName()); map.add("Version", os.getOsVersion()); map.add("Description", os.getOsDescription()); return map; } public static List<OEMDataVO> getListToOEMDataVO(List<OemData> oemList) { List<OEMDataVO> list = new ArrayList<OEMDataVO>(); for (OemData data : oemList) { OEMDataVO osVo = new OEMDataVO(); osVo.setOemName(data.getName()); osVo.setOemDescription(data.getDescription()); list.add(osVo); } return list; } public static Map<String, String> getOEMDataVoToMap(OEMDataVO oem){ Map<String, String> map = new HashMap<String, String>(); map.put("Name", oem.getOemName()); map.put("Description", oem.getOemDescription()); return map; } }