diff --git a/pom.xml b/pom.xml
index 80db76788..a504c2c4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
1.1.0
5.7.0
- 7.9.0
+ 7.10.0
0.5.8
${project.version}
diff --git a/src/main/java/com/uid2/admin/vertx/service/SiteService.java b/src/main/java/com/uid2/admin/vertx/service/SiteService.java
index 0907b97cd..ae0694c79 100644
--- a/src/main/java/com/uid2/admin/vertx/service/SiteService.java
+++ b/src/main/java/com/uid2/admin/vertx/service/SiteService.java
@@ -1,6 +1,5 @@
package com.uid2.admin.vertx.service;
-import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectWriter;
import com.uid2.admin.auth.AdminAuthMiddleware;
import com.uid2.admin.legacy.ILegacyClientKeyProvider;
@@ -183,16 +182,7 @@ private void handleSiteAdd(RoutingContext rc) {
siteProvider.loadContent();
final String name = rc.queryParam("name").isEmpty() ? "" : rc.queryParam("name").get(0).trim();
- if (name == null || name.isEmpty()) {
- ResponseUtil.error(rc, 400, "must specify a valid site name");
- return;
- }
-
- Optional existingSite = this.siteProvider.getAllSites()
- .stream().filter(c -> c.getName().equals(name))
- .findFirst();
- if (existingSite.isPresent()) {
- ResponseUtil.error(rc, 400, "site existed");
+ if (!validateSiteName(rc, name)) {
return;
}
@@ -375,6 +365,7 @@ private void handleSiteUpdate(RoutingContext rc) {
}
String description = rc.queryParam("description").stream().findFirst().orElse(null);
String visibleParam = rc.queryParam("visible").stream().findFirst().orElse(null);
+ String name = rc.queryParam("name").stream().findFirst().orElse(null);
if (description != null) {
existingSite.setDescription(description);
@@ -388,6 +379,12 @@ private void handleSiteUpdate(RoutingContext rc) {
ResponseUtil.error(rc, 400, "Invalid parameter for visible: " + visibleParam);
}
}
+ if (name != null) {
+ if (!validateSiteName(rc, name)) {
+ return;
+ }
+ existingSite.setName(name);
+ }
uploadSiteToStoreWriterAndWriteExistingSiteToResponse(existingSite, rc);
} catch (Exception e) {
@@ -395,6 +392,22 @@ private void handleSiteUpdate(RoutingContext rc) {
}
}
+ private boolean validateSiteName(RoutingContext rc, String name) {
+ if (name == null || name.isEmpty()) {
+ ResponseUtil.error(rc, 400, "must specify a valid site name");
+ return false;
+ }
+
+ Optional existingSite = this.siteProvider.getAllSites()
+ .stream().filter(c -> c.getName().equals(name))
+ .findFirst();
+ if (existingSite.isPresent()) {
+ ResponseUtil.error(rc, 400, "site with name " + name + " already exists");
+ return false;
+ }
+ return true;
+ }
+
private static List getNormalizedDomainNames(RoutingContext rc, JsonArray domainNamesJa) {
List domainNames = domainNamesJa.stream().map(String::valueOf).collect(Collectors.toList());
diff --git a/src/test/java/com/uid2/admin/vertx/SiteServiceTest.java b/src/test/java/com/uid2/admin/vertx/SiteServiceTest.java
index 6d5447df1..9bee9fe95 100644
--- a/src/test/java/com/uid2/admin/vertx/SiteServiceTest.java
+++ b/src/test/java/com/uid2/admin/vertx/SiteServiceTest.java
@@ -876,4 +876,76 @@ void addSiteWithDuplicateAppNames(Vertx vertx, VertxTestContext testContext) {
testContext.completeNow();
});
}
+
+ @Test
+ void renameSiteTest(Vertx vertx, VertxTestContext testContext) {
+ fakeAuth(Role.MAINTAINER);
+
+ Site[] sites = {
+ new Site(11, "site1", false),
+ new Site(12, "site2", true),
+ new Site(13, "site3", false, Set.of("test1.com", "test2.net")),
+ new Site(14, "site4", false, null, Set.of("test1.com", "test2.net"), Set.of("com.123.game.app.android", "12345678")),
+ };
+ setSites(sites);
+
+ post(vertx, testContext, "api/site/update?id=11&name=NewName", null, response -> {
+ assertEquals(200, response.statusCode());
+ assertEquals("NewName", response.bodyAsJsonObject().getString("name"));
+ assertEquals("NewName", sites[0].getName());
+ // Test other sites are unaffected
+ assertEquals("site2", sites[1].getName());
+ assertEquals("site3", sites[2].getName());
+ assertEquals("site4", sites[3].getName());
+ testContext.completeNow();
+ });
+ }
+
+ @Test
+ void renameSiteTestInvalidName(Vertx vertx, VertxTestContext testContext) {
+ fakeAuth(Role.MAINTAINER);
+
+ Site[] sites = {
+ new Site(11, "site1", false),
+ new Site(12, "site2", true),
+ new Site(13, "site3", false, Set.of("test1.com", "test2.net")),
+ new Site(14, "site4", false, null, Set.of("test1.com", "test2.net"), Set.of("com.123.game.app.android", "12345678")),
+ };
+ setSites(sites);
+
+ post(vertx, testContext, "api/site/update?id=11&name=", null, response -> {
+ assertEquals(400, response.statusCode());
+ assertEquals("must specify a valid site name", response.bodyAsJsonObject().getString("message"));
+ assertEquals("site1", sites[0].getName());
+ // Test other sites are unaffected
+ assertEquals("site2", sites[1].getName());
+ assertEquals("site3", sites[2].getName());
+ assertEquals("site4", sites[3].getName());
+ testContext.completeNow();
+ });
+ }
+
+ @Test
+ void renameSiteTestDuplicate(Vertx vertx, VertxTestContext testContext) {
+ fakeAuth(Role.MAINTAINER);
+
+ Site[] sites = {
+ new Site(11, "site1", false),
+ new Site(12, "site2", true),
+ new Site(13, "site3", false, Set.of("test1.com", "test2.net")),
+ new Site(14, "site4", false, null, Set.of("test1.com", "test2.net"), Set.of("com.123.game.app.android", "12345678")),
+ };
+ setSites(sites);
+
+ post(vertx, testContext, "api/site/update?id=11&name=site2", null, response -> {
+ assertEquals(400, response.statusCode());
+ assertEquals("site with name site2 already exists", response.bodyAsJsonObject().getString("message"));
+ assertEquals("site1", sites[0].getName());
+ // Test other sites are unaffected
+ assertEquals("site2", sites[1].getName());
+ assertEquals("site3", sites[2].getName());
+ assertEquals("site4", sites[3].getName());
+ testContext.completeNow();
+ });
+ }
}
\ No newline at end of file
diff --git a/webroot/adm/site.html b/webroot/adm/site.html
index 76c6d07a6..55f4c48cb 100644
--- a/webroot/adm/site.html
+++ b/webroot/adm/site.html
@@ -58,6 +58,7 @@ Operations
Enable Site
Disable Site
+ Set Name
Set Description
Set Types
Set Site Domain Names
@@ -153,6 +154,16 @@ Output
doApiCall('POST', url, '#standardOutput', '#errorOutput', JSON.stringify(payload));
});
+ $('#doSetName').on('click', function () {
+ var siteId = encodeURIComponent($('#siteId').val());
+
+ var name = encodeURIComponent($('#siteName').val());
+
+ var url = '/api/site/update?id=' + siteId + '&name=' + name;
+
+ doApiCall('POST', url, '#standardOutput', '#errorOutput');
+ });
+
$('#doSetDescription').on('click', function () {
var siteId = encodeURIComponent($('#siteId').val());