From 52c5ea952db9fe52ccc5fe93da2757977eed11f6 Mon Sep 17 00:00:00 2001
From: Josh Stark
Date: Sun, 17 Mar 2019 18:44:17 +0000
Subject: [PATCH] Only add setup routes if no users
---
.../io/linuxserver/fleet/core/FleetApp.java | 70 ++++++++++++++-----
.../java/io/linuxserver/fleet/core/Main.java | 4 +-
.../io/linuxserver/fleet/web/WebServer.java | 9 +++
.../web/routes/InitialUserFilterRoute.java | 2 +-
.../spark/template/freemarker/setup.ftl | 2 +-
5 files changed, 65 insertions(+), 22 deletions(-)
diff --git a/src/main/java/io/linuxserver/fleet/core/FleetApp.java b/src/main/java/io/linuxserver/fleet/core/FleetApp.java
index 6e5ad9d..979ed7b 100644
--- a/src/main/java/io/linuxserver/fleet/core/FleetApp.java
+++ b/src/main/java/io/linuxserver/fleet/core/FleetApp.java
@@ -17,6 +17,7 @@
package io.linuxserver.fleet.core;
+import io.linuxserver.fleet.web.WebServer;
import io.linuxserver.fleet.web.pages.HomePage;
import io.linuxserver.fleet.web.pages.LoginPage;
import io.linuxserver.fleet.web.pages.ManageRepositoriesPage;
@@ -32,11 +33,30 @@ import java.util.concurrent.TimeUnit;
* through this class.
*
*/
-class FleetApp {
+public class FleetApp {
+
+ private static final String FLEET_USER_UNDEFINED = "fleet.user.undefined";
+
+ private static FleetApp instance;
+
+ public static FleetApp instance() {
+
+ if (null == instance) {
+
+ synchronized (FleetApp.class) {
+
+ if (null == instance) {
+ instance = new FleetApp();
+ }
+ }
+ }
+
+ return instance;
+ }
private final FleetBeans beans;
- FleetApp() {
+ private FleetApp() {
beans = new FleetBeans();
}
@@ -56,25 +76,41 @@ class FleetApp {
SynchronisationWebSocket synchronisationWebSocket = new SynchronisationWebSocket();
beans.getSynchronisationDelegate().registerListener(synchronisationWebSocket);
- beans.getWebServer().addWebSocket("/admin/ws/sync", synchronisationWebSocket);
- beans.getWebServer().addFilter( "*", new InitialUserFilterRoute(beans.getProperties().getAuthenticationType(), beans.getUserDelegate()));
- beans.getWebServer().start();
+ WebServer webServer = beans.getWebServer();
- beans.getWebServer().addPage( "/", new HomePage(beans.getRepositoryDelegate(), beans.getImageDelegate()));
- beans.getWebServer().addGetApi( "/api/v1/images", new AllImagesApi(beans.getRepositoryDelegate(), beans.getImageDelegate()));
- beans.getWebServer().addPage( "/setup", new SetupPage());
- beans.getWebServer().addPostRoute( "/setup", new RegisterInitialUserRoute(beans.getUserDelegate()));
- beans.getWebServer().addPage( "/admin", new ManageRepositoriesPage(beans.getRepositoryDelegate()));
- beans.getWebServer().addPage( "/admin/login", new LoginPage());
- beans.getWebServer().addPostRoute( "/admin/login", new LoginRoute(beans.getAuthenticationDelegate()));
- beans.getWebServer().addPostRoute( "/admin/logout", new LogoutRoute());
- beans.getWebServer().addPostApi( "/admin/manageImage", new ManageImageApi(beans.getImageDelegate()));
- beans.getWebServer().addGetApi( "/admin/getImage", new GetImageApi(beans.getImageDelegate()));
- beans.getWebServer().addPostApi( "/admin/manageRepository", new ManageRepositoryApi(beans.getRepositoryDelegate()));
- beans.getWebServer().addPostApi( "/admin/forceSync", new ForceSyncApi(beans.getTaskDelegate()));
+ webServer.addWebSocket("/admin/ws/sync", synchronisationWebSocket);
+ webServer.addFilter( "*", new InitialUserFilterRoute(beans.getProperties().getAuthenticationType(), beans.getUserDelegate()));
+ webServer.start();
+
+ webServer.addPage( "/", new HomePage(beans.getRepositoryDelegate(), beans.getImageDelegate()));
+ webServer.addGetApi( "/api/v1/images", new AllImagesApi(beans.getRepositoryDelegate(), beans.getImageDelegate()));
+ webServer.addPage( "/admin", new ManageRepositoriesPage(beans.getRepositoryDelegate()));
+ webServer.addPage( "/admin/login", new LoginPage());
+ webServer.addPostRoute( "/admin/login", new LoginRoute(beans.getAuthenticationDelegate()));
+ webServer.addPostRoute( "/admin/logout", new LogoutRoute());
+ webServer.addPostApi( "/admin/manageImage", new ManageImageApi(beans.getImageDelegate()));
+ webServer.addGetApi( "/admin/getImage", new GetImageApi(beans.getImageDelegate()));
+ webServer.addPostApi( "/admin/manageRepository", new ManageRepositoryApi(beans.getRepositoryDelegate()));
+ webServer.addPostApi( "/admin/forceSync", new ForceSyncApi(beans.getTaskDelegate()));
+
+ if (initialUserNeedsConfiguring()) {
+
+ webServer.addPage( "/setup", new SetupPage());
+ webServer.addPostRoute( "/setup", new RegisterInitialUserRoute(beans.getUserDelegate()));
+ }
}
private void scheduleSync() {
beans.getTaskDelegate().scheduleSynchronisationTask(beans.getProperties().getRefreshIntervalInMinutes(), TimeUnit.MINUTES);
}
+
+ private boolean initialUserNeedsConfiguring() {
+
+ String configured = System.getProperty(FLEET_USER_UNDEFINED);
+ if (null == configured || "true".equalsIgnoreCase(configured)) {
+ System.setProperty(FLEET_USER_UNDEFINED, String.valueOf(beans.getUserDelegate().isUserRepositoryEmpty()));
+ }
+
+ return "true".equalsIgnoreCase(System.getProperty(FLEET_USER_UNDEFINED));
+ }
}
diff --git a/src/main/java/io/linuxserver/fleet/core/Main.java b/src/main/java/io/linuxserver/fleet/core/Main.java
index 422f79d..427809e 100644
--- a/src/main/java/io/linuxserver/fleet/core/Main.java
+++ b/src/main/java/io/linuxserver/fleet/core/Main.java
@@ -20,8 +20,6 @@ package io.linuxserver.fleet.core;
public class Main {
public static void main(String[] args) {
-
- FleetApp app = new FleetApp();
- app.run();
+ FleetApp.instance().run();
}
}
diff --git a/src/main/java/io/linuxserver/fleet/web/WebServer.java b/src/main/java/io/linuxserver/fleet/web/WebServer.java
index 533afb9..dbdcb57 100644
--- a/src/main/java/io/linuxserver/fleet/web/WebServer.java
+++ b/src/main/java/io/linuxserver/fleet/web/WebServer.java
@@ -37,10 +37,19 @@ public class WebServer {
staticFiles.expireTime(600);
}
+ public void stopServer() {
+
+ stop();
+
+ started = false;
+ }
+
public void start() {
started = true;
+ init();
+
path("/admin", configureAuthorisationRoute(""));
path("/admin", configureAuthorisationRoute("/images"));
path("/admin", configureAuthorisationRoute("/manageImage"));
diff --git a/src/main/java/io/linuxserver/fleet/web/routes/InitialUserFilterRoute.java b/src/main/java/io/linuxserver/fleet/web/routes/InitialUserFilterRoute.java
index feb4716..e3d78bd 100644
--- a/src/main/java/io/linuxserver/fleet/web/routes/InitialUserFilterRoute.java
+++ b/src/main/java/io/linuxserver/fleet/web/routes/InitialUserFilterRoute.java
@@ -53,7 +53,7 @@ public class InitialUserFilterRoute implements Filter {
if (databaseAuthenticationEnabled) {
if (!initialUserNeedsConfiguring() && "/setup".equals(request.pathInfo())) {
- halt(401);
+ halt(401); // FIXME: I'm unhappy halting here. Need to get the filter chain correct.
}
else if (initialUserNeedsConfiguring() && !pathIsExempted(request.pathInfo())) {
diff --git a/src/main/resources/spark/template/freemarker/setup.ftl b/src/main/resources/spark/template/freemarker/setup.ftl
index 3e4c045..c7ff1a0 100644
--- a/src/main/resources/spark/template/freemarker/setup.ftl
+++ b/src/main/resources/spark/template/freemarker/setup.ftl
@@ -15,7 +15,7 @@
Create a user
-