/** * Copyright (c) 2008-2011 Sonatype, Inc. * All rights reserved. Includes the third-party code listed at http://www.sonatype.com/products/nexus/attributions. * * This program is free software: you can redistribute it and/or modify it only under the terms of the GNU Affero General * Public License Version 3 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License Version 3 * for more details. * * You should have received a copy of the GNU Affero General Public License Version 3 along with this program. If not, see * http://www.gnu.org/licenses. * * Sonatype Nexus (TM) Open Source Version is available from Sonatype, Inc. Sonatype and Sonatype Nexus are trademarks of * Sonatype, Inc. Apache Maven is a trademark of the Apache Foundation. M2Eclipse is a trademark of the Eclipse Foundation. * All other trademarks are the property of their respective owners. */ package org.sonatype.nexus.rest.global; import java.util.ArrayList; import org.codehaus.plexus.component.annotations.Requirement; import org.codehaus.plexus.util.StringUtils; import org.sonatype.nexus.configuration.application.AuthenticationInfoConverter; import org.sonatype.nexus.configuration.application.GlobalHttpProxySettings; import org.sonatype.nexus.configuration.application.GlobalRemoteConnectionSettings; import org.sonatype.nexus.configuration.application.GlobalRestApiSettings; import org.sonatype.nexus.configuration.model.CRemoteAuthentication; import org.sonatype.nexus.configuration.model.CRemoteConnectionSettings; import org.sonatype.nexus.configuration.model.CRemoteHttpProxySettings; import org.sonatype.nexus.configuration.model.CRestApiSettings; import org.sonatype.nexus.configuration.model.CSmtpConfiguration; import org.sonatype.nexus.email.NexusEmailer; import org.sonatype.nexus.error.reporting.ErrorReportingManager; import org.sonatype.nexus.notification.NotificationCheat; import org.sonatype.nexus.notification.NotificationManager; import org.sonatype.nexus.notification.NotificationTarget; import org.sonatype.nexus.proxy.repository.ClientSSLRemoteAuthenticationSettings; import org.sonatype.nexus.proxy.repository.NtlmRemoteAuthenticationSettings; import org.sonatype.nexus.proxy.repository.RemoteAuthenticationSettings; import org.sonatype.nexus.proxy.repository.UsernamePasswordRemoteAuthenticationSettings; import org.sonatype.nexus.rest.AbstractNexusPlexusResource; import org.sonatype.nexus.rest.model.AuthenticationSettings; import org.sonatype.nexus.rest.model.ErrorReportingSettings; import org.sonatype.nexus.rest.model.RemoteConnectionSettings; import org.sonatype.nexus.rest.model.RemoteHttpProxySettings; import org.sonatype.nexus.rest.model.RestApiSettings; import org.sonatype.nexus.rest.model.SmtpSettings; import org.sonatype.nexus.rest.model.SystemNotificationSettings; /** * The base class for global configuration resources. * * @author cstamas */ public abstract class AbstractGlobalConfigurationPlexusResource extends AbstractNexusPlexusResource { public static final String SECURITY_OFF = "off"; public static final String SECURITY_SIMPLE = "simple"; public static final String SECURITY_CUSTOM = "custom"; @Requirement private NexusEmailer nexusEmailer; @Requirement private GlobalHttpProxySettings globalHttpProxySettings; @Requirement private GlobalRemoteConnectionSettings globalRemoteConnectionSettings; @Requirement private GlobalRestApiSettings globalRestApiSettings; @Requirement private AuthenticationInfoConverter authenticationInfoConverter; @Requirement private ErrorReportingManager errorReportingManager; protected NexusEmailer getNexusEmailer() { return nexusEmailer; } protected GlobalHttpProxySettings getGlobalHttpProxySettings() { return globalHttpProxySettings; } protected GlobalRemoteConnectionSettings getGlobalRemoteConnectionSettings() { return globalRemoteConnectionSettings; } protected GlobalRestApiSettings getGlobalRestApiSettings() { return globalRestApiSettings; } protected AuthenticationInfoConverter getAuthenticationInfoConverter() { return authenticationInfoConverter; } protected ErrorReportingManager getErrorReportingManager() { return errorReportingManager; } public static SmtpSettings convert( NexusEmailer nexusEmailer ) { if ( nexusEmailer == null ) { return null; } SmtpSettings result = new SmtpSettings(); result.setHost( nexusEmailer.getSMTPHostname() ); result.setPort( nexusEmailer.getSMTPPort() ); result.setSslEnabled( nexusEmailer.isSMTPSslEnabled() ); result.setTlsEnabled( nexusEmailer.isSMTPTlsEnabled() ); result.setUsername( nexusEmailer.getSMTPUsername() ); if ( !StringUtils.isEmpty( nexusEmailer.getSMTPPassword() ) ) { result.setPassword( PASSWORD_PLACE_HOLDER ); } result.setSystemEmailAddress( nexusEmailer.getSMTPSystemEmailAddress().getMailAddress() ); return result; } public static ErrorReportingSettings convert( ErrorReportingManager errorReportingManager ) { ErrorReportingSettings result = new ErrorReportingSettings(); result.setJiraUsername( errorReportingManager.getJIRAUsername() ); if ( StringUtils.isEmpty( errorReportingManager.getJIRAPassword() ) ) { result.setJiraPassword( errorReportingManager.getJIRAPassword() ); } else { result.setJiraPassword( PASSWORD_PLACE_HOLDER ); } result.setUseGlobalProxy( true ); result.setReportErrorsAutomatically( errorReportingManager.isEnabled() ); return result; } public static SystemNotificationSettings convert( NotificationManager manager ) { if ( manager == null ) { return null; } SystemNotificationSettings settings = new SystemNotificationSettings(); settings.setEnabled( manager.isEnabled() ); NotificationTarget target = manager.readNotificationTarget( NotificationCheat.AUTO_BLOCK_NOTIFICATION_GROUP_ID ); if ( target == null ) { return settings; } settings.getRoles().addAll( target.getTargetRoles() ); StringBuffer sb = new StringBuffer(); for ( String email : target.getExternalTargets() ) { sb.append( email ).append( "," ); } // drop last comma if ( sb.length() > 0 ) { sb.setLength( sb.length() - 1 ); } settings.setEmailAddresses( sb.toString() ); return settings; } /** * Externalized Nexus object to DTO's conversion. * * @param resource */ public static RemoteConnectionSettings convert( GlobalRemoteConnectionSettings settings ) { if ( settings == null ) { return null; } RemoteConnectionSettings result = new RemoteConnectionSettings(); result.setConnectionTimeout( settings.getConnectionTimeout() / 1000 ); result.setRetrievalRetryCount( settings.getRetrievalRetryCount() ); result.setQueryString( settings.getQueryString() ); result.setUserAgentString( settings.getUserAgentCustomizationString() ); return result; } /** * Externalized Nexus object to DTO's conversion. * * @param resource */ public static RemoteHttpProxySettings convert( GlobalHttpProxySettings settings ) { if ( settings == null || !settings.isEnabled() ) { return null; } RemoteHttpProxySettings result = new RemoteHttpProxySettings(); result.setProxyHostname( settings.getHostname() ); result.setProxyPort( settings.getPort() ); result.setAuthentication( convert( settings.getProxyAuthentication() ) ); result.setNonProxyHosts( new ArrayList<String>( settings.getNonProxyHosts() ) ); return result; } public static RestApiSettings convert( GlobalRestApiSettings settings ) { if ( settings == null || !settings.isEnabled() ) { return null; } RestApiSettings result = new RestApiSettings(); result.setBaseUrl( settings.getBaseUrl() ); result.setForceBaseUrl( settings.isForceBaseUrl() ); result.setUiTimeout( settings.getUITimeout() / 1000 ); return result; } /** * Externalized Nexus object to DTO's conversion. * * @param resource */ public static AuthenticationSettings convert( RemoteAuthenticationSettings settings ) { if ( settings == null ) { return null; } AuthenticationSettings auth = new AuthenticationSettings(); if ( settings instanceof ClientSSLRemoteAuthenticationSettings ) { // huh? } else if ( settings instanceof NtlmRemoteAuthenticationSettings ) { NtlmRemoteAuthenticationSettings up = (NtlmRemoteAuthenticationSettings) settings; auth.setUsername( up.getUsername() ); auth.setPassword( PASSWORD_PLACE_HOLDER ); auth.setNtlmHost( up.getNtlmHost() ); auth.setNtlmDomain( up.getNtlmDomain() ); } else if ( settings instanceof UsernamePasswordRemoteAuthenticationSettings ) { UsernamePasswordRemoteAuthenticationSettings up = (UsernamePasswordRemoteAuthenticationSettings) settings; auth.setUsername( up.getUsername() ); auth.setPassword( PASSWORD_PLACE_HOLDER ); } return auth; } // == /** * Externalized Nexus object to DTO's conversion. * * @param resource */ public static RemoteConnectionSettings convert( CRemoteConnectionSettings settings ) { if ( settings == null ) { return null; } RemoteConnectionSettings result = new RemoteConnectionSettings(); result.setConnectionTimeout( settings.getConnectionTimeout() / 1000 ); result.setRetrievalRetryCount( settings.getRetrievalRetryCount() ); result.setQueryString( settings.getQueryString() ); result.setUserAgentString( settings.getUserAgentCustomizationString() ); return result; } /** * Externalized Nexus object to DTO's conversion. * * @param resource */ public static RemoteHttpProxySettings convert( CRemoteHttpProxySettings settings ) { if ( settings == null ) { return null; } RemoteHttpProxySettings result = new RemoteHttpProxySettings(); result.setProxyHostname( settings.getProxyHostname() ); result.setProxyPort( settings.getProxyPort() ); result.setAuthentication( convert( settings.getAuthentication() ) ); result.setNonProxyHosts( settings.getNonProxyHosts() ); return result; } public static RestApiSettings convert( CRestApiSettings settings ) { if ( settings == null ) { return null; } RestApiSettings result = new RestApiSettings(); result.setBaseUrl( settings.getBaseUrl() ); result.setForceBaseUrl( settings.isForceBaseUrl() ); result.setUiTimeout( settings.getUiTimeout() / 1000 ); return result; } /** * Externalized Nexus object to DTO's conversion. * * @param resource */ public static AuthenticationSettings convert( CRemoteAuthentication settings ) { if ( settings == null ) { return null; } AuthenticationSettings auth = new AuthenticationSettings(); auth.setUsername( settings.getUsername() ); auth.setPassword( PASSWORD_PLACE_HOLDER ); auth.setNtlmHost( settings.getNtlmHost() ); auth.setNtlmDomain( settings.getNtlmDomain() ); // auth.setPrivateKey( settings.getPrivateKey() ); // auth.setPassphrase( settings.getPassphrase() ); return auth; } public static SmtpSettings convert( CSmtpConfiguration settings ) { if ( settings == null ) { return null; } SmtpSettings result = new SmtpSettings(); result.setHost( settings.getHostname() ); result.setPassword( PASSWORD_PLACE_HOLDER ); result.setPort( settings.getPort() ); result.setSslEnabled( settings.isSslEnabled() ); result.setSystemEmailAddress( settings.getSystemEmailAddress() ); result.setTlsEnabled( settings.isTlsEnabled() ); result.setUsername( settings.getUsername() ); return result; } }