| 
									
										
										
										
											2015-11-19 14:39:21 -08:00
										 |  |  | package security;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 13:22:18 -07:00
										 |  |  | import com.google.common.base.Preconditions;
 | 
					
						
							| 
									
										
										
										
											2019-08-31 20:51:14 -07:00
										 |  |  | import org.apache.commons.lang3.StringUtils;
 | 
					
						
							|  |  |  | import play.Logger;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import javax.annotation.Nonnull;
 | 
					
						
							| 
									
										
										
										
											2017-04-06 22:01:29 -07:00
										 |  |  | import javax.naming.AuthenticationException;
 | 
					
						
							| 
									
										
										
										
											2015-11-19 14:39:21 -08:00
										 |  |  | import javax.naming.NamingException;
 | 
					
						
							| 
									
										
										
										
											2019-08-31 20:51:14 -07:00
										 |  |  | import javax.security.auth.callback.Callback;
 | 
					
						
							|  |  |  | import javax.security.auth.callback.CallbackHandler;
 | 
					
						
							|  |  |  | import javax.security.auth.callback.NameCallback;
 | 
					
						
							|  |  |  | import javax.security.auth.callback.PasswordCallback;
 | 
					
						
							| 
									
										
										
										
											2018-07-27 16:33:52 -07:00
										 |  |  | import javax.security.auth.login.LoginContext;
 | 
					
						
							|  |  |  | import javax.security.auth.login.LoginException;
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:10:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-19 14:39:21 -08:00
										 |  |  | public class AuthenticationManager {
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-31 20:51:14 -07:00
										 |  |  |   private AuthenticationManager() {
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   public static void authenticateUser(@Nonnull String userName, @Nonnull String password) throws NamingException {
 | 
					
						
							|  |  |  |     Preconditions.checkArgument(!StringUtils.isAnyEmpty(userName), "Username cannot be empty");
 | 
					
						
							| 
									
										
										
										
											2018-07-27 16:33:52 -07:00
										 |  |  |     try {
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:10:52 -07:00
										 |  |  |       LoginContext lc = new LoginContext("WHZ-Authentication", new WHZCallbackHandler(userName, password));
 | 
					
						
							| 
									
										
										
										
											2018-07-27 16:33:52 -07:00
										 |  |  |       lc.login();
 | 
					
						
							|  |  |  |     } catch (LoginException le) {
 | 
					
						
							|  |  |  |       throw new AuthenticationException(le.toString());
 | 
					
						
							| 
									
										
										
										
											2017-04-06 22:01:29 -07:00
										 |  |  |     }
 | 
					
						
							| 
									
										
										
										
											2016-10-13 14:27:02 -07:00
										 |  |  |   }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 15:39:24 -07:00
										 |  |  |   private static class WHZCallbackHandler implements CallbackHandler {
 | 
					
						
							| 
									
										
										
										
											2018-07-27 16:33:52 -07:00
										 |  |  |     private String password = null;
 | 
					
						
							|  |  |  |     private String username = null;
 | 
					
						
							| 
									
										
										
										
											2019-08-31 20:51:14 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     private WHZCallbackHandler(@Nonnull String username, @Nonnull String password) {
 | 
					
						
							| 
									
										
										
										
											2018-07-27 16:33:52 -07:00
										 |  |  |       this.username = username;
 | 
					
						
							|  |  |  |       this.password = password;
 | 
					
						
							| 
									
										
										
										
											2016-10-13 14:27:02 -07:00
										 |  |  |     }
 | 
					
						
							| 
									
										
										
										
											2018-07-31 10:10:52 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     @Override
 | 
					
						
							| 
									
										
										
										
											2019-08-31 20:51:14 -07:00
										 |  |  |     public void handle(@Nonnull Callback[] callbacks) {
 | 
					
						
							| 
									
										
										
										
											2018-07-27 16:33:52 -07:00
										 |  |  |       NameCallback nc = null;
 | 
					
						
							|  |  |  |       PasswordCallback pc = null;
 | 
					
						
							|  |  |  |       for (Callback callback : callbacks) {
 | 
					
						
							|  |  |  |         if (callback instanceof NameCallback) {
 | 
					
						
							|  |  |  |           nc = (NameCallback) callback;
 | 
					
						
							|  |  |  |           nc.setName(this.username);
 | 
					
						
							|  |  |  |         } else if (callback instanceof PasswordCallback) {
 | 
					
						
							|  |  |  |           pc = (PasswordCallback) callback;
 | 
					
						
							|  |  |  |           pc.setPassword(this.password.toCharArray());
 | 
					
						
							|  |  |  |         } else {
 | 
					
						
							| 
									
										
										
										
											2018-07-31 13:22:18 -07:00
										 |  |  |           Logger.warn("The submitted callback is unsupported! ", callback);
 | 
					
						
							| 
									
										
										
										
											2018-07-27 16:33:52 -07:00
										 |  |  |         }
 | 
					
						
							| 
									
										
										
										
											2016-10-13 14:27:02 -07:00
										 |  |  |       }
 | 
					
						
							| 
									
										
										
										
											2016-03-10 16:32:37 -08:00
										 |  |  |     }
 | 
					
						
							| 
									
										
										
										
											2016-10-13 14:27:02 -07:00
										 |  |  |   }
 | 
					
						
							|  |  |  | }
 |