1
2
3
4
5
6
7
8
9
10
11
12
13
14 package waffle.mock;
15
16 import java.util.ArrayList;
17 import java.util.List;
18
19 import com.google.common.base.Charsets;
20 import com.sun.jna.platform.win32.Secur32Util;
21 import com.sun.jna.platform.win32.Secur32.EXTENDED_NAME_FORMAT;
22
23 import waffle.windows.auth.IWindowsAccount;
24 import waffle.windows.auth.IWindowsAuthProvider;
25 import waffle.windows.auth.IWindowsComputer;
26 import waffle.windows.auth.IWindowsDomain;
27 import waffle.windows.auth.IWindowsIdentity;
28 import waffle.windows.auth.IWindowsSecurityContext;
29
30
31
32
33
34
35 public class MockWindowsAuthProvider implements IWindowsAuthProvider {
36
37
38 private static final String GUEST = "Guest";
39
40
41 private final List<String> groups = new ArrayList<String>();
42
43
44
45
46 public MockWindowsAuthProvider() {
47 this.groups.add("Users");
48 this.groups.add("Everyone");
49 }
50
51
52
53
54
55
56
57 public void addGroup(final String name) {
58 this.groups.add(name);
59 }
60
61
62
63
64 @Override
65 public IWindowsSecurityContext acceptSecurityToken(final String connectionId, final byte[] token,
66 final String securityPackage) {
67 return new MockWindowsSecurityContext(new String(token, Charsets.UTF_8));
68 }
69
70
71
72
73 @Override
74 public IWindowsComputer getCurrentComputer() {
75 return null;
76 }
77
78
79
80
81 @Override
82 public IWindowsDomain[] getDomains() {
83 return new IWindowsDomain[0];
84 }
85
86
87
88
89 @Override
90 public IWindowsIdentity logonDomainUser(final String username, final String domain, final String password) {
91 return null;
92 }
93
94
95
96
97 @Override
98 public IWindowsIdentity logonDomainUserEx(final String username, final String domain, final String password,
99 final int logonType, final int logonProvider) {
100 return null;
101 }
102
103
104
105
106
107
108
109
110
111
112 @Override
113 public IWindowsIdentity logonUser(final String username, final String password) {
114 final String currentUsername = Secur32Util.getUserNameEx(EXTENDED_NAME_FORMAT.NameSamCompatible);
115 if (username.equals(currentUsername)) {
116 return new MockWindowsIdentity(currentUsername, this.groups);
117 } else if (username.equals(MockWindowsAuthProvider.GUEST)) {
118 return new MockWindowsIdentity(MockWindowsAuthProvider.GUEST, this.groups);
119 } else {
120 throw new RuntimeException("Mock error: " + username);
121 }
122 }
123
124
125
126
127 @Override
128 public IWindowsAccount lookupAccount(final String username) {
129 return null;
130 }
131
132
133
134
135 @Override
136 public void resetSecurityToken(final String connectionId) {
137
138 }
139 }