James Moger
2015-11-22 ed552ba47c02779c270ffd62841d6d1048dade70
commit | author | age
9aa119 1 /*
JM 2  * Copyright 2013 gitblit.com.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.gitblit.tests;
17
2c0555 18 import java.io.BufferedReader;
FB 19 import java.io.IOException;
20 import java.io.UnsupportedEncodingException;
21 import java.security.Principal;
22 import java.util.Collection;
23 import java.util.Collections;
24 import java.util.Enumeration;
9aa119 25 import java.util.HashMap;
2c0555 26 import java.util.List;
FB 27 import java.util.Locale;
28 import java.util.Map;
29
30 import javax.servlet.AsyncContext;
31 import javax.servlet.DispatcherType;
32 import javax.servlet.RequestDispatcher;
33 import javax.servlet.ServletContext;
34 import javax.servlet.ServletException;
35 import javax.servlet.ServletInputStream;
36 import javax.servlet.ServletRequest;
37 import javax.servlet.ServletResponse;
38 import javax.servlet.http.Cookie;
39 import javax.servlet.http.HttpServletRequest;
40 import javax.servlet.http.HttpServletResponse;
41 import javax.servlet.http.HttpSession;
42 import javax.servlet.http.HttpSessionContext;
43 import javax.servlet.http.HttpUpgradeHandler;
44 import javax.servlet.http.Part;
9aa119 45
JM 46 import org.junit.Test;
47
2c0555 48 import com.gitblit.IUserService;
FB 49 import com.gitblit.Keys;
9aa119 50 import com.gitblit.manager.AuthenticationManager;
JM 51 import com.gitblit.manager.IAuthenticationManager;
2c0555 52 import com.gitblit.manager.IRuntimeManager;
9aa119 53 import com.gitblit.manager.RuntimeManager;
JM 54 import com.gitblit.manager.UserManager;
2c0555 55 import com.gitblit.models.TeamModel;
9aa119 56 import com.gitblit.models.UserModel;
JM 57 import com.gitblit.tests.mock.MemorySettings;
fc3a39 58 import com.gitblit.utils.XssFilter;
JM 59 import com.gitblit.utils.XssFilter.AllowXssFilter;
9aa119 60
JM 61 /**
62  * Class for testing local authentication.
63  *
64  * @author James Moger
65  *
66  */
2c0555 67 @SuppressWarnings("deprecation")
9aa119 68 public class AuthenticationManagerTest extends GitblitUnitTest {
JM 69
2c0555 70     UserManager users;
9aa119 71
2c0555 72     private static final class DummyHttpServletRequest implements HttpServletRequest {
9aa119 73
2c0555 74         @Override
FB 75         public Object getAttribute(String name) {
76             return null;
77         }
9aa119 78
2c0555 79         @Override
FB 80         public Enumeration<String> getAttributeNames() {
81             return null;
82         }
9aa119 83
2c0555 84         @Override
FB 85         public String getCharacterEncoding() {
86             return null;
87         }
88
89         @Override
90         public void setCharacterEncoding(String env)
91                 throws UnsupportedEncodingException {
92         }
93
94         @Override
95         public int getContentLength() {
96             return 0;
97         }
98
99         @Override
100         public long getContentLengthLong() {
101             return 0;
102         }
103
104         @Override
105         public String getContentType() {
106             return null;
107         }
108
109         @Override
110         public ServletInputStream getInputStream() throws IOException {
111             return null;
112         }
113
114         @Override
115         public String getParameter(String name) {
116             return null;
117         }
118
119         @Override
120         public Enumeration<String> getParameterNames() {
121             return null;
122         }
123
124         @Override
125         public String[] getParameterValues(String name) {
126             return null;
127         }
128
129         @Override
130         public Map<String, String[]> getParameterMap() {
131             return null;
132         }
133
134         @Override
135         public String getProtocol() {
136             return null;
137         }
138
139         @Override
140         public String getScheme() {
141             return null;
142         }
143
144         @Override
145         public String getServerName() {
146             return null;
147         }
148
149         @Override
150         public int getServerPort() {
151             return 0;
152         }
153
154         @Override
155         public BufferedReader getReader() throws IOException {
156             return null;
157         }
158
159         @Override
160         public String getRemoteAddr() {
161             return null;
162         }
163
164         @Override
165         public String getRemoteHost() {
166             return null;
167         }
168
169         @Override
170         public void setAttribute(String name, Object o) {
171         }
172
173         @Override
174         public void removeAttribute(String name) {
175         }
176
177         @Override
178         public Locale getLocale() {
179             return null;
180         }
181
182         @Override
183         public Enumeration<Locale> getLocales() {
184             return null;
185         }
186
187         @Override
188         public boolean isSecure() {
189             return false;
190         }
191
192         @Override
193         public RequestDispatcher getRequestDispatcher(String path) {
194             return null;
195         }
196
197         @Override
198         public String getRealPath(String path) {
199             return null;
200         }
201
202         @Override
203         public int getRemotePort() {
204             return 0;
205         }
206
207         @Override
208         public String getLocalName() {
209             return null;
210         }
211
212         @Override
213         public String getLocalAddr() {
214             return null;
215         }
216
217         @Override
218         public int getLocalPort() {
219             return 0;
220         }
221
222         @Override
223         public ServletContext getServletContext() {
224             return null;
225         }
226
227         @Override
228         public AsyncContext startAsync() throws IllegalStateException {
229             return null;
230         }
231
232         @Override
233         public AsyncContext startAsync(ServletRequest servletRequest,
234                 ServletResponse servletResponse)
235                         throws IllegalStateException {
236             return null;
237         }
238
239         @Override
240         public boolean isAsyncStarted() {
241             return false;
242         }
243
244         @Override
245         public boolean isAsyncSupported() {
246             return false;
247         }
248
249         @Override
250         public AsyncContext getAsyncContext() {
251             return null;
252         }
253
254         @Override
255         public DispatcherType getDispatcherType() {
256             return null;
257         }
258
259         @Override
260         public String getAuthType() {
261             return null;
262         }
263
264         @Override
265         public Cookie[] getCookies() {
266             return null;
267         }
268
269         @Override
270         public long getDateHeader(String name) {
271             return 0;
272         }
273
274         @Override
275         public String getHeader(String name) {
276             return null;
277         }
278
279         @Override
280         public Enumeration<String> getHeaders(String name) {
281             return null;
282         }
283
284         @Override
285         public Enumeration<String> getHeaderNames() {
286             return null;
287         }
288
289         @Override
290         public int getIntHeader(String name) {
291             return 0;
292         }
293
294         @Override
295         public String getMethod() {
296             return null;
297         }
298
299         @Override
300         public String getPathInfo() {
301             return null;
302         }
303
304         @Override
305         public String getPathTranslated() {
306             return null;
307         }
308
309         @Override
310         public String getContextPath() {
311             return null;
312         }
313
314         @Override
315         public String getQueryString() {
316             return null;
317         }
318
319         @Override
320         public String getRemoteUser() {
321             return null;
322         }
323
324         @Override
325         public boolean isUserInRole(String role) {
326             if(role != null && "admin".equals(role)) {
327                 return true;
328             }
329             return false;
330         }
331
332         @Override
333         public Principal getUserPrincipal() {
334             return new Principal(){
335                 @Override
336                 public String getName() {
337                     return "sunnyjim";
338                 }
339
340             };
341         }
342
343         @Override
344         public String getRequestedSessionId() {
345             return null;
346         }
347
348         @Override
349         public String getRequestURI() {
350             return null;
351         }
352
353         @Override
354         public StringBuffer getRequestURL() {
355             return null;
356         }
357
358         @Override
359         public String getServletPath() {
360             return null;
361         }
362
363         @Override
364         public HttpSession getSession(boolean create) {
365             return null;
366         }
367
368         final Map<String, Object> sessionAttributes = new HashMap<String, Object>();
369         @Override
370         public HttpSession getSession() {
371             return new HttpSession() {
372
373                 @Override
374                 public long getCreationTime() {
375                     return 0;
376                 }
377
378                 @Override
379                 public String getId() {
380                     return null;
381                 }
382
383                 @Override
384                 public long getLastAccessedTime() {
385                     return 0;
386                 }
387
388                 @Override
389                 public ServletContext getServletContext() {
390                     return null;
391                 }
392
393                 @Override
394                 public void setMaxInactiveInterval(int interval) {
395                 }
396
397                 @Override
398                 public int getMaxInactiveInterval() {
399                     return 0;
400                 }
401
402                 @Override
403                 public HttpSessionContext getSessionContext() {
404                     return null;
405                 }
406
407                 @Override
408                 public Object getAttribute(String name) {
409                     return sessionAttributes.get(name);
410                 }
411
412                 @Override
413                 public Object getValue(String name) {
414                     return null;
415                 }
416
417                 @Override
418                 public Enumeration<String> getAttributeNames() {
419                     return Collections.enumeration(sessionAttributes.keySet());
420                 }
421
422                 @Override
423                 public String[] getValueNames() {
424                     return null;
425                 }
426
427                 @Override
428                 public void setAttribute(String name,
429                         Object value) {
430                 }
431
432                 @Override
433                 public void putValue(String name, Object value) {
434                 }
435
436                 @Override
437                 public void removeAttribute(String name) {
438                 }
439
440                 @Override
441                 public void removeValue(String name) {
442                 }
443
444                 @Override
445                 public void invalidate() {
446                 }
447
448                 @Override
449                 public boolean isNew() {
450                     return false;
451                 }
452
453             };
454         }
455
456         @Override
457         public String changeSessionId() {
458             return null;
459         }
460
461         @Override
462         public boolean isRequestedSessionIdValid() {
463             return false;
464         }
465
466         @Override
467         public boolean isRequestedSessionIdFromCookie() {
468             return false;
469         }
470
471         @Override
472         public boolean isRequestedSessionIdFromURL() {
473             return false;
474         }
475
476         @Override
477         public boolean isRequestedSessionIdFromUrl() {
478             return false;
479         }
480
481         @Override
482         public boolean authenticate(HttpServletResponse response)
483                 throws IOException, ServletException {
484             return false;
485         }
486
487         @Override
488         public void login(String username, String password)
489                 throws ServletException {
490         }
491
492         @Override
493         public void logout() throws ServletException {
494         }
495
496         @Override
497         public Collection<Part> getParts() throws IOException,
498         ServletException {
499             return null;
500         }
501
502         @Override
503         public Part getPart(String name) throws IOException,
504         ServletException {
505             return null;
506         }
507
508         @Override
509         public <T extends HttpUpgradeHandler> T upgrade(
510                 Class<T> handlerClass) throws IOException,
511                 ServletException {
512             return null;
513         }
514
515     }
516
517     HashMap<String, Object> settings = new HashMap<String, Object>();
518
519     MemorySettings getSettings() {
520         return new MemorySettings(settings);
521     }
522
523     IAuthenticationManager newAuthenticationManager() {
524         XssFilter xssFilter = new AllowXssFilter();
525         RuntimeManager runtime = new RuntimeManager(getSettings(), xssFilter, GitBlitSuite.BASEFOLDER).start();
526         users = new UserManager(runtime, null).start();
527         final Map<String, UserModel> virtualUsers = new HashMap<String, UserModel>();
528         users.setUserService(new IUserService() {
529
530             @Override
531             public void setup(IRuntimeManager runtimeManager) {
532             }
533
534             @Override
535             public String getCookie(UserModel model) {
536                 return null;
537             }
538
539             @Override
540             public UserModel getUserModel(char[] cookie) {
541                 return null;
542             }
543
544             @Override
545             public UserModel getUserModel(String username) {
546                 return virtualUsers.get(username);
547             }
548
549             @Override
550             public boolean updateUserModel(UserModel model) {
551                 virtualUsers.put(model.username, model);
552                 return true;
553             }
554
555             @Override
556             public boolean updateUserModels(Collection<UserModel> models) {
557                 return false;
558             }
559
560             @Override
561             public boolean updateUserModel(String username, UserModel model) {
562                 virtualUsers.put(username, model);
563                 return true;
564             }
565
566             @Override
567             public boolean deleteUserModel(UserModel model) {
568                 return false;
569             }
570
571             @Override
572             public boolean deleteUser(String username) {
573                 return false;
574             }
575
576             @Override
577             public List<String> getAllUsernames() {
578                 return null;
579             }
580
581             @Override
582             public List<UserModel> getAllUsers() {
583                 return null;
584             }
585
586             @Override
587             public List<String> getAllTeamNames() {
588                 return null;
589             }
590
591             @Override
592             public List<TeamModel> getAllTeams() {
593                 return null;
594             }
595
596             @Override
597             public List<String> getTeamNamesForRepositoryRole(String role) {
598                 return null;
599             }
600
601             @Override
602             public TeamModel getTeamModel(String teamname) {
603                 return null;
604             }
605
606             @Override
607             public boolean updateTeamModel(TeamModel model) {
608                 return false;
609             }
610
611             @Override
612             public boolean updateTeamModels(Collection<TeamModel> models) {
613                 return false;
614             }
615
616             @Override
617             public boolean updateTeamModel(String teamname, TeamModel model) {
618                 return false;
619             }
620
621             @Override
622             public boolean deleteTeamModel(TeamModel model) {
623                 return false;
624             }
625
626             @Override
627             public boolean deleteTeam(String teamname) {
628                 return false;
629             }
630
631             @Override
632             public List<String> getUsernamesForRepositoryRole(String role) {
633                 return null;
634             }
635
636             @Override
637             public boolean renameRepositoryRole(String oldRole,
638                     String newRole) {
639                 return false;
640             }
641
642             @Override
643             public boolean deleteRepositoryRole(String role) {
644                 return false;
645             }
646
647         });
648         AuthenticationManager auth = new AuthenticationManager(runtime, users).start();
649         return auth;
650     }
651
652     @Test
653     public void testAuthenticate() throws Exception {
654         IAuthenticationManager auth = newAuthenticationManager();
655
656         UserModel user = new UserModel("sunnyjim");
9aa119 657         user.password = "password";
JM 658         users.updateUserModel(user);
659
0d7c65 660         assertNotNull(auth.authenticate(user.username, user.password.toCharArray(), null));
9aa119 661         user.disabled = true;
JM 662
663         users.updateUserModel(user);
0d7c65 664         assertNull(auth.authenticate(user.username, user.password.toCharArray(), null));
9aa119 665         users.deleteUserModel(user);
2c0555 666     }
FB 667
668     @Test
669     public void testContenairAuthenticate() throws Exception {
670         settings.put(Keys.realm.container.autoCreateAccounts, "true");
671         settings.put(Keys.realm.container.autoAccounts.displayName, "displayName");
672         settings.put(Keys.realm.container.autoAccounts.emailAddress, "emailAddress");
673         settings.put(Keys.realm.container.autoAccounts.adminRole, "admin");
674         settings.put(Keys.realm.container.autoAccounts.locale, "locale");
675
676         DummyHttpServletRequest request = new DummyHttpServletRequest();
677         request.sessionAttributes.put("displayName", "Sunny Jim");
678         request.sessionAttributes.put("emailAddress", "Jim.Sunny@gitblit.com");
679         request.sessionAttributes.put("locale", "it");
680
681         IAuthenticationManager auth = newAuthenticationManager();
682
683         UserModel user = auth.authenticate(request);
684
685         assertTrue(user.canAdmin);
686         assertEquals("Sunny Jim", user.displayName);
687         assertEquals("Jim.Sunny@gitblit.com", user.emailAddress);
688         assertEquals(Locale.ITALIAN, user.getPreferences().getLocale());
689     }
690
691     @Test
692     public void testContenairAuthenticateEmpty() throws Exception {
693         settings.put(Keys.realm.container.autoCreateAccounts, "true");
694         settings.put(Keys.realm.container.autoAccounts.displayName, "displayName");
695         settings.put(Keys.realm.container.autoAccounts.emailAddress, "emailAddress");
696         settings.put(Keys.realm.container.autoAccounts.adminRole, "notAdmin");
697
698         DummyHttpServletRequest request = new DummyHttpServletRequest();
699
700         IAuthenticationManager auth = newAuthenticationManager();
701
702         UserModel user = auth.authenticate(request);
703
704         assertFalse(user.canAdmin);
705         assertEquals("sunnyjim", user.displayName);
706         assertNull(user.emailAddress);
707         assertNull(user.getPreferences().getLocale());
708     }
709
9aa119 710 }