Browse Source

Rename QR code API

pull/11835/head
Vladyslav_Prykhodko 2 years ago
parent
commit
3a243c821a
  1. 6
      application/src/main/java/org/thingsboard/server/controller/QrCodeSettingsController.java
  2. 40
      application/src/test/java/org/thingsboard/server/controller/QrCodeSettingsControllerTest.java

6
application/src/main/java/org/thingsboard/server/controller/QrCodeSettingsController.java

@ -123,7 +123,7 @@ public class QrCodeSettingsController extends BaseController {
@ApiOperation(value = "Create Or Update the Mobile application settings (saveMobileAppSettings)",
notes = "The request payload contains configuration for android/iOS applications and platform qr code widget settings." + SYSTEM_AUTHORITY_PARAGRAPH)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN')")
@PostMapping(value = "/api/qr/settings")
@PostMapping(value = "/api/mobile/qr/settings")
public QrCodeSettings saveMobileAppSettings(@Parameter(description = "A JSON value representing the mobile apps configuration")
@RequestBody QrCodeSettings qrCodeSettings) throws ThingsboardException {
SecurityUser currentUser = getCurrentUser();
@ -135,7 +135,7 @@ public class QrCodeSettingsController extends BaseController {
@ApiOperation(value = "Get Mobile application settings (getMobileAppSettings)",
notes = "The response payload contains configuration for android/iOS applications and platform qr code widget settings." + AVAILABLE_FOR_ANY_AUTHORIZED_USER)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@GetMapping(value = "/api/qr/settings")
@GetMapping(value = "/api/mobile/qr/settings")
public QrCodeSettings getMobileAppSettings() throws ThingsboardException {
SecurityUser currentUser = getCurrentUser();
accessControlService.checkPermission(currentUser, Resource.MOBILE_APP_SETTINGS, Operation.READ);
@ -145,7 +145,7 @@ public class QrCodeSettingsController extends BaseController {
@ApiOperation(value = "Get the deep link to the associated mobile application (getMobileAppDeepLink)",
notes = "Fetch the url that takes user to linked mobile application " + AVAILABLE_FOR_ANY_AUTHORIZED_USER)
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN', 'CUSTOMER_USER')")
@GetMapping(value = "/api/qr/deepLink", produces = "text/plain")
@GetMapping(value = "/api/mobile/qr/deepLink", produces = "text/plain")
public String getMobileAppDeepLink(HttpServletRequest request) throws ThingsboardException, URISyntaxException {
String secret = mobileAppSecretService.generateMobileAppSecret(getCurrentUser());
String baseUrl = systemSecurityService.getBaseUrl(TenantId.SYS_TENANT_ID, null, request);

40
application/src/test/java/org/thingsboard/server/controller/QrCodeSettingsControllerTest.java

@ -94,7 +94,7 @@ public class QrCodeSettingsControllerTest extends AbstractControllerTest {
mobileAppBundle = doPost("/api/mobile/bundle", mobileAppBundle, MobileAppBundle.class);
QrCodeSettings qrCodeSettings = doGet("/api/qr/settings", QrCodeSettings.class);
QrCodeSettings qrCodeSettings = doGet("/api/mobile/qr/settings", QrCodeSettings.class);
QRCodeConfig qrCodeConfig = new QRCodeConfig();
qrCodeConfig.setQrCodeLabel(TEST_LABEL);
qrCodeSettings.setUseDefaultApp(true);
@ -123,61 +123,61 @@ public class QrCodeSettingsControllerTest extends AbstractControllerTest {
@Test
public void testSaveQrCodeSettings() throws Exception {
loginSysAdmin();
QrCodeSettings qrCodeSettings = doGet("/api/qr/settings", QrCodeSettings.class);
QrCodeSettings qrCodeSettings = doGet("/api/mobile/qr/settings", QrCodeSettings.class);
assertThat(qrCodeSettings.getQrCodeConfig().getQrCodeLabel()).isEqualTo(TEST_LABEL);
assertThat(qrCodeSettings.isUseDefaultApp()).isTrue();
qrCodeSettings.setUseDefaultApp(false);
qrCodeSettings.setMobileAppBundleId(mobileAppBundle.getId());
doPost("/api/qr/settings", qrCodeSettings)
doPost("/api/mobile/qr/settings", qrCodeSettings)
.andExpect(status().isOk());
QrCodeSettings updatedQrCodeSettings = doGet("/api/qr/settings", QrCodeSettings.class);
QrCodeSettings updatedQrCodeSettings = doGet("/api/mobile/qr/settings", QrCodeSettings.class);
assertThat(updatedQrCodeSettings.isUseDefaultApp()).isFalse();
}
@Test
public void testShouldNotSaveQrCodeSettingsWithoutRequiredConfig() throws Exception {
loginSysAdmin();
QrCodeSettings qrCodeSettings = doGet("/api/qr/settings", QrCodeSettings.class);
QrCodeSettings qrCodeSettings = doGet("/api/mobile/qr/settings", QrCodeSettings.class);
qrCodeSettings.setUseDefaultApp(false);
qrCodeSettings.setQrCodeConfig(null);
qrCodeSettings.setMobileAppBundleId(null);
doPost("/api/qr/settings", qrCodeSettings)
doPost("/api/mobile/qr/settings", qrCodeSettings)
.andExpect(status().isBadRequest())
.andExpect(statusReason(containsString("Mobile app bundle is required to use custom application!")));
qrCodeSettings.setMobileAppBundleId(mobileAppBundle.getId());
doPost("/api/qr/settings", qrCodeSettings)
doPost("/api/mobile/qr/settings", qrCodeSettings)
.andExpect(status().isBadRequest())
.andExpect(statusReason(containsString("Qr code configuration is required!")));
qrCodeSettings.setQrCodeConfig(QRCodeConfig.builder().showOnHomePage(false).build());
doPost("/api/qr/settings", qrCodeSettings)
doPost("/api/mobile/qr/settings", qrCodeSettings)
.andExpect(status().isOk());
}
@Test
public void testShouldSaveQrCodeSettingsForDefaultApp() throws Exception {
loginSysAdmin();
QrCodeSettings qrCodeSettings = doGet("/api/qr/settings", QrCodeSettings.class);
QrCodeSettings qrCodeSettings = doGet("/api/mobile/qr/settings", QrCodeSettings.class);
qrCodeSettings.setUseDefaultApp(true);
qrCodeSettings.setMobileAppBundleId(null);
doPost("/api/qr/settings", qrCodeSettings)
doPost("/api/mobile/qr/settings", qrCodeSettings)
.andExpect(status().isOk());
}
@Test
public void testGetApplicationAssociations() throws Exception {
loginSysAdmin();
QrCodeSettings qrCodeSettings = doGet("/api/qr/settings", QrCodeSettings.class);
QrCodeSettings qrCodeSettings = doGet("/api/mobile/qr/settings", QrCodeSettings.class);
qrCodeSettings.setUseDefaultApp(true);
qrCodeSettings.setMobileAppBundleId(mobileAppBundle.getId());
doPost("/api/qr/settings", qrCodeSettings)
doPost("/api/mobile/qr/settings", qrCodeSettings)
.andExpect(status().isOk());
JsonNode assetLinks = doGet("/.well-known/assetlinks.json", JsonNode.class);
@ -191,7 +191,7 @@ public class QrCodeSettingsControllerTest extends AbstractControllerTest {
@Test
public void testGetMobileDeepLink() throws Exception {
loginSysAdmin();
String deepLink = doGet("/api/qr/deepLink", String.class);
String deepLink = doGet("/api/mobile/qr/deepLink", String.class);
Pattern expectedPattern = Pattern.compile("\"https://([^/]+)/api/noauth/qr\\?secret=([^&]+)&ttl=([^&]+)&host=([^&]+)\"");
Matcher parsedDeepLink = expectedPattern.matcher(deepLink);
@ -206,7 +206,7 @@ public class QrCodeSettingsControllerTest extends AbstractControllerTest {
assertThat(jwtPair).isNotNull();
loginTenantAdmin();
String tenantDeepLink = doGet("/api/qr/deepLink", String.class);
String tenantDeepLink = doGet("/api/mobile/qr/deepLink", String.class);
Matcher tenantParsedDeepLink = expectedPattern.matcher(tenantDeepLink);
assertThat(tenantParsedDeepLink.matches()).isTrue();
String tenantSecret = tenantParsedDeepLink.group(2);
@ -215,7 +215,7 @@ public class QrCodeSettingsControllerTest extends AbstractControllerTest {
assertThat(tenantJwtPair).isNotNull();
loginCustomerUser();
String customerDeepLink = doGet("/api/qr/deepLink", String.class);
String customerDeepLink = doGet("/api/mobile/qr/deepLink", String.class);
Matcher customerParsedDeepLink = expectedPattern.matcher(customerDeepLink);
assertThat(customerParsedDeepLink.matches()).isTrue();
String customerSecret = customerParsedDeepLink.group(2);
@ -225,25 +225,25 @@ public class QrCodeSettingsControllerTest extends AbstractControllerTest {
// update mobile setting to use custom one
loginSysAdmin();
QrCodeSettings qrCodeSettings = doGet("/api/qr/settings", QrCodeSettings.class);
QrCodeSettings qrCodeSettings = doGet("/api/mobile/qr/settings", QrCodeSettings.class);
qrCodeSettings.setUseDefaultApp(false);
qrCodeSettings.setMobileAppBundleId(mobileAppBundle.getId());
doPost("/api/qr/settings", qrCodeSettings);
doPost("/api/mobile/qr/settings", qrCodeSettings);
String customAppDeepLink = doGet("/api/qr/deepLink", String.class);
String customAppDeepLink = doGet("/api/mobile/qr/deepLink", String.class);
Pattern customAppExpectedPattern = Pattern.compile("\"https://([^/]+)/api/noauth/qr\\?secret=([^&]+)&ttl=([^&]+)\"");
Matcher customAppParsedDeepLink = customAppExpectedPattern.matcher(customAppDeepLink);
assertThat(customAppParsedDeepLink.matches()).isTrue();
assertThat(customAppParsedDeepLink.group(1)).isEqualTo("localhost");
loginTenantAdmin();
String tenantCustomAppDeepLink = doGet("/api/qr/deepLink", String.class);
String tenantCustomAppDeepLink = doGet("/api/mobile/qr/deepLink", String.class);
Matcher tenantCustomAppParsedDeepLink = customAppExpectedPattern.matcher(tenantCustomAppDeepLink);
assertThat(tenantCustomAppParsedDeepLink.matches()).isTrue();
assertThat(tenantCustomAppParsedDeepLink.group(1)).isEqualTo("localhost");
loginCustomerUser();
String customerCustomAppDeepLink = doGet("/api/qr/deepLink", String.class);
String customerCustomAppDeepLink = doGet("/api/mobile/qr/deepLink", String.class);
Matcher customerCustomAppParsedDeepLink = customAppExpectedPattern.matcher(customerCustomAppDeepLink);
assertThat(customerCustomAppParsedDeepLink.matches()).isTrue();
assertThat(customerCustomAppParsedDeepLink.group(1)).isEqualTo("localhost");

Loading…
Cancel
Save