From ad257d0c63c1f81bbb8ba5c05f795697090cbec0 Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Tue, 19 Sep 2023 17:47:31 +0800 Subject: [PATCH 1/8] modify registry user method. --- pom.xml | 12 ++++ .../deviceinfo/rest/DeviceInfoResource.java | 2 +- .../deviceinfo/service/DeviceInfoService.java | 2 +- .../member/service/AdminUserService.java | 4 +- .../service/PlatformRegistryService.java | 20 +++++-- .../support/platform/PlatformClient.java | 58 +++++++++++++++++++ .../platform/temp/TempInfoHandleService.java | 6 +- ...MockPlatformRegistryServiceRestClient.java | 41 +++++++++++++ 8 files changed, 134 insertions(+), 11 deletions(-) create mode 100644 src/main/java/space/ao/services/support/platform/PlatformClient.java diff --git a/pom.xml b/pom.xml index 1cba57d..8c7970f 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,18 @@ + + io.github.ren2003u + platform-sdk-java + 1.0.2 + + + + org.mockito + mockito-core + 3.11.2 + test + io.quarkus quarkus-smallrye-openapi diff --git a/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java b/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java index 667a026..ee50427 100644 --- a/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java +++ b/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java @@ -109,7 +109,7 @@ public ResponseBase hardwareInfo(@Valid @NotBlank @HeaderParam( public ResponseBase setNetworkChannel(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, - WanChannelSettingInfo wanChannelSettingInfo) { + WanChannelSettingInfo wanChannelSettingInfo) throws Exception { var userEntity = memberManageService.findByUserId(userId); if (userEntity.getRole() == UserEntity.Role.ADMINISTRATOR && Objects.equals(clientUUid, userEntity.getClientUUID())) { var networkChannelInfo = deviceInfoService.setInternetAccess(requestId, wanChannelSettingInfo.wan()); diff --git a/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java index ef34af7..ad2c09d 100644 --- a/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java +++ b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java @@ -105,7 +105,7 @@ public NetworkChannelInfo getNetworkChannelInfo() { } @Transactional - public NetworkChannelInfo setInternetAccess(String requestId, boolean enableInternetAccess) { + public NetworkChannelInfo setInternetAccess(String requestId, boolean enableInternetAccess) throws Exception { operationUtils.loadInternetServiceConfig(requestId); var internetAccess = operationUtils.getEnableInternetAccess(); if (!Objects.equals(internetAccess, enableInternetAccess)) { diff --git a/src/main/java/space/ao/services/account/member/service/AdminUserService.java b/src/main/java/space/ao/services/account/member/service/AdminUserService.java index 3df1fd0..af0bd82 100644 --- a/src/main/java/space/ao/services/account/member/service/AdminUserService.java +++ b/src/main/java/space/ao/services/account/member/service/AdminUserService.java @@ -74,7 +74,7 @@ public boolean checkPasscodeOrNew(String requestId, String passcode) { } @Transactional - public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo) { + public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo) throws Exception { var userEntityAdmin = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); if(Objects.isNull(userEntityAdmin)){ userEntityAdmin = bindAdminUser(requestId, adminBindInfo); @@ -103,7 +103,7 @@ public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo * 初次绑定 */ @Logged - public UserEntity bindAdminUser(String requestId, AdminBindInfo adminBindInfo) { + public UserEntity bindAdminUser(String requestId, AdminBindInfo adminBindInfo) throws Exception { var userEntity = new UserEntity(); var userRegistryResult = platformRegistryService.registryUser(requestId, UserRegistryInfo.of(Const.Admin.ADMIN_AOID, null, diff --git a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java index eef91a2..a0d483e 100644 --- a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java +++ b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java @@ -23,6 +23,10 @@ import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.Response.Status; import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.example.authentication.model.ObtainBoxRegKeyResponse; +import org.example.client.Client; +import org.example.domain.errorHandle.ApiResponse; +import org.example.register.model.RegisterUserResponse; import org.jboss.logging.Logger; import space.ao.services.account.member.dto.PlatformInfo; import space.ao.services.account.support.service.ServiceError; @@ -31,6 +35,7 @@ import space.ao.services.support.OperationUtils; import space.ao.services.support.StringUtils; import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.PlatformClient; import space.ao.services.support.platform.PlatformRegistryServiceRestClient; import space.ao.services.support.platform.PlatformUtils; import space.ao.services.support.platform.info.registry.*; @@ -40,6 +45,8 @@ import java.net.URI; import java.time.OffsetDateTime; +import java.util.Arrays; +import java.util.List; import java.util.Objects; @ApplicationScoped @@ -55,6 +62,9 @@ public class PlatformRegistryService { TempRegistryInfoRepository tempRegistryInfoRepository; static final Logger LOG = Logger.getLogger("app.log"); + @Inject + PlatformClient platformClient; + @Inject @RestClient PlatformRegistryServiceRestClient platformRegistryServiceRestClient; @@ -89,10 +99,12 @@ public PlatformInfo setPlatform(String ssplatformUrl){ **/ @Logged @Transactional - public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRegistryInfo, Boolean platformRegistry) { + public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRegistryInfo, Boolean platformRegistry) throws Exception { if (Boolean.TRUE.equals(platformRegistry) && platformUtils.isRegistryPlatformAvailable(requestId)) { - var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); - return platformRegistryServiceRestClient.platformRegistryUser(userRegistryInfo, requestId, boxRegKey, properties.boxUuid()); + String boxRegKey = platformClient.obtainBoxRegKey(requestId); + if (boxRegKey != null) { + return platformClient.registerUser(requestId, userRegistryInfo, boxRegKey); + } } else { TempRegistryInfoEntity tempRegistryInfoEntity = new TempRegistryInfoEntity(); tempRegistryInfoEntity.setRequestId(requestId); @@ -105,7 +117,7 @@ public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRe LOG.warnv("registry user failed, Unable to connect to the platform, delay registration to connectable platform, userRegistryInfo: {0}", userRegistryInfo); return new UserRegistryResult(properties.boxUuid(), userRegistryInfo.userId(), null, RegistryTypeEnum.USER_ADMIN.getName(), userRegistryInfo.clientUUID()); } - + return null; } /** diff --git a/src/main/java/space/ao/services/support/platform/PlatformClient.java b/src/main/java/space/ao/services/support/platform/PlatformClient.java new file mode 100644 index 0000000..bf51ede --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/PlatformClient.java @@ -0,0 +1,58 @@ +package space.ao.services.support.platform; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.example.authentication.model.ObtainBoxRegKeyResponse; +import org.example.client.Client; +import org.example.domain.errorHandle.ApiResponse; +import org.example.register.model.RegisterUserResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.platform.info.registry.UserRegistryInfo; +import space.ao.services.support.platform.info.registry.UserRegistryResult; + +import java.util.List; + +@ApplicationScoped +public class PlatformClient { + + @Inject + ApplicationProperties properties; + + private final String host = properties.ssplatformUrl(); + private final Client client; + private static final Logger LOG = LoggerFactory.getLogger(PlatformClient.class); + + public PlatformClient() { + this.client = new Client(host, null); + } + + public String obtainBoxRegKey(String requestId) { + try { + ApiResponse response = client.obtainBoxRegKey(properties.boxUuid(), List.of("10001"), requestId); + if (response.getError() != null) { + LOG.error("Error obtaining BoxRegKey: {}", response.getError().getMessage()); + return null; + } + return response.getData().getTokenResults().get(0).getBoxRegKey(); + } catch (Exception e) { + LOG.error("Failed to obtain BoxRegKey", e); + return null; + } + } + + public UserRegistryResult registerUser(String requestId, UserRegistryInfo userRegistryInfo, String boxRegKey) { + try { + ApiResponse response = client.registerUser(properties.boxUuid(), userRegistryInfo.userId(), userRegistryInfo.subdomain(), userRegistryInfo.userType(), userRegistryInfo.clientUUID(), requestId, boxRegKey); + if (response.getError() != null) { + LOG.error("Error registering user: {}", response.getError().getMessage()); + return null; + } + return new UserRegistryResult(response.getData().getBoxUUID(), response.getData().getUserId(), response.getData().getUserDomain(), response.getData().getUserType(), response.getData().getClientUUID()); + } catch (Exception e) { + LOG.error("Failed to register user", e); + return null; + } + } +} diff --git a/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java index fb44322..234ff41 100644 --- a/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java +++ b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java @@ -58,7 +58,7 @@ public class TempInfoHandleService { UserInfoRepository userInfoRepository; @Scheduled(every = "2m") @SuppressWarnings("unused") // Executing a Scheduled Task - void handle() { + void handle() throws Exception { Stopwatch stopwatch = Stopwatch.createStarted(); if(Boolean.TRUE.equals(operationUtils.getEnableInternetAccess()) && platformUtils.isRegistryPlatformAvailable(stopwatch.toString())) { handleTempInfo(); @@ -67,7 +67,7 @@ void handle() { } - public void handleTempInfo(){ + public void handleTempInfo() throws Exception { var tempInfos = tempRegistryInfoRepository.findAll(Sort.by("createAt")).list(); for(var tempInfo : tempInfos) { switch (RequestTypeEnum.fromValue(tempInfo.getType())) { @@ -95,7 +95,7 @@ public void registryClient(TempRegistryInfoEntity tempInfo, ClientRegistryInfo c @Logged @Transactional - public void registryUser(TempRegistryInfoEntity tempInfo, UserRegistryInfo userRegistryInfo){ + public void registryUser(TempRegistryInfoEntity tempInfo, UserRegistryInfo userRegistryInfo) throws Exception { var userRegistryResult = platformRegistryService.registryUser(tempInfo.getRequestId(), userRegistryInfo, true); if (Objects.equals(tempInfo.getUserId(), Long.valueOf(Const.Admin.ADMIN_ID))){ memberManageService.writeUserDomainToAdminFile(userRegistryResult.userDomain()); diff --git a/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java b/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java index da6fa47..99e354e 100644 --- a/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java +++ b/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java @@ -18,6 +18,7 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.google.common.io.CharStreams; +import io.quarkus.test.InjectMock; import io.quarkus.test.Mock; import java.io.IOException; @@ -27,7 +28,14 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.example.authentication.model.ObtainBoxRegKeyResponse; +import org.example.client.Client; +import org.example.domain.errorHandle.ApiResponse; +import org.example.register.model.RegisterUserResponse; import org.jboss.logging.Logger; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; +import space.ao.services.account.member.service.PlatformRegistryService; import space.ao.services.config.ApplicationProperties; import space.ao.services.support.OperationUtils; import space.ao.services.support.platform.info.ability.PlatformApiResults; @@ -45,6 +53,9 @@ import space.ao.services.support.service.ServiceError; import space.ao.services.support.service.ServiceOperationException; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.anyString; + @Mock @ApplicationScoped @RestClient @@ -59,6 +70,36 @@ public class MockPlatformRegistryServiceRestClient implements PlatformRegistrySe OperationUtils utils; @Inject SecurityUtils securityUtils; + + @Inject + PlatformRegistryService platformRegistryService; + + @InjectMock + Client mockClient; + + @Test + public void testRegistryUser() throws Exception { + // Given + String requestId = "e9993fc787d94b6c886cbaa340f9c0f4"; + UserRegistryInfo userRegistryInfo = new UserRegistryInfo("1","","user_admin","5d5af871790b4922bca935f08109a531"); + // ... set other properties of userRegistryInfo as needed ... + + // Mock the SDK's methods + ObtainBoxRegKeyResponse mockObtainBoxRegKeyResponse = new ObtainBoxRegKeyResponse(); + // ... set properties of mockObtainBoxRegKeyResponse as needed ... + Mockito.when(mockClient.obtainBoxRegKey(anyString(), anyList(), anyString())).thenReturn(new ApiResponse<>()); + + RegisterUserResponse mockRegisterUserResponse = new RegisterUserResponse(); + // ... set properties of mockRegisterUserResponse as needed ... + Mockito.when(mockClient.registerUser(anyString(), anyString(), anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(new ApiResponse<>()); + + // When + UserRegistryResult result = platformRegistryService.registryUser(requestId, userRegistryInfo, true); + + // Then + // ... assert the expected behavior/results ... + } + @Override public TokenCreateResults createTokens(TokenInfo tokenInfo, String reqId) { if(securityUtils.getSecurityProvider().verifySignUsingBoxPublicKey(reqId, From 296827ed375d5a5ee7de7ef09dc9bd85887c3da0 Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Wed, 20 Sep 2023 14:55:40 +0800 Subject: [PATCH 2/8] make modification according to review. --- .../service/PlatformRegistryService.java | 8 +--- .../support/platform/PlatformClient.java | 45 ++++++++++++++----- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java index a0d483e..4376bd8 100644 --- a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java +++ b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java @@ -99,12 +99,9 @@ public PlatformInfo setPlatform(String ssplatformUrl){ **/ @Logged @Transactional - public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRegistryInfo, Boolean platformRegistry) throws Exception { + public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRegistryInfo, Boolean platformRegistry) { if (Boolean.TRUE.equals(platformRegistry) && platformUtils.isRegistryPlatformAvailable(requestId)) { - String boxRegKey = platformClient.obtainBoxRegKey(requestId); - if (boxRegKey != null) { - return platformClient.registerUser(requestId, userRegistryInfo, boxRegKey); - } + return platformClient.registerUser(requestId, userRegistryInfo); } else { TempRegistryInfoEntity tempRegistryInfoEntity = new TempRegistryInfoEntity(); tempRegistryInfoEntity.setRequestId(requestId); @@ -117,7 +114,6 @@ public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRe LOG.warnv("registry user failed, Unable to connect to the platform, delay registration to connectable platform, userRegistryInfo: {0}", userRegistryInfo); return new UserRegistryResult(properties.boxUuid(), userRegistryInfo.userId(), null, RegistryTypeEnum.USER_ADMIN.getName(), userRegistryInfo.clientUUID()); } - return null; } /** diff --git a/src/main/java/space/ao/services/support/platform/PlatformClient.java b/src/main/java/space/ao/services/support/platform/PlatformClient.java index bf51ede..4313d84 100644 --- a/src/main/java/space/ao/services/support/platform/PlatformClient.java +++ b/src/main/java/space/ao/services/support/platform/PlatformClient.java @@ -12,6 +12,8 @@ import space.ao.services.support.platform.info.registry.UserRegistryInfo; import space.ao.services.support.platform.info.registry.UserRegistryResult; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.List; @ApplicationScoped @@ -24,34 +26,57 @@ public class PlatformClient { private final Client client; private static final Logger LOG = LoggerFactory.getLogger(PlatformClient.class); + // Cache variables + private String cachedBoxRegKey = null; + private LocalDateTime lastFetchedTime = null; + private static final Duration CACHE_DURATION = Duration.ofMinutes(5); // Cache duration of 5 minutes + public PlatformClient() { this.client = new Client(host, null); } - public String obtainBoxRegKey(String requestId) { + public UserRegistryResult registerUser(String requestId, UserRegistryInfo userRegistryInfo) { try { - ApiResponse response = client.obtainBoxRegKey(properties.boxUuid(), List.of("10001"), requestId); + // Obtain BoxRegKey + String boxRegKey = obtainBoxRegKey(requestId); + if (boxRegKey == null) { + LOG.error("Failed to obtain BoxRegKey for requestId: {}", requestId); + return null; + } + + // Register User + ApiResponse response = client.registerUser(properties.boxUuid(), userRegistryInfo.userId(), userRegistryInfo.subdomain(), userRegistryInfo.userType(), userRegistryInfo.clientUUID(), requestId, boxRegKey); if (response.getError() != null) { - LOG.error("Error obtaining BoxRegKey: {}", response.getError().getMessage()); + LOG.error("Error registering user: {}", response.getError().getMessage()); return null; } - return response.getData().getTokenResults().get(0).getBoxRegKey(); + return new UserRegistryResult(response.getData().getBoxUUID(), response.getData().getUserId(), response.getData().getUserDomain(), response.getData().getUserType(), response.getData().getClientUUID()); } catch (Exception e) { - LOG.error("Failed to obtain BoxRegKey", e); + LOG.error("Failed to register user", e); return null; } } - public UserRegistryResult registerUser(String requestId, UserRegistryInfo userRegistryInfo, String boxRegKey) { + private String obtainBoxRegKey(String requestId) { try { - ApiResponse response = client.registerUser(properties.boxUuid(), userRegistryInfo.userId(), userRegistryInfo.subdomain(), userRegistryInfo.userType(), userRegistryInfo.clientUUID(), requestId, boxRegKey); + // Check if the cache is still valid + if (cachedBoxRegKey != null && lastFetchedTime != null && Duration.between(lastFetchedTime, LocalDateTime.now()).compareTo(CACHE_DURATION) <= 0) { + return cachedBoxRegKey; + } + + ApiResponse response = client.obtainBoxRegKey(properties.boxUuid(), List.of("10001"), requestId); if (response.getError() != null) { - LOG.error("Error registering user: {}", response.getError().getMessage()); + LOG.error("Error obtaining BoxRegKey: {}", response.getError().getMessage()); return null; } - return new UserRegistryResult(response.getData().getBoxUUID(), response.getData().getUserId(), response.getData().getUserDomain(), response.getData().getUserType(), response.getData().getClientUUID()); + + // Update cache + cachedBoxRegKey = response.getData().getTokenResults().get(0).getBoxRegKey(); + lastFetchedTime = LocalDateTime.now(); + + return cachedBoxRegKey; } catch (Exception e) { - LOG.error("Failed to register user", e); + LOG.error("Failed to obtain BoxRegKey", e); return null; } } From e547833fb4cfa7235022fa516903863c727c1a40 Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Wed, 20 Sep 2023 19:16:05 +0800 Subject: [PATCH 3/8] make modification according to review and finish the rest of three method. --- .../service/PlatformRegistryService.java | 10 ++-- .../support/platform/PlatformClient.java | 54 +++++++++++++++++++ 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java index 4376bd8..3225e42 100644 --- a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java +++ b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java @@ -126,9 +126,8 @@ public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRe **/ @Logged public void platformRegistryUserReset(String requestId, String aoid) { - var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); try { - platformRegistryServiceRestClient.platformResetUser(requestId, boxRegKey, properties.boxUuid(), aoid); + platformClient.deleteUser(requestId, aoid); } catch (WebApplicationException e) { if(Objects.equals(Status.NOT_FOUND.getStatusCode(), e.getResponse().getStatusInfo().getStatusCode())){ LOG.errorv("platform Registry User Reset: {0}", utils.getErrorInfoFromException(e)); @@ -152,10 +151,8 @@ public void platformRegistryUserReset(String requestId, String aoid) { @Logged @Transactional public ClientRegistryResult registryClient(String requestId, ClientRegistryInfo clientRegistryInfo, String aoid) { - if(Boolean.TRUE.equals(utils.getEnableInternetAccess()) && platformUtils.isRegistryPlatformAvailable(requestId)){ - var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); - return platformRegistryServiceRestClient.platformRegistryClient(clientRegistryInfo, requestId, boxRegKey, properties.boxUuid(), aoid); + return platformClient.registerClient(requestId, clientRegistryInfo, aoid); } else { TempRegistryInfoEntity tempRegistryInfoEntity = new TempRegistryInfoEntity(); tempRegistryInfoEntity.setRequestId(requestId); @@ -183,9 +180,8 @@ public ClientRegistryResult registryClient(String requestId, ClientRegistryInfo @Logged public void platformRegistryClientReset(String requestId, String aoid, String clientUUID) { if(Boolean.TRUE.equals(utils.getEnableInternetAccess()) && platformUtils.isRegistryPlatformAvailable(requestId)){ - var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); try { - platformRegistryServiceRestClient.platformRestClient(requestId, boxRegKey, properties.boxUuid(), aoid, clientUUID); + platformClient.deleteClient(requestId, aoid, clientUUID); } catch (WebApplicationException e){ LOG.errorv("platform Registry Client Reset: {0}", utils.getErrorInfoFromException(e)); if(Objects.equals(Status.NOT_FOUND.getStatusCode(), e.getResponse().getStatusInfo().getStatusCode())){ diff --git a/src/main/java/space/ao/services/support/platform/PlatformClient.java b/src/main/java/space/ao/services/support/platform/PlatformClient.java index 4313d84..cb437cc 100644 --- a/src/main/java/space/ao/services/support/platform/PlatformClient.java +++ b/src/main/java/space/ao/services/support/platform/PlatformClient.java @@ -5,10 +5,13 @@ import org.example.authentication.model.ObtainBoxRegKeyResponse; import org.example.client.Client; import org.example.domain.errorHandle.ApiResponse; +import org.example.register.model.RegisterClientResponse; import org.example.register.model.RegisterUserResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.platform.info.registry.ClientRegistryInfo; +import space.ao.services.support.platform.info.registry.ClientRegistryResult; import space.ao.services.support.platform.info.registry.UserRegistryInfo; import space.ao.services.support.platform.info.registry.UserRegistryResult; @@ -56,6 +59,27 @@ public UserRegistryResult registerUser(String requestId, UserRegistryInfo userRe return null; } } + public ClientRegistryResult registerClient(String requestId, ClientRegistryInfo clientRegistryInfo, String userId) { + try { + // Obtain BoxRegKey + String boxRegKey = obtainBoxRegKey(requestId); + if (boxRegKey == null) { + LOG.error("Failed to obtain BoxRegKey for requestId: {}", requestId); + return null; + } + + // Register Client + ApiResponse response = client.registerClient(properties.boxUuid(), userId, clientRegistryInfo.clientUUID(), clientRegistryInfo.clientType(), requestId, boxRegKey); + if (response.getError() != null) { + LOG.error("Error registering client: {}", response.getError().getMessage()); + return null; + } + return new ClientRegistryResult(response.getData().getBoxUUID(), response.getData().getUserId(), response.getData().getClientUUID(), response.getData().getClientType()); + } catch (Exception e) { + LOG.error("Failed to register client", e); + return null; + } + } private String obtainBoxRegKey(String requestId) { try { @@ -80,4 +104,34 @@ private String obtainBoxRegKey(String requestId) { return null; } } + public void deleteUser(String requestId, String userId) { + try { + // Obtain BoxRegKey + String boxRegKey = obtainBoxRegKey(requestId); + if (boxRegKey == null) { + LOG.error("Failed to obtain BoxRegKey for requestId: {}", requestId); + return; + } + + // Delete User + client.deleteUser(properties.boxUuid(), userId, requestId, boxRegKey); + } catch (Exception e) { + LOG.error("Failed to delete user with userId: {}", userId, e); + } + } + public void deleteClient(String requestId, String userId, String clientUUID) { + try { + // Obtain BoxRegKey + String boxRegKey = obtainBoxRegKey(requestId); + if (boxRegKey == null) { + LOG.error("Failed to obtain BoxRegKey for requestId: {}", requestId); + return; + } + + // Delete Client + client.deleteClient(properties.boxUuid(), userId, clientUUID, requestId, boxRegKey); + } catch (Exception e) { + LOG.error("Failed to delete client with clientUUID: {}", clientUUID, e); + } + } } From c2ef265a1964af2ba9e5d5513dadcbf8be078c89 Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Wed, 20 Sep 2023 20:15:22 +0800 Subject: [PATCH 4/8] remove unnecessary exceptions. --- .../services/account/deviceinfo/rest/DeviceInfoResource.java | 2 +- .../account/deviceinfo/service/DeviceInfoService.java | 2 +- .../ao/services/account/member/service/AdminUserService.java | 4 ++-- .../services/support/platform/temp/TempInfoHandleService.java | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java b/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java index ee50427..667a026 100644 --- a/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java +++ b/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java @@ -109,7 +109,7 @@ public ResponseBase hardwareInfo(@Valid @NotBlank @HeaderParam( public ResponseBase setNetworkChannel(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, - WanChannelSettingInfo wanChannelSettingInfo) throws Exception { + WanChannelSettingInfo wanChannelSettingInfo) { var userEntity = memberManageService.findByUserId(userId); if (userEntity.getRole() == UserEntity.Role.ADMINISTRATOR && Objects.equals(clientUUid, userEntity.getClientUUID())) { var networkChannelInfo = deviceInfoService.setInternetAccess(requestId, wanChannelSettingInfo.wan()); diff --git a/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java index ad2c09d..ef34af7 100644 --- a/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java +++ b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java @@ -105,7 +105,7 @@ public NetworkChannelInfo getNetworkChannelInfo() { } @Transactional - public NetworkChannelInfo setInternetAccess(String requestId, boolean enableInternetAccess) throws Exception { + public NetworkChannelInfo setInternetAccess(String requestId, boolean enableInternetAccess) { operationUtils.loadInternetServiceConfig(requestId); var internetAccess = operationUtils.getEnableInternetAccess(); if (!Objects.equals(internetAccess, enableInternetAccess)) { diff --git a/src/main/java/space/ao/services/account/member/service/AdminUserService.java b/src/main/java/space/ao/services/account/member/service/AdminUserService.java index af0bd82..1736420 100644 --- a/src/main/java/space/ao/services/account/member/service/AdminUserService.java +++ b/src/main/java/space/ao/services/account/member/service/AdminUserService.java @@ -74,7 +74,7 @@ public boolean checkPasscodeOrNew(String requestId, String passcode) { } @Transactional - public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo) throws Exception { + public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo) { var userEntityAdmin = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); if(Objects.isNull(userEntityAdmin)){ userEntityAdmin = bindAdminUser(requestId, adminBindInfo); @@ -103,7 +103,7 @@ public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo * 初次绑定 */ @Logged - public UserEntity bindAdminUser(String requestId, AdminBindInfo adminBindInfo) throws Exception { + public UserEntity bindAdminUser(String requestId, AdminBindInfo adminBindInfo) { var userEntity = new UserEntity(); var userRegistryResult = platformRegistryService.registryUser(requestId, UserRegistryInfo.of(Const.Admin.ADMIN_AOID, null, diff --git a/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java index 234ff41..b9dd767 100644 --- a/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java +++ b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java @@ -67,7 +67,7 @@ void handle() throws Exception { } - public void handleTempInfo() throws Exception { + public void handleTempInfo() { var tempInfos = tempRegistryInfoRepository.findAll(Sort.by("createAt")).list(); for(var tempInfo : tempInfos) { switch (RequestTypeEnum.fromValue(tempInfo.getType())) { @@ -95,7 +95,7 @@ public void registryClient(TempRegistryInfoEntity tempInfo, ClientRegistryInfo c @Logged @Transactional - public void registryUser(TempRegistryInfoEntity tempInfo, UserRegistryInfo userRegistryInfo) throws Exception { + public void registryUser(TempRegistryInfoEntity tempInfo, UserRegistryInfo userRegistryInfo) { var userRegistryResult = platformRegistryService.registryUser(tempInfo.getRequestId(), userRegistryInfo, true); if (Objects.equals(tempInfo.getUserId(), Long.valueOf(Const.Admin.ADMIN_ID))){ memberManageService.writeUserDomainToAdminFile(userRegistryResult.userDomain()); From 9627ac2edcb4a78aee2dc65deba4ce0abc7aedfc Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Wed, 20 Sep 2023 21:31:09 +0800 Subject: [PATCH 5/8] change the name of import path. --- pom.xml | 7 ++++++- .../member/service/PlatformRegistryService.java | 4 ---- .../ao/services/support/platform/PlatformClient.java | 10 +++++----- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 8c7970f..fd69301 100644 --- a/pom.xml +++ b/pom.xml @@ -47,8 +47,13 @@ io.github.ren2003u platform-sdk-java - 1.0.2 + 1.0.3 + + + + + org.mockito diff --git a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java index 3225e42..2d1760e 100644 --- a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java +++ b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java @@ -23,10 +23,6 @@ import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.core.Response.Status; import org.eclipse.microprofile.rest.client.inject.RestClient; -import org.example.authentication.model.ObtainBoxRegKeyResponse; -import org.example.client.Client; -import org.example.domain.errorHandle.ApiResponse; -import org.example.register.model.RegisterUserResponse; import org.jboss.logging.Logger; import space.ao.services.account.member.dto.PlatformInfo; import space.ao.services.account.support.service.ServiceError; diff --git a/src/main/java/space/ao/services/support/platform/PlatformClient.java b/src/main/java/space/ao/services/support/platform/PlatformClient.java index cb437cc..4ee96b0 100644 --- a/src/main/java/space/ao/services/support/platform/PlatformClient.java +++ b/src/main/java/space/ao/services/support/platform/PlatformClient.java @@ -1,12 +1,12 @@ package space.ao.services.support.platform; +import io.github.ren2003u.authentication.model.ObtainBoxRegKeyResponse; +import io.github.ren2003u.client.Client; +import io.github.ren2003u.domain.errorHandle.ApiResponse; +import io.github.ren2003u.register.model.RegisterClientResponse; +import io.github.ren2003u.register.model.RegisterUserResponse; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; -import org.example.authentication.model.ObtainBoxRegKeyResponse; -import org.example.client.Client; -import org.example.domain.errorHandle.ApiResponse; -import org.example.register.model.RegisterClientResponse; -import org.example.register.model.RegisterUserResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import space.ao.services.config.ApplicationProperties; From c60d80ad790b1f7fcd83dd9373fb50a4f02e8448 Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Wed, 27 Sep 2023 14:18:22 +0800 Subject: [PATCH 6/8] fix the injection issue and past the test through ao.space app. --- .../support/platform/PlatformClient.java | 19 ++++++++---- ...MockPlatformRegistryServiceRestClient.java | 29 +------------------ 2 files changed, 15 insertions(+), 33 deletions(-) diff --git a/src/main/java/space/ao/services/support/platform/PlatformClient.java b/src/main/java/space/ao/services/support/platform/PlatformClient.java index 4ee96b0..96175cc 100644 --- a/src/main/java/space/ao/services/support/platform/PlatformClient.java +++ b/src/main/java/space/ao/services/support/platform/PlatformClient.java @@ -5,6 +5,7 @@ import io.github.ren2003u.domain.errorHandle.ApiResponse; import io.github.ren2003u.register.model.RegisterClientResponse; import io.github.ren2003u.register.model.RegisterUserResponse; +import jakarta.annotation.PostConstruct; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import org.slf4j.Logger; @@ -25,8 +26,15 @@ public class PlatformClient { @Inject ApplicationProperties properties; - private final String host = properties.ssplatformUrl(); - private final Client client; + private String host; + private Client client; + + private void init() { + if (this.client == null) { + this.host = properties.ssplatformUrl(); + this.client = new Client(host, null); + } + } private static final Logger LOG = LoggerFactory.getLogger(PlatformClient.class); // Cache variables @@ -34,11 +42,12 @@ public class PlatformClient { private LocalDateTime lastFetchedTime = null; private static final Duration CACHE_DURATION = Duration.ofMinutes(5); // Cache duration of 5 minutes - public PlatformClient() { - this.client = new Client(host, null); - } +// public PlatformClient() { +// this.client = new Client(host, null); +// } public UserRegistryResult registerUser(String requestId, UserRegistryInfo userRegistryInfo) { + init(); try { // Obtain BoxRegKey String boxRegKey = obtainBoxRegKey(requestId); diff --git a/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java b/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java index 99e354e..45b56b5 100644 --- a/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java +++ b/src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java @@ -28,10 +28,7 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import org.eclipse.microprofile.rest.client.inject.RestClient; -import org.example.authentication.model.ObtainBoxRegKeyResponse; -import org.example.client.Client; -import org.example.domain.errorHandle.ApiResponse; -import org.example.register.model.RegisterUserResponse; + import org.jboss.logging.Logger; import org.junit.jupiter.api.Test; import org.mockito.Mockito; @@ -74,31 +71,7 @@ public class MockPlatformRegistryServiceRestClient implements PlatformRegistrySe @Inject PlatformRegistryService platformRegistryService; - @InjectMock - Client mockClient; - - @Test - public void testRegistryUser() throws Exception { - // Given - String requestId = "e9993fc787d94b6c886cbaa340f9c0f4"; - UserRegistryInfo userRegistryInfo = new UserRegistryInfo("1","","user_admin","5d5af871790b4922bca935f08109a531"); - // ... set other properties of userRegistryInfo as needed ... - - // Mock the SDK's methods - ObtainBoxRegKeyResponse mockObtainBoxRegKeyResponse = new ObtainBoxRegKeyResponse(); - // ... set properties of mockObtainBoxRegKeyResponse as needed ... - Mockito.when(mockClient.obtainBoxRegKey(anyString(), anyList(), anyString())).thenReturn(new ApiResponse<>()); - RegisterUserResponse mockRegisterUserResponse = new RegisterUserResponse(); - // ... set properties of mockRegisterUserResponse as needed ... - Mockito.when(mockClient.registerUser(anyString(), anyString(), anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(new ApiResponse<>()); - - // When - UserRegistryResult result = platformRegistryService.registryUser(requestId, userRegistryInfo, true); - - // Then - // ... assert the expected behavior/results ... - } @Override public TokenCreateResults createTokens(TokenInfo tokenInfo, String reqId) { From 541b4f92c63c2cd55f9cc24944abcac4b8ad9806 Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Tue, 17 Oct 2023 14:36:41 +0800 Subject: [PATCH 7/8] remove some spaces. --- .../ao/services/account/member/service/AdminUserService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/space/ao/services/account/member/service/AdminUserService.java b/src/main/java/space/ao/services/account/member/service/AdminUserService.java index 1736420..3df1fd0 100644 --- a/src/main/java/space/ao/services/account/member/service/AdminUserService.java +++ b/src/main/java/space/ao/services/account/member/service/AdminUserService.java @@ -74,7 +74,7 @@ public boolean checkPasscodeOrNew(String requestId, String passcode) { } @Transactional - public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo) { + public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo) { var userEntityAdmin = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); if(Objects.isNull(userEntityAdmin)){ userEntityAdmin = bindAdminUser(requestId, adminBindInfo); @@ -103,7 +103,7 @@ public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo * 初次绑定 */ @Logged - public UserEntity bindAdminUser(String requestId, AdminBindInfo adminBindInfo) { + public UserEntity bindAdminUser(String requestId, AdminBindInfo adminBindInfo) { var userEntity = new UserEntity(); var userRegistryResult = platformRegistryService.registryUser(requestId, UserRegistryInfo.of(Const.Admin.ADMIN_AOID, null, From c99af6f3e9eb72ebc108357208efa795a5418660 Mon Sep 17 00:00:00 2001 From: jiahao ren Date: Tue, 17 Oct 2023 22:10:46 +0800 Subject: [PATCH 8/8] remove some spaces. --- .../support/platform/temp/TempInfoHandleService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java index b9dd767..fb44322 100644 --- a/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java +++ b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java @@ -58,7 +58,7 @@ public class TempInfoHandleService { UserInfoRepository userInfoRepository; @Scheduled(every = "2m") @SuppressWarnings("unused") // Executing a Scheduled Task - void handle() throws Exception { + void handle() { Stopwatch stopwatch = Stopwatch.createStarted(); if(Boolean.TRUE.equals(operationUtils.getEnableInternetAccess()) && platformUtils.isRegistryPlatformAvailable(stopwatch.toString())) { handleTempInfo(); @@ -67,7 +67,7 @@ void handle() throws Exception { } - public void handleTempInfo() { + public void handleTempInfo(){ var tempInfos = tempRegistryInfoRepository.findAll(Sort.by("createAt")).list(); for(var tempInfo : tempInfos) { switch (RequestTypeEnum.fromValue(tempInfo.getType())) { @@ -95,7 +95,7 @@ public void registryClient(TempRegistryInfoEntity tempInfo, ClientRegistryInfo c @Logged @Transactional - public void registryUser(TempRegistryInfoEntity tempInfo, UserRegistryInfo userRegistryInfo) { + public void registryUser(TempRegistryInfoEntity tempInfo, UserRegistryInfo userRegistryInfo){ var userRegistryResult = platformRegistryService.registryUser(tempInfo.getRequestId(), userRegistryInfo, true); if (Objects.equals(tempInfo.getUserId(), Long.valueOf(Const.Admin.ADMIN_ID))){ memberManageService.writeUserDomainToAdminFile(userRegistryResult.userDomain());