Skip to content
Snippets Groups Projects
Commit ed07f078 authored by Lukasz Lopatowski's avatar Lukasz Lopatowski
Browse files

Pull request #777: NMAAS-984 read initial portal configuration from properties

Merge in NMAAS/nmaas from NMAAS-984-read-initial-portal-configuration-from-properties to develop

* commit '57aa0f2f':
  NMAAS-984: Initializing only if configuration doesn't exist
  NMAAS-984 changes to avoid failing tests
  NMAAS-984 delegate initial configuration delegation to initializing bean
parents ff80cd27 57aa0f2f
No related branches found
No related tags found
No related merge requests found
Showing with 113 additions and 31 deletions
......@@ -145,3 +145,14 @@ kubernetes.deployment.smtpServerUsername=${SMTP_LOGIN}
kubernetes.deployment.smtpServerPassword=${SMTP_PASSWORD}
kubernetes.deployment.defaultStorageClass=${K8S_DEPLOYMENT_DEFAULT_STORAGE_CLASS}
kubernetes.deployment.forceDedicatedWorkers=false
# -------------------- #
# Portal configuration #
# -------------------- #
portal.config.maintenance=${PORTAL_MAINTENANCE_FLAG}
portal.config.ssoLoginAllowed=${PORTAL_SSO_ALLOWED_FLAG}
portal.config.defaultLanguage=${PORTAL_DEFAULT_LANG}
portal.config.testInstance=${PORTAL_TEST_INSTANCE_FLAG}
portal.config.sendAppInstanceFailureEmails=${PORTAL_SEND_FAILURE_NOTIF_FLAG}
# string - list of emails with ':' as a separator, e.g. admin1@nmaas.eu;admin2@nmaas.eu
portal.config.appInstanceFailureEmailList=${ADMIN_EMAIL}
......@@ -142,4 +142,15 @@ kubernetes.deployment.smtpServerHostname=test-postfix
kubernetes.deployment.smtpServerPort=587
kubernetes.deployment.smtpServerUsername=
kubernetes.deployment.smtpServerPassword=
kubernetes.deployment.defaultStorageClass=storageClass
\ No newline at end of file
kubernetes.deployment.defaultStorageClass=storageClass
# ------------------------ #
# Portal configuration #
# ------------------------ #
portal.config.maintenance=false
portal.config.ssoLoginAllowed=false
portal.config.defaultLanguage=en
portal.config.testInstance=false
portal.config.sendAppInstanceFailureEmails=false
# string - list of emails with ':' as a separator, e.g. admin1@nmaas.eu;admin2@nmaas.eu
portal.config.appInstanceFailureEmailList=admin@nmaas.eu
\ No newline at end of file
package net.geant.nmaas.portal;
import lombok.extern.log4j.Log4j2;
import net.geant.nmaas.monitor.MonitorManager;
import net.geant.nmaas.monitor.ServiceType;
import net.geant.nmaas.monitor.model.MonitorEntryView;
import net.geant.nmaas.monitor.scheduling.ScheduleManager;
import net.geant.nmaas.portal.api.configuration.ConfigurationView;
import net.geant.nmaas.portal.api.exception.ProcessingException;
import net.geant.nmaas.portal.exceptions.OnlyOneConfigurationSupportedException;
import net.geant.nmaas.portal.persistent.entity.Content;
import net.geant.nmaas.portal.persistent.entity.Domain;
import net.geant.nmaas.portal.persistent.entity.Role;
......@@ -31,6 +34,7 @@ import java.util.Optional;
@Configuration
@ComponentScan(basePackages={"net.geant.nmaas.portal.service"})
@Log4j2
public class PortalConfig {
private PasswordEncoder passwordEncoder;
......@@ -50,15 +54,15 @@ public class PortalConfig {
@Autowired
private DomainService domains;
@Autowired
private ConfigurationManager configurationManager;
@Value("${admin.password}")
String adminPassword;
@Value("${admin.email}")
String adminEmail;
@Value("${portal.config.defaultLanguage}")
private String defaultLanguage = "en";
@Override
@Transactional
public void afterPropertiesSet() {
......@@ -75,7 +79,7 @@ public class PortalConfig {
if(globalDomain.isPresent()) {
User user = new User(username, true, passwordEncoder.encode(password), globalDomain.get(), role, true, true);
user.setEmail(email);
user.setSelectedLanguage(configurationManager.getConfiguration().getDefaultLanguage());
user.setSelectedLanguage(this.defaultLanguage);
userRepository.save(user);
}
}
......@@ -153,4 +157,43 @@ public class PortalConfig {
}
};
}
@Bean
public InitializingBean saveDefaultPortalConfiguration() {
return new InitializingBean() {
@Value("${portal.config.maintenance}")
private boolean maintenance = false;
@Value("${portal.config.ssoLoginAllowed}")
private boolean ssoLoginAllowed = false;
@Value("${portal.config.defaultLanguage}")
private String defaultLanguage = "en";
@Value("${portal.config.testInstance}")
private boolean testInstance = false;
@Value("${portal.config.sendAppInstanceFailureEmails}")
private boolean sendAppInstanceFailureEmails = false;
@Value("${portal.config.appInstanceFailureEmailList}")
private String appInstanceFailureEmailList;
@Autowired
private ConfigurationManager configurationManager;
@Override
public void afterPropertiesSet() throws Exception {
ConfigurationView configurationView = ConfigurationView.builder()
.maintenance(this.maintenance)
.ssoLoginAllowed(this.ssoLoginAllowed)
.defaultLanguage(this.defaultLanguage)
.testInstance(this.testInstance)
.sendAppInstanceFailureEmails(this.sendAppInstanceFailureEmails)
.appInstanceFailureEmailList(Arrays.asList(this.appInstanceFailureEmailList.split(";")))
.build();
try {
this.configurationManager.setConfiguration(configurationView);
} catch (OnlyOneConfigurationSupportedException e) {
log.debug("Portal configuration already exists. Skipping initialization.");
}
}
};
}
}
......@@ -29,8 +29,8 @@ public class ConfigurationController {
@PostMapping
@PreAuthorize("hasRole('ROLE_SYSTEM_ADMIN')")
@ResponseStatus(code = HttpStatus.CREATED)
public Long addConfiguration(@RequestBody @Valid ConfigurationView configuration) {
return this.configurationManager.addConfiguration(configuration);
public Long setConfiguration(@RequestBody @Valid ConfigurationView configuration) {
return this.configurationManager.setConfiguration(configuration);
}
@PutMapping(value="/{id}")
......
package net.geant.nmaas.portal.api.configuration;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.*;
import javax.validation.constraints.Email;
import java.util.ArrayList;
......@@ -13,20 +10,22 @@ import java.util.List;
@NoArgsConstructor
@Getter
@Setter
@Builder
public class ConfigurationView {
private Long id;
@Builder.Default
private boolean maintenance = false;
@Builder.Default
private boolean ssoLoginAllowed = false;
private String defaultLanguage;
@Builder.Default
private boolean testInstance = false;
@Builder.Default
private boolean sendAppInstanceFailureEmails = false;
@Builder.Default
private List<@Email String> appInstanceFailureEmailList = new ArrayList<>();
public ConfigurationView(boolean maintenance, boolean ssoLoginAllowed, String defaultLanguage, boolean testInstance, boolean sendAppInstanceFailureEmails, List<String> appInstanceFailureEmailList) {
......
......@@ -4,7 +4,7 @@ import net.geant.nmaas.portal.api.configuration.ConfigurationView;
public interface ConfigurationManager {
Long addConfiguration(ConfigurationView configuration);
Long setConfiguration(ConfigurationView configuration);
ConfigurationView getConfiguration();
void updateConfiguration(Long id, ConfigurationView updatedConfiguration);
}
......@@ -13,7 +13,6 @@ import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.ApplicationScope;
import java.util.ArrayList;
import java.util.Optional;
@ApplicationScope
......@@ -21,11 +20,11 @@ import java.util.Optional;
@Component
public class ConfigurationManagerImpl implements ConfigurationManager {
private ConfigurationRepository repository;
private final ConfigurationRepository repository;
private ModelMapper modelMapper;
private final ModelMapper modelMapper;
private InternationalizationSimpleRepository internationalizationRepository;
private final InternationalizationSimpleRepository internationalizationRepository;
@Override
public ConfigurationView getConfiguration(){
......@@ -33,7 +32,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
}
@Override
public Long addConfiguration(ConfigurationView configurationView) {
public Long setConfiguration(ConfigurationView configurationView) {
if(repository.count() > 0){
throw new OnlyOneConfigurationSupportedException("Configuration already exists. It can be either removed or updated");
}
......@@ -57,10 +56,7 @@ public class ConfigurationManagerImpl implements ConfigurationManager {
}
private Configuration loadSingleConfiguration(){
if(repository.count() == 0){
addConfiguration(new ConfigurationView(false, true, "en", false, true, new ArrayList<>()));
}
else if(repository.count() > 1){
if(repository.count() > 1 || repository.count() == 0){
throw new IllegalStateException("Found "+repository.count()+" configuration instead of one");
}
return repository.findAll().get(0);
......
......@@ -151,4 +151,15 @@ kubernetes.deployment.smtpServerHostname=nmaas-postfix
kubernetes.deployment.smtpServerPort=587
kubernetes.deployment.smtpServerUsername=
kubernetes.deployment.smtpServerPassword=
kubernetes.deployment.defaultStorageClass=storageClass
\ No newline at end of file
kubernetes.deployment.defaultStorageClass=storageClass
# ------------------------ #
# Portal configuration #
# ------------------------ #
portal.config.maintenance=false
portal.config.ssoLoginAllowed=false
portal.config.defaultLanguage=en
portal.config.testInstance=false
portal.config.sendAppInstanceFailureEmails=false
# string - list of emails with ':' as a separator, e.g. admin1@nmaas.eu;admin2@nmaas.eu
portal.config.appInstanceFailureEmailList=admin@nmaas.eu
......@@ -59,18 +59,18 @@ public class ConfigurationManagerTest {
}
@Test
public void shouldAddConfiguration(){
public void shouldSetConfiguration(){
when(repository.count()).thenReturn(0L);
Long id = configurationManager.addConfiguration(modelMapper.map(config, ConfigurationView.class));
Long id = configurationManager.setConfiguration(modelMapper.map(config, ConfigurationView.class));
assertEquals(config.getId(), id);
verify(repository, times(1)).save(any());
}
@Test
public void shouldNotAddMultipleConfig(){
public void shouldNotSetConfigIfAlreadyExists(){
assertThrows(OnlyOneConfigurationSupportedException.class, () -> {
when(repository.count()).thenReturn(1L);
configurationManager.addConfiguration(modelMapper.map(config, ConfigurationView.class));
configurationManager.setConfiguration(modelMapper.map(config, ConfigurationView.class));
});
}
......
......@@ -139,4 +139,15 @@ kubernetes.deployment.smtpServerHostname=nmaas-postfix
kubernetes.deployment.smtpServerPort=587
kubernetes.deployment.smtpServerUsername=
kubernetes.deployment.smtpServerPassword=
kubernetes.deployment.defaultStorageClass=storageClass
\ No newline at end of file
kubernetes.deployment.defaultStorageClass=storageClass
# ------------------------ #
# Portal configuration #
# ------------------------ #
portal.config.maintenance=false
portal.config.ssoLoginAllowed=false
portal.config.defaultLanguage=en
portal.config.testInstance=false
portal.config.sendAppInstanceFailureEmails=false
# string - list of emails with ':' as a separator, e.g. admin1@nmaas.eu;admin2@nmaas.eu
portal.config.appInstanceFailureEmailList=admin@nmaas.eu
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment