if (userElem != null) {
this.issuerKeyAlias = userElem.getText().trim();
}
if (this.issuerKeyAlias == null || "".equals(this.issuerKeyAlias)) {
throw new TrustException("samlIssuerKeyAliasMissing");
}
OMElement issuerKeyPasswdElem = elem.getFirstChildWithName(ISSUER_KEY_PASSWD);
if (issuerKeyPasswdElem != null) {
this.issuerKeyPassword = issuerKeyPasswdElem.getText().trim();
}
if (this.issuerKeyPassword == null || "".equals(this.issuerKeyPassword)) {
throw new TrustException("samlIssuerKeyPasswdMissing");
}
OMElement issuerNameElem = elem.getFirstChildWithName(ISSUER_NAME);
if (issuerNameElem != null) {
this.issuerName = issuerNameElem.getText().trim();
}
if (this.issuerName == null || "".equals(this.issuerName)) {
throw new TrustException("samlIssuerNameMissing");
}
this.cryptoPropertiesElement = elem.getFirstChildWithName(CRYPTO_PROPERTIES);
if (this.cryptoPropertiesElement != null) {
if ((this.cryptoElement =
this.cryptoPropertiesElement .getFirstChildWithName(CRYPTO)) == null){
// no children. Hence, prop file should have been defined
this.cryptoPropertiesFile = this.cryptoPropertiesElement .getText().trim();
}
// else Props should be defined as children of a crypto element
}
OMElement keyCompElem = elem.getFirstChildWithName(KeyComputation.KEY_COMPUTATION);
if (keyCompElem != null && keyCompElem.getText() != null && !"".equals(keyCompElem)) {
this.keyComputation = Integer.parseInt(keyCompElem.getText());
}
//time to live
OMElement ttlElem = elem.getFirstChildWithName(TTL);
if (ttlElem != null) {
try {
this.ttl = Long.parseLong(ttlElem.getText().trim());
} catch (NumberFormatException e) {
throw new TrustException("invlidTTL");
}
}
OMElement keySizeElem = elem.getFirstChildWithName(KEY_SIZE);
if (keySizeElem != null) {
try {
this.keySize = Integer.parseInt(keySizeElem.getText().trim());
} catch (NumberFormatException e) {
throw new TrustException("invalidKeysize");
}
}
this.addRequestedAttachedRef = elem
.getFirstChildWithName(ADD_REQUESTED_ATTACHED_REF) != null;
this.addRequestedUnattachedRef = elem
.getFirstChildWithName(ADD_REQUESTED_UNATTACHED_REF) != null;
//Process trusted services
OMElement trustedServices = elem.getFirstChildWithName(TRUSTED_SERVICES);
/*
* If there are trusted services add them to a list
* Only trusts myself to issue tokens to :
* In this case the STS is embedded in the service as well and
* the issued token can only be used with that particular service
* since the response secret is encrypted by the service's public key
*/
if (trustedServices != null) {
//Now process the trusted services
Iterator servicesIter = trustedServices.getChildrenWithName(SERVICE);
while (servicesIter.hasNext()) {
OMElement service = (OMElement) servicesIter.next();
OMAttribute aliasAttr = service.getAttribute(ALIAS);
if (aliasAttr == null) {
//The certificate alias is a must
throw new TrustException("aliasMissingForService",
new String[]{service.getText().trim()});
}
if (this.trustedServices == null) {
this.trustedServices = new HashMap();
}
//Add the trusted service and the alias to the map of services
this.trustedServices.put(service.getText().trim(), aliasAttr.getAttributeValue());
}
//There maybe no trusted services as well, Therefore do not
//throw an exception when there are no trusted in the list at the
//moment
}
OMElement attrElemet = elem.getFirstChildWithName(SAML_CALLBACK_CLASS);
if (attrElemet != null) {
try {
String value = attrElemet.getText();
Class handlerClass = Class.forName(value);
this.callbackHander = (SAMLCallbackHandler)handlerClass.newInstance();
} catch (ClassNotFoundException e) {
log.debug("Error loading class" , e);
throw new TrustException("Error loading class" , e);
} catch (InstantiationException e) {
log.debug("Error instantiating class" , e);
throw new TrustException("Error instantiating class" , e);
} catch (IllegalAccessException e) {
log.debug("Illegal Access" , e);
throw new TrustException("Illegal Access" , e);
}
}
}