You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
3.7 KiB
76 lines
3.7 KiB
package com.mydreamjob.auth.company;
|
|
|
|
import com.mydreamjob.audit.AuditContext;
|
|
import com.mydreamjob.audit.AuditService;
|
|
import com.mydreamjob.auth.AuthSessionService;
|
|
import com.mydreamjob.auth.SmsVerificationService;
|
|
import com.mydreamjob.auth.User;
|
|
import com.mydreamjob.auth.UserRepository;
|
|
import com.mydreamjob.auth.password.PasswordPolicy;
|
|
import com.mydreamjob.company.Company;
|
|
import com.mydreamjob.company.CompanyRepository;
|
|
import com.mydreamjob.deletion.AccountDeletionPhoneHasher;
|
|
import com.mydreamjob.deletion.AccountDeletionRepository;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
|
|
|
import java.time.Clock;
|
|
import java.time.Instant;
|
|
import java.time.ZoneOffset;
|
|
import java.util.Optional;
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
import static org.mockito.ArgumentMatchers.*;
|
|
import static org.mockito.Mockito.*;
|
|
|
|
class CompanyRegistrationSensitiveDataTest {
|
|
@Test
|
|
void responseAndAuditContainNoPasswordCodePhoneHashOrToken() {
|
|
String phone = "19900000301";
|
|
String password = "Company-strong-password-2026";
|
|
CompanyRegistrationProperties properties = new CompanyRegistrationProperties();
|
|
properties.setEnabled("true");
|
|
SmsVerificationService sms = mock(SmsVerificationService.class);
|
|
UserRepository users = mock(UserRepository.class);
|
|
CompanyRepository companies = mock(CompanyRepository.class);
|
|
AccountDeletionRepository deletions = mock(AccountDeletionRepository.class);
|
|
AccountDeletionPhoneHasher hasher = mock(AccountDeletionPhoneHasher.class);
|
|
AuthSessionService sessions = mock(AuthSessionService.class);
|
|
AuditService audit = mock(AuditService.class);
|
|
when(hasher.hash(phone)).thenReturn("h");
|
|
when(deletions.findByDeletedPhoneHash("h")).thenReturn(Optional.empty());
|
|
when(users.findByPhoneForUpdate(phone)).thenReturn(Optional.empty());
|
|
when(users.saveAndFlush(any(User.class))).thenAnswer(invocation -> {
|
|
User user = invocation.getArgument(0);
|
|
user.setId(301L);
|
|
return user;
|
|
});
|
|
when(companies.saveAndFlush(any(Company.class))).thenAnswer(invocation -> {
|
|
Company company = invocation.getArgument(0);
|
|
company.setId(401L);
|
|
return company;
|
|
});
|
|
when(sessions.createSession(any(), any(), any()))
|
|
.thenReturn(new AuthSessionService.SessionTokens("access-secret", "refresh-secret", "sid"));
|
|
|
|
CompanyRegistrationService service = new CompanyRegistrationService(properties, sms, users, companies,
|
|
new PasswordPolicy(), new BCryptPasswordEncoder(), deletions, hasher, sessions, audit,
|
|
Clock.fixed(Instant.parse("2026-09-22T00:00:00Z"), ZoneOffset.UTC));
|
|
CompanyRegistrationRequest request = new CompanyRegistrationRequest();
|
|
request.setPhone(phone);
|
|
request.setCode("123456");
|
|
request.setPassword(password);
|
|
CompanyRegistrationRequest.CompanyDetails details = new CompanyRegistrationRequest.CompanyDetails();
|
|
details.setName("安全测试企业");
|
|
details.setIndustry("互联网");
|
|
details.setDescription("简介");
|
|
details.setAddress("地址");
|
|
request.setCompany(details);
|
|
|
|
CompanyRegistrationResponse response = service.register(request, AuditContext.builder().build());
|
|
assertThat(response.toString()).doesNotContain(phone, password);
|
|
verify(audit).logRequired(anyLong(), eq("COMPANY_REGISTERED"), anyString(), anyLong(),
|
|
argThat(detailsText -> !detailsText.contains(phone) && !detailsText.contains(password)),
|
|
any(), any());
|
|
}
|
|
}
|
|
|