1
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
package com.magistr.app.config;
|
||||
|
||||
import com.magistr.app.config.tenant.TenantConfig;
|
||||
import com.magistr.app.config.tenant.TenantContext;
|
||||
import com.magistr.app.config.tenant.TenantRoutingDataSource;
|
||||
import com.magistr.app.model.Role;
|
||||
import com.magistr.app.model.User;
|
||||
import com.magistr.app.repository.UserRepository;
|
||||
@@ -18,14 +21,32 @@ public class DataInitializer implements CommandLineRunner {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final BCryptPasswordEncoder passwordEncoder;
|
||||
private final TenantRoutingDataSource routingDataSource;
|
||||
|
||||
public DataInitializer(UserRepository userRepository, BCryptPasswordEncoder passwordEncoder) {
|
||||
public DataInitializer(UserRepository userRepository,
|
||||
BCryptPasswordEncoder passwordEncoder,
|
||||
TenantRoutingDataSource routingDataSource) {
|
||||
this.userRepository = userRepository;
|
||||
this.passwordEncoder = passwordEncoder;
|
||||
this.routingDataSource = routingDataSource;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(String... args) {
|
||||
// Создаём admin в каждом тенанте
|
||||
for (TenantConfig tenant : routingDataSource.getTenantConfigs().values()) {
|
||||
try {
|
||||
TenantContext.setCurrentTenant(tenant.getDomain());
|
||||
initAdmin(tenant.getDomain());
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to init admin for tenant '{}': {}", tenant.getDomain(), e.getMessage());
|
||||
} finally {
|
||||
TenantContext.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initAdmin(String tenantDomain) {
|
||||
Optional<User> existing = userRepository.findByUsername("admin");
|
||||
|
||||
if (existing.isEmpty()) {
|
||||
@@ -34,17 +55,9 @@ public class DataInitializer implements CommandLineRunner {
|
||||
admin.setPassword(passwordEncoder.encode("admin"));
|
||||
admin.setRole(Role.ADMIN);
|
||||
userRepository.save(admin);
|
||||
log.info("Created default admin user");
|
||||
log.info("[{}] Created default admin user (admin/admin)", tenantDomain);
|
||||
} else {
|
||||
User admin = existing.get();
|
||||
if (!passwordEncoder.matches("admin", admin.getPassword())) {
|
||||
admin.setPassword(passwordEncoder.encode("admin"));
|
||||
admin.setRole(Role.ADMIN);
|
||||
userRepository.save(admin);
|
||||
log.info("Reset admin password (hash was invalid)");
|
||||
} else {
|
||||
log.info("Admin user already exists with correct password");
|
||||
}
|
||||
log.info("[{}] Admin user already exists", tenantDomain);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user