From 983434613e56852f525b0a880242cfde486d2e85 Mon Sep 17 00:00:00 2001 From: Dirk Heuvels Date: Sat, 9 Jul 2022 23:27:44 +0200 Subject: [PATCH] APPNG-2442 Working implementation of the feature. --- .../conf/datasources/ds-sites.xml | 3 ++ .../dictionary/manager-messages.properties | 5 +-- .../dictionary/manager-messages_de.properties | 3 +- .../application/manager/form/SiteForm.java | 35 +++++++++++++++---- .../manager/service/ManagerService.java | 6 ++-- 5 files changed, 41 insertions(+), 11 deletions(-) diff --git a/application-home/conf/datasources/ds-sites.xml b/application-home/conf/datasources/ds-sites.xml index b33cf85..f8e200e 100644 --- a/application-home/conf/datasources/ds-sites.xml +++ b/application-home/conf/datasources/ds-sites.xml @@ -161,6 +161,9 @@ + + + diff --git a/application-home/dictionary/manager-messages.properties b/application-home/dictionary/manager-messages.properties index 68fdc2f..ce5a41c 100644 --- a/application-home/dictionary/manager-messages.properties +++ b/application-home/dictionary/manager-messages.properties @@ -351,8 +351,9 @@ site.deleted=Site has been deleted. site.domain.exists=A different site with this domain already exists! site.edit=Site {0} site.grant=Grant access to sites -site.host.exists=Hostname overlaps with names of site "{0}"! -site.hostalias.exists=Hostname aliases overlap with names of site "{0}"! +site.host.exists=Hostname overlaps with hostnames of site "{0}"! +site.hostalias.exists=Hostname aliases overlap with hostnames of site "{0}"! +site.hostalias.invalid=Hostname alias "{0}" is not a valid hostname. site.name.exists=A different site with this name already exists! site.not.exists=Site does not exist. site.properties=Site properties diff --git a/application-home/dictionary/manager-messages_de.properties b/application-home/dictionary/manager-messages_de.properties index 52f9ecd..0f590e9 100644 --- a/application-home/dictionary/manager-messages_de.properties +++ b/application-home/dictionary/manager-messages_de.properties @@ -293,7 +293,8 @@ site.domain.exists=Eine andere Seite mit dieser Domäne existiert bereits! site.edit=Site {0} site.grant=Zugriff für Sites erlauben site.host.exists=Dieser Hostname wird bereits als Name von der Seite "{0}" benutzt! -site.hostalias.exists=Einer dieser Alias Hostnamen wird bereits als Name von der Seite "{0}" benutzt! +site.hostalias.exists=Einer der Alias Hostnamen wird bereits als Name von der Seite "{0}" benutzt! +site.hostalias.invalid=Alias Hostname "{0}" ist kein valider Hostname. site.name.exists=Eine andere Seite mit diesem Namen existiert bereits! site.not.exists=Die angeforderte Site existiert nicht. site.properties=Site Einstellungen diff --git a/src/main/java/org/appng/application/manager/form/SiteForm.java b/src/main/java/org/appng/application/manager/form/SiteForm.java index 5c7e618..7415635 100644 --- a/src/main/java/org/appng/application/manager/form/SiteForm.java +++ b/src/main/java/org/appng/application/manager/form/SiteForm.java @@ -15,6 +15,7 @@ */ package org.appng.application.manager.form; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -23,7 +24,16 @@ import java.util.stream.Collectors; import javax.validation.Valid; +import org.appng.api.Environment; +import org.appng.api.FieldProcessor; +import org.appng.api.FormValidator; +import org.appng.api.Options; +import org.appng.api.Request; +import org.appng.api.model.Application; +import org.appng.api.model.Site; +import org.appng.application.manager.MessageConstants; import org.appng.core.domain.SiteImpl; +import org.appng.core.domain.ValidationPatterns; /** * Bindclass used for creating/updating a {@link SiteImpl}. @@ -31,7 +41,7 @@ * @author Matthias Müller * */ -public class SiteForm { +public class SiteForm implements FormValidator { private SiteImpl site; private String template; @@ -61,15 +71,19 @@ public void setTemplate(String template) { this.template = template; } + private List _getHostAliases() { + return site.getHostNames().stream().filter(hn -> !site.getHost().equals(hn)).sorted() + .collect(Collectors.toList()); + } + public String getHostAliases() { - List hostAliases = site.getHostNames().stream().sorted().filter( - p -> !site.getHost().equals(p)).collect(Collectors.toList() - ); - return String.join(System.lineSeparator(), hostAliases); + return String.join(System.lineSeparator(), _getHostAliases()); } public void setHostAliases(String hostAliases) { - Set hostnames = new HashSet<>(); + Set hostnames = new HashSet(); + hostnames.add(site.getHost()); + Pattern splitPattern = Pattern.compile("^[ \t]*(.+?)[ \t]*$", Pattern.MULTILINE); Matcher splitMatcher = splitPattern.matcher(hostAliases); while(splitMatcher.find()) { @@ -78,4 +92,13 @@ public void setHostAliases(String hostAliases) { site.setHostNames(hostnames); } + public void validate(Site site, Application application, Environment environment, Options options, Request request, + FieldProcessor fp) { + for (String name : _getHostAliases()) { + if (! Pattern.matches(ValidationPatterns.HOST_PATTERN, name)) + fp.addErrorMessage(fp.getField("hostAliases"), + request.getMessage(MessageConstants.SITE_HOSTALIAS_INVALID, name)); + } + } + } diff --git a/src/main/java/org/appng/application/manager/service/ManagerService.java b/src/main/java/org/appng/application/manager/service/ManagerService.java index 23a0816..c54732e 100644 --- a/src/main/java/org/appng/application/manager/service/ManagerService.java +++ b/src/main/java/org/appng/application/manager/service/ManagerService.java @@ -1091,9 +1091,11 @@ private void checkSite(Request request, Site site, FieldProcessor fp, Site curre if (site.getId() == ovlSite.getId()) continue; else { if (ovlSite.getHostNames().contains(site.getHost())) - fp.addErrorMessage(fp.getField("site.host"), request.getMessage(MessageConstants.SITE_HOST_EXISTS, ovlSite.getName())); + fp.addErrorMessage(fp.getField("site.host"), request.getMessage(MessageConstants.SITE_HOST_EXISTS, + ovlSite.getName())); else - fp.addErrorMessage(fp.getField("hostAliases"), request.getMessage(MessageConstants.SITE_HOSTALIAS_EXISTS, ovlSite.getName())); + fp.addErrorMessage(fp.getField("hostAliases"), request.getMessage(MessageConstants.SITE_HOSTALIAS_EXISTS, + ovlSite.getName())); } } if (!siteRepository.isUnique(site.getId(), "domain", site.getDomain())) {