/*
* 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 samples.userguide;
import org.apache.ws.security.WSPasswordCallback;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import java.io.IOException;
public class PWCallback implements CallbackHandler {
/**
* Field key
*/
private static final byte[] key = {
(byte) 0x31, (byte) 0xfd, (byte) 0xcb, (byte) 0xda, (byte) 0xfb,
(byte) 0xcd, (byte) 0x6b, (byte) 0xa8, (byte) 0xe6, (byte) 0x19,
(byte) 0xa7, (byte) 0xbf, (byte) 0x51, (byte) 0xf7, (byte) 0xc7,
(byte) 0x3e, (byte) 0x80, (byte) 0xae, (byte) 0x98, (byte) 0x51,
(byte) 0xc8, (byte) 0x51, (byte) 0x34, (byte) 0x04,
};
/*
* (non-Javadoc)
* @see javax.security.auth.callback.CallbackHandler#handle(javax.security.auth.callback.Callback[])
*/
/**
* Method handle
*
* @param callbacks
* @throws java.io.IOException
* @throws javax.security.auth.callback.UnsupportedCallbackException
*
*/
public void handle(Callback[] callbacks)
throws IOException, UnsupportedCallbackException {
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof WSPasswordCallback) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];
/*
* This usage type is used only in case we received a
* username token with a secret of type PasswordText or
* an unknown secret type.
*
* This case the WSPasswordCallback object contains the
* identifier (aka username), the secret we received, and
* the secret type string to identify the type.
*
* Here we perform only a very simple check.
*/
if (pc.getUsage() == WSPasswordCallback.USERNAME_TOKEN_UNKNOWN) {
if (pc.getIdentifer().equals("Ron") && pc.getPassword().equals("noR")) {
return;
}
if (pc.getIdentifer().equals("joe") && pc.getPassword().equals("eoj")) {
return;
}
if (pc.getPassword().equals("sirhC")) {
return;
}
throw new UnsupportedCallbackException(callbacks[i],
"check failed");
}
/*
* here call a function/method to lookup the secret for
* the given identifier (e.g. a user name or keystore alias)
* e.g.: pc.setSecret(passStore.getSecret(pc.getIdentfifier))
* for Testing we supply a fixed name here.
*/
if (pc.getUsage() == WSPasswordCallback.KEY_NAME) {
pc.setKey(key);
} else if (pc.getIdentifer().equals("alice")) {
pc.setPassword("password");
} else if (pc.getIdentifer().equals("bob")) {
pc.setPassword("password");
} else if (pc.getIdentifer().equals("Ron")) {
pc.setPassword("noR");
} else if (pc.getIdentifer().equals("joe")) {
pc.setPassword("eoj");
} else if (pc.getIdentifer().equals("ip")) {
pc.setPassword("password");
} else {
pc.setPassword("sirhC");
}
} else {
throw new UnsupportedCallbackException(callbacks[i],
"Unrecognized Callback");
}
}
}
}