package org.cagrid.dorian.service.wsrf; import gov.nih.nci.cagrid.metadata.ServiceMetadata; import gov.nih.nci.cagrid.metadata.security.ServiceSecurityMetadata; import gov.nih.nci.cagrid.opensaml.SAMLAssertion; import gov.nih.nci.cagrid.opensaml.SAMLException; import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import java.security.GeneralSecurityException; import java.security.PublicKey; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import javax.xml.ws.WebServiceContext; import org.cagrid.core.common.JAXBUtils; import org.cagrid.core.resource.ExternalSingletonResourceProperty; import org.cagrid.core.resource.ExternalSingletonResourcePropertyValue; import org.cagrid.core.resource.JAXBResourceProperties; import org.cagrid.core.resource.JAXBResourcePropertySupport; import org.cagrid.core.resource.ResourceImpl; import org.cagrid.core.resource.ResourcePropertyDescriptor; import org.cagrid.core.resource.SingletonResourceHomeImpl; import org.cagrid.dorian.AddAdminRequest; import org.cagrid.dorian.AddAdminResponse; import org.cagrid.dorian.AddTrustedIdPRequest; import org.cagrid.dorian.AddTrustedIdPResponse; import org.cagrid.dorian.ApproveHostCertificateRequest; import org.cagrid.dorian.ApproveHostCertificateResponse; import org.cagrid.dorian.ChangeIdPUserPasswordRequest; import org.cagrid.dorian.ChangeIdPUserPasswordResponse; import org.cagrid.dorian.ChangeLocalUserPasswordRequest; import org.cagrid.dorian.ChangeLocalUserPasswordResponse; import org.cagrid.dorian.CreateProxyRequest; import org.cagrid.dorian.CreateProxyResponse; import org.cagrid.dorian.DoesLocalUserExistRequest; import org.cagrid.dorian.DoesLocalUserExistResponse; import org.cagrid.dorian.DorianInternalFaultFaultMessage; import org.cagrid.dorian.DorianPortTypeImpl; import org.cagrid.dorian.DorianResourceProperties; import org.cagrid.dorian.FindGridUsersRequest; import org.cagrid.dorian.FindGridUsersResponse; import org.cagrid.dorian.FindHostCertificatesRequest; import org.cagrid.dorian.FindHostCertificatesResponse; import org.cagrid.dorian.FindLocalUsersRequest; import org.cagrid.dorian.FindLocalUsersResponse; import org.cagrid.dorian.FindUserCertificatesRequest; import org.cagrid.dorian.FindUserCertificatesResponse; import org.cagrid.dorian.GetAccountProfileRequest; import org.cagrid.dorian.GetAccountProfileResponse; import org.cagrid.dorian.GetAdminsRequest; import org.cagrid.dorian.GetAdminsResponse; import org.cagrid.dorian.GetCACertificateRequest; import org.cagrid.dorian.GetCACertificateResponse; import org.cagrid.dorian.GetGridUserPoliciesRequest; import org.cagrid.dorian.GetGridUserPoliciesResponse; import org.cagrid.dorian.GetOwnedHostCertificatesRequest; import org.cagrid.dorian.GetOwnedHostCertificatesResponse; import org.cagrid.dorian.GetPublishRequest; import org.cagrid.dorian.GetPublishResponse; import org.cagrid.dorian.GetTrustedIdPsRequest; import org.cagrid.dorian.GetTrustedIdPsResponse; import org.cagrid.dorian.HostSearchRequest; import org.cagrid.dorian.HostSearchResponse; import org.cagrid.dorian.InvalidAssertionFaultFaultMessage; import org.cagrid.dorian.InvalidHostCertificateFaultFaultMessage; import org.cagrid.dorian.InvalidHostCertificateRequestFaultFaultMessage; import org.cagrid.dorian.InvalidProxyFaultFaultMessage; import org.cagrid.dorian.InvalidTrustedIdPFaultFaultMessage; import org.cagrid.dorian.InvalidUserCertificateFaultFaultMessage; import org.cagrid.dorian.InvalidUserFaultFaultMessage; import org.cagrid.dorian.InvalidUserPropertyFaultFaultMessage; import org.cagrid.dorian.NoSuchUserFaultFaultMessage; import org.cagrid.dorian.PerformFederationAuditRequest; import org.cagrid.dorian.PerformFederationAuditResponse; import org.cagrid.dorian.PerformIdentityProviderAuditRequest; import org.cagrid.dorian.PerformIdentityProviderAuditResponse; import org.cagrid.dorian.PermissionDeniedFaultFaultMessage; import org.cagrid.dorian.RegisterLocalUserRequest; import org.cagrid.dorian.RegisterLocalUserResponse; import org.cagrid.dorian.RegisterWithIdPRequest; import org.cagrid.dorian.RegisterWithIdPResponse; import org.cagrid.dorian.RemoveAdminRequest; import org.cagrid.dorian.RemoveAdminResponse; import org.cagrid.dorian.RemoveGridUserRequest; import org.cagrid.dorian.RemoveGridUserResponse; import org.cagrid.dorian.RemoveLocalUserRequest; import org.cagrid.dorian.RemoveLocalUserResponse; import org.cagrid.dorian.RemoveTrustedIdPRequest; import org.cagrid.dorian.RemoveTrustedIdPResponse; import org.cagrid.dorian.RemoveUserCertificateRequest; import org.cagrid.dorian.RemoveUserCertificateResponse; import org.cagrid.dorian.RenewHostCertificateRequest; import org.cagrid.dorian.RenewHostCertificateResponse; import org.cagrid.dorian.RequestHostCertificateRequest; import org.cagrid.dorian.RequestHostCertificateResponse; import org.cagrid.dorian.RequestUserCertificateRequest; import org.cagrid.dorian.RequestUserCertificateResponse; import org.cagrid.dorian.SetPublishRequest; import org.cagrid.dorian.SetPublishResponse; import org.cagrid.dorian.UpdateAccountProfileRequest; import org.cagrid.dorian.UpdateAccountProfileResponse; import org.cagrid.dorian.UpdateGridUserRequest; import org.cagrid.dorian.UpdateGridUserResponse; import org.cagrid.dorian.UpdateHostCertificateRecordRequest; import org.cagrid.dorian.UpdateHostCertificateRecordResponse; import org.cagrid.dorian.UpdateLocalUserRequest; import org.cagrid.dorian.UpdateLocalUserResponse; import org.cagrid.dorian.UpdateTrustedIdPRequest; import org.cagrid.dorian.UpdateTrustedIdPResponse; import org.cagrid.dorian.UpdateUserCertificateRequest; import org.cagrid.dorian.UpdateUserCertificateResponse; import org.cagrid.dorian.UserPolicyFaultFaultMessage; import org.cagrid.dorian.UserSearchRequest; import org.cagrid.dorian.UserSearchResponse; import org.cagrid.dorian.common.X509Certificate; import org.cagrid.dorian.model.exceptions.DorianInternalException; import org.cagrid.dorian.model.exceptions.InvalidAssertionException; import org.cagrid.dorian.model.exceptions.InvalidHostCertificateException; import org.cagrid.dorian.model.exceptions.InvalidHostCertificateRequestException; import org.cagrid.dorian.model.exceptions.InvalidTrustedIdPException; import org.cagrid.dorian.model.exceptions.InvalidUserCertificateException; import org.cagrid.dorian.model.exceptions.InvalidUserException; import org.cagrid.dorian.model.exceptions.InvalidUserPropertyException; import org.cagrid.dorian.model.exceptions.NoSuchUserException; import org.cagrid.dorian.model.exceptions.PermissionDeniedException; import org.cagrid.dorian.model.exceptions.UserPolicyException; import org.cagrid.dorian.model.federation.CertificateLifetime; import org.cagrid.dorian.model.federation.FederationAuditFilter; import org.cagrid.dorian.model.federation.FederationAuditRecord; import org.cagrid.dorian.model.federation.GridUser; import org.cagrid.dorian.model.federation.GridUserFilter; import org.cagrid.dorian.model.federation.GridUserPolicy; import org.cagrid.dorian.model.federation.GridUserRecord; import org.cagrid.dorian.model.federation.GridUserSearchCriteria; import org.cagrid.dorian.model.federation.HostCertificateFilter; import org.cagrid.dorian.model.federation.HostCertificateRecord; import org.cagrid.dorian.model.federation.HostCertificateRequest; import org.cagrid.dorian.model.federation.HostCertificateUpdate; import org.cagrid.dorian.model.federation.HostRecord; import org.cagrid.dorian.model.federation.HostSearchCriteria; import org.cagrid.dorian.model.federation.ProxyLifetime; import org.cagrid.dorian.model.federation.TrustedIdP; import org.cagrid.dorian.model.federation.TrustedIdentityProvider; import org.cagrid.dorian.model.federation.TrustedIdentityProviders; import org.cagrid.dorian.model.federation.UserCertificateFilter; import org.cagrid.dorian.model.federation.UserCertificateRecord; import org.cagrid.dorian.model.federation.UserCertificateUpdate; import org.cagrid.dorian.model.idp.AccountProfile; import org.cagrid.dorian.model.idp.Application; import org.cagrid.dorian.model.idp.BasicAuthCredential; import org.cagrid.dorian.model.idp.IdentityProviderAuditFilter; import org.cagrid.dorian.model.idp.IdentityProviderAuditRecord; import org.cagrid.dorian.model.idp.LocalUser; import org.cagrid.dorian.model.idp.LocalUserFilter; import org.cagrid.dorian.policy.DorianPolicy; import org.cagrid.dorian.service.CertificateSignatureAlgorithm; import org.cagrid.dorian.service.Dorian; import org.cagrid.gaards.authentication.AuthenticateUserRequest; import org.cagrid.gaards.authentication.AuthenticateUserResponse; import org.cagrid.gaards.authentication.AuthenticationProfiles; import org.cagrid.gaards.authentication.AuthenticationProviderFaultFaultMessage; import org.cagrid.gaards.authentication.BasicAuthentication; import org.cagrid.gaards.authentication.Credential; import org.cagrid.gaards.authentication.CredentialNotSupportedFaultFaultMessage; import org.cagrid.gaards.authentication.InsufficientAttributeFaultFaultMessage; import org.cagrid.gaards.authentication.InvalidCredentialFaultFaultMessage; import org.cagrid.gaards.authentication.WebServiceCallerId; import org.cagrid.gaards.authentication.faults.AuthenticationProviderException; import org.cagrid.gaards.authentication.faults.CredentialNotSupportedException; import org.cagrid.gaards.authentication.faults.InvalidCredentialException; import org.cagrid.gaards.pki.CertUtil; import org.cagrid.gaards.pki.KeyUtil; import org.cagrid.gaards.saml.encoding.SAMLUtils; import org.cagrid.gaards.security.servicesecurity.GetServiceSecurityMetadataRequest; import org.cagrid.gaards.security.servicesecurity.GetServiceSecurityMetadataResponse; import org.cagrid.wsrf.properties.InvalidResourceKeyException; import org.cagrid.wsrf.properties.NoSuchResourceException; import org.cagrid.wsrf.properties.Resource; import org.cagrid.wsrf.properties.ResourceException; import org.cagrid.wsrf.properties.ResourceHome; import org.cagrid.wsrf.properties.ResourceProperty; import org.cagrid.wsrf.properties.ResourcePropertySet; import org.oasis.names.tc.saml.assertion.AssertionType; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.GetMultipleResourceProperties; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.GetMultipleResourcePropertiesResponse; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.GetResourcePropertyResponse; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.QueryResourcePropertiesResponse; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.InvalidQueryExpressionFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.InvalidResourcePropertyQNameFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.QueryEvaluationErrorFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.ResourceUnknownFault; import org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01_wsdl.UnknownQueryExpressionDialectFault; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Element; import org.w3c.dom.Node; public class DorianServiceWSRFImpl extends DorianPortTypeImpl { private final static String ANONYMOUS_ID = "anonymous"; private final static String AUTHENTICATION_PROFILES_PREFIX = "gauth"; private final static Logger logger = LoggerFactory.getLogger(DorianServiceWSRFImpl.class); private final Dorian dorian; private final ResourceHome resourceHome; private ResourceProperty<ServiceMetadata> serviceMetadataResourceProperty; private ResourceProperty<ServiceSecurityMetadata> serviceSecurityMetadataResourceProperty; private CertificateSignatureAlgorithm signingAlgorithm = CertificateSignatureAlgorithm.SHA2; @javax.annotation.Resource private WebServiceContext wsContext; public DorianServiceWSRFImpl(Dorian dorian, String signatureAlgorithm, Map<String, String> jaxbResourcePropertiesMap, TrustedIdPMetadataOverloader overloader) { System.setProperty(SAMLUtils.XMLSEC_IGNORE_LINE_BREAK, Boolean.FALSE.toString()); this.dorian = dorian; // resourceHome = dorian.getResourceHome(); resourceHome = getResourceHome(jaxbResourcePropertiesMap, overloader); if (signatureAlgorithm != null) { try { this.signingAlgorithm = CertificateSignatureAlgorithm.fromValue(signatureAlgorithm); } catch (IllegalArgumentException e) { logger.error(e.getMessage(), e); } } } private ResourceHome getResourceHome(Map<String, String> jaxbResourcePropertiesMap, final TrustedIdPMetadataOverloader overloader) { ResourceImpl resource = new ResourceImpl(null); ResourceHome resourceHome = new SingletonResourceHomeImpl(resource); try { // What resource properties should we know about? Collection<ResourcePropertyDescriptor<?>> resourcePropertyDescriptors = ResourcePropertyDescriptor .analyzeResourcePropertiesHolder(DorianResourceProperties.class); // Map them by field. Map<String, ResourcePropertyDescriptor<?>> descriptorsByField = ResourcePropertyDescriptor .mapByField(resourcePropertyDescriptors); // Load the static jaxb resource properties. if (jaxbResourcePropertiesMap != null) { JAXBResourceProperties jaxbResourceProperties = new JAXBResourceProperties(getClass().getClassLoader(), descriptorsByField, jaxbResourcePropertiesMap); // The serviceMetadata property is static. @SuppressWarnings("unchecked") ResourcePropertyDescriptor<ServiceMetadata> serviceMetadataDescriptor = (ResourcePropertyDescriptor<ServiceMetadata>) descriptorsByField .get("serviceMetadata"); if (serviceMetadataDescriptor != null) { @SuppressWarnings("unchecked") ResourceProperty<ServiceMetadata> resourceProperty = (ResourceProperty<ServiceMetadata>) jaxbResourceProperties .getResourceProperties().get(serviceMetadataDescriptor); serviceMetadataResourceProperty = resourceProperty; resource.add(serviceMetadataResourceProperty); } // The rest of the properties are callbacks. @SuppressWarnings("unchecked") ResourcePropertyDescriptor<AuthenticationProfiles> authenticationProfilesDescriptor = (ResourcePropertyDescriptor<AuthenticationProfiles>) descriptorsByField .get("authenticationProfiles"); if (authenticationProfilesDescriptor != null) { // Must treat auth profiles as Element! ResourcePropertyDescriptor<Element> authenticationProfilesElementDescriptor = new ResourcePropertyDescriptor<Element>( authenticationProfilesDescriptor.getResourcePropertyQName(), Element.class, authenticationProfilesDescriptor.getFieldName()); ExternalSingletonResourcePropertyValue<Element> propertyValue = new ExternalSingletonResourcePropertyValue<Element>() { @Override public Element getPropertyValue() { return getAuthenticationProfilesElement(); } }; ResourceProperty<Element> resourceProperty = new ExternalSingletonResourceProperty<Element>( authenticationProfilesElementDescriptor, propertyValue); resource.add(resourceProperty); } @SuppressWarnings("unchecked") ResourcePropertyDescriptor<TrustedIdentityProviders> trustedIdentityProvidersDescriptor = (ResourcePropertyDescriptor<TrustedIdentityProviders>) descriptorsByField .get("trustedIdentityProviders"); if (trustedIdentityProvidersDescriptor != null) { ExternalSingletonResourcePropertyValue<TrustedIdentityProviders> propertyValue = new ExternalSingletonResourcePropertyValue<TrustedIdentityProviders>() { @Override public TrustedIdentityProviders getPropertyValue() { TrustedIdentityProviders trustedIdentityProviders = null; try { trustedIdentityProviders = dorian.getTrustedIdentityProviders(); if (overloader != null) { List<TrustedIdentityProvider> list = trustedIdentityProviders .getTrustedIdentityProvider(); for (TrustedIdentityProvider idp : list) { idp = overloader.overload(idp); } } } catch (DorianInternalException ignored) { } return trustedIdentityProviders; } }; ResourceProperty<TrustedIdentityProviders> resourceProperty = new ExternalSingletonResourceProperty<TrustedIdentityProviders>( trustedIdentityProvidersDescriptor, propertyValue); resource.add(resourceProperty); } @SuppressWarnings("unchecked") ResourcePropertyDescriptor<DorianPolicy> dorianPolicyDescriptor = (ResourcePropertyDescriptor<DorianPolicy>) descriptorsByField .get("dorianPolicy"); if (dorianPolicyDescriptor != null) { ExternalSingletonResourcePropertyValue<DorianPolicy> propertyValue = new ExternalSingletonResourcePropertyValue<DorianPolicy>() { @Override public DorianPolicy getPropertyValue() { return dorian.getDorianPolicy(); } }; ResourceProperty<DorianPolicy> resourceProperty = new ExternalSingletonResourceProperty<DorianPolicy>( dorianPolicyDescriptor, propertyValue); resource.add(resourceProperty); } /* * ServiceSecurityMetadata isn't a resource property, but use that framework to handle it. */ String serviceSecurityMetadataURLString = jaxbResourcePropertiesMap.get("serviceSecurityMetadata"); if (serviceSecurityMetadataURLString != null) { URL url = null; try { url = new URL(serviceSecurityMetadataURLString); } catch (MalformedURLException ignored) { } if (url == null) { url = getClass().getClassLoader().getResource(serviceSecurityMetadataURLString); } if (url != null) { QName serviceSecurityMetadataQName = new QName(DorianServiceWSRFImpl.class.getName(), "serviceSecurityMetadata"); ResourcePropertyDescriptor<ServiceSecurityMetadata> serviceSecurityMetadataDescriptor = new ResourcePropertyDescriptor<ServiceSecurityMetadata>( serviceSecurityMetadataQName, ServiceSecurityMetadata.class, "serviceSecurityMetadata"); serviceSecurityMetadataResourceProperty = JAXBResourcePropertySupport .createJAXBResourceProperty(serviceSecurityMetadataDescriptor, url); } } } } catch (Exception e) { e.printStackTrace(); } return resourceHome; } @Override public GetMultipleResourcePropertiesResponse getMultipleResourceProperties( GetMultipleResourceProperties getMultipleResourcePropertiesRequest) throws ResourceUnknownFault, InvalidResourcePropertyQNameFault { logger.info("getMultipleResourceProperty " + getMultipleResourcePropertiesRequest); System.out.println(getMultipleResourcePropertiesRequest); GetMultipleResourcePropertiesResponse response = new GetMultipleResourcePropertiesResponse(); for (Iterator iterator = getMultipleResourcePropertiesRequest.getResourceProperty().iterator(); iterator .hasNext();) { QName qname = (QName) iterator.next(); Exception e; try { Resource resource = resourceHome.find(null); if (resource instanceof ResourcePropertySet) { ResourcePropertySet resourcePropertySet = (ResourcePropertySet) resource; ResourceProperty<?> resourceProperty = resourcePropertySet.get(qname); if (resourceProperty != null) { Object resourcePropertyValue = resourceProperty.get(0); logger.info("getResourceProperty " + qname + " returning " + resourcePropertyValue); if (!(resourcePropertyValue instanceof Node) && !(resourcePropertyValue instanceof JAXBElement<?>)) { resourcePropertyValue = JAXBUtils.wrap(resourcePropertyValue); } response.getAny().add(resourcePropertyValue); } } } catch (NoSuchResourceException nsre) { e = nsre; } catch (InvalidResourceKeyException irke) { e = irke; } catch (ResourceException re) { e = re; } } return response; } @Override public GetResourcePropertyResponse getResourceProperty(QName resourcePropertyQName) throws ResourceUnknownFault, InvalidResourcePropertyQNameFault { logger.info("getResourceProperty " + resourcePropertyQName); Exception e = null; GetResourcePropertyResponse response = null; try { Resource resource = resourceHome.find(null); if (resource instanceof ResourcePropertySet) { ResourcePropertySet resourcePropertySet = (ResourcePropertySet) resource; ResourceProperty<?> resourceProperty = resourcePropertySet.get(resourcePropertyQName); if (resourceProperty != null) { Object resourcePropertyValue = resourceProperty.get(0); logger.info("getResourceProperty " + resourcePropertyQName + " returning " + resourcePropertyValue); if (!(resourcePropertyValue instanceof Node) && !(resourcePropertyValue instanceof JAXBElement<?>)) { resourcePropertyValue = JAXBUtils.wrap(resourcePropertyValue); } response = new GetResourcePropertyResponse(); response.getAny().add(resourcePropertyValue); } } } catch (NoSuchResourceException nsre) { e = nsre; } catch (InvalidResourceKeyException irke) { e = irke; } catch (ResourceException re) { e = re; } if ((response == null) || (e != null)) { throw new ResourceUnknownFault("No resource for '" + resourcePropertyQName + "'", e); } return response; } @Override public QueryResourcePropertiesResponse queryResourceProperties( org.oasis_open.docs.wsrf._2004._06.wsrf_ws_resourceproperties_1_2_draft_01.QueryResourceProperties queryResourcePropertiesRequest) throws QueryEvaluationErrorFault, InvalidQueryExpressionFault, ResourceUnknownFault, InvalidResourcePropertyQNameFault, UnknownQueryExpressionDialectFault { logger.info("queryResourceProperties"); QueryResourcePropertiesResponse response = null; response = new QueryResourcePropertiesResponse(); return response; } @Override public GetServiceSecurityMetadataResponse getServiceSecurityMetadata( GetServiceSecurityMetadataRequest getServiceSecurityMetadataRequest) { logger.info("getServiceSecurityMetadata"); // ServiceSecurityMetadata serviceSecurityMetadata = // dorian.getServiceSecurityMetadata(); ServiceSecurityMetadata serviceSecurityMetadata = (serviceSecurityMetadataResourceProperty != null) ? serviceSecurityMetadataResourceProperty .get(0) : null; GetServiceSecurityMetadataResponse response = new GetServiceSecurityMetadataResponse(); response.setServiceSecurityMetadata(serviceSecurityMetadata); return response; } @Override public GetPublishResponse getPublish(GetPublishRequest getPublishRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidTrustedIdPFaultFaultMessage { String message = "getPublish"; logger.info(message); GetPublishResponse response = null; TrustedIdP idp = getPublishRequest.getTrustedIdP().getTrustedIdP(); try { String gridId = getCallerId(); boolean publish = dorian.getPublish(gridId, idp); response = new GetPublishResponse(); response.setResponse(publish); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidTrustedIdPException itidpe) { throw new InvalidTrustedIdPFaultFaultMessage(message, itidpe.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public SetPublishResponse setPublish(SetPublishRequest setPublishRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidTrustedIdPFaultFaultMessage { String message = "setPublish"; boolean publish = setPublishRequest.isPublish(); logger.info(message + ": " + publish); TrustedIdP idp = setPublishRequest.getTrustedIdP().getTrustedIdP(); String gridId = getCallerId(); SetPublishResponse response = null; try { dorian.setPublish(gridId, idp, publish); response = new SetPublishResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidTrustedIdPException itidpe) { throw new InvalidTrustedIdPFaultFaultMessage(message, itidpe.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public DoesLocalUserExistResponse doesLocalUserExist(DoesLocalUserExistRequest doesLocalUserExistRequest) throws DorianInternalFaultFaultMessage { String message = "doesLocalUserExist"; String userId = doesLocalUserExistRequest.getUserId(); logger.info(message + ": " + userId); DoesLocalUserExistResponse response = null; try { boolean localUserExists = dorian.doesLocalUserExist(userId); logger.info(message + ": " + userId + " returning " + localUserExists); response = new DoesLocalUserExistResponse(); response.setResponse(localUserExists); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } return response; } @Override public FindLocalUsersResponse findLocalUsers(FindLocalUsersRequest findLocalUsersRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "findLocalUsers"; LocalUserFilter filter = findLocalUsersRequest.getF().getLocalUserFilter(); logger.info(message + ": " + filter); String gridId = getCallerId(); FindLocalUsersResponse response = null; try { LocalUser[] localUsers = dorian.findLocalUsers(gridId, filter); response = new FindLocalUsersResponse(); response.getLocalUser().addAll(Arrays.asList(localUsers)); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public UserSearchResponse userSearch(UserSearchRequest userSearchRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "userSearch"; logger.info(message); GridUserSearchCriteria gridUserSearchCriteria = userSearchRequest.getGridUserSearchCriteria() .getGridUserSearchCriteria(); String gridId = getCallerId(); UserSearchResponse response = new UserSearchResponse(); try { List<GridUserRecord> gridUserRecords = dorian.userSearch(gridId, gridUserSearchCriteria); response.getGridUserRecord().addAll(gridUserRecords); } catch (RemoteException re) { throw new DorianInternalFaultFaultMessage(message + ": " + re.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RegisterLocalUserResponse registerLocalUser(RegisterLocalUserRequest registerLocalUserRequest) throws DorianInternalFaultFaultMessage, InvalidUserPropertyFaultFaultMessage { String message = "registerLocalUser"; logger.info(message); Application application = registerLocalUserRequest.getA().getApplication(); RegisterLocalUserResponse response = null; String userId = registerLocalUserInternal(message, application); response = new RegisterLocalUserResponse(); response.setResponse(userId); return response; } private String registerLocalUserInternal(String message, Application application) throws DorianInternalFaultFaultMessage, InvalidUserPropertyFaultFaultMessage { String userId = null; try { userId = dorian.registerLocalUser(application); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidUserPropertyException iupe) { throw new InvalidUserPropertyFaultFaultMessage(message, iupe.getFault()); } return userId; } @Override public UpdateLocalUserResponse updateLocalUser(UpdateLocalUserRequest updateLocalUserRequest) throws DorianInternalFaultFaultMessage, PermissionDeniedFaultFaultMessage, NoSuchUserFaultFaultMessage { String message = "updateLocalUser"; logger.info(message); LocalUser localUser = updateLocalUserRequest.getUser().getLocalUser(); String gridId = getCallerId(); UpdateLocalUserResponse response = null; try { dorian.updateLocalUser(gridId, localUser); response = new UpdateLocalUserResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } catch (NoSuchUserException nsue) { throw new NoSuchUserFaultFaultMessage(message, nsue.getFault()); } catch (InvalidUserPropertyException iupe) { throw new DorianInternalFaultFaultMessage(message + ": " + iupe.getMessage()); } return response; } @Override public ChangeLocalUserPasswordResponse changeLocalUserPassword( ChangeLocalUserPasswordRequest changeLocalUserPasswordRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidUserPropertyFaultFaultMessage { String message = "changeLocalUserPassword"; logger.info(message); BasicAuthentication basicAuthentication = changeLocalUserPasswordRequest.getCredential() .getBasicAuthentication(); String newPassword = changeLocalUserPasswordRequest.getNewPassword(); ChangeLocalUserPasswordResponse response = null; changeLocalUserPasswordInternal(message, basicAuthentication, newPassword); response = new ChangeLocalUserPasswordResponse(); return response; } private void changeLocalUserPasswordInternal(String message, BasicAuthentication basicAuthentication, String newPassword) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidUserPropertyFaultFaultMessage { try { dorian.changeLocalUserPassword(basicAuthentication, newPassword); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } catch (InvalidUserPropertyException iupe) { throw new InvalidUserPropertyFaultFaultMessage(message, iupe.getFault()); } } public RemoveLocalUserResponse removeLocalUser(RemoveLocalUserRequest removeLocalUserRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "removeLocalUser"; logger.info(message); String userId = removeLocalUserRequest.getUserId(); String gridId = getCallerId(); RemoveLocalUserResponse response = null; try { dorian.removeLocalUser(gridId, userId); response = new RemoveLocalUserResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public HostSearchResponse hostSearch(HostSearchRequest hostSearchRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "hostSearch"; logger.info(message); HostSearchCriteria criteria = hostSearchRequest.getHostSearchCriteria().getHostSearchCriteria(); String gridId = getCallerId(); HostSearchResponse response = null; try { List<HostRecord> hostRecords = dorian.hostSearch(gridId, criteria); response = new HostSearchResponse(); response.getHostRecord().addAll(hostRecords); } catch (RemoteException re) { throw new DorianInternalFaultFaultMessage(message + ": " + re.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public GetTrustedIdPsResponse getTrustedIdPs(GetTrustedIdPsRequest getTrustedIdPsRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "getTrustedIdPs"; logger.info(message); String gridId = getCallerId(); GetTrustedIdPsResponse response = null; try { TrustedIdP[] idps = dorian.getTrustedIdPs(gridId); response = new GetTrustedIdPsResponse(); response.getTrustedIdP().addAll(Arrays.asList(idps)); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override // Duplicates registerLocalUser public RegisterWithIdPResponse registerWithIdP(RegisterWithIdPRequest registerWithIdPRequest) throws DorianInternalFaultFaultMessage, InvalidUserPropertyFaultFaultMessage { String message = "registerWithIdP"; logger.info(message); Application application = registerWithIdPRequest.getApplication().getApplication(); RegisterWithIdPResponse response = null; String userId = registerLocalUserInternal(message, application); response = new RegisterWithIdPResponse(); response.setResponse(userId); return response; } @Override // Duplicates changeLocalUserPassword public ChangeIdPUserPasswordResponse changeIdPUserPassword(ChangeIdPUserPasswordRequest changeIdPUserPasswordRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidUserPropertyFaultFaultMessage { String message = "changeIdPUserPassword"; logger.info(message); BasicAuthCredential basicAuthCredential = changeIdPUserPasswordRequest.getCredential().getBasicAuthCredential(); BasicAuthentication basicAuthentication = new BasicAuthentication(); basicAuthentication.setUserId(basicAuthCredential.getUserId()); basicAuthentication.setPassword(basicAuthCredential.getPassword()); String newPassword = changeIdPUserPasswordRequest.getNewPassword(); ChangeIdPUserPasswordResponse response = null; changeLocalUserPasswordInternal(message, basicAuthentication, newPassword); response = new ChangeIdPUserPasswordResponse(); return response; } @Override public AddTrustedIdPResponse addTrustedIdP(AddTrustedIdPRequest addTrustedIdPRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidTrustedIdPFaultFaultMessage { String message = "addTrustedIdP"; logger.info(message); TrustedIdP tip = addTrustedIdPRequest.getIdp().getTrustedIdP(); String gridId = getCallerId(); AddTrustedIdPResponse response = null; try { tip = dorian.addTrustedIdP(gridId, tip); response = new AddTrustedIdPResponse(); response.setTrustedIdP(tip); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidTrustedIdPException itidpe) { throw new InvalidTrustedIdPFaultFaultMessage(message, itidpe.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public UpdateTrustedIdPResponse updateTrustedIdP(UpdateTrustedIdPRequest updateTrustedIdPRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidTrustedIdPFaultFaultMessage { String message = "updateTrustedIdP"; logger.info(message); TrustedIdP idp = updateTrustedIdPRequest.getTrustedIdP().getTrustedIdP(); String gridId = getCallerId(); UpdateTrustedIdPResponse response = null; try { dorian.updateTrustedIdP(gridId, idp); response = new UpdateTrustedIdPResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidTrustedIdPException itidpe) { throw new InvalidTrustedIdPFaultFaultMessage(message, itidpe.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RemoveTrustedIdPResponse removeTrustedIdP(RemoveTrustedIdPRequest removeTrustedIdPRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidTrustedIdPFaultFaultMessage { String message = "removeTrustedIdP"; logger.info(message); TrustedIdP tip = removeTrustedIdPRequest.getTrustedIdP().getTrustedIdP(); String gridId = getCallerId(); RemoveTrustedIdPResponse response = null; try { dorian.removeTrustedIdP(gridId, tip); response = new RemoveTrustedIdPResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidTrustedIdPException itidpe) { throw new InvalidTrustedIdPFaultFaultMessage(message, itidpe.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public PerformFederationAuditResponse performFederationAudit( PerformFederationAuditRequest performFederationAuditRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "performFederationAudit"; logger.info(message); FederationAuditFilter filter = performFederationAuditRequest.getF().getFederationAuditFilter(); String gridId = getCallerId(); PerformFederationAuditResponse response = null; try { List<FederationAuditRecord> federationAuditRecords = dorian.performFederationAudit(gridId, filter); response = new PerformFederationAuditResponse(); response.getFederationAuditRecord().addAll(federationAuditRecords); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public PerformIdentityProviderAuditResponse performIdentityProviderAudit( PerformIdentityProviderAuditRequest performIdentityProviderAuditRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "performIdentityProviderAudit"; logger.info(message); IdentityProviderAuditFilter filter = performIdentityProviderAuditRequest.getF() .getIdentityProviderAuditFilter(); String gridId = getCallerId(); PerformIdentityProviderAuditResponse response = null; try { List<IdentityProviderAuditRecord> identityProviderAuditRecords = dorian.performIdentityProviderAudit( gridId, filter); response = new PerformIdentityProviderAuditResponse(); response.getIdentityProviderAuditRecord().addAll(identityProviderAuditRecords); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RequestUserCertificateResponse requestUserCertificate( RequestUserCertificateRequest requestUserCertificateRequest) throws DorianInternalFaultFaultMessage, PermissionDeniedFaultFaultMessage, InvalidAssertionFaultFaultMessage, UserPolicyFaultFaultMessage { String message = "requestUserCertificate"; logger.info(message); AssertionType assertion = requestUserCertificateRequest.getSaml().getAssertion(); CertificateLifetime lifetime = requestUserCertificateRequest.getLifetime().getCertificateLifetime(); RequestUserCertificateResponse response = null; try { PublicKey publicKey = KeyUtil.loadPublicKey(requestUserCertificateRequest.getKey().getPublicKey() .getKeyAsString()); X509Certificate cert = new X509Certificate(); SAMLAssertion samlAssertion = assertion.getSamlAssertion(); cert.setCertificateAsString(CertUtil.writeCertificate(dorian.requestUserCertificate(samlAssertion, publicKey, lifetime, signingAlgorithm))); response = new RequestUserCertificateResponse(); response.setX509Certificate(cert); } catch (DorianInternalException die) { logger.debug(die.getMessage(), die); throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidAssertionException iae) { logger.debug(iae.getMessage(), iae); throw new InvalidAssertionFaultFaultMessage(message, iae.getFault()); } catch (UserPolicyException upe) { logger.debug(upe.getMessage(), upe); throw new UserPolicyFaultFaultMessage(message, upe.getFault()); } catch (PermissionDeniedException pde) { logger.debug(pde.getMessage(), pde); throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } catch (IOException ioe) { logger.debug(ioe.getMessage(), ioe); throw new DorianInternalFaultFaultMessage(message + ": " + ioe.getMessage()); } catch (GeneralSecurityException gse) { logger.debug(gse.getMessage(), gse); throw new DorianInternalFaultFaultMessage(message + ": " + gse.getMessage()); } // catch (JAXBException jaxbe) { // throw new DorianInternalFaultFaultMessage(message + ": " + jaxbe.getMessage()); // } catch (SAMLException samle) { // throw new DorianInternalFaultFaultMessage(message + ": " + samle.getMessage()); // } catch (ParserConfigurationException pce) { // throw new DorianInternalFaultFaultMessage(message + ": " + pce.getMessage()); // } catch (Exception e) { // logger.debug(e.getMessage(), e); // throw new DorianInternalFaultFaultMessage(message + ": " + e.getMessage()); // } return response; } @Override public FindUserCertificatesResponse findUserCertificates(FindUserCertificatesRequest findUserCertificatesRequest) throws DorianInternalFaultFaultMessage, InvalidUserCertificateFaultFaultMessage, PermissionDeniedFaultFaultMessage { String message = "findUserCertificates"; logger.info(message); UserCertificateFilter filter = findUserCertificatesRequest.getUserCertificateFilter() .getUserCertificateFilter(); String gridId = getCallerId(); FindUserCertificatesResponse response = null; try { List<UserCertificateRecord> userCertificateRecords = dorian.findUserCertificateRecords(gridId, filter); response = new FindUserCertificatesResponse(); response.getUserCertificateRecord().addAll(userCertificateRecords); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidUserCertificateException iuce) { throw new InvalidUserCertificateFaultFaultMessage(message, iuce.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public UpdateUserCertificateResponse updateUserCertificate(UpdateUserCertificateRequest updateUserCertificateRequest) throws DorianInternalFaultFaultMessage, InvalidUserCertificateFaultFaultMessage, PermissionDeniedFaultFaultMessage { String message = "updateUserCertificate"; logger.info(message); UserCertificateUpdate update = updateUserCertificateRequest.getUpdate().getUserCertificateUpdate(); String gridId = getCallerId(); UpdateUserCertificateResponse response = null; try { dorian.updateUserCertificateRecord(gridId, update); response = new UpdateUserCertificateResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidUserCertificateException iuce) { throw new InvalidUserCertificateFaultFaultMessage(message, iuce.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RemoveUserCertificateResponse removeUserCertificate(RemoveUserCertificateRequest removeUserCertificateRequest) throws DorianInternalFaultFaultMessage, InvalidUserCertificateFaultFaultMessage, PermissionDeniedFaultFaultMessage { String message = "removeUserCertificate"; logger.info(message); long serialNumber = Long.parseLong(removeUserCertificateRequest.getSerialNumber()); String gridId = getCallerId(); RemoveUserCertificateResponse response = null; try { dorian.removeUserCertificate(gridId, serialNumber); response = new RemoveUserCertificateResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidUserCertificateException iuce) { throw new InvalidUserCertificateFaultFaultMessage(message, iuce.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public FindGridUsersResponse findGridUsers(FindGridUsersRequest findGridUserRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "findGridUsers"; logger.info(message); GridUserFilter filter = findGridUserRequest.getFilter().getGridUserFilter(); String gridId = getCallerId(); FindGridUsersResponse response = null; try { GridUser[] gridUsers = dorian.findGridUsers(gridId, filter); response = new FindGridUsersResponse(); response.getGridUser().addAll(Arrays.asList(gridUsers)); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public UpdateGridUserResponse updateGridUser(UpdateGridUserRequest updateGridUserRequest) throws DorianInternalFaultFaultMessage, PermissionDeniedFaultFaultMessage, InvalidUserFaultFaultMessage { String message = "updateGridUser"; logger.info(message); GridUser gridUser = updateGridUserRequest.getUser().getGridUser(); String gridId = getCallerId(); UpdateGridUserResponse response = null; try { dorian.updateGridUser(gridId, gridUser); response = new UpdateGridUserResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidUserException iue) { throw new InvalidUserFaultFaultMessage(message, iue.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RemoveGridUserResponse removeGridUser(RemoveGridUserRequest removeGridUserRequest) throws DorianInternalFaultFaultMessage, PermissionDeniedFaultFaultMessage, InvalidUserFaultFaultMessage { String message = "removeGridUser"; logger.info(message); GridUser gridUser = removeGridUserRequest.getUser().getGridUser(); String gridId = getCallerId(); RemoveGridUserResponse response = null; try { dorian.removeGridUser(gridId, gridUser); response = new RemoveGridUserResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidUserException iue) { throw new InvalidUserFaultFaultMessage(message, iue.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RequestHostCertificateResponse requestHostCertificate( RequestHostCertificateRequest requestHostCertificateRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidHostCertificateRequestFaultFaultMessage, InvalidHostCertificateFaultFaultMessage { String message = "requestHostCertificate"; logger.info(message); HostCertificateRequest hostCertificateRequest = requestHostCertificateRequest.getReq() .getHostCertificateRequest(); String gridId = getCallerId(); RequestHostCertificateResponse response = null; try { HostCertificateRecord hostCertificateRecord = dorian.requestHostCertificate(gridId, hostCertificateRequest, this.signingAlgorithm); response = new RequestHostCertificateResponse(); response.setHostCertificateRecord(hostCertificateRecord); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidHostCertificateRequestException ihcre) { throw new InvalidHostCertificateRequestFaultFaultMessage(message, ihcre.getFault()); } catch (InvalidHostCertificateException ihce) { throw new InvalidHostCertificateFaultFaultMessage(message, ihce.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public GetOwnedHostCertificatesResponse getOwnedHostCertificates( GetOwnedHostCertificatesRequest getOwnedHostCertificatesRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "getOwnedHostCertificates"; logger.info(message); String gridId = getCallerId(); GetOwnedHostCertificatesResponse response = null; try { HostCertificateRecord[] hostCertificateRecords = dorian.getOwnedHostCertificates(gridId); response = new GetOwnedHostCertificatesResponse(); response.getHostCertificateRecord().addAll(Arrays.asList(hostCertificateRecords)); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public FindHostCertificatesResponse findHostCertificates(FindHostCertificatesRequest findHostCertificatesRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "findHostCertificates"; logger.info(message); HostCertificateFilter filter = findHostCertificatesRequest.getHostCertificateFilter() .getHostCertificateFilter(); String gridId = getCallerId(); FindHostCertificatesResponse response = null; try { HostCertificateRecord[] hostCertificateRecords = dorian.findHostCertificates(gridId, filter); response = new FindHostCertificatesResponse(); response.getHostCertificateRecord().addAll(Arrays.asList(hostCertificateRecords)); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public ApproveHostCertificateResponse approveHostCertificate( ApproveHostCertificateRequest approveHostCertificateRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidHostCertificateFaultFaultMessage { String message = "approveHostCertificate"; logger.info(message); long recordId = approveHostCertificateRequest.getRecordId().longValue(); String gridId = getCallerId(); ApproveHostCertificateResponse response = null; try { HostCertificateRecord hostCertificateRecord = dorian.approveHostCertificate(gridId, recordId, CertificateSignatureAlgorithm.SHA2); response = new ApproveHostCertificateResponse(); response.setHostCertificateRecord(hostCertificateRecord); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidHostCertificateException ihce) { throw new InvalidHostCertificateFaultFaultMessage(message, ihce.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RenewHostCertificateResponse renewHostCertificate(RenewHostCertificateRequest renewHostCertificateRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidHostCertificateFaultFaultMessage { String message = "renewHostCertificate"; logger.info(message); long recordId = renewHostCertificateRequest.getRecordId().longValue(); String gridId = getCallerId(); RenewHostCertificateResponse response = null; try { HostCertificateRecord hostCertificateRecord = dorian.renewHostCertificate(gridId, recordId, this.signingAlgorithm); response = new RenewHostCertificateResponse(); response.setHostCertificateRecord(hostCertificateRecord); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidHostCertificateException ihce) { throw new InvalidHostCertificateFaultFaultMessage(message, ihce.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public UpdateHostCertificateRecordResponse updateHostCertificateRecord( UpdateHostCertificateRecordRequest updateHostCertificateRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage, InvalidHostCertificateFaultFaultMessage { String message = "updateHostCertificate"; logger.info(message); HostCertificateUpdate update = updateHostCertificateRequest.getHostCertificateUpdate() .getHostCertificateUpdate(); String gridId = getCallerId(); UpdateHostCertificateRecordResponse response = null; try { dorian.updateHostCertificateRecord(gridId, update); response = new UpdateHostCertificateRecordResponse(); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidHostCertificateException ihce) { throw new InvalidHostCertificateFaultFaultMessage(message, ihce.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public GetAccountProfileResponse getAccountProfile(GetAccountProfileRequest getAccountProfileRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "getAccountProfile"; logger.info(message); String gridId = getCallerId(); GetAccountProfileResponse response = null; try { dorian.getAccountProfile(gridId); } catch (RemoteException re) { throw new DorianInternalFaultFaultMessage(message + ": " + re.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public UpdateAccountProfileResponse updateAccountProfile(UpdateAccountProfileRequest updateAccountProfileRequest) throws DorianInternalFaultFaultMessage, PermissionDeniedFaultFaultMessage, NoSuchUserFaultFaultMessage, InvalidUserPropertyFaultFaultMessage { String message = "updateAccountProfile"; logger.info(message); AccountProfile profile = updateAccountProfileRequest.getProfile().getAccountProfile(); String gridId = getCallerId(); UpdateAccountProfileResponse response = null; try { dorian.updateAccountProfile(gridId, profile); response = new UpdateAccountProfileResponse(); } catch (RemoteException re) { throw new DorianInternalFaultFaultMessage(message + ": " + re.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidUserPropertyException iupe) { throw new InvalidUserPropertyFaultFaultMessage(message, iupe.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } catch (NoSuchUserException nsue) { throw new NoSuchUserFaultFaultMessage(message, nsue.getFault()); } return response; } @Override public GetGridUserPoliciesResponse getGridUserPolicies(GetGridUserPoliciesRequest getGridUserPoliciesRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "getGridUserPolicies"; logger.info(message); String gridId = getCallerId(); GetGridUserPoliciesResponse response = null; try { GridUserPolicy[] gridUserPolicies = dorian.getGridUserPolicies(gridId); response = new GetGridUserPoliciesResponse(); response.getGridUserPolicy().addAll(Arrays.asList(gridUserPolicies)); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public AuthenticateUserResponse authenticateUser(AuthenticateUserRequest authenticateUserRequest) throws InsufficientAttributeFaultFaultMessage, AuthenticationProviderFaultFaultMessage, InvalidCredentialFaultFaultMessage, CredentialNotSupportedFaultFaultMessage { String message = "authenticateUser"; logger.info(message); Credential credential = authenticateUserRequest.getCredential().getCredential(); AuthenticateUserResponse response = null; try { SAMLAssertion samlAssertion = dorian.authenticate(credential); // String samlXML = samlAssertion.toString(); // AssertionType assertion = JAXBUtils.unmarshal(AssertionType.class, samlXML); AssertionType assertion = new AssertionType(); assertion.setSamlAssertion(samlAssertion); response = new AuthenticateUserResponse(); response.setAssertion(assertion); } catch (AuthenticationProviderException ape) { throw new AuthenticationProviderFaultFaultMessage(message, ape.getFault()); } catch (InvalidCredentialException ice) { throw new InvalidCredentialFaultFaultMessage(message, ice.getFault()); } catch (CredentialNotSupportedException cnse) { throw new CredentialNotSupportedFaultFaultMessage(message, cnse.getFault()); } // } catch (JAXBException jaxbe) { // throw new AuthenticationProviderFaultFaultMessage(message + ": " + jaxbe.getMessage()); // } return response; } public GetCACertificateResponse getCACertificate(GetCACertificateRequest getCACertificateRequest) throws DorianInternalFaultFaultMessage { String message = "getCACertificate"; logger.info(message); GetCACertificateResponse response = null; try { X509Certificate cert = new X509Certificate(); cert.setCertificateAsString(CertUtil.writeCertificate(dorian.getCACertificate())); response = new GetCACertificateResponse(); response.setX509Certificate(cert); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (IOException ioe) { throw new DorianInternalFaultFaultMessage(message + ": " + ioe.getMessage()); } return response; } @Override public GetAdminsResponse getAdmins(GetAdminsRequest getAdminsRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "getAdmins"; logger.info(message); String gridId = getCallerId(); GetAdminsResponse response = null; try { String[] adminIds = dorian.getAdmins(gridId); response = new GetAdminsResponse(); response.getResponse().addAll(Arrays.asList(adminIds)); } catch (RemoteException re) { throw new DorianInternalFaultFaultMessage(message + ": " + re.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public AddAdminResponse addAdmin(AddAdminRequest addAdminRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "addAdmin"; logger.info(message); String adminIdentity = addAdminRequest.getGridIdentity(); String gridId = getCallerId(); AddAdminResponse response = null; try { dorian.addAdmin(gridId, adminIdentity); response = new AddAdminResponse(); } catch (RemoteException re) { throw new DorianInternalFaultFaultMessage(message + ": " + re.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public RemoveAdminResponse removeAdmin(RemoveAdminRequest removeAdminRequest) throws PermissionDeniedFaultFaultMessage, DorianInternalFaultFaultMessage { String message = "removeAdmin"; logger.info(message); String adminId = removeAdminRequest.getGridIdentity(); String gridId = getCallerId(); RemoveAdminResponse response = null; try { dorian.removeAdmin(gridId, adminId); response = new RemoveAdminResponse(); } catch (RemoteException re) { throw new DorianInternalFaultFaultMessage(message + ": " + re.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } return response; } @Override public CreateProxyResponse createProxy(CreateProxyRequest createProxyRequest) throws DorianInternalFaultFaultMessage, PermissionDeniedFaultFaultMessage, InvalidAssertionFaultFaultMessage, UserPolicyFaultFaultMessage, InvalidProxyFaultFaultMessage { String message = "createProxy"; logger.info(message); String samlXML = createProxyRequest.getSaml().getSAMLAssertion().getXml(); ProxyLifetime proxyLifetime = createProxyRequest.getLifetime().getProxyLifetime(); CertificateLifetime lifetime = new CertificateLifetime(); lifetime.setHours(proxyLifetime.getHours()); lifetime.setMinutes(proxyLifetime.getMinutes()); lifetime.setSeconds(proxyLifetime.getSeconds()); CreateProxyResponse response = null; try { SAMLAssertion samlAssertion = new SAMLAssertion(new ByteArrayInputStream(samlXML.getBytes("UTF-8"))); PublicKey publicKey = KeyUtil.loadPublicKey(createProxyRequest.getPublicKey().getPublicKey() .getKeyAsString()); X509Certificate cert = new X509Certificate(); cert.setCertificateAsString(CertUtil.writeCertificate(dorian.requestUserCertificate(samlAssertion, publicKey, lifetime, signingAlgorithm))); response = new CreateProxyResponse(); response.getX509Certificate().add(cert); } catch (IOException ioe) { throw new DorianInternalFaultFaultMessage(message + ": " + ioe.getMessage()); } catch (DorianInternalException die) { throw new DorianInternalFaultFaultMessage(message, die.getFault()); } catch (InvalidAssertionException iae) { throw new InvalidAssertionFaultFaultMessage(message, iae.getFault()); } catch (UserPolicyException upe) { throw new UserPolicyFaultFaultMessage(message, upe); } catch (PermissionDeniedException pde) { throw new PermissionDeniedFaultFaultMessage(message, pde.getFault()); } catch (GeneralSecurityException gse) { throw new DorianInternalFaultFaultMessage(message + ": " + gse.getMessage()); } catch (SAMLException samle) { throw new DorianInternalFaultFaultMessage(message + ": " + samle.getMessage()); } return response; } private String getCallerId() { String callerId = WebServiceCallerId.getCallerId(wsContext); if (callerId == null) callerId = ANONYMOUS_ID; logger.info("CallerId = " + callerId); return callerId; } private AuthenticationProfiles getAuthenticationProfiles() { AuthenticationProfiles authProfiles = new AuthenticationProfiles(); QName basicAuthenticationQName = JAXBUtils.getQName(BasicAuthentication.class); authProfiles.getProfile().add(basicAuthenticationQName); return authProfiles; } /* * The client-side reconstruction of QNames from the getResourceProperty response is broken. It depends on the * namespace prefix in the 'profile' element content being the same as in the element tag. To try to work around * this, regenerate the appropriate QNames with a specific prefix and marshal the container with that prefix. The * final response probably won't have the prefix used here, but the necessary prefixes should agree. */ private Element getAuthenticationProfilesElement() { AuthenticationProfiles authProfiles = getAuthenticationProfiles(); QName authProfilesQName = JAXBUtils.getQName(AuthenticationProfiles.class); String authProfilesNamespace = authProfilesQName.getNamespaceURI(); // New QName for marshalling authProfilesQName = new QName(authProfilesNamespace, authProfilesQName.getLocalPart(), AUTHENTICATION_PROFILES_PREFIX); // New QName elements List<QName> oldQNames = authProfiles.getProfile(); List<QName> newQNames = new ArrayList<QName>(oldQNames.size()); for (QName oldQName : oldQNames) { QName newQName = oldQName; if (authProfilesNamespace.equals(oldQName.getNamespaceURI())) { newQName = new QName(authProfilesNamespace, oldQName.getLocalPart(), AUTHENTICATION_PROFILES_PREFIX); } newQNames.add(newQName); } oldQNames.clear(); oldQNames.addAll(newQNames); // Marshal to element with, hopefully, consistent prefixes. Element authProfilesElement = null; try { authProfilesElement = JAXBUtils.marshalToElement(authProfiles, authProfilesQName); } catch (Exception e) { logger.error("Exception marshalling AuthenticationProfiles", e); } return authProfilesElement; } }