feat: initialize local passwords from platform login
parent
83c6fed1f9
commit
6edd870a32
@ -0,0 +1,36 @@
|
||||
package com.yau.digitalrmb.identity.application;
|
||||
|
||||
import com.yau.digitalrmb.platformintegration.application.PlatformCredentialRepository;
|
||||
import com.yau.digitalrmb.platformintegration.application.PlatformIdentityRepository;
|
||||
import com.yau.digitalrmb.platformintegration.config.PlatformIntegrationProperties;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Profile("local")
|
||||
public class PlatformCredentialInitializer implements ApplicationRunner {
|
||||
private final PlatformIntegrationProperties.LocalLogin properties;
|
||||
private final PlatformIdentityRepository identityRepository;
|
||||
private final PlatformCredentialRepository credentialRepository;
|
||||
private final PlatformIdentityProjectionService projectionService;
|
||||
|
||||
public PlatformCredentialInitializer(PlatformIntegrationProperties properties,
|
||||
PlatformIdentityRepository identityRepository,
|
||||
PlatformCredentialRepository credentialRepository,
|
||||
PlatformIdentityProjectionService projectionService) {
|
||||
this.properties = properties.getLocalLogin();
|
||||
this.identityRepository = identityRepository;
|
||||
this.credentialRepository = credentialRepository;
|
||||
this.projectionService = projectionService;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) {
|
||||
properties.getInitialAccounts().stream().filter(account -> account != null && !account.isBlank())
|
||||
.forEach(account -> identityRepository.findBySchoolAccount(account)
|
||||
.flatMap(actor -> credentialRepository.findCredential(actor.platformUserId()))
|
||||
.ifPresent(projectionService::project));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,41 @@
|
||||
package com.yau.digitalrmb.identity;
|
||||
|
||||
import com.yau.digitalrmb.identity.application.PlatformCredentialInitializer;
|
||||
import com.yau.digitalrmb.identity.application.PlatformIdentityProjectionService;
|
||||
import com.yau.digitalrmb.platformintegration.application.PlatformCredentialRepository;
|
||||
import com.yau.digitalrmb.platformintegration.application.PlatformIdentityRepository;
|
||||
import com.yau.digitalrmb.platformintegration.config.PlatformIntegrationProperties;
|
||||
import com.yau.digitalrmb.platformintegration.domain.PlatformActor;
|
||||
import com.yau.digitalrmb.platformintegration.domain.PlatformCredential;
|
||||
import com.yau.digitalrmb.platformintegration.domain.PlatformRole;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.DefaultApplicationArguments;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
class PlatformCredentialInitializerTest {
|
||||
@Test
|
||||
void initializesOnlyConfiguredPlatformAccount() throws Exception {
|
||||
PlatformIdentityRepository identities = mock(PlatformIdentityRepository.class);
|
||||
PlatformCredentialRepository credentials = mock(PlatformCredentialRepository.class);
|
||||
PlatformIdentityProjectionService projection = mock(PlatformIdentityProjectionService.class);
|
||||
PlatformIntegrationProperties properties = new PlatformIntegrationProperties();
|
||||
properties.getLocalLogin().setInitialAccounts(List.of("tzs001"));
|
||||
PlatformActor actor = new PlatformActor(301L, 3L, "tzs001", "教师", PlatformRole.TEACHER,
|
||||
Instant.parse("2026-01-01T00:00:00Z"));
|
||||
PlatformCredential credential = new PlatformCredential(actor, "123qwe");
|
||||
when(identities.findBySchoolAccount("tzs001")).thenReturn(Optional.of(actor));
|
||||
when(credentials.findCredential(301L)).thenReturn(Optional.of(credential));
|
||||
|
||||
new PlatformCredentialInitializer(properties, identities, credentials, projection)
|
||||
.run(new DefaultApplicationArguments());
|
||||
|
||||
verify(projection).project(credential);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue