package ch.rasc.sec; import java.time.LocalDateTime; import java.util.Collections; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import ch.rasc.sec.entity.Role; import ch.rasc.sec.entity.User; import ch.rasc.sec.repository.RoleRepository; import ch.rasc.sec.repository.UserRepository; @Component public class InitDatabase implements ApplicationListener<ContextRefreshedEvent> { private final PasswordEncoder passwordEncoder; private final UserRepository userRepository; private final RoleRepository roleRepository; public InitDatabase(PasswordEncoder passwordEncoder, UserRepository userRepository, RoleRepository roleRepository) { this.passwordEncoder = passwordEncoder; this.userRepository = userRepository; this.roleRepository = roleRepository; } @Override @Transactional public void onApplicationEvent(ContextRefreshedEvent event) { Role adminRole = null; Role userRole = null; if (this.roleRepository.count() == 0) { adminRole = new Role(); adminRole.setName("ADMIN"); this.roleRepository.save(adminRole); userRole = new Role(); userRole.setName("USER"); this.roleRepository.save(userRole); } else { adminRole = this.roleRepository.findByName("ADMIN"); userRole = this.roleRepository.findByName("USER"); } if (this.userRepository.count() == 0) { // admin user User adminUser = new User(); adminUser.setUserName("admin"); adminUser.setEmail("test@test.ch"); adminUser.setFirstName("admin"); adminUser.setName("admin"); adminUser.setLocale("en"); adminUser.setPasswordHash(this.passwordEncoder.encode("admin")); adminUser.setEnabled(true); adminUser.setExpirationDate(LocalDateTime.now().plusYears(1)); adminUser.setSecret("IB6EFEQKE7U2TQIB"); adminUser.setRoles(Collections.singleton(adminRole)); this.userRepository.save(adminUser); // normal user User normalUser = new User(); normalUser.setUserName("user"); normalUser.setEmail("user@test.ch"); normalUser.setFirstName("user"); normalUser.setName("user"); normalUser.setLocale("de"); normalUser.setExpirationDate(LocalDateTime.now().plusYears(1)); normalUser.setSecret("BPPGGZTFHRWDUA67"); normalUser.setPasswordHash(this.passwordEncoder.encode("user")); normalUser.setEnabled(true); normalUser.setRoles(Collections.singleton(userRole)); this.userRepository.save(normalUser); // lazy user, user without authenticator User lazyUser = new User(); lazyUser.setUserName("lazy"); lazyUser.setEmail("lazy@test.ch"); lazyUser.setFirstName("lazy"); lazyUser.setName("lazy"); lazyUser.setLocale("en"); lazyUser.setExpirationDate(LocalDateTime.now().plusYears(1)); lazyUser.setSecret(null); lazyUser.setPasswordHash(this.passwordEncoder.encode("lazy")); lazyUser.setEnabled(true); lazyUser.setRoles(Collections.singleton(userRole)); this.userRepository.save(lazyUser); } } }