From 090263b27952a082cd38031e395cf9e8c4c60e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Zubcevic?= Date: Sun, 22 Nov 2020 15:17:31 +0100 Subject: [PATCH] added start checks with hints on port usage --- .../java/org/owasp/webgoat/StartWebGoat.java | 29 +++++++++++++++ .../main/java/org/owasp/webwolf/WebWolf.java | 35 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/webgoat-server/src/main/java/org/owasp/webgoat/StartWebGoat.java b/webgoat-server/src/main/java/org/owasp/webgoat/StartWebGoat.java index 1d2423ac7..30b2a153b 100644 --- a/webgoat-server/src/main/java/org/owasp/webgoat/StartWebGoat.java +++ b/webgoat-server/src/main/java/org/owasp/webgoat/StartWebGoat.java @@ -26,6 +26,10 @@ package org.owasp.webgoat; import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.net.Socket; + import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @@ -46,6 +50,31 @@ public class StartWebGoat extends SpringBootServletInitializer { public static void main(String[] args) { log.info("Starting WebGoat with args: {}", StringUtils.arrayToCommaDelimitedString(args)); System.setProperty("spring.config.name", "application-webgoat"); + + String webgoatPort = System.getenv("WEBGOAT_PORT"); + String databasePort = System.getenv("WEBGOAT_HSQLPORT"); + String webGoatHost = null==System.getenv("WEBGOAT_HOST")?"127.0.0.1":System.getenv("WEBGOAT_HOST"); + int goatPort = webgoatPort == null?8080:Integer.parseInt(webgoatPort); + int dbPort = databasePort == null?9001:Integer.parseInt(databasePort); + + if (isAlreadyRunning(webGoatHost, goatPort)) { + log.error("Port {}:{} is already in use", webGoatHost, goatPort); + System.out.println("Port "+webGoatHost+":"+goatPort+" is in use. Use environment value WEBGOAT_PORT to set a different value."); + System.exit(-1); + } + if (isAlreadyRunning(webGoatHost, dbPort)) { + log.error("Port {}:{} is already in use", webGoatHost, goatPort); + System.out.println("Port "+webGoatHost+":"+goatPort+" is in use. Use environment value WEBGOAT_HSQLPORT to set a different value."); + System.exit(-1); + } SpringApplication.run(StartWebGoat.class, args); } + + private static boolean isAlreadyRunning(String host, int port) { + try (var ignored = new Socket(host, port)) { + return true; + } catch (IOException e) { + return false; + } + } } diff --git a/webwolf/src/main/java/org/owasp/webwolf/WebWolf.java b/webwolf/src/main/java/org/owasp/webwolf/WebWolf.java index bb624dfd4..d798d2ef0 100644 --- a/webwolf/src/main/java/org/owasp/webwolf/WebWolf.java +++ b/webwolf/src/main/java/org/owasp/webwolf/WebWolf.java @@ -30,6 +30,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.jdbc.datasource.DriverManagerDataSource; +import java.io.IOException; +import java.net.Socket; + import javax.sql.DataSource; @SpringBootApplication @@ -42,6 +45,30 @@ public class WebWolf { public static void main(String[] args) { System.setProperty("spring.config.name", "application-webwolf"); + + String webwolfPort = System.getenv("WEBWOLF_PORT"); + String databasePort = System.getenv("WEBGOAT_HSQLPORT"); + String webGoatHost = null==System.getenv("WEBGOAT_HOST")?"127.0.0.1":System.getenv("WEBGOAT_HOST"); + String webWolfHost = null==System.getenv("WEBWOLF_HOST")?"127.0.0.1":System.getenv("WEBWOLF_HOST"); + String fileEncoding = System.getProperty("file.encoding"); + + int wolfPort = webwolfPort == null?9090:Integer.parseInt(webwolfPort); + int dbPort = databasePort == null?9001:Integer.parseInt(databasePort); + + if (null==fileEncoding || !fileEncoding.equals("UTF-8")) { + System.out.println("It seems the application is startd on a OS with non default UTF-8 encoding:"+fileEncoding); + System.out.println("Please add: -Dfile.encoding=UTF-8"); + System.exit(-1); + } + + if (!isAlreadyRunning(webGoatHost, dbPort)) { + System.out.println("It seems that the required database is not running. Please start WebGoat with the integrated or standalone database first."); + System.exit(-1); + } + if (isAlreadyRunning(webGoatHost, wolfPort)) { + System.out.println("Port "+webWolfHost+":"+wolfPort+" is in use. Use environment value WEBWOLF_PORT to set a different value."); + System.exit(-1); + } SpringApplication.run(WebWolf.class, args); } @@ -51,4 +78,12 @@ public class WebWolf { driverManagerDataSource.setDriverClassName(driverClassName); return driverManagerDataSource; } + + private static boolean isAlreadyRunning(String host, int port) { + try (var ignored = new Socket(host, port)) { + return true; + } catch (IOException e) { + return false; + } + } }