package de.kp.wsclient.soap;
import java.util.HashMap;
import android.content.Context;
import de.kp.wsclient.security.SecConstants;
import de.kp.wsclient.security.SecCrypto;
import de.kp.wsclient.security.SecCryptoParams;
/**
* This is a utility class to support secure SOAP communications
* for android platforms. This is usually done, following these
* steps
*
* (1) Create SOAP message
* (2) Secure SOAP message
* (3) Send SOAP Message
* (4) Validate SOAP Message (response)
*
* @author Stefan Krusche (krusche@dr-kruscheundpartner.de)
*
*/
public class SOAPUtil {
public static SOAPMessage createSOAPMessage() {
return new SOAPMessage();
}
/**
* This method supports signing, and encrypting & signing of
* a certain SOAP message;
*
* @param message SOAP message to be secured
* @param params Configuration parameters to enable encryption / signature
* @param credentials User Credentials used to sign a SOAP message
* @param crypto Crypto Data used to encrypt a SOAP Message
* @return
* @throws Exception
*/
public static SOAPMessage secureSOAPMessage(SOAPMessage message, HashMap<String,String> params, SecCrypto sigCrypto, SecCrypto encCrypto) throws Exception {
if (params.containsKey(SecConstants.REQ_SIGN) && params.get(SecConstants.REQ_SIGN).equals("yes")) {
if (sigCrypto == null) throw new Exception("[SOAPMessenger] No credential information provided.");
message.sign(sigCrypto);
} else if (params.containsKey(SecConstants.REQ_ENCRYPT_SIGN) && params.get(SecConstants.REQ_ENCRYPT_SIGN).equals("yes")) {
if ((sigCrypto == null) || (encCrypto == null)) throw new Exception("[SOAPMessenger] No credential or crypto information provided.");
message.encryptAndSign(sigCrypto, encCrypto);
}
return message;
}
/**
* @param message
* @param params
* @param crypto
* @return
* @throws Exception
*/
public static SOAPMessage validateSOAPMessage(SOAPMessage message, HashMap<String,String> params, SecCrypto decCrypto) throws Exception {
if (params.containsKey(SecConstants.RES_VERIFY) && params.get(SecConstants.RES_VERIFY).equals("yes")) {
message.verify();
} else if (params.containsKey(SecConstants.RES_DECRYPT_VERIFY) && params.get(SecConstants.RES_DECRYPT_VERIFY).equals("yes")) {
if (decCrypto == null) throw new Exception("[SOAPMessenger] No crypto information provided.");
message.verifyAndDecrypt(decCrypto);
}
return message;
}
/**
* @param context
* @param message
* @param endpoint
* @param cryptoParams
* @return
* @throws Exception
*/
public static SOAPMessage sendSOAPMessage(Context context, SOAPMessage message, String endpoint, SecCryptoParams cryptoParams) throws Exception {
SOAPMessenger messenger = SOAPMessenger.getInstance();
// the messenger is initialized only once
messenger.init(context, cryptoParams);
return messenger.sendRequest(message, endpoint);
}
}