1
This commit is contained in:
@@ -1,5 +1,8 @@
|
|||||||
package com.magistr.app.config;
|
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.Role;
|
||||||
import com.magistr.app.model.User;
|
import com.magistr.app.model.User;
|
||||||
import com.magistr.app.repository.UserRepository;
|
import com.magistr.app.repository.UserRepository;
|
||||||
@@ -18,14 +21,32 @@ public class DataInitializer implements CommandLineRunner {
|
|||||||
|
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final BCryptPasswordEncoder passwordEncoder;
|
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.userRepository = userRepository;
|
||||||
this.passwordEncoder = passwordEncoder;
|
this.passwordEncoder = passwordEncoder;
|
||||||
|
this.routingDataSource = routingDataSource;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(String... args) {
|
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");
|
Optional<User> existing = userRepository.findByUsername("admin");
|
||||||
|
|
||||||
if (existing.isEmpty()) {
|
if (existing.isEmpty()) {
|
||||||
@@ -34,17 +55,9 @@ public class DataInitializer implements CommandLineRunner {
|
|||||||
admin.setPassword(passwordEncoder.encode("admin"));
|
admin.setPassword(passwordEncoder.encode("admin"));
|
||||||
admin.setRole(Role.ADMIN);
|
admin.setRole(Role.ADMIN);
|
||||||
userRepository.save(admin);
|
userRepository.save(admin);
|
||||||
log.info("Created default admin user");
|
log.info("[{}] Created default admin user (admin/admin)", tenantDomain);
|
||||||
} else {
|
} else {
|
||||||
User admin = existing.get();
|
log.info("[{}] Admin user already exists", tenantDomain);
|
||||||
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");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user