package com.paypal.core.soap;
import com.paypal.core.AuthenticationStrategy;
import com.paypal.core.credential.SignatureCredential;
import com.paypal.core.credential.SubjectAuthorization;
import com.paypal.core.credential.ThirdPartyAuthorization;
import com.paypal.core.credential.TokenAuthorization;
/**
* <code>SignatureSOAPHeaderAuthStrategy</code> is an implementation of
* {@link AuthenticationStrategy} which acts on {@link SignatureCredential} and
* retrieves them as SOAP headers
*
*/
public class SignatureSOAPHeaderAuthStrategy implements
AuthenticationStrategy<String, SignatureCredential> {
private ThirdPartyAuthorization thirdPartyAuthorization;
public SignatureSOAPHeaderAuthStrategy() {
}
/**
* @return the thirdPartyAuthorization
*/
public ThirdPartyAuthorization getThirdPartyAuthorization() {
return thirdPartyAuthorization;
}
/**
* @param thirdPartyAuthorization
* the thirdPartyAuthorization to set
*/
public void setThirdPartyAuthorization(
ThirdPartyAuthorization thirdPartyAuthorization) {
this.thirdPartyAuthorization = thirdPartyAuthorization;
}
public String generateHeaderStrategy(SignatureCredential credential) {
String payLoad;
if (thirdPartyAuthorization instanceof TokenAuthorization) {
payLoad = tokenAuthPayLoad();
} else if (thirdPartyAuthorization instanceof SubjectAuthorization) {
payLoad = authPayLoad(credential,
(SubjectAuthorization) thirdPartyAuthorization);
} else {
payLoad = authPayLoad(credential, null);
}
return payLoad;
}
private String tokenAuthPayLoad() {
StringBuilder soapMsg = new StringBuilder();
soapMsg.append("<ns:RequesterCredentials/>");
return soapMsg.toString();
}
private String authPayLoad(SignatureCredential credential,
SubjectAuthorization subjectAuth) {
StringBuilder soapMsg = new StringBuilder();
soapMsg.append("<ns:RequesterCredentials>");
soapMsg.append("<ebl:Credentials>");
soapMsg.append("<ebl:Username>" + credential.getUserName()
+ "</ebl:Username>");
soapMsg.append("<ebl:Password>" + credential.getPassword()
+ "</ebl:Password>");
soapMsg.append("<ebl:Signature>" + credential.getSignature()
+ "</ebl:Signature>");
if (subjectAuth != null) {
soapMsg.append("<ebl:Subject>" + subjectAuth.getSubject()
+ "</ebl:Subject>");
}
soapMsg.append("</ebl:Credentials>");
soapMsg.append("</ns:RequesterCredentials>");
return soapMsg.toString();
}
}