| /** |
| * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version |
| * 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions |
| * and limitations under the License. |
| */ |
| |
| package org.apache.storm.security.auth.sasl; |
| |
| import javax.security.auth.callback.Callback; |
| import javax.security.auth.callback.CallbackHandler; |
| import javax.security.auth.callback.NameCallback; |
| import javax.security.auth.callback.PasswordCallback; |
| import javax.security.auth.callback.UnsupportedCallbackException; |
| import javax.security.sasl.AuthorizeCallback; |
| import javax.security.sasl.RealmCallback; |
| |
| /** |
| * A client callback handler that supports a single username and password. |
| */ |
| public class SimpleSaslClientCallbackHandler implements CallbackHandler { |
| private final String username; |
| private final String password; |
| |
| /** |
| * Constructor. |
| * |
| * @param username the username to use. |
| * @param password the password to use. |
| */ |
| public SimpleSaslClientCallbackHandler(String username, String password) { |
| this.username = username; |
| this.password = password; |
| } |
| |
| @Override |
| public void handle(Callback[] callbacks) throws UnsupportedCallbackException { |
| for (Callback c : callbacks) { |
| if (c instanceof NameCallback) { |
| NameCallback nc = (NameCallback) c; |
| nc.setName(username); |
| } else if (c instanceof PasswordCallback) { |
| PasswordCallback pc = (PasswordCallback) c; |
| if (password != null) { |
| pc.setPassword(password.toCharArray()); |
| } |
| } else if (c instanceof AuthorizeCallback) { |
| AuthorizeCallback ac = (AuthorizeCallback) c; |
| String authid = ac.getAuthenticationID(); |
| String authzid = ac.getAuthorizationID(); |
| if (authid.equals(authzid)) { |
| ac.setAuthorized(true); |
| } else { |
| ac.setAuthorized(false); |
| } |
| if (ac.isAuthorized()) { |
| ac.setAuthorizedID(authzid); |
| } |
| } else if (c instanceof RealmCallback) { |
| RealmCallback rc = (RealmCallback) c; |
| ((RealmCallback) c).setText(rc.getDefaultText()); |
| } else { |
| throw new UnsupportedCallbackException(c); |
| } |
| } |
| } |
| } |