add-domain-setup-validation #71
@ -5,6 +5,7 @@ import net.hostsharing.hsadminng.hs.hosting.asset.HsHostingAssetType;
|
|||||||
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import static java.util.Arrays.stream;
|
||||||
import static net.hostsharing.hsadminng.hs.validation.ArrayProperty.arrayOf;
|
import static net.hostsharing.hsadminng.hs.validation.ArrayProperty.arrayOf;
|
||||||
import static net.hostsharing.hsadminng.hs.validation.BooleanProperty.booleanProperty;
|
import static net.hostsharing.hsadminng.hs.validation.BooleanProperty.booleanProperty;
|
||||||
import static net.hostsharing.hsadminng.hs.validation.IntegerProperty.integerProperty;
|
import static net.hostsharing.hsadminng.hs.validation.IntegerProperty.integerProperty;
|
||||||
@ -53,4 +54,21 @@ class HsDomainDnsSetupHostingAssetValidator extends HsHostingAssetEntityValidato
|
|||||||
// FIXME: should be auto-initialized
|
// FIXME: should be auto-initialized
|
||||||
return Pattern.compile("^" + assetEntity.getParentAsset().getIdentifier() + "$");
|
return Pattern.compile("^" + assetEntity.getParentAsset().getIdentifier() + "$");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String toZonefileString(final HsHostingAssetEntity assetEntity) {
|
||||||
|
return """
|
||||||
|
$ORIGIN {domain}.
|
||||||
|
$TTL {ttl}
|
||||||
|
|
||||||
|
; these records are just placeholders to create a valid zonefile for the validation
|
||||||
|
@ 1814400 IN SOA {domain}. root.{domain} ( 1999010100 10800 900 604800 86400 )
|
||||||
|
@ IN NS ns
|
||||||
|
|
||||||
|
{userRRs}
|
||||||
|
"""
|
||||||
|
.replace("{domain}", assetEntity.getIdentifier())
|
||||||
|
.replace("{ttl}", getPropertyValue(assetEntity, "TTL"))
|
||||||
|
.replace("{userRRs}", getPropertyValues(assetEntity, "user-RR") );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,9 @@ import java.util.Arrays;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static java.util.Arrays.stream;
|
import static java.util.Arrays.stream;
|
||||||
import static java.util.Collections.emptyList;
|
import static java.util.Collections.emptyList;
|
||||||
@ -41,6 +43,12 @@ public abstract class HsEntityValidator<E extends PropertiesProvider> {
|
|||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final Map<String, Map<String, Object>> propertiesMap() {
|
||||||
|
return Arrays.stream(propertyValidators)
|
||||||
|
.map(ValidatableProperty::toOrderedMap)
|
||||||
|
.collect(Collectors.toMap(p -> p.get("propertyName").toString(), p -> p));
|
||||||
|
}
|
||||||
|
|
||||||
protected ArrayList<String> validateProperties(final PropertiesProvider propsProvider) {
|
protected ArrayList<String> validateProperties(final PropertiesProvider propsProvider) {
|
||||||
final var result = new ArrayList<String>();
|
final var result = new ArrayList<String>();
|
||||||
|
|
||||||
@ -109,4 +117,20 @@ public abstract class HsEntityValidator<E extends PropertiesProvider> {
|
|||||||
});
|
});
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String getPropertyValue(final PropertiesProvider entity, final String propertyName) {
|
||||||
|
final var rawValue = entity.getDirectValue(propertyName, Object.class);
|
||||||
|
if (rawValue != null) {
|
||||||
|
return rawValue.toString();
|
||||||
|
}
|
||||||
|
return Objects.toString(propertiesMap().get(propertyName).get("defaultValue"));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getPropertyValues(final PropertiesProvider entity, final String propertyName) {
|
||||||
|
final var rawValue = entity.getDirectValue(propertyName, Object[].class);
|
||||||
|
if (rawValue != null) {
|
||||||
|
return stream(rawValue).map(Object::toString).collect(Collectors.joining("\n"));
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -126,4 +126,29 @@ class HsDomainDnsSetupHostingAssetValidatorUnitTest {
|
|||||||
|
|
||||||
assertThat("; whatever ; \" really anything").matches(RR_COMMENT);
|
assertThat("; whatever ; \" really anything").matches(RR_COMMENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void generatesZonefile() {
|
||||||
|
// given
|
||||||
|
final var givenEntity = validEntityBuilder().identifier("example.org").build();
|
||||||
|
final var validator = (HsDomainDnsSetupHostingAssetValidator) HsHostingAssetEntityValidatorRegistry.forType(givenEntity.getType());
|
||||||
|
|
||||||
|
// when
|
||||||
|
final var zonefile = validator.toZonefileString(givenEntity);
|
||||||
|
|
||||||
|
// then
|
||||||
|
assertThat(zonefile).isEqualTo("""
|
||||||
|
$ORIGIN example.org.
|
||||||
|
$TTL 21600
|
||||||
|
|
||||||
|
; these records are just placeholders to create a valid zonefile for the validation
|
||||||
|
@ 1814400 IN SOA example.org. root.example.org ( 1999010100 10800 900 604800 86400 )
|
||||||
|
@ IN NS ns
|
||||||
|
|
||||||
|
www IN CNAME example.com. ; www.example.com is an alias for example.com
|
||||||
|
test1 IN 1h30m CNAME example.com.
|
||||||
|
test2 1h30m IN CNAME example.com.
|
||||||
|
ns IN A 192.0.2.2; IPv4 address for ns.example.com
|
||||||
|
""");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user