View Javadoc
1   /**
2    * Waffle (https://github.com/dblock/waffle)
3    *
4    * Copyright (c) 2010 - 2015 Application Security, Inc.
5    *
6    * All rights reserved. This program and the accompanying materials
7    * are made available under the terms of the Eclipse Public License v1.0
8    * which accompanies this distribution, and is available at
9    * http://www.eclipse.org/legal/epl-v10.html
10   *
11   * Contributors:
12   *     Application Security, Inc.
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   * The Class MockWindowsAuthProvider.
32   *
33   * @author dblock[at]dblock[dot]org
34   */
35  public class MockWindowsAuthProvider implements IWindowsAuthProvider {
36  
37      /** The Constant GUEST. */
38      private static final String GUEST  = "Guest";
39  
40      /** The groups. */
41      private final List<String>        groups = new ArrayList<String>();
42  
43      /**
44       * Instantiates a new mock windows auth provider.
45       */
46      public MockWindowsAuthProvider() {
47          this.groups.add("Users");
48          this.groups.add("Everyone");
49      }
50  
51      /**
52       * Adds the group.
53       *
54       * @param name
55       *            the name
56       */
57      public void addGroup(final String name) {
58          this.groups.add(name);
59      }
60  
61      /* (non-Javadoc)
62       * @see waffle.windows.auth.IWindowsAuthProvider#acceptSecurityToken(java.lang.String, byte[], java.lang.String)
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      /* (non-Javadoc)
71       * @see waffle.windows.auth.IWindowsAuthProvider#getCurrentComputer()
72       */
73      @Override
74      public IWindowsComputer getCurrentComputer() {
75          return null;
76      }
77  
78      /* (non-Javadoc)
79       * @see waffle.windows.auth.IWindowsAuthProvider#getDomains()
80       */
81      @Override
82      public IWindowsDomain[] getDomains() {
83          return new IWindowsDomain[0];
84      }
85  
86      /* (non-Javadoc)
87       * @see waffle.windows.auth.IWindowsAuthProvider#logonDomainUser(java.lang.String, java.lang.String, java.lang.String)
88       */
89      @Override
90      public IWindowsIdentity logonDomainUser(final String username, final String domain, final String password) {
91          return null;
92      }
93  
94      /* (non-Javadoc)
95       * @see waffle.windows.auth.IWindowsAuthProvider#logonDomainUserEx(java.lang.String, java.lang.String, java.lang.String, int, int)
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      * Will login the current user with any password. Will logon a "Guest" user as guest.
105      *
106      * @param username
107      *            the username
108      * @param password
109      *            the password
110      * @return the i windows identity
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     /* (non-Javadoc)
125      * @see waffle.windows.auth.IWindowsAuthProvider#lookupAccount(java.lang.String)
126      */
127     @Override
128     public IWindowsAccount lookupAccount(final String username) {
129         return null;
130     }
131 
132     /* (non-Javadoc)
133      * @see waffle.windows.auth.IWindowsAuthProvider#resetSecurityToken(java.lang.String)
134      */
135     @Override
136     public void resetSecurityToken(final String connectionId) {
137         // Do Nothing
138     }
139 }