X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FCmsUuidFactory.java;fp=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Facr%2FCmsUuidFactory.java;h=0000000000000000000000000000000000000000;hp=357a0102f432f639058ce4deff06c546e5be3625;hb=b95462873703848193e56fcbe997693630db6121;hpb=55d88fba80cec198a0f11ba7545e19878c51fc5e diff --git a/org.argeo.cms/src/org/argeo/cms/acr/CmsUuidFactory.java b/org.argeo.cms/src/org/argeo/cms/acr/CmsUuidFactory.java deleted file mode 100644 index 357a0102f..000000000 --- a/org.argeo.cms/src/org/argeo/cms/acr/CmsUuidFactory.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.argeo.cms.acr; - -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.InterfaceAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.util.BitSet; -import java.util.Enumeration; - -import org.argeo.api.cms.CmsLog; -import org.argeo.api.uuid.ConcurrentUuidFactory; -import org.argeo.api.uuid.NodeIdSupplier; -import org.argeo.api.uuid.UuidBinaryUtils; - -public class CmsUuidFactory extends ConcurrentUuidFactory { - private final static CmsLog log = CmsLog.getLog(CmsUuidFactory.class); - - public CmsUuidFactory(byte[] nodeId) { - super(0, nodeId); - assert createTimeUUID().node() == BitSet.valueOf(toNodeIdBytes(nodeId, 0)).toLongArray()[0]; - } - - public CmsUuidFactory() { - this(getIpBytes()); - } - - /** Returns an SHA1 digest of one of the IP addresses. */ - protected static byte[] getIpBytes() { - Enumeration netInterfaces = null; - try { - netInterfaces = NetworkInterface.getNetworkInterfaces(); - } catch (SocketException e) { - throw new IllegalStateException(e); - } - if (netInterfaces == null) - throw new IllegalStateException("No interfaces"); - - InetAddress selectedIpv6 = null; - InetAddress selectedIpv4 = null; - netInterfaces: while (netInterfaces.hasMoreElements()) { - NetworkInterface netInterface = netInterfaces.nextElement(); - byte[] hardwareAddress = null; - try { - hardwareAddress = netInterface.getHardwareAddress(); - if (hardwareAddress != null) { - // first IPv6 - addr: for (InterfaceAddress addr : netInterface.getInterfaceAddresses()) { - InetAddress ip = addr.getAddress(); - if (ip instanceof Inet6Address) { - Inet6Address ipv6 = (Inet6Address) ip; - if (ipv6.isAnyLocalAddress() || ipv6.isLinkLocalAddress() || ipv6.isLoopbackAddress()) - continue addr; - selectedIpv6 = ipv6; - break netInterfaces; - } - - } - // then IPv4 - addr: for (InterfaceAddress addr : netInterface.getInterfaceAddresses()) { - InetAddress ip = addr.getAddress(); - if (ip instanceof Inet4Address) { - Inet4Address ipv4 = (Inet4Address) ip; - if (ipv4.isAnyLocalAddress() || ipv4.isLinkLocalAddress() || ipv4.isLoopbackAddress()) - continue addr; - selectedIpv4 = ipv4; - } - - } - } - } catch (SocketException e) { - throw new IllegalStateException(e); - } - } - InetAddress selectedIp = selectedIpv6 != null ? selectedIpv6 : selectedIpv4; - if (selectedIp == null) { - log.warn("No IP address found, using a random node id for UUID generation"); - return NodeIdSupplier.randomNodeId(); - } - byte[] digest = sha1(selectedIp.getAddress()); - log.info("Use IP " + selectedIp + " hashed as " + UuidBinaryUtils.toHexString(digest) + " as node id"); - byte[] nodeId = toNodeIdBytes(digest, 0); - // marks that this is not based on MAC address - forceToNoMacAddress(nodeId, 0); - return nodeId; - } - -}