/* * Copyright (c) 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Nuxeo - initial API and implementation */ package org.nuxeo.ecm.core.management.statuses; import java.lang.reflect.Method; import java.math.BigInteger; import java.net.InetAddress; import java.net.NetworkInterface; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Enumeration; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuxeo.common.utils.Base64; import org.nuxeo.ecm.core.management.api.AdministrativeStatusManager; import org.nuxeo.runtime.api.Framework; /** * Instance identifier (mainly imported from connect client : TechnicalInstanceIdentifier) * * @author matic * */ public class NuxeoInstanceIdentifierHelper { private static final String HASH_METHOD = "MD5"; protected static final Log log = LogFactory.getLog(NuxeoInstanceIdentifierHelper.class); protected static String serverInstanceName; public static String generateHardwareUID() throws Exception { String hwUID = ""; String javaVersion = System.getProperty("java.version"); Enumeration<NetworkInterface> ifs = NetworkInterface.getNetworkInterfaces(); while (ifs.hasMoreElements()) { NetworkInterface ni = ifs.nextElement(); if (javaVersion.contains("1.6")) { // ni.getHardwareAddress() only in jdk 1.6 Method[] methods = ni.getClass().getMethods(); for (Method method : methods) { if (method.getName().equalsIgnoreCase("getHardwareAddress")) { byte[] hwAddr = (byte[]) method.invoke(ni); if (hwAddr != null) { hwUID = hwUID + "-" + Base64.encodeBytes(hwAddr); } break; } } } else { Enumeration<InetAddress> addrs = ni.getInetAddresses(); while (addrs.hasMoreElements()) { hwUID = hwUID + "-" + Base64.encodeBytes(addrs.nextElement().getAddress()); } } } return hwUID; } public static String summarize(String value) throws NoSuchAlgorithmException { byte[] digest; digest = MessageDigest.getInstance(HASH_METHOD).digest( value.getBytes()); BigInteger sum = new BigInteger(digest); return sum.toString(16); } public static String newServerInstanceName() { String osName = System.getProperty("os.name"); String hwInfo; try { hwInfo = generateHardwareUID(); hwInfo = summarize(hwInfo); } catch (Exception e1) { hwInfo = "***"; } String instancePath; try { instancePath = Framework.getRuntime().getHome().toString(); instancePath = summarize(instancePath); } catch (NoSuchAlgorithmException e) { instancePath = "***"; } return osName + "-" + instancePath + "-" + hwInfo; } public static String getServerInstanceName() { if (serverInstanceName == null) { serverInstanceName = Framework.getProperty(AdministrativeStatusManager.ADMINISTRATIVE_INSTANCE_ID); if (StringUtils.isEmpty(serverInstanceName)) { serverInstanceName = newServerInstanceName(); } } return serverInstanceName; } }