Skip to content

Commit

Permalink
DPS 3 - Remote solver complete (#272)
Browse files Browse the repository at this point in the history
* Setup remote servers config

* Testing default dns servers

* Fixing tests

* Fixing test

* Fixing tests

* Fixing test

* Fixing tests

* Fixing tests

* Fixing all tests

* Set default timeout

* Some fixes

* Adjusting version
  • Loading branch information
mageddo authored Feb 3, 2023
1 parent 4bc535e commit 35f7d0f
Show file tree
Hide file tree
Showing 36 changed files with 454 additions and 96 deletions.
4 changes: 3 additions & 1 deletion README.alpha.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ $ ./gradlew shadowJar
$ mkdir reflect &&\
$JAVA_HOME/bin/java -agentlib:native-image-agent=config-output-dir=./reflect -jar build/libs/dns-proxy-server*all.jar
/home/typer/Downloads/dns-proxy-server-linux-amd64-2.19.5/dns-proxy-server -default-dns=false -server-port=5481 --conf-path /tmp/xpto.json
/home/typer/Downloads/dns-proxy-server-linux-amd64-2.19.5/dns-proxy-server -default-dns=false -server-port=5481 -web-server-port=5381
--conf-path /tmp/xpto.json
```

Expand Down
3 changes: 2 additions & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ dependencies {
compileOnly group: 'com.mageddo.nativeimage', name: 'reflection-config-generator', version: '2.4.3'
annotationProcessor group: 'com.mageddo.nativeimage', name: 'reflection-config-generator', version: '2.4.3'


implementation 'io.quarkus:quarkus-arc'
implementation 'io.quarkus:quarkus-resteasy'
implementation 'io.quarkus:quarkus-resteasy-jsonb'
Expand All @@ -41,6 +40,8 @@ dependencies {

implementation group: 'info.picocli', name: 'picocli', version: '4.7.1'

implementation 'com.mageddo.commons:commons-lang:0.1.3'

testCompileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.+'
testAnnotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.+'
testImplementation 'io.quarkus:quarkus-junit5'
Expand Down
39 changes: 12 additions & 27 deletions src/main/java/com/mageddo/dnsproxyserver/config/Config.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package com.mageddo.dnsproxyserver.config;

import com.mageddo.dnsproxyserver.config.entrypoint.LogLevel;
import com.mageddo.dnsproxyserver.server.dns.IpAddr;
import com.mageddo.dnsproxyserver.server.dns.SimpleServer;
import com.mageddo.dnsproxyserver.server.dns.solver.RemoteSolverConfig;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.NonNull;
import lombok.Value;

import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;

/**
Expand All @@ -24,11 +25,12 @@ public class Config {
@NonNull
private String version;

// fixme isso nao precisa estar aqui,
// soh precisa ficar no json para ser respondido quando o solver da base local perguntar
// @NonNull
// @Builder.Default
// private List<DNSServer> remoteDnsServers = new ArrayList<>();
@NonNull
@Builder.Default
private List<IpAddr> remoteDnsServers = new ArrayList<>();

// fixme isso nao precisa estar aqui,
// soh precisa ficar no json para ser respondido quando o solver da base local perguntar
//
// @NonNull
// @Builder.Default
Expand Down Expand Up @@ -67,30 +69,13 @@ public class Config {
@NonNull
private Boolean dpsNetworkAutoConnect;

@NonNull
private Path configPath;

public static SimpleServer.Protocol findDnsServerProtocol() {
return SimpleServer.Protocol.BOTH;
}

public static RemoteSolverConfig findRemoverSolverConfig() {
return new RemoteSolverConfig()
.setIp(new byte[]{8, 8, 8, 8})
.setPort((short) 53);
}

@Value
@AllArgsConstructor
public static class DNSServer {
@NonNull
private String ip;

@NonNull
private Integer port;

public static DNSServer of(String ip, int port) {
return new DNSServer(ip, port);
}
}

@Value
public static class Env {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.mageddo.dnsproxyserver.config;

public interface ConfigDAO {

}
37 changes: 33 additions & 4 deletions src/main/java/com/mageddo/dnsproxyserver/config/Configs.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,20 @@
import com.mageddo.dnsproxyserver.config.entrypoint.ConfigProps;
import com.mageddo.dnsproxyserver.config.entrypoint.JsonConfigs;
import com.mageddo.dnsproxyserver.config.entrypoint.LogLevel;
import com.mageddo.dnsproxyserver.server.dns.IpAddr;
import com.mageddo.dnsproxyserver.utils.Numbers;
import com.mageddo.utils.Files;
import com.mageddo.utils.Tests;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.EnumUtils;
import org.apache.commons.lang3.StringUtils;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import static com.mageddo.dnsproxyserver.utils.ObjectUtils.firstNonBlankRequiring;
import static com.mageddo.dnsproxyserver.utils.ObjectUtils.firstNonNullRequiring;
Expand All @@ -23,11 +30,13 @@ public class Configs {
private static Config instance;

public static Config build(ConfigFlag configFlag) {
final var jsonConfig = JsonConfigs.loadConfig(toAbsolutePath(configFlag));
return build(configFlag, ConfigEnv.fromEnv(), jsonConfig);
final var configPath = toAbsolutePath(configFlag).toAbsolutePath();
final var jsonConfig = JsonConfigs.loadConfig(configPath);
log.info("status=configuring, configFile={}", configPath);
return build(configFlag, ConfigEnv.fromEnv(), jsonConfig, configPath);
}

public static Config build(ConfigFlag flag, ConfigEnv env, ConfigJson json) {
public static Config build(ConfigFlag flag, ConfigEnv env, ConfigJson json, Path configPath) {
return Config.builder()
.version(ConfigProps.getVersion())
.activeEnv(json.getActiveEnv())
Expand All @@ -51,9 +60,18 @@ public static Config build(ConfigFlag flag, ConfigEnv env, ConfigJson json) {
.dpsNetworkAutoConnect(firstNonNullRequiring(
env.getDpsNetworkAutoConnect(), json.getDpsNetworkAutoConnect(), flag.getDpsNetworkAutoConnect()
))
.remoteDnsServers(buildRemoteServers(json.getRemoteDnsServers()))
.configPath(configPath)
.build();
}

static List<IpAddr> buildRemoteServers(List<IpAddr> servers) {
if (servers == null || servers.isEmpty()) {
return Collections.singletonList(IpAddr.of("8.8.8.8:53"));
}
return servers;
}

static LogLevel buildLogLevel(String logLevelName) {
final var logLevel = EnumUtils.getEnumIgnoreCase(LogLevel.class, logLevelName);
if (logLevel == null) {
Expand All @@ -72,7 +90,11 @@ public static String parseLogFile(String v) {
}

public static Config buildAndRegister(String[] args) {
return buildAndRegister(ConfigFlag.parse(args));
final var config = ConfigFlag.parse(args);
if (BooleanUtils.isTrue(config.getHelp()) || config.isVersion()) {
System.exit(0);
}
return buildAndRegister(config);
}

public static Config buildAndRegister(ConfigFlag flag) {
Expand All @@ -84,7 +106,14 @@ public static Config getInstance() {
}

private static Path toAbsolutePath(ConfigFlag configFlag) {
if (runningInTestsAndNoCustomConfigPath(configFlag)) {
return Files.createTempFileExitOnExit("dns-proxy-server-junit", ".json");
}
return Paths.get(configFlag.getConfigPath()); // todo precisa converter para absolute path?!
}

static boolean runningInTestsAndNoCustomConfigPath(ConfigFlag configFlag) {
return !Arrays.toString(configFlag.getArgs()).contains("--conf-path") && Tests.runningOnJunit();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ this way you will probably not have resolution issues by acl (implies dps-networ
)
private Boolean help;

@JsonIgnore
private String[] args;

@JsonIgnore
private CommandLine commandLine;

Expand All @@ -148,14 +151,14 @@ public static ConfigFlag parse(String[] args, PrintWriter writer) {
commandLine.setUsageHelpWidth(120);

final var flags = (ConfigFlag) commandLine.getCommand();
flags.args = args;
flags.commandLine = commandLine;
Validate.isTrue(commandLine.execute(args) == 0, "Execution Failed");

final var shouldExit = (Boolean) flags.getCommandLine().getExecutionResult();
if (shouldExit == null || shouldExit) {
flags.getCommandLine().getOut().flush();
commandLine.getErr().write(String.format("%nexiting...%n"));
System.exit(0);
return flags;
}

return flags;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
package com.mageddo.dnsproxyserver.config.entrypoint;

import com.mageddo.dnsproxyserver.server.dns.IpAddr;

import java.util.List;

public interface ConfigJson {

String getActiveEnv();
Expand All @@ -23,4 +27,6 @@ public interface ConfigJson {
Boolean getDpsNetwork();

Boolean getDpsNetworkAutoConnect();

List<IpAddr> getRemoteDnsServers();
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package com.mageddo.dnsproxyserver.config.entrypoint;

import com.mageddo.dnsproxyserver.server.dns.IP;
import com.mageddo.dnsproxyserver.server.dns.IpAddr;
import com.mageddo.utils.Bytes;
import lombok.Data;

import java.util.List;

@Data
public class ConfigJsonV1 implements ConfigJson {

Expand All @@ -17,6 +22,8 @@ public class ConfigJsonV1 implements ConfigJson {

private Boolean registerContainerNames;

private List<Byte[]> remoteDnsServers;


@Override
public Boolean getDefaultDns() {
Expand All @@ -42,4 +49,16 @@ public Boolean getDpsNetwork() {
public Boolean getDpsNetworkAutoConnect() {
return null;
}

@Override
public List<IpAddr> getRemoteDnsServers() {
return this.remoteDnsServers
.stream()
.map(it -> toIpAddr(Bytes.toNative(it)))
.toList();
}

private IpAddr toIpAddr(byte[] ip) {
return IpAddr.of(IP.of(ip));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.mageddo.dnsproxyserver.config.Config;
import com.mageddo.dnsproxyserver.config.EntryType;
import com.mageddo.dnsproxyserver.server.dns.IpAddr;
import lombok.Data;
import lombok.experimental.Accessors;

Expand Down Expand Up @@ -40,6 +41,13 @@ public class ConfigJsonV2 implements ConfigJson {

private Boolean dpsNetworkAutoConnect;

public List<IpAddr> getRemoteDnsServers(){
return this.remoteDnsServers
.stream()
.map(IpAddr::of)
.toList();
}

@Data
@Accessors(chain = true)
public static class Env {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
import com.mageddo.dnsproxyserver.config.Config;
import com.mageddo.json.JsonUtils;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import java.nio.file.Files;
import java.nio.file.Path;

@Slf4j
public class JsonConfigs {

/**
Expand All @@ -23,6 +25,10 @@ public static ConfigJson loadConfig(Path configPath) {

final var objectMapper = JsonUtils.instance();
final var tree = objectMapper.readTree(configPath.toFile());
if (tree.isEmpty()) {
log.info("status=emptyConfigFile, action=usingDefault, file={}", configPath);
return new ConfigJsonV2();
}
final var version = tree.at("/version").asInt(1);

return switch (version) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.mageddo.dnsproxyserver.server.dns.Hostname;

public interface DockerRepository {
public interface DockerDAO {
/**
*
* @param host
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
@Singleton
@Default
@AllArgsConstructor(onConstructor = @__({@Inject}))
public class DockerRepositoryDefault implements DockerRepository {
public class DockerDAODefault implements DockerDAO {

public static final String RUNNING_STATUS = "running";
private final DockerClient dockerClient;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
@Singleton
@Alternative
@AllArgsConstructor(onConstructor = @__({@Inject}))
public class DockerRepositoryMock implements DockerRepository {
public class DockerDAOMock implements DockerDAO {
@Override
public String findHostIp(Hostname host) {
if (Objects.equals("acme.com", host)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.mageddo.dnsproxyserver.json.converter;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.mageddo.dnsproxyserver.server.dns.IP;

import java.io.IOException;

public class IPConverter {
public static class Serializer extends JsonSerializer<IP> {
@Override
public void serialize(IP value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
if (value == null) {
gen.writeNull();
} else {
gen.writeString(value.raw());
}
}
}

public static class Deserializer extends JsonDeserializer<IP> {
@Override
public IP deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
if (p.currentToken() == null) {
return null;
}
return IP.of(p.getValueAsString());
}
}
}
Loading

0 comments on commit 35f7d0f

Please sign in to comment.