=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SettingKey.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SettingKey.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SettingKey.java 2016-01-06 18:19:09 +0000 @@ -58,6 +58,7 @@ EMAIL_USERNAME( "keyEmailUsername" ), EMAIL_TLS( "keyEmailTls", Boolean.TRUE, Boolean.class ), EMAIL_SENDER( "keyEmailSender" ), + EMAIL_PASSWORD( "keyEmailPassword", "", String.class, true ), INSTANCE_BASE_URL( "keyInstanceBaseUrl" ), SCHEDULED_TASKS( "keySchedTasks", ListMap.class ), SMS_CONFIG( "keySmsConfig", SmsConfiguration.class ), @@ -112,7 +113,10 @@ APP_BASE_URL( "appBaseUrl" ), APP_STORE_URL( "appStoreUrl", "https://www.dhis2.org/appstore", String.class ), APP_STORE_INDEX_URL( "appStoreIndexUrl", "https://s3-eu-west-1.amazonaws.com/dhis2-appstore/appstore.json", String.class ), - STYLE( "currentStyle", "light_blue/light_blue.css", String.class ); + STYLE( "currentStyle", "light_blue/light_blue.css", String.class ), + REMOTE_INSTANCE_URL( "keyRemoteInstanceUrl", "", String.class ), + REMOTE_INSTANCE_USERNAME( "keyRemoteInstanceUsername", "", String.class ), + REMOTE_INSTANCE_PASSWORD( "keyRemoteInstancePassword", "", String.class, true ); private final String name; @@ -120,6 +124,8 @@ private final Class clazz; + private boolean confidential; + // ------------------------------------------------------------------------- // Constructors // ------------------------------------------------------------------------- @@ -129,6 +135,7 @@ this.name = name; this.defaultValue = null; this.clazz = String.class; + this.confidential = false; } private SettingKey( String name, Class clazz ) @@ -136,13 +143,23 @@ this.name = name; this.defaultValue = null; this.clazz = clazz; + this.confidential = false; } - + private SettingKey( String name, Serializable defaultValue, Class clazz ) { this.name = name; this.defaultValue = defaultValue; this.clazz = clazz; + this.confidential = false; + } + + private SettingKey( String name, Serializable defaultValue, Class clazz, boolean confidential ) + { + this.name = name; + this.defaultValue = defaultValue; + this.clazz = clazz; + this.confidential = confidential; } // ------------------------------------------------------------------------- @@ -207,6 +224,7 @@ return name; } + public Serializable getDefaultValue() { return defaultValue; @@ -216,4 +234,6 @@ { return clazz; } + + public boolean getConfidential() { return confidential; } } === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSetting.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSetting.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSetting.java 2016-01-06 18:19:09 +0000 @@ -44,6 +44,8 @@ private Serializable value; + private boolean confidential; + // ------------------------------------------------------------------------- // Constructor // ------------------------------------------------------------------------- === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2016-01-04 02:27:49 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/setting/SystemSettingManager.java 2016-01-06 18:19:09 +0000 @@ -40,35 +40,35 @@ public interface SystemSettingManager { void saveSystemSetting( String name, Serializable value ); - + void saveSystemSetting( SettingKey setting, Serializable value ); void deleteSystemSetting( String name ); - + void deleteSystemSetting( SettingKey setting ); Serializable getSystemSetting( String name ); Serializable getSystemSetting( SettingKey setting ); - + Serializable getSystemSetting( SettingKey setting, Serializable defaultValue ); - + List getAllSystemSettings(); Map getSystemSettingsAsMap(); - + Map getSystemSettingsAsMap( Set names ); - + Map getSystemSettings( Collection settings ); - + void invalidateCache(); - + // ------------------------------------------------------------------------- // Specific methods // ------------------------------------------------------------------------- List getFlags(); - + List getFlagObjects(); String getFlagImage(); @@ -80,7 +80,7 @@ String getEmailUsername(); boolean getEmailTls(); - + String getEmailSender(); String getInstanceBaseUrl(); @@ -90,14 +90,16 @@ boolean selfRegistrationNoRecaptcha(); boolean emailEnabled(); - + boolean systemNotificationEmailValid(); boolean hideUnapprovedDataInAnalytics(); - + boolean isOpenIdConfigured(); - + String googleAnalyticsUA(); Integer credentialsExpires(); + + boolean isConfidential( String name ); } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java 2016-01-05 19:03:10 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java 2016-01-06 18:19:42 +0000 @@ -77,19 +77,12 @@ // ------------------------------------------------------------------------- private SystemSettingManager systemSettingManager; - + public void setSystemSettingManager( SystemSettingManager systemSettingManager ) { this.systemSettingManager = systemSettingManager; } - private DhisConfigurationProvider dhisConfigurationProvider; - - public void setDhisConfigurationProvider( DhisConfigurationProvider dhisConfigurationProvider) - { - this.dhisConfigurationProvider = dhisConfigurationProvider; - } - private UserSettingService userSettingService; public void setUserSettingService( UserSettingService userSettingService ) @@ -106,14 +99,15 @@ */ @Async @Override - public String sendMessage( String subject, String text, String footer, User sender, Set users, boolean forceSend ) + public String sendMessage( String subject, String text, String footer, User sender, Set users, + boolean forceSend ) { - String hostName = dhisConfigurationProvider.getProperty( ConfigurationKey.SMTP_HOSTNAME ); - int port = Integer.parseInt( dhisConfigurationProvider.getProperty( ConfigurationKey.SMTP_PORT ) ); - String username = dhisConfigurationProvider.getProperty( ConfigurationKey.SMTP_USERNAME ); - String password = dhisConfigurationProvider.getProperty( ConfigurationKey.SMTP_PASSWORD ); - boolean tls = Boolean.parseBoolean( dhisConfigurationProvider.getProperty( ConfigurationKey.SMTP_TLS ) ); - String from = dhisConfigurationProvider.getProperty( ConfigurationKey.SMTP_SENDER ); + String hostName = (String) systemSettingManager.getSystemSetting( SettingKey.EMAIL_HOST_NAME ); + int port = (int) systemSettingManager.getSystemSetting( SettingKey.EMAIL_PORT ); + String username = (String) systemSettingManager.getSystemSetting( SettingKey.EMAIL_USERNAME ); + String password = (String) systemSettingManager.getSystemSetting( SettingKey.EMAIL_PASSWORD ); + boolean tls = (boolean) systemSettingManager.getSystemSetting( SettingKey.EMAIL_TLS ); + String from = (String) systemSettingManager.getSystemSetting( SettingKey.EMAIL_SENDER ); if ( hostName == null ) { @@ -134,13 +128,16 @@ for ( User user : users ) { - boolean doSend = forceSend || (Boolean) userSettingService.getUserSetting( UserSettingKey.MESSAGE_EMAIL_NOTIFICATION, user ); + boolean doSend = forceSend || + (Boolean) userSettingService.getUserSetting( UserSettingKey.MESSAGE_EMAIL_NOTIFICATION, user ); if ( doSend && user.getEmail() != null && !user.getEmail().trim().isEmpty() ) { email.addBcc( user.getEmail() ); - log.info( "Sending email to user: " + user.getUsername() + " with email address: " + user.getEmail() + " to host: " + hostName + ":" + port ); + log.info( + "Sending email to user: " + user.getUsername() + " with email address: " + user.getEmail() + + " to host: " + hostName + ":" + port ); hasRecipients = true; } @@ -168,7 +165,8 @@ // Supportive methods // ------------------------------------------------------------------------- - private HtmlEmail getHtmlEmail( String hostName, int port, String username, String password, boolean tls, String sender ) + private HtmlEmail getHtmlEmail( String hostName, int port, String username, String password, boolean tls, + String sender ) throws EmailException { HtmlEmail email = new HtmlEmail(); @@ -187,11 +185,11 @@ private String renderPlainContent( String text, User sender ) { - return sender == null ? text : ( text + LB + LB + + return sender == null ? text : (text + LB + LB + sender.getName() + LB + - ( sender.getOrganisationUnitsName() != null ? ( sender.getOrganisationUnitsName() + LB ) : StringUtils.EMPTY ) + - ( sender.getEmail() != null ? ( sender.getEmail() + LB ) : StringUtils.EMPTY ) + - ( sender.getPhoneNumber() != null ? ( sender.getPhoneNumber() + LB ) : StringUtils.EMPTY ) ); + (sender.getOrganisationUnitsName() != null ? (sender.getOrganisationUnitsName() + LB) : StringUtils.EMPTY) + + (sender.getEmail() != null ? (sender.getEmail() + LB) : StringUtils.EMPTY) + + (sender.getPhoneNumber() != null ? (sender.getPhoneNumber() + LB) : StringUtils.EMPTY)); } private String renderHtmlContent( String text, String footer, User sender ) === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/setting/DefaultSystemSettingManager.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/setting/DefaultSystemSettingManager.java 2016-01-06 11:43:22 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/setting/DefaultSystemSettingManager.java 2016-01-06 18:19:42 +0000 @@ -28,27 +28,27 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -import java.io.Serializable; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; - +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; +import org.hisp.dhis.external.conf.ConfigurationKey; +import org.hisp.dhis.external.conf.DhisConfigurationProvider; import org.hisp.dhis.i18n.I18n; import org.hisp.dhis.i18n.I18nManager; import org.hisp.dhis.system.util.ValidationUtils; +import org.jasypt.encryption.pbe.PBEStringEncryptor; +import org.jasypt.encryption.pbe.StandardPBEStringEncryptor; +import org.jasypt.salt.StringFixedSaltGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import com.google.common.collect.Lists; +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; /** * @author Stian Strandli @@ -66,7 +66,10 @@ .initialCapacity( 200 ) .maximumSize( 400 ) .build(); - + + private static final Map NAME_KEY_MAP = Lists.newArrayList( + SettingKey.values() ).stream().collect( Collectors.toMap( SettingKey::getName, e -> e ) ); + // ------------------------------------------------------------------------- // Dependencies // ------------------------------------------------------------------------- @@ -88,6 +91,9 @@ @Autowired private I18nManager i18nManager; + @Resource( name = "stringEncryptor" ) + private PBEStringEncryptor pbeStringEncryptor; + // ------------------------------------------------------------------------- // SystemSettingManager implementation // ------------------------------------------------------------------------- @@ -96,9 +102,14 @@ public void saveSystemSetting( String name, Serializable value ) { SETTING_CACHE.invalidate( name ); - + SystemSetting setting = systemSettingStore.getByName( name ); + if ( NAME_KEY_MAP.get( name ).getConfidential() ) + { + value = pbeStringEncryptor.encrypt( value.toString() ); + } + if ( setting == null ) { setting = new SystemSetting(); @@ -118,7 +129,7 @@ @Override public void saveSystemSetting( SettingKey setting, Serializable value ) - { + { saveSystemSetting( setting.getName(), value ); } @@ -130,7 +141,7 @@ if ( setting != null ) { SETTING_CACHE.invalidate( name ); - + systemSettingStore.delete( setting ); } } @@ -146,6 +157,13 @@ { SystemSetting setting = systemSettingStore.getByName( name ); + if ( NAME_KEY_MAP.get( name ).getConfidential() ) + { + + setting.setValue( pbeStringEncryptor.decrypt( setting.getValue().toString() ) ); + + } + return setting != null && setting.hasValue() ? setting.getValue() : null; } @@ -154,8 +172,9 @@ { try { - Optional value = SETTING_CACHE.get( setting.getName(), () -> getSystemSettingOptional( setting.getName(), setting.getDefaultValue() ) ); - + Optional value = SETTING_CACHE.get( setting.getName(), + () -> getSystemSettingOptional( setting.getName(), setting.getDefaultValue() ) ); + return value.orElse( null ); } catch ( ExecutionException ignored ) @@ -173,31 +192,49 @@ private Optional getSystemSettingOptional( String name, Serializable defaultValue ) { SystemSetting setting = systemSettingStore.getByName( name ); - - return setting != null && setting.hasValue() ? Optional.of( setting.getValue() ) : Optional.ofNullable( defaultValue ); + + if ( setting != null && setting.hasValue() ) + { + return NAME_KEY_MAP.get( name ).getConfidential() ? + Optional.of( pbeStringEncryptor.decrypt( setting.getValue().toString() ) ) : + Optional.of( setting.getValue() ); + } + else + { + return Optional.ofNullable( defaultValue ); + } + } @Override public List getAllSystemSettings() { - return systemSettingStore.getAll(); + + /* + * Remove confidential settings from this list! + */ + return systemSettingStore.getAll().stream() + .filter( systemSetting -> !NAME_KEY_MAP.containsKey( systemSetting.getName() ) || + !NAME_KEY_MAP.get( systemSetting.getName() ).getConfidential() ) + .collect( Collectors.toList() ); + } - + @Override public Map getSystemSettingsAsMap() { Map settingsMap = new HashMap<>(); - + Collection systemSettings = getAllSystemSettings(); for ( SystemSetting systemSetting : systemSettings ) { Serializable settingValue = systemSetting.getValue(); - + if ( settingValue == null ) { Optional setting = SettingKey.getByName( systemSetting.getName() ); - + if ( setting.isPresent() ) { settingValue = setting.get().getDefaultValue(); @@ -222,13 +259,13 @@ if ( settingValue == null ) { Optional setting = SettingKey.getByName( name ); - + if ( setting.isPresent() ) { settingValue = setting.get().getDefaultValue(); } } - + if ( settingValue != null ) { map.put( name, settingValue ); @@ -242,26 +279,26 @@ public Map getSystemSettings( Collection settings ) { Map map = new HashMap<>(); - + for ( SettingKey setting : settings ) { Serializable value = getSystemSetting( setting ); - + if ( value != null ) { map.put( setting.getName(), value ); } } - + return map; } - + @Override public void invalidateCache() { SETTING_CACHE.invalidateAll(); } - + // ------------------------------------------------------------------------- // Specific methods // ------------------------------------------------------------------------- @@ -272,24 +309,24 @@ Collections.sort( flags ); return flags; } - + @Override public List getFlagObjects() { Collections.sort( flags ); - + I18n i18n = i18nManager.getI18n(); - + List list = Lists.newArrayList(); - + for ( String flag : flags ) { String name = i18n.getString( flag ); String file = flag + ".png"; - + list.add( new StyleObject( name, flag, file ) ); } - + return list; } @@ -372,7 +409,8 @@ @Override public boolean isOpenIdConfigured() { - return getSystemSetting( SettingKey.OPENID_PROVIDER ) != null && getSystemSetting( SettingKey.OPENID_PROVIDER_LABEL ) != null; + return getSystemSetting( SettingKey.OPENID_PROVIDER ) != null && + getSystemSetting( SettingKey.OPENID_PROVIDER_LABEL ) != null; } @Override @@ -386,4 +424,11 @@ { return (Integer) getSystemSetting( SettingKey.CREDENTIALS_EXPIRES ); } + + @Override + public boolean isConfidential( String name ) + { + return NAME_KEY_MAP.containsKey( name ) && NAME_KEY_MAP.get( name ).getConfidential(); + } + } === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/ConfigurationPopulator.java' --- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/ConfigurationPopulator.java 2016-01-05 18:25:17 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/startup/ConfigurationPopulator.java 2016-01-06 18:19:09 +0000 @@ -54,7 +54,6 @@ public void execute() throws Exception { - checkSecurityConfiguration(); Configuration config = configurationService.getConfiguration(); === modified file 'dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml 2016-01-06 14:37:53 +0000 +++ dhis-2/dhis-services/dhis-service-core/src/main/resources/META-INF/dhis/beans.xml 2016-01-06 18:19:42 +0000 @@ -876,7 +876,6 @@ - === modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/synch/DefaultSynchronizationManager.java' --- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/synch/DefaultSynchronizationManager.java 2016-01-05 14:03:19 +0000 +++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/synch/DefaultSynchronizationManager.java 2016-01-06 18:19:09 +0000 @@ -102,9 +102,6 @@ @Autowired private RestTemplate restTemplate; - @Autowired - private DhisConfigurationProvider dhisConfigurationProvider; - // ------------------------------------------------------------------------- // SynchronizatonManager implementation // ------------------------------------------------------------------------- @@ -119,14 +116,14 @@ return new AvailabilityStatus( false, "Remote server is not configured" ); } - String url = dhisConfigurationProvider.getProperty( ConfigurationKey.REMOTE_INSTANCE_URL ) + PING_PATH; - - log.info( "Remote server ping URL: " + url + ", username: " + dhisConfigurationProvider.getProperty( - ConfigurationKey.REMOTE_INSTANCE_USERNAME ) ); - - HttpEntity request = getBasicAuthRequestEntity( dhisConfigurationProvider.getProperty( - ConfigurationKey.REMOTE_INSTANCE_USERNAME ), dhisConfigurationProvider.getProperty( - ConfigurationKey.REMOTE_INSTANCE_PASSWORD ) ); + String url = systemSettingManager.getSystemSetting( SettingKey.REMOTE_INSTANCE_URL ) + PING_PATH; + + log.info( "Remote server ping URL: " + url + ", username: " + systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_USERNAME ) ); + + HttpEntity request = getBasicAuthRequestEntity( (String) systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_USERNAME ), (String) systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_PASSWORD ) ); ResponseEntity response = null; HttpStatus sc = null; @@ -217,8 +214,8 @@ final Configuration config = configurationService.getConfiguration(); - String url = dhisConfigurationProvider.getProperty( ConfigurationKey.REMOTE_INSTANCE_URL ) + - "/api/dataValueSets"; + String url = systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_URL ) + "/api/dataValueSets"; log.info( "Remote server POST URL: " + url ); @@ -230,10 +227,12 @@ { request.getHeaders().setContentType( MediaType.APPLICATION_JSON ); request.getHeaders().add( HEADER_AUTHORIZATION, - CodecUtils.getBasicAuthString( dhisConfigurationProvider.getProperty( - ConfigurationKey.REMOTE_INSTANCE_USERNAME ), - dhisConfigurationProvider.getProperty( - ConfigurationKey.REMOTE_INSTANCE_PASSWORD ) ) ); + CodecUtils.getBasicAuthString( + (String) systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_USERNAME ), + (String) systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_PASSWORD ) ) ); + dataValueSetService .writeDataValueSetJson( lastSuccessTime, request.getBody(), new IdSchemes() ); } @@ -316,16 +315,17 @@ */ private boolean isRemoteServerConfigured( Configuration config ) { - if ( trimToNull( dhisConfigurationProvider.getProperty( ConfigurationKey.REMOTE_INSTANCE_URL ) ) == + if ( trimToNull( (String) systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_URL ) ) == null ) { log.info( "Remote server URL not set" ); return false; } - if ( trimToNull( dhisConfigurationProvider.getProperty( ConfigurationKey.REMOTE_INSTANCE_USERNAME ) ) == + if ( trimToNull( (String) systemSettingManager.getSystemSetting( SettingKey.REMOTE_INSTANCE_USERNAME ) ) == null || - trimToNull( dhisConfigurationProvider.getProperty( ConfigurationKey.REMOTE_INSTANCE_URL ) ) == + trimToNull( (String) systemSettingManager.getSystemSetting( SettingKey.REMOTE_INSTANCE_URL ) ) == null ) { log.info( "Remote server username or password not set" ); @@ -345,4 +345,4 @@ headers.set( HEADER_AUTHORIZATION, CodecUtils.getBasicAuthString( username, password ) ); return new HttpEntity<>( headers ); } -} +} \ No newline at end of file === modified file 'dhis-2/dhis-support/dhis-support-external/src/main/java/org/hisp/dhis/external/conf/ConfigurationKey.java' --- dhis-2/dhis-support/dhis-support-external/src/main/java/org/hisp/dhis/external/conf/ConfigurationKey.java 2016-01-05 18:25:17 +0000 +++ dhis-2/dhis-support/dhis-support-external/src/main/java/org/hisp/dhis/external/conf/ConfigurationKey.java 2016-01-06 18:19:09 +0000 @@ -51,17 +51,7 @@ FILE_STORE_CONTAINER( "filestore.container", "files" ), FILE_STORE_LOCATION( "filestore.location" ), FILE_STORE_IDENTITY( "filestore.identity", "" ), - FILE_STORE_SECRET( "filestore.secret", "" ), - SMTP_HOSTNAME( "smtp.hostname", "" ), - SMTP_PORT( "smtp.port", "587" ), - SMTP_TLS( "smtp.tls", "true" ), - SMTP_USERNAME( "smtp.username", "" ), - SMTP_PASSWORD( "smtp.password", "" ), - SMTP_SENDER( "smtp.sender", "" ), - REMOTE_INSTANCE_URL( "remote_instance.url", "" ), - REMOTE_INSTANCE_USERNAME( "remote_instance.username", "" ), - REMOTE_INSTANCE_PASSWORD( "remote_instance.password", "" ); - + FILE_STORE_SECRET( "filestore.secret", "" ); private final String key; === modified file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/META-INF/dhis/beans.xml 2015-12-23 13:59:37 +0000 +++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/META-INF/dhis/beans.xml 2016-01-06 18:19:09 +0000 @@ -93,6 +93,11 @@ + + + + + @@ -118,7 +123,7 @@ - + === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/ConfigurationController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/ConfigurationController.java 2016-01-05 19:03:10 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/ConfigurationController.java 2016-01-06 18:19:42 +0000 @@ -46,6 +46,8 @@ import org.hisp.dhis.organisationunit.OrganisationUnitLevel; import org.hisp.dhis.period.PeriodService; import org.hisp.dhis.period.PeriodType; +import org.hisp.dhis.setting.SettingKey; +import org.hisp.dhis.setting.SystemSettingManager; import org.hisp.dhis.user.UserAuthorityGroup; import org.hisp.dhis.user.UserGroup; import org.hisp.dhis.webapi.controller.exception.NotFoundException; @@ -71,7 +73,7 @@ @Autowired private DhisConfigurationProvider config; - + @Autowired private IdentifiableObjectManager identifiableObjectManager; @@ -81,6 +83,9 @@ @Autowired private RenderService renderService; + @Autowired + private SystemSettingManager systemSettingManager; + // ------------------------------------------------------------------------- // Resources // ------------------------------------------------------------------------- @@ -90,7 +95,7 @@ { return setModel( model, configurationService.getConfiguration() ); } - + @PreAuthorize( "hasRole('ALL') or hasRole('F_SYSTEM_SETTING')" ) @ResponseStatus( value = HttpStatus.OK ) @RequestMapping( value = "/systemId", method = RequestMethod.GET ) @@ -238,7 +243,7 @@ } Configuration config = configurationService.getConfiguration(); - + periodType = periodService.reloadPeriodType( periodType ); config.setInfrastructuralPeriodType( periodType ); @@ -300,14 +305,15 @@ @RequestMapping( value = "/remoteServerUrl", method = RequestMethod.GET ) public String getRemoteServerUrl( Model model, HttpServletRequest request ) { - return setModel( model, config.getProperty( ConfigurationKey.REMOTE_INSTANCE_URL ) ); + return setModel( model, systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_URL ) ); } - @RequestMapping( value = "/remoteServerUsername", method = RequestMethod.GET ) public String getRemoteServerUsername( Model model, HttpServletRequest request ) { - return setModel( model, config.getProperty( ConfigurationKey.REMOTE_INSTANCE_USERNAME) ); + return setModel( model, systemSettingManager.getSystemSetting( + SettingKey.REMOTE_INSTANCE_USERNAME ) ); } @RequestMapping( value = "/corsWhitelist", method = RequestMethod.GET, produces = "application/json" ) @@ -315,8 +321,8 @@ { return setModel( model, configurationService.getConfiguration().getCorsWhitelist() ); } - - @SuppressWarnings("unchecked") + + @SuppressWarnings( "unchecked" ) @PreAuthorize( "hasRole('ALL') or hasRole('F_SYSTEM_SETTING')" ) @ResponseStatus( value = HttpStatus.OK ) @RequestMapping( value = "/corsWhitelist", method = RequestMethod.POST, consumes = "application/json" ) @@ -324,14 +330,14 @@ throws IOException { Set corsWhitelist = renderService.fromJson( input, Set.class ); - + Configuration config = configurationService.getConfiguration(); - + config.setCorsWhitelist( corsWhitelist ); - + configurationService.setConfiguration( config ); } - + @RequestMapping( value = "/systemBaseUrl", method = RequestMethod.GET ) public String getSystemBaseUrl( Model model, HttpServletRequest request ) { === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SystemSettingController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SystemSettingController.java 2016-01-06 17:08:06 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/webapi/controller/SystemSettingController.java 2016-01-06 18:19:42 +0000 @@ -32,6 +32,7 @@ import java.io.Serializable; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -73,13 +74,15 @@ @Autowired private WebMessageService webMessageService; - @RequestMapping( value = "/{key}", method = RequestMethod.POST, consumes = { ContextUtils.CONTENT_TYPE_TEXT, ContextUtils.CONTENT_TYPE_HTML } ) + @RequestMapping( value = "/{key}", method = RequestMethod.POST, consumes = { ContextUtils.CONTENT_TYPE_TEXT, + ContextUtils.CONTENT_TYPE_HTML } ) @PreAuthorize( "hasRole('ALL') or hasRole('F_SYSTEM_SETTING')" ) public void setSystemSetting( @PathVariable( value = "key" ) String key, @RequestParam( value = "value", required = false ) String value, @RequestBody( required = false ) String valuePayload, - HttpServletResponse response, HttpServletRequest request ) throws WebMessageException + HttpServletResponse response, HttpServletRequest request ) + throws WebMessageException { if ( key == null ) { @@ -88,21 +91,25 @@ if ( value == null && valuePayload == null ) { - throw new WebMessageException( WebMessageUtils.conflict( "Value must be specified as query param or as payload" ) ); + throw new WebMessageException( + WebMessageUtils.conflict( "Value must be specified as query param or as payload" ) ); } value = ObjectUtils.firstNonNull( value, valuePayload ); - + Serializable valueObject = SettingKey.getAsRealClass( key, value ); - + systemSettingManager.saveSystemSetting( key, valueObject ); - webMessageService.send( WebMessageUtils.ok( "System setting " + key + " set as value '" + valueObject + "'." ), response, request ); + webMessageService + .send( WebMessageUtils.ok( "System setting " + key + " set as value '" + valueObject + "'." ), response, + request ); } @RequestMapping( method = RequestMethod.POST, consumes = { ContextUtils.CONTENT_TYPE_JSON } ) @PreAuthorize( "hasRole('ALL') or hasRole('F_SYSTEM_SETTING')" ) - public void setSystemSetting( @RequestBody Map settings, HttpServletResponse response, HttpServletRequest request ) + public void setSystemSetting( @RequestBody Map settings, HttpServletResponse response, + HttpServletRequest request ) { for ( String key : settings.keySet() ) { @@ -113,16 +120,30 @@ } @RequestMapping( value = "/{key}", method = RequestMethod.GET, produces = ContextUtils.CONTENT_TYPE_TEXT ) - public @ResponseBody String getSystemSettingAsText( @PathVariable( "key" ) String key ) + public + @ResponseBody + String getSystemSettingAsText( @PathVariable( "key" ) String key ) { - Serializable setting = systemSettingManager.getSystemSetting( key ); + if ( systemSettingManager.isConfidential( key ) ) + { + return ""; + } + else + { + Serializable setting = systemSettingManager.getSystemSetting( key ); - return setting != null ? String.valueOf( setting ) : null; + return setting != null ? String.valueOf( setting ) : null; + } } - @RequestMapping( method = RequestMethod.GET, produces = { ContextUtils.CONTENT_TYPE_JSON, ContextUtils.CONTENT_TYPE_HTML } ) - public void getSystemSettingsJson( @RequestParam( value = "key", required = false ) Set key, HttpServletResponse response ) throws IOException + @RequestMapping( method = RequestMethod.GET, produces = { ContextUtils.CONTENT_TYPE_JSON, + ContextUtils.CONTENT_TYPE_HTML } ) + public void getSystemSettingsJson( @RequestParam( value = "key", required = false ) Set key, + HttpServletResponse response ) + throws IOException { + if ( key != null ) + key.removeIf( systemSettingManager::isConfidential ); response.setContentType( MediaType.APPLICATION_JSON_VALUE ); renderService.toJson( response.getOutputStream(), getSystemSettings( key ) ); } @@ -131,7 +152,8 @@ public void getSystemSettingsJsonP( @RequestParam( value = "key", required = false ) Set key, @RequestParam( defaultValue = "callback" ) String callback, - HttpServletResponse response ) throws IOException + HttpServletResponse response ) + throws IOException { response.setContentType( "application/javascript" ); renderService.toJsonP( response.getOutputStream(), getSystemSettings( key ), callback );