chore(iam): enhance dev data initialization with test metering points and communities
This commit is contained in:
parent
765cbb0ec7
commit
a8686718db
@ -1,5 +1,10 @@
|
|||||||
package at.mueller.eeg.backend.iam.config;
|
package at.mueller.eeg.backend.iam.config;
|
||||||
|
|
||||||
|
import at.mueller.eeg.backend.community.domain.*;
|
||||||
|
import at.mueller.eeg.backend.community.domain.state.MakoState;
|
||||||
|
import at.mueller.eeg.backend.community.repository.EnergyCommunityRepository;
|
||||||
|
import at.mueller.eeg.backend.community.repository.MembershipRepository;
|
||||||
|
import at.mueller.eeg.backend.community.repository.MeteringPointRepository;
|
||||||
import at.mueller.eeg.backend.iam.domain.ParticipantType;
|
import at.mueller.eeg.backend.iam.domain.ParticipantType;
|
||||||
import at.mueller.eeg.backend.iam.domain.RegistrationStatus;
|
import at.mueller.eeg.backend.iam.domain.RegistrationStatus;
|
||||||
import at.mueller.eeg.backend.iam.domain.User;
|
import at.mueller.eeg.backend.iam.domain.User;
|
||||||
@ -12,7 +17,7 @@ import org.springframework.context.annotation.Profile;
|
|||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.security.SecureRandom;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@ -23,40 +28,60 @@ public class AdminDataInitializer implements CommandLineRunner {
|
|||||||
|
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
private final PasswordEncoder passwordEncoder;
|
private final PasswordEncoder passwordEncoder;
|
||||||
|
private final MeteringPointRepository meteringPointRepository;
|
||||||
|
private final EnergyCommunityRepository energyCommunityRepository;
|
||||||
|
private final MembershipRepository membershipRepository;
|
||||||
|
|
||||||
private static final String ADMIN_EMAIL = "admin@eeg-portal.at";
|
private static final String ADMIN_EMAIL = "admin@eeg-portal.at";
|
||||||
|
private static final String ADMIN_PASSWORD = "admin123!";
|
||||||
private static final String ADMIN_FIRST_NAME = "Admin";
|
private static final String ADMIN_FIRST_NAME = "Admin";
|
||||||
private static final String ADMIN_LAST_NAME = "Administrator";
|
private static final String ADMIN_LAST_NAME = "Administrator";
|
||||||
|
|
||||||
|
private static final String TEST_EMAIL = "test@example.com";
|
||||||
|
private static final String TEST_PASSWORD = "Test1234!";
|
||||||
|
private static final String TEST_AT_NUMBER = "AT0010000000000000000000001234567";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(String... args) {
|
public void run(String... args) {
|
||||||
userRepository.findByEmail(ADMIN_EMAIL).ifPresentOrElse(
|
userRepository.findByEmail(ADMIN_EMAIL).ifPresentOrElse(
|
||||||
user -> log.info("Admin-User {} existiert bereits.", ADMIN_EMAIL),
|
user -> log.info("Admin-User {} existiert bereits.", ADMIN_EMAIL),
|
||||||
() -> {
|
() -> {
|
||||||
String generatedPassword = generateRandomPassword();
|
createAdminUser();
|
||||||
createAdminUser(generatedPassword);
|
User testUser = createTestUser();
|
||||||
createTestUser();
|
MeteringPoint meteringPoint = createMeteringPoint(testUser);
|
||||||
|
EnergyCommunity community = createBegCommunity();
|
||||||
|
createMembership(meteringPoint, community);
|
||||||
System.out.println("""
|
System.out.println("""
|
||||||
|
|
||||||
========================================================================
|
========================================================================
|
||||||
INITIALER ADMIN-BENUTZER WURDE ERSTELLT
|
DEV-DATEN WURDEN ERSTELLT
|
||||||
========================================================================
|
========================================================================
|
||||||
|
ADMIN:
|
||||||
E-Mail: admin@eeg-portal.at
|
E-Mail: admin@eeg-portal.at
|
||||||
Passwort: %s
|
Passwort: admin123!
|
||||||
|
|
||||||
TEST-USER:
|
TEST-USER:
|
||||||
E-Mail: test@example.com
|
E-Mail: test@example.com
|
||||||
Passwort: Test1234!
|
Passwort: Test1234!
|
||||||
|
|
||||||
|
ZÄHLPUNKT:
|
||||||
|
AT-Nummer: %s
|
||||||
|
Typ: CONSUMER
|
||||||
|
Status: ACTIVE
|
||||||
|
|
||||||
|
ENERGIEGEMEINSCHAFT:
|
||||||
|
Name: Test-BEG Wien
|
||||||
|
Typ: BEG
|
||||||
========================================================================
|
========================================================================
|
||||||
""".formatted(generatedPassword));
|
""".formatted(TEST_AT_NUMBER));
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createAdminUser(String password) {
|
private void createAdminUser() {
|
||||||
User admin = new User();
|
User admin = new User();
|
||||||
admin.setEmail(ADMIN_EMAIL);
|
admin.setEmail(ADMIN_EMAIL);
|
||||||
admin.setPasswordHash(passwordEncoder.encode(password));
|
admin.setPasswordHash(passwordEncoder.encode(ADMIN_PASSWORD));
|
||||||
admin.setFirstName(ADMIN_FIRST_NAME);
|
admin.setFirstName(ADMIN_FIRST_NAME);
|
||||||
admin.setLastName(ADMIN_LAST_NAME);
|
admin.setLastName(ADMIN_LAST_NAME);
|
||||||
admin.setParticipantType(ParticipantType.PRIVATE);
|
admin.setParticipantType(ParticipantType.PRIVATE);
|
||||||
@ -68,10 +93,10 @@ public class AdminDataInitializer implements CommandLineRunner {
|
|||||||
userRepository.save(admin);
|
userRepository.save(admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createTestUser() {
|
private User createTestUser() {
|
||||||
User testUser = new User();
|
User testUser = new User();
|
||||||
testUser.setEmail("test@example.com");
|
testUser.setEmail(TEST_EMAIL);
|
||||||
testUser.setPasswordHash(passwordEncoder.encode("Test1234!"));
|
testUser.setPasswordHash(passwordEncoder.encode(TEST_PASSWORD));
|
||||||
testUser.setFirstName("Test");
|
testUser.setFirstName("Test");
|
||||||
testUser.setLastName("Benutzer");
|
testUser.setLastName("Benutzer");
|
||||||
testUser.setParticipantType(ParticipantType.PRIVATE);
|
testUser.setParticipantType(ParticipantType.PRIVATE);
|
||||||
@ -80,39 +105,35 @@ public class AdminDataInitializer implements CommandLineRunner {
|
|||||||
testUser.setStatus(RegistrationStatus.PENDING);
|
testUser.setStatus(RegistrationStatus.PENDING);
|
||||||
testUser.setEnabled(false);
|
testUser.setEnabled(false);
|
||||||
testUser.setEmailVerified(true);
|
testUser.setEmailVerified(true);
|
||||||
userRepository.save(testUser);
|
return userRepository.save(testUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String generateRandomPassword() {
|
private MeteringPoint createMeteringPoint(User user) {
|
||||||
String upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
MeteringPoint point = new MeteringPoint();
|
||||||
String lower = "abcdefghijklmnopqrstuvwxyz";
|
point.setUserId(user.getId());
|
||||||
String digits = "0123456789";
|
point.setAtNumber(TEST_AT_NUMBER);
|
||||||
String special = "!@#$%&*";
|
point.setType(PointType.CONSUMER);
|
||||||
String all = upper + lower + digits + special;
|
point.setMakoState(MakoState.ACTIVE);
|
||||||
|
point.setGridOperatorId("Wiener Netze GmbH");
|
||||||
SecureRandom random = new SecureRandom();
|
return meteringPointRepository.save(point);
|
||||||
StringBuilder password = new StringBuilder(16);
|
|
||||||
|
|
||||||
// Mindestens ein Zeichen aus jeder Klasse
|
|
||||||
password.append(upper.charAt(random.nextInt(upper.length())));
|
|
||||||
password.append(lower.charAt(random.nextInt(lower.length())));
|
|
||||||
password.append(digits.charAt(random.nextInt(digits.length())));
|
|
||||||
password.append(special.charAt(random.nextInt(special.length())));
|
|
||||||
|
|
||||||
// Rest zufällig füllen
|
|
||||||
for (int i = 4; i < 16; i++) {
|
|
||||||
password.append(all.charAt(random.nextInt(all.length())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mischen
|
private EnergyCommunity createBegCommunity() {
|
||||||
char[] chars = password.toString().toCharArray();
|
EnergyCommunity community = new EnergyCommunity();
|
||||||
for (int i = chars.length - 1; i > 0; i--) {
|
community.setEdaEcId("BEG-TEST-001");
|
||||||
int j = random.nextInt(i + 1);
|
community.setType(CommunityType.BEG);
|
||||||
char tmp = chars[i];
|
community.setName("Test-BEG Wien");
|
||||||
chars[i] = chars[j];
|
community.setGridOperatorId("Wiener Netze GmbH");
|
||||||
chars[j] = tmp;
|
return energyCommunityRepository.save(community);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new String(chars);
|
private void createMembership(MeteringPoint point, EnergyCommunity community) {
|
||||||
|
Membership membership = new Membership();
|
||||||
|
membership.setMeteringPoint(point);
|
||||||
|
membership.setEnergyCommunity(community);
|
||||||
|
membership.setPriorityLevel(1);
|
||||||
|
membership.setStatus(MembershipStatus.ACTIVE);
|
||||||
|
membership.setValidFrom(LocalDate.now());
|
||||||
|
membershipRepository.save(membership);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user