Search in sources :

Example 1 with KeyStoreProtectionConfigProvider

use of org.nhindirect.gateway.smtp.provider.KeyStoreProtectionConfigProvider in project nhin-d by DirectProject.

the class NHINDSecurityAndTrustMailet method init.

/**
	 * {@inheritDoc}
	 */
@Override
public void init() throws MessagingException {
    LOGGER.info("Initializing NHINDSecurityAndTrustMailet");
    super.init();
    // set the outbound policy for notifications if possible
    try {
        final boolean useOutboundPolicy = Boolean.parseBoolean(GatewayConfiguration.getConfigurationParam(SecurityAndTrustMailetOptions.USE_OUTGOING_POLICY_FOR_INCOMING_NOTIFICATIONS, this, "false"));
        // we don't know if this parameter came from the mailet config or the options manager, so just go ahead and set it at
        // the options manager level because that it where the agent reads the value... no danger that we will overwrite the value that we want...
        // we would just be writing the same value if the information came from the options manager module
        // the mailet parameter gets precedence, so we want to overwrite the options manager if the value exists in the mailet configuration
        OptionsManager.getInstance().setOptionsParameter(new OptionsParameter(OptionsParameter.USE_OUTGOING_POLICY_FOR_INCOMING_NOTIFICATIONS, Boolean.toString(useOutboundPolicy)));
    } catch (Exception e) {
    // log a warning that the parameter could not be set
    }
    // set the rejection policy for tampered routing headers
    try {
        final boolean rejectOnTamperPolicy = Boolean.parseBoolean(GatewayConfiguration.getConfigurationParam(SecurityAndTrustMailetOptions.REJECT_ON_ROUTING_TAMPER, this, "false"));
        OptionsManager.getInstance().setOptionsParameter(new OptionsParameter(OptionsParameter.REJECT_ON_ROUTING_TAMPER, Boolean.toString(rejectOnTamperPolicy)));
    } catch (Exception e) {
    // log a warning that the parameter could not be set
    }
    // set the JCE providers if available
    final String JCEName = GatewayConfiguration.getConfigurationParam(SecurityAndTrustMailetOptions.JCE_PROVIDER_NAME, this, "");
    if (!StringUtils.isEmpty(JCEName))
        OptionsManager.getInstance().setOptionsParameter(new OptionsParameter(OptionsParameter.JCE_PROVIDER, JCEName));
    final String sensitiveJCEName = GatewayConfiguration.getConfigurationParam(SecurityAndTrustMailetOptions.JCE_SENTITIVE_PROVIDER, this, "");
    if (!StringUtils.isEmpty(sensitiveJCEName))
        OptionsManager.getInstance().setOptionsParameter(new OptionsParameter(OptionsParameter.JCE_SENTITIVE_PROVIDER, sensitiveJCEName));
    // Get the configuration URL
    final String configURLParam = getInitParameter(SecurityAndTrustMailetOptions.CONFIG_URL_PARAM);
    if (StringUtils.isEmpty(configURLParam)) {
        LOGGER.error("NHINDSecurityAndTrustMailet Configuration URL cannot be empty or null.");
        throw new MessagingException("NHINDSecurityAndTrustMailet Configuration URL cannot be empty or null.");
    }
    // parse into a URL and validate it is properly formed
    URL configURL = null;
    try {
        configURL = new URL(configURLParam);
    } catch (MalformedURLException ex) {
        LOGGER.error("Invalid configuration URL:" + ex.getMessage(), ex);
        throw new MessagingException("NHINDSecurityAndTrustMailet Configuration URL cannot be empty or null.", ex);
    }
    final Collection<Module> modules = getInitModules();
    Provider<SmtpAgentConfig> configProvider;
    try {
        configProvider = this.getConfigProvider();
        if (configProvider == null)
            configProvider = createCompatConfigProvider(configURL);
        if (configProvider instanceof URLAccessedConfigProvider)
            ((URLAccessedConfigProvider) configProvider).setConfigURL(configURL);
        final Provider<ServiceSecurityManager> srvSecMgr = getServiceSecurityManagerProvider();
        if (configProvider instanceof SecureURLAccessedConfigProvider)
            ((SecureURLAccessedConfigProvider) configProvider).setServiceSecurityManager(srvSecMgr);
        final Provider<KeyStoreProtectionManager> keyStoreManagerProvider = getKeyStoreManagerProvider();
        if (configProvider instanceof KeyStoreProtectionConfigProvider && keyStoreManagerProvider != null)
            ((KeyStoreProtectionConfigProvider) configProvider).setKeyStoreProtectionManger(keyStoreManagerProvider);
        agent = SmtpAgentFactory.createAgent(configURL, configProvider, null, modules);
    } catch (SmtpAgentException e) {
        LOGGER.error("Failed to create the SMTP agent: " + e.getMessage(), e);
        throw new MessagingException("Failed to create the SMTP agent: " + e.getMessage(), e);
    }
    ///CLOVER:OFF
    if (agent == null) {
        LOGGER.error("Failed to create the SMTP agent. Reason unknown.");
        throw new MessagingException("Failed to create the SMTP agent.  Reason unknown.");
    }
    ///CLOVER:ON
    // get the DSN creation options
    // default is RELIABLE_DSN_OPTION
    final String dnsCreateOptions = GatewayConfiguration.getConfigurationParam(SecurityAndTrustMailetOptions.AUTO_DSN_FAILURE_CREATION_PARAM, this, RELIABLE_DSN_OPTION);
    for (String dsnOption : dnsCreateOptions.split(",")) {
        if (dsnOption.equalsIgnoreCase(RELIABLE_DSN_OPTION))
            autoDSNForTimelyAndReliable = true;
        else if (dsnOption.equalsIgnoreCase(GENERAL_DSN_OPTION))
            autoDSNForGeneral = true;
    }
    // set the agent and config in the Gateway state
    final GatewayState gwState = GatewayState.getInstance();
    if (gwState.isAgentSettingManagerRunning())
        gwState.stopAgentSettingsManager();
    gwState.setSmtpAgent(agent);
    gwState.setSmptAgentConfig(SmptAgentConfigFactory.createSmtpAgentConfig(configURL, configProvider, null));
    gwState.startAgentSettingsManager();
    LOGGER.info("NHINDSecurityAndTrustMailet initialization complete.");
}
Also used : MalformedURLException(java.net.MalformedURLException) SmtpAgentException(org.nhindirect.gateway.smtp.SmtpAgentException) MessagingException(javax.mail.MessagingException) KeyStoreProtectionManager(org.nhindirect.common.crypto.KeyStoreProtectionManager) MessagingException(javax.mail.MessagingException) InvocationTargetException(java.lang.reflect.InvocationTargetException) SmtpAgentException(org.nhindirect.gateway.smtp.SmtpAgentException) MalformedURLException(java.net.MalformedURLException) ServiceException(org.nhindirect.common.rest.exceptions.ServiceException) URL(java.net.URL) SmtpAgentConfig(org.nhindirect.gateway.smtp.config.SmtpAgentConfig) OptionsParameter(org.nhindirect.stagent.options.OptionsParameter) ServiceSecurityManager(org.nhindirect.common.rest.ServiceSecurityManager) GatewayState(org.nhindirect.gateway.smtp.GatewayState) SecureURLAccessedConfigProvider(org.nhindirect.gateway.smtp.provider.SecureURLAccessedConfigProvider) URLAccessedConfigProvider(org.nhindirect.gateway.smtp.provider.URLAccessedConfigProvider) SecureURLAccessedConfigProvider(org.nhindirect.gateway.smtp.provider.SecureURLAccessedConfigProvider) Module(com.google.inject.Module) AuditorModule(org.nhindirect.gateway.smtp.module.AuditorModule) KeyStoreProtectionConfigProvider(org.nhindirect.gateway.smtp.provider.KeyStoreProtectionConfigProvider)

Aggregations

Module (com.google.inject.Module)1 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 MalformedURLException (java.net.MalformedURLException)1 URL (java.net.URL)1 MessagingException (javax.mail.MessagingException)1 KeyStoreProtectionManager (org.nhindirect.common.crypto.KeyStoreProtectionManager)1 ServiceSecurityManager (org.nhindirect.common.rest.ServiceSecurityManager)1 ServiceException (org.nhindirect.common.rest.exceptions.ServiceException)1 GatewayState (org.nhindirect.gateway.smtp.GatewayState)1 SmtpAgentException (org.nhindirect.gateway.smtp.SmtpAgentException)1 SmtpAgentConfig (org.nhindirect.gateway.smtp.config.SmtpAgentConfig)1 AuditorModule (org.nhindirect.gateway.smtp.module.AuditorModule)1 KeyStoreProtectionConfigProvider (org.nhindirect.gateway.smtp.provider.KeyStoreProtectionConfigProvider)1 SecureURLAccessedConfigProvider (org.nhindirect.gateway.smtp.provider.SecureURLAccessedConfigProvider)1 URLAccessedConfigProvider (org.nhindirect.gateway.smtp.provider.URLAccessedConfigProvider)1 OptionsParameter (org.nhindirect.stagent.options.OptionsParameter)1