1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package waffle.windows.auth.impl;
25
26 import com.sun.jna.platform.win32.LMJoin;
27 import com.sun.jna.platform.win32.Netapi32Util;
28 import com.sun.jna.platform.win32.Netapi32Util.LocalGroup;
29
30 import java.util.ArrayList;
31 import java.util.List;
32
33 import waffle.windows.auth.IWindowsComputer;
34
35
36
37
38 public class WindowsComputerImpl implements IWindowsComputer {
39
40
41 private final String computerName;
42
43
44 private final String domainName;
45
46
47
48
49
50
51
52 public WindowsComputerImpl(final String newComputerName) {
53 this.computerName = newComputerName;
54 this.domainName = Netapi32Util.getDomainName(newComputerName);
55 }
56
57 @Override
58 public String getComputerName() {
59 return this.computerName;
60 }
61
62 @Override
63 public String[] getGroups() {
64 final List<String> groupNames = new ArrayList<>();
65 final LocalGroup[] groups = Netapi32Util.getLocalGroups(this.computerName);
66 for (final LocalGroup group : groups) {
67 groupNames.add(group.name);
68 }
69 return groupNames.toArray(new String[0]);
70 }
71
72 @Override
73 public String getJoinStatus() {
74 final int joinStatus = Netapi32Util.getJoinStatus(this.computerName);
75 switch (joinStatus) {
76 case LMJoin.NETSETUP_JOIN_STATUS.NetSetupDomainName:
77 return "NetSetupDomainName";
78 case LMJoin.NETSETUP_JOIN_STATUS.NetSetupUnjoined:
79 return "NetSetupUnjoined";
80 case LMJoin.NETSETUP_JOIN_STATUS.NetSetupWorkgroupName:
81 return "NetSetupWorkgroupName";
82 case LMJoin.NETSETUP_JOIN_STATUS.NetSetupUnknownStatus:
83 return "NetSetupUnknownStatus";
84 default:
85 throw new RuntimeException("Unsupported join status: " + joinStatus);
86 }
87 }
88
89 @Override
90 public String getMemberOf() {
91 return this.domainName;
92 }
93
94 }