From 1ae2362af1b7dedbc76057951dbcd3282ce60ef0 Mon Sep 17 00:00:00 2001 From: Sven Carstensen Date: Wed, 20 Aug 2025 10:37:35 +0200 Subject: [PATCH] Erweiterungen --- .../emulatorstation/Application.java | 25 ++++++++++--------- .../base/ui/view/MainView.java | 25 +++++++++++-------- .../base/ui/view/RootView.java | 1 - .../base/ui/view/security/SecurityConfig.java | 8 +++--- .../emulatorstation/pojo/UserInfo.java | 6 +++++ 5 files changed, 39 insertions(+), 26 deletions(-) create mode 100644 src/main/java/de/assecutor/emulatorstation/pojo/UserInfo.java diff --git a/src/main/java/de/assecutor/emulatorstation/Application.java b/src/main/java/de/assecutor/emulatorstation/Application.java index 721c3f8..d3e0a2a 100644 --- a/src/main/java/de/assecutor/emulatorstation/Application.java +++ b/src/main/java/de/assecutor/emulatorstation/Application.java @@ -6,23 +6,24 @@ import com.vaadin.flow.theme.Theme; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.util.Map; +import de.assecutor.emulatorstation.pojo.UserInfo; @SpringBootApplication @Push @Theme("default") public class Application implements AppShellConfigurator { - public static final Map users = Map.ofEntries( - Map.entry("admin", "ZY6X9X93Co8m"), - Map.entry("GFL", "GFL123"), - Map.entry("Berlin", "Berlin123"), - Map.entry("Bremen", "Bremen123"), - Map.entry("Hamburg", "Hamburg123"), - Map.entry("Essen", "Essen123"), - Map.entry("Leipzig", "Leipzig123"), - Map.entry("Dresden", "Dresden123"), - Map.entry("Hannover", "Hannover123"), - Map.entry("Stuttgart", "Stuttgart123"), - Map.entry("FrankfurtAmMain", "FrankfurtAmMain123") + public static final Map users = Map.ofEntries( + Map.entry("admin", new UserInfo("ZY6X9X93Co8m", null)), + Map.entry("GFL", new UserInfo("GFL123", "172.18.0.100")), + Map.entry("Berlin", new UserInfo("Berlin123", "172.18.0.101")), + Map.entry("Bremen", new UserInfo("Bremen123", "172.18.0.102")), + Map.entry("Hamburg", new UserInfo("Hamburg123", "172.18.0.103")), + Map.entry("Essen", new UserInfo("Essen123", "172.18.0.104")), + Map.entry("Leipzig", new UserInfo("Leipzig123", "172.18.0.105")), + Map.entry("Dresden", new UserInfo("Dresden123", "172.18.0.106")), + Map.entry("Hannover", new UserInfo("Hannover123", "172.18.0.107")), + Map.entry("Stuttgart", new UserInfo("Stuttgart123", "172.18.0.108")), + Map.entry("FrankfurtAmMain", new UserInfo("FrankfurtAmMain123", "172.18.0.109")) ); public static void main(String[] args) { diff --git a/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java b/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java index 36403d3..e5a9a66 100644 --- a/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java +++ b/src/main/java/de/assecutor/emulatorstation/base/ui/view/MainView.java @@ -18,6 +18,7 @@ import com.vaadin.flow.router.Route; import com.vaadin.flow.server.auth.AnonymousAllowed; import com.vaadin.flow.theme.lumo.LumoUtility; import de.assecutor.emulatorstation.pojo.ExecResponse; +import de.assecutor.emulatorstation.Application; import jakarta.annotation.security.PermitAll; import util.Util; @@ -38,8 +39,6 @@ public final class MainView extends Main implements BeforeEnterObserver private final IFrame webView; - private UI ui; - private final ExecutorService executor = Executors.newSingleThreadExecutor(); MainView() { @@ -97,7 +96,7 @@ public final class MainView extends Main implements BeforeEnterObserver add(webView); addAttachListener(event -> { - ui = event.getUI(); + event.getUI(); }); } @@ -145,7 +144,7 @@ public final class MainView extends Main implements BeforeEnterObserver } private void refreshWebView() { - webView.setSrc("http://" + server + ":6080/?autoconnect=true"); + webView.setSrc("http://" + Application.users.get(username).ip() + ":6080/?autoconnect=true"); webView.reload(); } @@ -307,11 +306,7 @@ public final class MainView extends Main implements BeforeEnterObserver "WEB_VNC=true" ], "HostConfig": { - "PortBindings": { - "6080/tcp": [ - { "HostPort": "6080" } - ] - }, + "NetworkMode": "votianBridge", "Devices": [ { "PathOnHost": "/dev/kvm", @@ -322,10 +317,20 @@ public final class MainView extends Main implements BeforeEnterObserver }, "ExposedPorts": { "6080/tcp": {} + }, + "NetworkingConfig": { + "EndpointsConfig": { + "votianBridge": { + "IPAMConfig": { + "IPv4Address": "%s" + } + } + } } } - """; + """.formatted(Application.users.get(username).ip()); + System.out.println(jsonPayload); // HTTP-Request erstellen HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://" + server + ":2375/containers/create?name=android-container-" + username)) diff --git a/src/main/java/de/assecutor/emulatorstation/base/ui/view/RootView.java b/src/main/java/de/assecutor/emulatorstation/base/ui/view/RootView.java index 4c6cb80..b023817 100644 --- a/src/main/java/de/assecutor/emulatorstation/base/ui/view/RootView.java +++ b/src/main/java/de/assecutor/emulatorstation/base/ui/view/RootView.java @@ -3,7 +3,6 @@ package de.assecutor.emulatorstation.base.ui.view; import com.vaadin.flow.router.BeforeEnterEvent; import com.vaadin.flow.router.BeforeEnterObserver; import com.vaadin.flow.router.Route; -import com.vaadin.flow.server.VaadinService; @Route("") public class RootView implements BeforeEnterObserver { diff --git a/src/main/java/de/assecutor/emulatorstation/base/ui/view/security/SecurityConfig.java b/src/main/java/de/assecutor/emulatorstation/base/ui/view/security/SecurityConfig.java index 6974bf8..56a9444 100644 --- a/src/main/java/de/assecutor/emulatorstation/base/ui/view/security/SecurityConfig.java +++ b/src/main/java/de/assecutor/emulatorstation/base/ui/view/security/SecurityConfig.java @@ -13,6 +13,7 @@ import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import de.assecutor.emulatorstation.Application; +import de.assecutor.emulatorstation.pojo.UserInfo; @Configuration public class SecurityConfig extends VaadinWebSecurity { @@ -38,9 +39,9 @@ public class SecurityConfig extends VaadinWebSecurity { @Bean public UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); - Application.users.forEach((username, rawPassword) -> + Application.users.forEach((username, info) -> manager.createUser(User.withUsername(username) - .password(rawPassword) + .password(info.password()) .roles("USER") .build()) ); @@ -61,7 +62,8 @@ public class SecurityConfig extends VaadinWebSecurity { String username = authentication.getName(); session.setAttribute("user", username); session.setAttribute("username", username); - response.sendRedirect("/main"); + String target = "admin".equalsIgnoreCase(username) ? "/admin" : "/main"; + response.sendRedirect(target); }; } } diff --git a/src/main/java/de/assecutor/emulatorstation/pojo/UserInfo.java b/src/main/java/de/assecutor/emulatorstation/pojo/UserInfo.java new file mode 100644 index 0000000..8818ffc --- /dev/null +++ b/src/main/java/de/assecutor/emulatorstation/pojo/UserInfo.java @@ -0,0 +1,6 @@ +package de.assecutor.emulatorstation.pojo; + +public record UserInfo(String password, String ip) { +} + +