naprawa hasła
Deploy Polska Lokalnie / deploy (push) Successful in 10s

This commit is contained in:
2026-09-04 00:40:22 +02:00
parent 282b5e424f
commit ee83ac43c4
4 changed files with 84 additions and 11 deletions
@@ -1,6 +1,8 @@
package pl.polskalokalnie.config;
import java.math.BigDecimal;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.security.crypto.password.PasswordEncoder;
@@ -26,6 +28,8 @@ import pl.polskalokalnie.user.UserRepository;
@Component
public class DataSeeder implements CommandLineRunner {
private static final Logger log = LoggerFactory.getLogger(DataSeeder.class);
private final UserRepository userRepository;
private final ListingRepository listingRepository;
private final BannerRepository bannerRepository;
@@ -36,6 +40,7 @@ public class DataSeeder implements CommandLineRunner {
private final String adminEmail;
private final String adminPassword;
private final String adminName;
private final boolean adminResetPassword;
public DataSeeder(
UserRepository userRepository,
@@ -47,7 +52,8 @@ public class DataSeeder implements CommandLineRunner {
NickService nickService,
@Value("${app.admin.email:admin@softspm.com}") String adminEmail,
@Value("${app.admin.password:Admin123!}") String adminPassword,
@Value("${app.admin.name:Administrator Polska Lokalnie}") String adminName
@Value("${app.admin.name:Administrator Polska Lokalnie}") String adminName,
@Value("${app.admin.reset-password:false}") boolean adminResetPassword
) {
this.userRepository = userRepository;
this.listingRepository = listingRepository;
@@ -59,6 +65,7 @@ public class DataSeeder implements CommandLineRunner {
this.adminEmail = adminEmail;
this.adminPassword = adminPassword;
this.adminName = adminName;
this.adminResetPassword = adminResetPassword;
}
@Override
@@ -135,19 +142,45 @@ public class DataSeeder implements CommandLineRunner {
return banner;
}
/**
* Konto administratora z konfiguracji (APP_ADMIN_EMAIL / APP_ADMIN_PASSWORD).
*
* Gdy konta o tym adresie jeszcze nie ma - zakladamy je. Gdy juz istnieje, haslo z konfiguracji
* jest ignorowane, bo inaczej kazdy restart cofalby haslo zmienione w ustawieniach konta.
* Swiadome nadpisanie wlacza APP_ADMIN_RESET_PASSWORD=true - to jedyna droga odzyskania dostepu,
* gdy haslo administratora zostalo zgubione.
*/
private void seedAdmin() {
if (userRepository.existsByEmailIgnoreCase(adminEmail)) {
String email = adminEmail.trim().toLowerCase();
AppUser existing = userRepository.findByEmailIgnoreCase(email).orElse(null);
if (existing == null) {
AppUser admin = new AppUser();
admin.setEmail(email);
admin.setFullName(adminName);
admin.setNick(nickService.generateUnique(email.split("@")[0]));
admin.setPasswordHash(passwordEncoder.encode(adminPassword));
admin.setRole(Role.ADMIN);
admin.setProvider(AuthProvider.LOCAL);
admin.setVerified(true);
userRepository.save(admin);
log.info("Utworzono konto administratora {}", email);
return;
}
AppUser admin = new AppUser();
admin.setEmail(adminEmail.toLowerCase());
admin.setFullName(adminName);
admin.setNick(nickService.generateUnique(adminEmail.split("@")[0]));
admin.setPasswordHash(passwordEncoder.encode(adminPassword));
admin.setRole(Role.ADMIN);
admin.setProvider(AuthProvider.LOCAL);
admin.setVerified(true);
userRepository.save(admin);
if (!adminResetPassword) {
return;
}
// Awaryjne przywrocenie dostepu: haslo, rola i aktywacja wracaja do stanu z konfiguracji.
// Blokada konta tez znika - inaczej reset hasla nie przywrocilby logowania.
existing.setPasswordHash(passwordEncoder.encode(adminPassword));
existing.setRole(Role.ADMIN);
existing.setVerified(true);
existing.setBlocked(false);
userRepository.save(existing);
log.warn("APP_ADMIN_RESET_PASSWORD=true - ustawiono haslo z konfiguracji dla konta {}."
+ " Wylacz te zmienna po odzyskaniu dostepu.", email);
}
private void seedDemoListings() {