/*
* Copyright (c) 2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.systemservices.impl.upgrade.beans;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.text.MessageFormat;
import java.util.List;
import com.emc.storageos.svcs.errorhandling.resources.APIException;
import org.apache.commons.codec.binary.Base64;
import com.emc.storageos.db.client.model.EncryptionProvider;
public class SoftwareUpdate {
private static volatile EncryptionProvider _encryptionProvider;
private static volatile List<String> _catalogServerHostNames;
private static volatile String _catalogKey;
private static volatile String _catalogCategory;
private static volatile String _catalogLanguage;
private static volatile String _catalogEnvironment;
private static String _catalogMajorRev = "";
private static String _catalogMinorRev = "";
private static String _catalogBuildNumber = "";
private static final String EMC_CATALOG_POST_CONTENT =
"<SOAP-ENV:Envelope " +
"xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " +
"xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
"xmlns:tns=\"{0}/ClariionWSL.DownloadCatalog.svc\" > " +
"<SOAP-ENV:Body> " +
"<tns:downloadUpdates xmlns:tns=\"{0}/ClariionWSL.DownloadCatalog.svc\"> " +
"<downloadUpdatesIN > <productModel xsi:type=\"xsd:string\" >{1}</productModel > " +
"<category xsi:type=\"xsd:string\" >{2}</category > " +
"<majorRevision xsi:type=\"xsd:string\" >{3}</majorRevision > " +
"<minorRevision xsi:type=\"xsd:string\" >{4}</minorRevision > " +
"<language xsi:type=\"xsd:string\" >{5}</language > " +
"<build xsi:type=\"xsd:string\" >{6}</build > " +
"<environment xsi:type=\"xsd:string\" >{7}</environment > " +
"</downloadUpdatesIN > " +
"</tns:downloadUpdates > " +
"</SOAP-ENV:Body> " +
"</SOAP-ENV:Envelope>";
private static final String EMC_SSO_AUTH_SERVICE_LOGIN_POST_CONTENT = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><user><password>{0}</password><username>{1}</username></user>";
protected SoftwareUpdate() {
}
public void setCatalogServerHostNames(List<String> catalogServerHostNames) {
_catalogServerHostNames = catalogServerHostNames;
}
public void setCatalogName(final String catalogName) {
String[] catalogParts = catalogName.split("\\.");
if (catalogParts.length < 4) {
throw APIException.internalServerErrors.invalidObject("catalog name");
}
_catalogKey = catalogParts[0];
_catalogCategory = catalogParts[1];
_catalogLanguage = catalogParts[2];
_catalogEnvironment = catalogParts[3];
}
public void setEncryptionProvider(EncryptionProvider encryptionProvider) {
_encryptionProvider = encryptionProvider;
}
public static boolean isCatalogServer(final URL url) {
if (null == _catalogServerHostNames) {
throw APIException.internalServerErrors.targetIsNullOrEmpty("catalog server host names");
}
for (String catalogServerHostName : _catalogServerHostNames) {
if (catalogServerHostName.equalsIgnoreCase(url.getHost())) {
return true;
}
}
return false;
}
public static String getCatalogPostContent(final URL url) {
if (null == _catalogKey || null == _catalogCategory
|| null == _catalogLanguage || null == _catalogEnvironment) {
throw APIException.internalServerErrors.targetIsNullOrEmpty("catalog name");
}
return MessageFormat.format(EMC_CATALOG_POST_CONTENT,
new Object[] { url, _catalogKey, _catalogCategory,
_catalogMajorRev, _catalogMinorRev,
_catalogLanguage, _catalogBuildNumber,
_catalogEnvironment });
}
public static String getDownloadLoginContent(final String username, final String encryptedPassword) throws UnsupportedEncodingException {
return MessageFormat.format(EMC_SSO_AUTH_SERVICE_LOGIN_POST_CONTENT,
_encryptionProvider.decrypt(Base64.decodeBase64(encryptedPassword.getBytes("UTF-8"))), username);
}
}