HardwareUtil class

Пакет: com.hypixel.hytale.common.util

Файл: com/hypixel/hytale/common/util/HardwareUtil.java

Поля (20)

МодификаторыТипИмя
final HytaleLogger LOGGER
String var0
var0
var0
String var0
var0
UUID var0
var0
Path var1
Process var1
Matcher var1
String var1
Matcher var11
String var2
Matcher var5
Matcher var5
String var5
UUID var6
UUID var8
UUID var9

Методы (15)

МодификаторыВозвратСигнатура
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to get hardware UUID for Windows - registry, PowerShell, and wmic all failed")
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to get hardware UUID for macOS - ioreg and system_profiler both failed")
abstract throw new RuntimeExceptionthrow new RuntimeException("Failed to get hardware UUID for Linux - all methods failed")
if if(var0 != null)
if if(var0 != null)
if if(var8 != null)
if if(var0 != null)
if if(var9 != null)
if if(var0 != null)
if if(var0 != null)
if if(var0 != null)
if if(var0 != null)
if if(var5 != null)
if if(var6 != null)
return switchreturn switch(SystemUtil.TYPE)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.common.util;

class="kw">import com.hypixel.hytale.function.supplier.SupplierUtil;
class="kw">import com.hypixel.hytale.logger.HytaleLogger;
class="kw">import java.nio.charset.StandardCharsets;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.time.Duration;
class="kw">import java.util.UUID;
class="kw">import java.util.function.Supplier;
class="kw">import java.util.logging.Level;
class="kw">import java.util.regex.Matcher;
class="kw">import java.util.regex.Pattern;
class="kw">import javax.annotation.Nullable;

class="kw">public class HardwareUtil {
   class="kw">private class="kw">static class="kw">final HytaleLogger LOGGER = HytaleLogger.forEnclosingClass();
   class="kw">private class="kw">static class="kw">final Duration PROCESS_TIMEOUT = Duration.ofSeconds(2L);
   class="kw">private class="kw">static class="kw">final Pattern UUID_PATTERN = Pattern.compile("([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})");
   class="kw">private class="kw">static class="kw">final Supplier<UUID> WINDOWS = SupplierUtil.cache(() -> {
      String var0 = runCommand("reg", "query", "HKLM\\SOFTWARE\\Microsoft\\Cryptography", "/v", "MachineGuid");
      if (var0 != null) {
         for (String var4 : var0.split("\r?\n", 0)) {
            if (var4.contains("MachineGuid")) {
               Matcher var5 = UUID_PATTERN.matcher(var4);
               if (var5.find()) {
                  class="kw">return UUID.fromString(var5.group(1));
               }
            }
         }
      }

      var0 = runCommand("powershell", "-NoProfile", "-Command", "(Get-CimInstance -Class Win32_ComputerSystemProduct).UUID");
      if (var0 != null) {
         UUID var8 = parseUuidFromOutput(var0);
         if (var8 != null) {
            class="kw">return var8;
         }
      }

      var0 = runCommand("wmic", "csproduct", "get", "UUID");
      if (var0 != null) {
         UUID var9 = parseUuidFromOutput(var0);
         if (var9 != null) {
            class="kw">return var9;
         }
      }

      throw new RuntimeException("Failed to get hardware UUID for Windows - registry, PowerShell, and wmic all failed");
   });
   class="kw">private class="kw">static class="kw">final Supplier<UUID> MAC = SupplierUtil.cache(() -> {
      String var0 = runCommand("/usr/sbin/ioreg", "-rd1", "-c", "IOPlatformExpertDevice");
      if (var0 != null) {
         for (String var4 : var0.split("\r?\n", 0)) {
            if (var4.contains("IOPlatformUUID")) {
               Matcher var5 = UUID_PATTERN.matcher(var4);
               if (var5.find()) {
                  class="kw">return UUID.fromString(var5.group(1));
               }
            }
         }
      }

      var0 = runCommand("/usr/sbin/system_profiler", "SPHardwareDataType");
      if (var0 != null) {
         for (String var10 : var0.split("\r?\n", 0)) {
            if (var10.contains("Hardware UUID")) {
               Matcher var11 = UUID_PATTERN.matcher(var10);
               if (var11.find()) {
                  class="kw">return UUID.fromString(var11.group(1));
               }
            }
         }
      }

      throw new RuntimeException("Failed to get hardware UUID for macOS - ioreg and system_profiler both failed");
   });
   class="kw">private class="kw">static class="kw">final Supplier<UUID> LINUX = SupplierUtil.cache(() -> {
      UUID var0 = readMachineIdFile(Path.of("/etc/machine-id"));
      if (var0 != null) {
         class="kw">return var0;
      }

      var0 = readMachineIdFile(Path.of("/var/lib/dbus/machine-id"));
      if (var0 != null) {
         class="kw">return var0;
      }

      try {
         Path var1 = Path.of("/sys/class/dmi/id/product_uuid");
         if (Files.isReadable(var1)) {
            String var2 = Files.readString(var1, StandardCharsets.UTF_8).trim();
            if (!var2.isEmpty()) {
               class="kw">return UUID.fromString(var2);
            }
         }
      } catch (Exception var3) {
      }

      String var5 = runCommand("dmidecode", "-s", "system-uuid");
      if (var5 != null) {
         UUID var6 = parseUuidFromOutput(var5);
         if (var6 != null) {
            class="kw">return var6;
         }
      }

      throw new RuntimeException("Failed to get hardware UUID for Linux - all methods failed");
   });

   class="kw">public HardwareUtil() {
   }

   @Nullable
   class="kw">private class="kw">static String runCommand(String... var0) {
      try {
         Process var1 = new ProcessBuilder(var0).start();
         if (var1.waitFor(PROCESS_TIMEOUT)) {
            class="kw">return new String(var1.getInputStream().readAllBytes(), StandardCharsets.UTF_8).trim();
         }

         var1.destroyForcibly();
      } catch (InterruptedException var2) {
         Thread.currentThread().interrupt();
      } catch (Exception var3) {
      }

      class="kw">return null;
   }

   @Nullable
   class="kw">private class="kw">static UUID parseUuidFromOutput(String var0) {
      Matcher var1 = UUID_PATTERN.matcher(var0);
      class="kw">return var1.find() ? UUID.fromString(var1.group(1)) : null;
   }

   @Nullable
   class="kw">private class="kw">static UUID readMachineIdFile(Path var0) {
      try {
         if (!Files.isReadable(var0)) {
            class="kw">return null;
         }

         String var1 = Files.readString(var0, StandardCharsets.UTF_8).trim();
         class="kw">return !var1.isEmpty() && var1.length() == 32
            ? UUID.fromString(
               var1.substring(0, 8) + "-" + var1.substring(8, 12) + "-" + var1.substring(12, 16) + "-" + var1.substring(16, 20) + "-" + var1.substring(20, 32)
            )
            : null;
      } catch (Exception var2) {
         class="kw">return null;
      }
   }

   @Nullable
   class="kw">public class="kw">static UUID getUUID() {
      try {
         class="kw">return class="kw">switch (SystemUtil.TYPE) {
            case WINDOWS -> (UUID)WINDOWS.get();
            case LINUX -> (UUID)LINUX.get();
            case MACOS -> (UUID)MAC.get();
            case OTHER -> throw new RuntimeException("Unknown OS!");
         };
      } catch (Exception var1) {
         ((HytaleLogger.Api)LOGGER.at(Level.WARNING).withCause(var1)).log("Failed to get Hardware UUID");
         class="kw">return null;
      }
   }
}