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