From 8586315e83a424573b4ada9b3923f64cedc91c59 Mon Sep 17 00:00:00 2001
From: Dario Ghunney Ware <dariogware@gmail.com>
Date: Mon, 28 Apr 2025 17:36:27 +0100
Subject: [PATCH] adding new common module

---
 build.gradle                                  |   4 +-
 settings.gradle                               |   2 +
 .../software/SPDF/EE/EEAppConfig.java         |   8 +-
 .../SPDF/EE/KeygenLicenseVerifier.java        |   2 +-
 .../software/SPDF/EE/LicenseKeyChecker.java   |   2 +-
 .../software/SPDF/SPDFApplication.java        |   5 +-
 .../software/SPDF/UI/impl/DesktopBrowser.java |   2 +-
 .../SPDF/config/AppUpdateService.java         |   2 +-
 .../SPDF/config/ConfigInitializer.java        |   2 +
 .../SPDF/config/EndpointConfiguration.java    |   2 +-
 .../software/SPDF/config/InitialSetup.java    |   2 +-
 .../SPDF/config/LocaleConfiguration.java      |   2 +-
 .../SPDF/config/LogbackPropertyLoader.java    |   2 +
 .../software/SPDF/config/OpenApiConfig.java   |   2 +-
 .../SPDF/config/RuntimePathConfig.java        |   7 +-
 .../software/SPDF/config/WebMvcConfig.java    |   2 +
 .../config/interfaces/DatabaseInterface.java  |   2 +-
 .../config/security/AppUpdateAuthService.java |   2 +-
 .../security/CustomLogoutSuccessHandler.java  |   8 +-
 .../config/security/InitialSecuritySetup.java |   4 +-
 .../config/security/LoginAttemptService.java  |   2 +-
 .../security/SecurityConfiguration.java       |   2 +-
 .../security/UserAuthenticationFilter.java    |   8 +-
 .../SPDF/config/security/UserService.java     |   3 +-
 .../security/database/DatabaseConfig.java     |   6 +-
 .../security/database/DatabaseService.java    |   4 +-
 .../security/database/ScheduledTasks.java     |   2 +-
 ...tomOAuth2AuthenticationSuccessHandler.java |   6 +-
 .../oauth2/CustomOAuth2UserService.java       |   6 +-
 .../security/oauth2/OAuth2Configuration.java  |  19 +-
 ...stomSaml2AuthenticationSuccessHandler.java |   6 +-
 .../security/saml2/SAML2Configuration.java    |   4 +-
 .../controller/api/SettingsController.java    |   4 +-
 .../SPDF/controller/api/UserController.java   |   4 +-
 .../api/converters/ConvertHtmlToPDF.java      |   2 +-
 .../api/converters/ConvertMarkdownToPdf.java  |   2 +-
 .../api/converters/ConvertWebsiteToPDF.java   |   2 +-
 .../controller/api/misc/OCRController.java    |   2 +-
 .../controller/web/AccountWebController.java  |  18 +-
 .../controller/web/GeneralWebController.java  |   2 +-
 .../controller/web/HomeWebController.java     |   2 +-
 .../controller/web/MetricsController.java     |   2 +-
 .../controller/web/OtherWebController.java    |   2 +-
 .../controller/web/UploadLimitService.java    |   2 +-
 .../SPDF/service/LanguageService.java         |   2 +-
 .../SPDF/service/PdfMetadataService.java      |   2 +-
 .../software/SPDF/service/PostHogService.java |   2 +-
 .../SPDF/service/SignatureService.java        |   2 +-
 .../software/SPDF/utils/GeneralUtils.java     |   2 +-
 .../software/SPDF/utils/ProcessExecutor.java  |   2 +-
 .../software/SPDF/SPDFApplicationTest.java    |   2 +-
 .../CustomLogoutSuccessHandlerTest.java       |   2 +-
 .../security/database/DatabaseConfigTest.java |   4 +-
 .../converters/ConvertWebsiteToPdfTest.java   |   2 +-
 stirling-common/.gitignore                    | 196 ++++++++++++++++++
 .../common/configuration}/AppConfig.java      |   4 +-
 .../configuration}/ApplicationProperties.java |  27 ++-
 .../FileFallbackTemplateResolver.java         |   5 +-
 .../InstallationPathConfig.java               |   2 +-
 .../YamlPropertySourceFactory.java            |   2 +-
 .../model/InputStreamTemplateResource.java    |   2 +-
 .../model/enumeration}/UsernameAttribute.java |   2 +-
 .../UnsupportedProviderException.java         |   2 +-
 .../UnsupportedUsernameAttribute.java         |   2 +-
 .../model/provider/GitHubProvider.java        |   6 +-
 .../model/provider/GoogleProvider.java        |   6 +-
 .../model/provider/KeycloakProvider.java      |   6 +-
 .../common}/model/provider/Provider.java      |  11 +-
 .../software/common/util}/Validator.java      |   5 +-
 .../software/common/util}/ValidatorTest.java  |  21 +-
 70 files changed, 343 insertions(+), 154 deletions(-)
 create mode 100644 stirling-common/.gitignore
 rename {src/main/java/stirling/software/SPDF/config => stirling-common/src/main/java/stirling/software/common/configuration}/AppConfig.java (98%)
 rename {src/main/java/stirling/software/SPDF/model => stirling-common/src/main/java/stirling/software/common/configuration}/ApplicationProperties.java (95%)
 rename {src/main/java/stirling/software/SPDF/config => stirling-common/src/main/java/stirling/software/common/configuration}/FileFallbackTemplateResolver.java (94%)
 rename {src/main/java/stirling/software/SPDF/config => stirling-common/src/main/java/stirling/software/common/configuration}/InstallationPathConfig.java (98%)
 rename {src/main/java/stirling/software/SPDF/config => stirling-common/src/main/java/stirling/software/common/configuration}/YamlPropertySourceFactory.java (95%)
 rename {src/main/java/stirling/software/SPDF => stirling-common/src/main/java/stirling/software/common}/model/InputStreamTemplateResource.java (96%)
 rename {src/main/java/stirling/software/SPDF/model => stirling-common/src/main/java/stirling/software/common/model/enumeration}/UsernameAttribute.java (90%)
 rename {src/main/java/stirling/software/SPDF => stirling-common/src/main/java/stirling/software/common}/model/exception/UnsupportedProviderException.java (75%)
 rename {src/main/java/stirling/software/SPDF => stirling-common/src/main/java/stirling/software/common}/model/exception/UnsupportedUsernameAttribute.java (76%)
 rename {src/main/java/stirling/software/SPDF => stirling-common/src/main/java/stirling/software/common}/model/provider/GitHubProvider.java (94%)
 rename {src/main/java/stirling/software/SPDF => stirling-common/src/main/java/stirling/software/common}/model/provider/GoogleProvider.java (94%)
 rename {src/main/java/stirling/software/SPDF => stirling-common/src/main/java/stirling/software/common}/model/provider/KeycloakProvider.java (93%)
 rename {src/main/java/stirling/software/SPDF => stirling-common/src/main/java/stirling/software/common}/model/provider/Provider.java (93%)
 rename {src/main/java/stirling/software/SPDF/utils/validation => stirling-common/src/main/java/stirling/software/common/util}/Validator.java (87%)
 rename {src/test/java/stirling/software/SPDF/utils/validation => stirling-common/src/test/java/stirling/software/common/util}/ValidatorTest.java (80%)

diff --git a/build.gradle b/build.gradle
index 58dfb77ab..413137fb7 100644
--- a/build.gradle
+++ b/build.gradle
@@ -412,7 +412,9 @@ configurations.all {
     // Exclude Tomcat
     exclude group: "org.springframework.boot", module: "spring-boot-starter-tomcat"
 }
+
 dependencies {
+    implementation project(':stirling-common')
 
     //tmp for security bumps
     implementation 'ch.qos.logback:logback-core:1.5.18'
@@ -447,8 +449,6 @@ dependencies {
 
 
     if (System.getenv("DOCKER_ENABLE_SECURITY") != "false") {
-
-	    implementation 'org.springframework.boot:spring-boot-starter-actuator'
 	    implementation 'io.micrometer:micrometer-registry-prometheus'
 
         implementation "org.springframework.boot:spring-boot-starter-security:$springBootVersion"
diff --git a/settings.gradle b/settings.gradle
index 6f039dc93..03629c96f 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -3,3 +3,5 @@ plugins {
     id 'org.gradle.toolchains.foojay-resolver-convention' version '0.10.0'
 }
 rootProject.name = 'Stirling-PDF'
+
+include 'stirling-common'
\ No newline at end of file
diff --git a/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java b/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java
index dd08816e5..ea92b183e 100644
--- a/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java
+++ b/src/main/java/stirling/software/SPDF/EE/EEAppConfig.java
@@ -8,10 +8,10 @@ import org.springframework.core.annotation.Order;
 import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.EE.KeygenLicenseVerifier.License;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.EnterpriseEdition;
-import stirling.software.SPDF.model.ApplicationProperties.Premium;
-import stirling.software.SPDF.model.ApplicationProperties.Premium.ProFeatures.GoogleDrive;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.EnterpriseEdition;
+import stirling.software.common.configuration.ApplicationProperties.Premium;
+import stirling.software.common.configuration.ApplicationProperties.Premium.ProFeatures.GoogleDrive;
 
 @Configuration
 @Order(Ordered.HIGHEST_PRECEDENCE)
diff --git a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java b/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java
index 473f5f385..62913be90 100644
--- a/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java
+++ b/src/main/java/stirling/software/SPDF/EE/KeygenLicenseVerifier.java
@@ -19,8 +19,8 @@ import com.posthog.java.shaded.org.json.JSONObject;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.utils.GeneralUtils;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java b/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java
index 8e5633f41..b9014bd3d 100644
--- a/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java
+++ b/src/main/java/stirling/software/SPDF/EE/LicenseKeyChecker.java
@@ -11,8 +11,8 @@ import org.springframework.stereotype.Component;
 import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.EE.KeygenLicenseVerifier.License;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.utils.GeneralUtils;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Component
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/SPDFApplication.java b/src/main/java/stirling/software/SPDF/SPDFApplication.java
index 34fb5257e..73a89d4fb 100644
--- a/src/main/java/stirling/software/SPDF/SPDFApplication.java
+++ b/src/main/java/stirling/software/SPDF/SPDFApplication.java
@@ -28,13 +28,14 @@ import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.UI.WebBrowser;
 import stirling.software.SPDF.config.ConfigInitializer;
-import stirling.software.SPDF.config.InstallationPathConfig;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.utils.UrlUtils;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Slf4j
 @EnableScheduling
 @SpringBootApplication(
+        scanBasePackages = {"stirling.software.common", "stirling.software.SPDF"},
         exclude = {
             DataSourceAutoConfiguration.class,
             DataSourceTransactionManagerAutoConfiguration.class
diff --git a/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java b/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java
index 2f6593734..732928bed 100644
--- a/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java
+++ b/src/main/java/stirling/software/SPDF/UI/impl/DesktopBrowser.java
@@ -43,8 +43,8 @@ import me.friwi.jcefmaven.MavenCefAppHandlerAdapter;
 import me.friwi.jcefmaven.impl.progress.ConsoleProgressHandler;
 
 import stirling.software.SPDF.UI.WebBrowser;
-import stirling.software.SPDF.config.InstallationPathConfig;
 import stirling.software.SPDF.utils.UIScaling;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Component
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/config/AppUpdateService.java b/src/main/java/stirling/software/SPDF/config/AppUpdateService.java
index a8afc16e7..6a851ec81 100644
--- a/src/main/java/stirling/software/SPDF/config/AppUpdateService.java
+++ b/src/main/java/stirling/software/SPDF/config/AppUpdateService.java
@@ -6,7 +6,7 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Scope;
 
 import stirling.software.SPDF.config.interfaces.ShowAdminInterface;
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Configuration
 class AppUpdateService {
diff --git a/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java b/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java
index 95584ef14..6c46526aa 100644
--- a/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java
+++ b/src/main/java/stirling/software/SPDF/config/ConfigInitializer.java
@@ -13,6 +13,8 @@ import java.util.List;
 
 import lombok.extern.slf4j.Slf4j;
 
+import stirling.software.common.configuration.InstallationPathConfig;
+
 /**
  * A naive, line-based approach to merging "settings.yml" with "settings.yml.template" while
  * preserving exact whitespace, blank lines, and inline comments -- but we only rewrite the file if
diff --git a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java
index 0ddd68958..6daddfa67 100644
--- a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java
+++ b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java
@@ -11,7 +11,7 @@ import org.springframework.stereotype.Service;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/config/InitialSetup.java b/src/main/java/stirling/software/SPDF/config/InitialSetup.java
index 0adc3d133..96585400a 100644
--- a/src/main/java/stirling/software/SPDF/config/InitialSetup.java
+++ b/src/main/java/stirling/software/SPDF/config/InitialSetup.java
@@ -17,8 +17,8 @@ import jakarta.annotation.PostConstruct;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.utils.GeneralUtils;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Component
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java b/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java
index ab37c3c5e..9067e5bf9 100644
--- a/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java
+++ b/src/main/java/stirling/software/SPDF/config/LocaleConfiguration.java
@@ -12,7 +12,7 @@ import org.springframework.web.servlet.i18n.SessionLocaleResolver;
 
 import lombok.RequiredArgsConstructor;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Configuration
 @RequiredArgsConstructor
diff --git a/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java b/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java
index 99de07acb..f5839637d 100644
--- a/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java
+++ b/src/main/java/stirling/software/SPDF/config/LogbackPropertyLoader.java
@@ -1,5 +1,7 @@
 package stirling.software.SPDF.config;
 
+import stirling.software.common.configuration.InstallationPathConfig;
+
 import ch.qos.logback.core.PropertyDefinerBase;
 
 public class LogbackPropertyLoader extends PropertyDefinerBase {
diff --git a/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java b/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java
index d4ff7d167..b55d60868 100644
--- a/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java
+++ b/src/main/java/stirling/software/SPDF/config/OpenApiConfig.java
@@ -13,7 +13,7 @@ import io.swagger.v3.oas.models.security.SecurityScheme;
 
 import lombok.RequiredArgsConstructor;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Configuration
 @RequiredArgsConstructor
diff --git a/src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java b/src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java
index 037c1dde3..8d35c42d1 100644
--- a/src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java
+++ b/src/main/java/stirling/software/SPDF/config/RuntimePathConfig.java
@@ -9,9 +9,10 @@ import org.springframework.context.annotation.Configuration;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.CustomPaths.Operations;
-import stirling.software.SPDF.model.ApplicationProperties.CustomPaths.Pipeline;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.CustomPaths.Operations;
+import stirling.software.common.configuration.ApplicationProperties.CustomPaths.Pipeline;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Slf4j
 @Configuration
diff --git a/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java b/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java
index 63957fd0f..c3e204b3c 100644
--- a/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java
+++ b/src/main/java/stirling/software/SPDF/config/WebMvcConfig.java
@@ -7,6 +7,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import lombok.RequiredArgsConstructor;
 
+import stirling.software.common.configuration.InstallationPathConfig;
+
 @Configuration
 @RequiredArgsConstructor
 public class WebMvcConfig implements WebMvcConfigurer {
diff --git a/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java b/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java
index 34b457e89..1c7511a7c 100644
--- a/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java
+++ b/src/main/java/stirling/software/SPDF/config/interfaces/DatabaseInterface.java
@@ -3,8 +3,8 @@ package stirling.software.SPDF.config.interfaces;
 import java.sql.SQLException;
 import java.util.List;
 
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
 import stirling.software.SPDF.utils.FileInfo;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 public interface DatabaseInterface {
     void exportDatabase() throws SQLException, UnsupportedProviderException;
diff --git a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java b/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java
index 23ac9d761..c8b6e15ea 100644
--- a/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java
+++ b/src/main/java/stirling/software/SPDF/config/security/AppUpdateAuthService.java
@@ -9,9 +9,9 @@ import org.springframework.stereotype.Service;
 import lombok.RequiredArgsConstructor;
 
 import stirling.software.SPDF.config.interfaces.ShowAdminInterface;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.User;
 import stirling.software.SPDF.repository.UserRepository;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 @RequiredArgsConstructor
diff --git a/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java
index d59ba5d16..8ca881308 100644
--- a/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java
+++ b/src/main/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandler.java
@@ -25,11 +25,11 @@ import lombok.extern.slf4j.Slf4j;
 import stirling.software.SPDF.SPDFApplication;
 import stirling.software.SPDF.config.security.saml2.CertificateUtils;
 import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
-import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2;
-import stirling.software.SPDF.model.provider.KeycloakProvider;
 import stirling.software.SPDF.utils.UrlUtils;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2;
+import stirling.software.common.configuration.ApplicationProperties.Security.SAML2;
+import stirling.software.common.model.provider.KeycloakProvider;
 
 @Slf4j
 @RequiredArgsConstructor
diff --git a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java
index 9339405da..f345bb658 100644
--- a/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java
+++ b/src/main/java/stirling/software/SPDF/config/security/InitialSecuritySetup.java
@@ -11,9 +11,9 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.config.interfaces.DatabaseInterface;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.Role;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @Slf4j
 @Component
diff --git a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java b/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java
index d65557822..2f8c0ac7f 100644
--- a/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java
+++ b/src/main/java/stirling/software/SPDF/config/security/LoginAttemptService.java
@@ -10,8 +10,8 @@ import jakarta.annotation.PostConstruct;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.AttemptCounter;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java b/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java
index a4c10d1ae..e665e83a4 100644
--- a/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java
+++ b/src/main/java/stirling/software/SPDF/config/security/SecurityConfiguration.java
@@ -37,10 +37,10 @@ import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticationFai
 import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticationSuccessHandler;
 import stirling.software.SPDF.config.security.saml2.CustomSaml2ResponseAuthenticationConverter;
 import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.User;
 import stirling.software.SPDF.repository.JPATokenRepositoryImpl;
 import stirling.software.SPDF.repository.PersistentLoginRepository;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Configuration
 @EnableWebSecurity
diff --git a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java b/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java
index 85668dd28..4c3fd8e1c 100644
--- a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java
+++ b/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java
@@ -28,11 +28,11 @@ import lombok.extern.slf4j.Slf4j;
 import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal;
 import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
 import stirling.software.SPDF.model.ApiKeyAuthenticationToken;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
-import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2;
 import stirling.software.SPDF.model.User;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2;
+import stirling.software.common.configuration.ApplicationProperties.Security.SAML2;
 
 @Slf4j
 @Component
diff --git a/src/main/java/stirling/software/SPDF/config/security/UserService.java b/src/main/java/stirling/software/SPDF/config/security/UserService.java
index ab6f0378c..d34ca153d 100644
--- a/src/main/java/stirling/software/SPDF/config/security/UserService.java
+++ b/src/main/java/stirling/software/SPDF/config/security/UserService.java
@@ -28,9 +28,10 @@ import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrin
 import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
 import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface;
 import stirling.software.SPDF.model.*;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
 import stirling.software.SPDF.repository.AuthorityRepository;
 import stirling.software.SPDF.repository.UserRepository;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @Service
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java
index 5c0df766e..0e00299e6 100644
--- a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java
+++ b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseConfig.java
@@ -12,9 +12,9 @@ import org.springframework.context.annotation.Lazy;
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.config.InstallationPathConfig;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.InstallationPathConfig;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @Slf4j
 @Getter
diff --git a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java
index a8f95100d..98da09bb4 100644
--- a/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java
+++ b/src/main/java/stirling/software/SPDF/config/security/database/DatabaseService.java
@@ -28,11 +28,11 @@ import org.springframework.stereotype.Service;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.config.InstallationPathConfig;
 import stirling.software.SPDF.config.interfaces.DatabaseInterface;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.exception.BackupNotFoundException;
 import stirling.software.SPDF.utils.FileInfo;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Lazy
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java b/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java
index a0c4af046..73a33972a 100644
--- a/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java
+++ b/src/main/java/stirling/software/SPDF/config/security/database/ScheduledTasks.java
@@ -10,7 +10,7 @@ import lombok.RequiredArgsConstructor;
 
 import stirling.software.SPDF.config.interfaces.DatabaseInterface;
 import stirling.software.SPDF.controller.api.H2SQLCondition;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @Component
 @Conditional(H2SQLCondition.class)
diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java
index 1b320c2c7..c9efa5c22 100644
--- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java
+++ b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2AuthenticationSuccessHandler.java
@@ -19,11 +19,11 @@ import lombok.RequiredArgsConstructor;
 
 import stirling.software.SPDF.config.security.LoginAttemptService;
 import stirling.software.SPDF.config.security.UserService;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
 import stirling.software.SPDF.model.AuthenticationType;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
 import stirling.software.SPDF.utils.RequestUriUtils;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @RequiredArgsConstructor
 public class CustomOAuth2AuthenticationSuccessHandler
diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java
index 117c9de8f..79c35201e 100644
--- a/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java
+++ b/src/main/java/stirling/software/SPDF/config/security/oauth2/CustomOAuth2UserService.java
@@ -15,10 +15,10 @@ import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.config.security.LoginAttemptService;
 import stirling.software.SPDF.config.security.UserService;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
 import stirling.software.SPDF.model.User;
-import stirling.software.SPDF.model.UsernameAttribute;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2;
+import stirling.software.common.model.enumeration.UsernameAttribute;
 
 @Slf4j
 public class CustomOAuth2UserService implements OAuth2UserService<OidcUserRequest, OidcUser> {
diff --git a/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java b/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java
index c43d8a606..61786c96d 100644
--- a/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java
+++ b/src/main/java/stirling/software/SPDF/config/security/oauth2/OAuth2Configuration.java
@@ -1,7 +1,8 @@
 package stirling.software.SPDF.config.security.oauth2;
 
 import static org.springframework.security.oauth2.core.AuthorizationGrantType.AUTHORIZATION_CODE;
-import static stirling.software.SPDF.utils.validation.Validator.*;
+import static stirling.software.common.util.Validator.isStringEmpty;
+import static stirling.software.common.util.Validator.validateProvider;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -25,16 +26,16 @@ import org.springframework.security.oauth2.core.user.OAuth2UserAuthority;
 import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.config.security.UserService;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client;
 import stirling.software.SPDF.model.User;
-import stirling.software.SPDF.model.UsernameAttribute;
 import stirling.software.SPDF.model.exception.NoProviderFoundException;
-import stirling.software.SPDF.model.provider.GitHubProvider;
-import stirling.software.SPDF.model.provider.GoogleProvider;
-import stirling.software.SPDF.model.provider.KeycloakProvider;
-import stirling.software.SPDF.model.provider.Provider;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2.Client;
+import stirling.software.common.model.enumeration.UsernameAttribute;
+import stirling.software.common.model.provider.GitHubProvider;
+import stirling.software.common.model.provider.GoogleProvider;
+import stirling.software.common.model.provider.KeycloakProvider;
+import stirling.software.common.model.provider.Provider;
 
 @Slf4j
 @Configuration
diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java b/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java
index e4e2d88ca..0e92b822c 100644
--- a/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java
+++ b/src/main/java/stirling/software/SPDF/config/security/saml2/CustomSaml2AuthenticationSuccessHandler.java
@@ -18,11 +18,11 @@ import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.config.security.LoginAttemptService;
 import stirling.software.SPDF.config.security.UserService;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2;
 import stirling.software.SPDF.model.AuthenticationType;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
 import stirling.software.SPDF.utils.RequestUriUtils;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security.SAML2;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @AllArgsConstructor
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java b/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java
index 58c0a1637..a19dd8edb 100644
--- a/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java
+++ b/src/main/java/stirling/software/SPDF/config/security/saml2/SAML2Configuration.java
@@ -24,8 +24,8 @@ import jakarta.servlet.http.HttpServletRequest;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security.SAML2;
 
 @Configuration
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java b/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java
index a64379a64..f75530e06 100644
--- a/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java
+++ b/src/main/java/stirling/software/SPDF/controller/api/SettingsController.java
@@ -17,9 +17,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 
 import stirling.software.SPDF.config.EndpointConfiguration;
-import stirling.software.SPDF.config.InstallationPathConfig;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.utils.GeneralUtils;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Controller
 @Tag(name = "Settings", description = "Settings APIs")
diff --git a/src/main/java/stirling/software/SPDF/controller/api/UserController.java b/src/main/java/stirling/software/SPDF/controller/api/UserController.java
index ce4770499..67a6b9361 100644
--- a/src/main/java/stirling/software/SPDF/controller/api/UserController.java
+++ b/src/main/java/stirling/software/SPDF/controller/api/UserController.java
@@ -33,12 +33,12 @@ import lombok.extern.slf4j.Slf4j;
 import stirling.software.SPDF.config.security.UserService;
 import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal;
 import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.AuthenticationType;
 import stirling.software.SPDF.model.Role;
 import stirling.software.SPDF.model.User;
 import stirling.software.SPDF.model.api.user.UsernameAndPass;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @Controller
 @Tag(name = "User", description = "User APIs")
diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java
index bfd67ef76..03fbea071 100644
--- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java
+++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java
@@ -14,11 +14,11 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 
 import stirling.software.SPDF.config.RuntimePathConfig;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest;
 import stirling.software.SPDF.service.CustomPDFDocumentFactory;
 import stirling.software.SPDF.utils.FileToPdf;
 import stirling.software.SPDF.utils.WebResponseUtils;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @RestController
 @Tag(name = "Convert", description = "Convert APIs")
diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java
index b8a190f90..3da91d945 100644
--- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java
+++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java
@@ -24,11 +24,11 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 
 import stirling.software.SPDF.config.RuntimePathConfig;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.api.GeneralFile;
 import stirling.software.SPDF.service.CustomPDFDocumentFactory;
 import stirling.software.SPDF.utils.FileToPdf;
 import stirling.software.SPDF.utils.WebResponseUtils;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @RestController
 @Tag(name = "Convert", description = "Convert APIs")
diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java
index 9ef490e9a..f26b4cf6b 100644
--- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java
+++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java
@@ -20,13 +20,13 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.config.RuntimePathConfig;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.api.converters.UrlToPdfRequest;
 import stirling.software.SPDF.service.CustomPDFDocumentFactory;
 import stirling.software.SPDF.utils.GeneralUtils;
 import stirling.software.SPDF.utils.ProcessExecutor;
 import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
 import stirling.software.SPDF.utils.WebResponseUtils;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @RestController
 @Tag(name = "Convert", description = "Convert APIs")
diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java
index 558ac1fbb..61682d37d 100644
--- a/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java
+++ b/src/main/java/stirling/software/SPDF/controller/api/misc/OCRController.java
@@ -31,9 +31,9 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.api.misc.ProcessPdfWithOcrRequest;
 import stirling.software.SPDF.service.CustomPDFDocumentFactory;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @RestController
 @RequestMapping("/api/v1/misc")
diff --git a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java b/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java
index 327cda76c..cfc17e157 100644
--- a/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java
+++ b/src/main/java/stirling/software/SPDF/controller/web/AccountWebController.java
@@ -1,6 +1,6 @@
 package stirling.software.SPDF.controller.web;
 
-import static stirling.software.SPDF.utils.validation.Validator.validateProvider;
+import static stirling.software.common.util.Validator.validateProvider;
 
 import java.time.Instant;
 import java.time.temporal.ChronoUnit;
@@ -31,19 +31,19 @@ import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.config.security.saml2.CustomSaml2AuthenticatedPrincipal;
 import stirling.software.SPDF.config.security.session.SessionPersistentRegistry;
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.ApplicationProperties.Security;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2;
-import stirling.software.SPDF.model.ApplicationProperties.Security.OAUTH2.Client;
-import stirling.software.SPDF.model.ApplicationProperties.Security.SAML2;
 import stirling.software.SPDF.model.Authority;
 import stirling.software.SPDF.model.Role;
 import stirling.software.SPDF.model.SessionEntity;
 import stirling.software.SPDF.model.User;
-import stirling.software.SPDF.model.provider.GitHubProvider;
-import stirling.software.SPDF.model.provider.GoogleProvider;
-import stirling.software.SPDF.model.provider.KeycloakProvider;
 import stirling.software.SPDF.repository.UserRepository;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties.Security;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2;
+import stirling.software.common.configuration.ApplicationProperties.Security.OAUTH2.Client;
+import stirling.software.common.configuration.ApplicationProperties.Security.SAML2;
+import stirling.software.common.model.provider.GitHubProvider;
+import stirling.software.common.model.provider.GoogleProvider;
+import stirling.software.common.model.provider.KeycloakProvider;
 
 @Controller
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java
index 83337ae6a..c4b778f0b 100644
--- a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java
+++ b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java
@@ -24,12 +24,12 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.config.InstallationPathConfig;
 import stirling.software.SPDF.config.RuntimePathConfig;
 import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface;
 import stirling.software.SPDF.model.SignatureFile;
 import stirling.software.SPDF.service.SignatureService;
 import stirling.software.SPDF.utils.GeneralUtils;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Controller
 @Tag(name = "General", description = "General APIs")
diff --git a/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java b/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java
index 9a3b2b3e2..f0551d8c8 100644
--- a/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java
+++ b/src/main/java/stirling/software/SPDF/controller/web/HomeWebController.java
@@ -22,8 +22,8 @@ import io.swagger.v3.oas.annotations.Hidden;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.Dependency;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Controller
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java
index 52c79073f..cd2bd7197 100644
--- a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java
+++ b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java
@@ -24,7 +24,7 @@ import lombok.extern.slf4j.Slf4j;
 
 import stirling.software.SPDF.config.EndpointInspector;
 import stirling.software.SPDF.config.StartupApplicationListener;
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @RestController
 @RequestMapping("/api/v1/info")
diff --git a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java
index ddd189e28..125b03b40 100644
--- a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java
+++ b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java
@@ -15,8 +15,8 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 
 import lombok.RequiredArgsConstructor;
 
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.utils.CheckProgramInstall;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Controller
 @Tag(name = "Misc", description = "Miscellaneous APIs")
diff --git a/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java b/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java
index 200df6d07..62ef0e354 100644
--- a/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java
+++ b/src/main/java/stirling/software/SPDF/controller/web/UploadLimitService.java
@@ -7,7 +7,7 @@ import org.springframework.stereotype.Service;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/service/LanguageService.java b/src/main/java/stirling/software/SPDF/service/LanguageService.java
index e38105c59..971f9dcca 100644
--- a/src/main/java/stirling/software/SPDF/service/LanguageService.java
+++ b/src/main/java/stirling/software/SPDF/service/LanguageService.java
@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java b/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java
index b44ba59be..db3d105da 100644
--- a/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java
+++ b/src/main/java/stirling/software/SPDF/service/PdfMetadataService.java
@@ -8,8 +8,8 @@ import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.PdfMetadata;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 public class PdfMetadataService {
diff --git a/src/main/java/stirling/software/SPDF/service/PostHogService.java b/src/main/java/stirling/software/SPDF/service/PostHogService.java
index 69cb52061..06164ef4f 100644
--- a/src/main/java/stirling/software/SPDF/service/PostHogService.java
+++ b/src/main/java/stirling/software/SPDF/service/PostHogService.java
@@ -17,7 +17,7 @@ import org.springframework.stereotype.Service;
 import com.posthog.java.PostHog;
 
 import stirling.software.SPDF.controller.api.pipeline.UserServiceInterface;
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Service
 public class PostHogService {
diff --git a/src/main/java/stirling/software/SPDF/service/SignatureService.java b/src/main/java/stirling/software/SPDF/service/SignatureService.java
index 984bd0baf..1d25f409f 100644
--- a/src/main/java/stirling/software/SPDF/service/SignatureService.java
+++ b/src/main/java/stirling/software/SPDF/service/SignatureService.java
@@ -13,8 +13,8 @@ import org.thymeleaf.util.StringUtils;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.config.InstallationPathConfig;
 import stirling.software.SPDF.model.SignatureFile;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Service
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java
index 9172b5151..2fe76b0c0 100644
--- a/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java
+++ b/src/main/java/stirling/software/SPDF/utils/GeneralUtils.java
@@ -27,8 +27,8 @@ import io.github.pixee.security.Urls;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.config.InstallationPathConfig;
 import stirling.software.SPDF.config.YamlHelper;
+import stirling.software.common.configuration.InstallationPathConfig;
 
 @Slf4j
 public class GeneralUtils {
diff --git a/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java b/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java
index e5b8fbb36..7c2fa915a 100644
--- a/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java
+++ b/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java
@@ -17,7 +17,7 @@ import io.github.pixee.security.BoundedLineReader;
 
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @Slf4j
 public class ProcessExecutor {
diff --git a/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java b/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java
index c4dae34bf..028557505 100644
--- a/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java
+++ b/src/test/java/stirling/software/SPDF/SPDFApplicationTest.java
@@ -10,7 +10,7 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.springframework.core.env.Environment;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @ExtendWith(MockitoExtension.class)
 public class SPDFApplicationTest {
diff --git a/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java b/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java
index 72dd95418..5b3315cc2 100644
--- a/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java
+++ b/src/test/java/stirling/software/SPDF/config/security/CustomLogoutSuccessHandlerTest.java
@@ -16,7 +16,7 @@ import org.springframework.security.oauth2.client.authentication.OAuth2Authentic
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 
-import stirling.software.SPDF.model.ApplicationProperties;
+import stirling.software.common.configuration.ApplicationProperties;
 
 @ExtendWith(MockitoExtension.class)
 class CustomLogoutSuccessHandlerTest {
diff --git a/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java b/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java
index 0118e8e32..eda93d67a 100644
--- a/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java
+++ b/src/test/java/stirling/software/SPDF/config/security/database/DatabaseConfigTest.java
@@ -15,8 +15,8 @@ import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import stirling.software.SPDF.model.ApplicationProperties;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
+import stirling.software.common.configuration.ApplicationProperties;
+import stirling.software.common.model.exception.UnsupportedProviderException;
 
 @ExtendWith(MockitoExtension.class)
 class DatabaseConfigTest {
diff --git a/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java b/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java
index a67e84f60..092a13918 100644
--- a/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java
+++ b/src/test/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPdfTest.java
@@ -9,9 +9,9 @@ import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
 import stirling.software.SPDF.config.RuntimePathConfig;
-import stirling.software.SPDF.model.ApplicationProperties;
 import stirling.software.SPDF.model.api.converters.UrlToPdfRequest;
 import stirling.software.SPDF.service.CustomPDFDocumentFactory;
+import stirling.software.common.configuration.ApplicationProperties;
 
 public class ConvertWebsiteToPdfTest {
 
diff --git a/stirling-common/.gitignore b/stirling-common/.gitignore
new file mode 100644
index 000000000..90d48ccea
--- /dev/null
+++ b/stirling-common/.gitignore
@@ -0,0 +1,196 @@
+### Eclipse ###
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.exe
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+.classpath
+.project
+version.properties
+
+#### Stirling-PDF Files ###
+pipeline/watchedFolders/
+pipeline/finishedFolders/
+customFiles/
+configs/
+watchedFolders/
+clientWebUI/
+!cucumber/
+!cucumber/exampleFiles/
+!cucumber/exampleFiles/example_html.zip
+exampleYmlFiles/stirling/
+/testing/file_snapshots
+SwaggerDoc.json
+
+# Gradle
+.gradle
+.lock
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# PyDev specific (Python IDE for Eclipse)
+*.pydevproject
+
+# CDT-specific (C/C++ Development Tooling)
+.cproject
+
+# CDT- autotools
+.autotools
+
+# Java annotation processor (APT)
+.factorypath
+
+# PDT-specific (PHP Development Tools)
+.buildpath
+
+# sbteclipse plugin
+.target
+
+# Tern plugin
+.tern-project
+
+# TeXlipse plugin
+.texlipse
+
+# STS (Spring Tool Suite)
+.springBeans
+
+# Code Recommenders
+.recommenders/
+
+# Annotation Processing
+.apt_generated/
+.apt_generated_test/
+
+# Scala IDE specific (Scala & Java development for Eclipse)
+.cache-main
+.scala_dependencies
+.worksheet
+
+# Uncomment this line if you wish to ignore the project description file.
+# Typically, this file would be tracked if it contains build/dependency configurations:
+#.project
+
+### Eclipse Patch ###
+# Spring Boot Tooling
+.sts4-cache/
+
+### Git ###
+# Created by git for backups. To disable backups in Git:
+# $ git config --global mergetool.keepBackup false
+*.orig
+
+# Created by git when using merge tools for conflicts
+*.BACKUP.*
+*.BASE.*
+*.LOCAL.*
+*.REMOTE.*
+*_BACKUP_*.txt
+*_BASE_*.txt
+*_LOCAL_*.txt
+*_REMOTE_*.txt
+
+### Java ###
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+*.db
+/build
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*.pyo
+
+# Virtual environments
+.env*
+.venv*
+env*/
+venv*/
+ENV/
+env.bak/
+venv.bak/
+
+# VS Code
+/.vscode/**/*
+!/.vscode/settings.json
+!/.vscode/extensions.json
+
+# IntelliJ IDEA
+.idea/
+*.iml
+out/
+
+# Ignore Mac DS_Store files
+.DS_Store
+**/.DS_Store
+
+# cucumber
+/cucumber/reports/**
+
+# Certs and Security Files
+*.p12
+*.pk8
+*.pem
+*.crt
+*.cer
+*.cert
+*.der
+*.key
+*.csr
+*.kdbx
+*.jks
+*.asc
+
+# SSH Keys
+*.pub
+*.priv
+id_rsa
+id_rsa.pub
+id_ecdsa
+id_ecdsa.pub
+id_ed25519
+id_ed25519.pub
+.ssh/
+*ssh
+
+# cache
+.cache
+.ruff_cache
+.mypy_cache
+.pytest_cache
+.ipynb_checkpoints
+
+**/jcef-bundle/
+
+# node_modules
+node_modules/
+*.mjs
diff --git a/src/main/java/stirling/software/SPDF/config/AppConfig.java b/stirling-common/src/main/java/stirling/software/common/configuration/AppConfig.java
similarity index 98%
rename from src/main/java/stirling/software/SPDF/config/AppConfig.java
rename to stirling-common/src/main/java/stirling/software/common/configuration/AppConfig.java
index fd55a471d..195bc9fd3 100644
--- a/src/main/java/stirling/software/SPDF/config/AppConfig.java
+++ b/stirling-common/src/main/java/stirling/software/common/configuration/AppConfig.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.config;
+package stirling.software.common.configuration;
 
 import java.io.IOException;
 import java.nio.file.Files;
@@ -25,8 +25,6 @@ import org.thymeleaf.spring6.SpringTemplateEngine;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.model.ApplicationProperties;
-
 @Configuration
 @Lazy
 @Slf4j
diff --git a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java b/stirling-common/src/main/java/stirling/software/common/configuration/ApplicationProperties.java
similarity index 95%
rename from src/main/java/stirling/software/SPDF/model/ApplicationProperties.java
rename to stirling-common/src/main/java/stirling/software/common/configuration/ApplicationProperties.java
index 82a17ff2c..23df62218 100644
--- a/src/main/java/stirling/software/SPDF/model/ApplicationProperties.java
+++ b/stirling-common/src/main/java/stirling/software/common/configuration/ApplicationProperties.java
@@ -1,6 +1,4 @@
-package stirling.software.SPDF.model;
-
-import static stirling.software.SPDF.utils.validation.Validator.*;
+package stirling.software.common.configuration;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -33,13 +31,12 @@ import lombok.Setter;
 import lombok.ToString;
 import lombok.extern.slf4j.Slf4j;
 
-import stirling.software.SPDF.config.InstallationPathConfig;
-import stirling.software.SPDF.config.YamlPropertySourceFactory;
-import stirling.software.SPDF.model.exception.UnsupportedProviderException;
-import stirling.software.SPDF.model.provider.GitHubProvider;
-import stirling.software.SPDF.model.provider.GoogleProvider;
-import stirling.software.SPDF.model.provider.KeycloakProvider;
-import stirling.software.SPDF.model.provider.Provider;
+import stirling.software.common.model.exception.UnsupportedProviderException;
+import stirling.software.common.model.provider.GitHubProvider;
+import stirling.software.common.model.provider.GoogleProvider;
+import stirling.software.common.model.provider.KeycloakProvider;
+import stirling.software.common.model.provider.Provider;
+import stirling.software.common.util.Validator;
 
 @Configuration
 @ConfigurationProperties(prefix = "")
@@ -248,11 +245,11 @@ public class ApplicationProperties {
             }
 
             public boolean isSettingsValid() {
-                return !isStringEmpty(this.getIssuer())
-                        && !isStringEmpty(this.getClientId())
-                        && !isStringEmpty(this.getClientSecret())
-                        && !isCollectionEmpty(this.getScopes())
-                        && !isStringEmpty(this.getUseAsUsername());
+                return !Validator.isStringEmpty(this.getIssuer())
+                        && !Validator.isStringEmpty(this.getClientId())
+                        && !Validator.isStringEmpty(this.getClientSecret())
+                        && !Validator.isCollectionEmpty(this.getScopes())
+                        && !Validator.isStringEmpty(this.getUseAsUsername());
             }
 
             @Data
diff --git a/src/main/java/stirling/software/SPDF/config/FileFallbackTemplateResolver.java b/stirling-common/src/main/java/stirling/software/common/configuration/FileFallbackTemplateResolver.java
similarity index 94%
rename from src/main/java/stirling/software/SPDF/config/FileFallbackTemplateResolver.java
rename to stirling-common/src/main/java/stirling/software/common/configuration/FileFallbackTemplateResolver.java
index b6315db92..c0edba388 100644
--- a/src/main/java/stirling/software/SPDF/config/FileFallbackTemplateResolver.java
+++ b/stirling-common/src/main/java/stirling/software/common/configuration/FileFallbackTemplateResolver.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.config;
+package stirling.software.common.configuration;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -10,8 +10,7 @@ import org.thymeleaf.IEngineConfiguration;
 import org.thymeleaf.templateresolver.AbstractConfigurableTemplateResolver;
 import org.thymeleaf.templateresource.FileTemplateResource;
 import org.thymeleaf.templateresource.ITemplateResource;
-
-import stirling.software.SPDF.model.InputStreamTemplateResource;
+import stirling.software.common.model.InputStreamTemplateResource;
 
 public class FileFallbackTemplateResolver extends AbstractConfigurableTemplateResolver {
 
diff --git a/src/main/java/stirling/software/SPDF/config/InstallationPathConfig.java b/stirling-common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java
similarity index 98%
rename from src/main/java/stirling/software/SPDF/config/InstallationPathConfig.java
rename to stirling-common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java
index 557a152e7..e3293e3bd 100644
--- a/src/main/java/stirling/software/SPDF/config/InstallationPathConfig.java
+++ b/stirling-common/src/main/java/stirling/software/common/configuration/InstallationPathConfig.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.config;
+package stirling.software.common.configuration;
 
 import java.io.File;
 import java.nio.file.Paths;
diff --git a/src/main/java/stirling/software/SPDF/config/YamlPropertySourceFactory.java b/stirling-common/src/main/java/stirling/software/common/configuration/YamlPropertySourceFactory.java
similarity index 95%
rename from src/main/java/stirling/software/SPDF/config/YamlPropertySourceFactory.java
rename to stirling-common/src/main/java/stirling/software/common/configuration/YamlPropertySourceFactory.java
index e2818e898..783d6d621 100644
--- a/src/main/java/stirling/software/SPDF/config/YamlPropertySourceFactory.java
+++ b/stirling-common/src/main/java/stirling/software/common/configuration/YamlPropertySourceFactory.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.config;
+package stirling.software.common.configuration;
 
 import java.io.IOException;
 import java.util.Properties;
diff --git a/src/main/java/stirling/software/SPDF/model/InputStreamTemplateResource.java b/stirling-common/src/main/java/stirling/software/common/model/InputStreamTemplateResource.java
similarity index 96%
rename from src/main/java/stirling/software/SPDF/model/InputStreamTemplateResource.java
rename to stirling-common/src/main/java/stirling/software/common/model/InputStreamTemplateResource.java
index b4271df02..02a104f88 100644
--- a/src/main/java/stirling/software/SPDF/model/InputStreamTemplateResource.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/InputStreamTemplateResource.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.model;
+package stirling.software.common.model;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/src/main/java/stirling/software/SPDF/model/UsernameAttribute.java b/stirling-common/src/main/java/stirling/software/common/model/enumeration/UsernameAttribute.java
similarity index 90%
rename from src/main/java/stirling/software/SPDF/model/UsernameAttribute.java
rename to stirling-common/src/main/java/stirling/software/common/model/enumeration/UsernameAttribute.java
index 23159ade1..86f95793c 100644
--- a/src/main/java/stirling/software/SPDF/model/UsernameAttribute.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/enumeration/UsernameAttribute.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.model;
+package stirling.software.common.model.enumeration;
 
 import lombok.Getter;
 
diff --git a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedProviderException.java b/stirling-common/src/main/java/stirling/software/common/model/exception/UnsupportedProviderException.java
similarity index 75%
rename from src/main/java/stirling/software/SPDF/model/exception/UnsupportedProviderException.java
rename to stirling-common/src/main/java/stirling/software/common/model/exception/UnsupportedProviderException.java
index d0bd8330c..0b9a3375d 100644
--- a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedProviderException.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/exception/UnsupportedProviderException.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.model.exception;
+package stirling.software.common.model.exception;
 
 public class UnsupportedProviderException extends Exception {
     public UnsupportedProviderException(String message) {
diff --git a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedUsernameAttribute.java b/stirling-common/src/main/java/stirling/software/common/model/exception/UnsupportedUsernameAttribute.java
similarity index 76%
rename from src/main/java/stirling/software/SPDF/model/exception/UnsupportedUsernameAttribute.java
rename to stirling-common/src/main/java/stirling/software/common/model/exception/UnsupportedUsernameAttribute.java
index 0bf06ee20..c639dda60 100644
--- a/src/main/java/stirling/software/SPDF/model/exception/UnsupportedUsernameAttribute.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/exception/UnsupportedUsernameAttribute.java
@@ -1,4 +1,4 @@
-package stirling.software.SPDF.model.exception;
+package stirling.software.common.model.exception;
 
 public class UnsupportedUsernameAttribute extends RuntimeException {
     public UnsupportedUsernameAttribute(String message) {
diff --git a/src/main/java/stirling/software/SPDF/model/provider/GitHubProvider.java b/stirling-common/src/main/java/stirling/software/common/model/provider/GitHubProvider.java
similarity index 94%
rename from src/main/java/stirling/software/SPDF/model/provider/GitHubProvider.java
rename to stirling-common/src/main/java/stirling/software/common/model/provider/GitHubProvider.java
index 7057ec903..35fe9c1f1 100644
--- a/src/main/java/stirling/software/SPDF/model/provider/GitHubProvider.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/provider/GitHubProvider.java
@@ -1,11 +1,9 @@
-package stirling.software.SPDF.model.provider;
+package stirling.software.common.model.provider;
 
 import java.util.ArrayList;
 import java.util.Collection;
-
 import lombok.NoArgsConstructor;
-
-import stirling.software.SPDF.model.UsernameAttribute;
+import stirling.software.common.model.enumeration.UsernameAttribute;
 
 @NoArgsConstructor
 public class GitHubProvider extends Provider {
diff --git a/src/main/java/stirling/software/SPDF/model/provider/GoogleProvider.java b/stirling-common/src/main/java/stirling/software/common/model/provider/GoogleProvider.java
similarity index 94%
rename from src/main/java/stirling/software/SPDF/model/provider/GoogleProvider.java
rename to stirling-common/src/main/java/stirling/software/common/model/provider/GoogleProvider.java
index 1bb217c9f..b3e5b0c8b 100644
--- a/src/main/java/stirling/software/SPDF/model/provider/GoogleProvider.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/provider/GoogleProvider.java
@@ -1,11 +1,9 @@
-package stirling.software.SPDF.model.provider;
+package stirling.software.common.model.provider;
 
 import java.util.ArrayList;
 import java.util.Collection;
-
 import lombok.NoArgsConstructor;
-
-import stirling.software.SPDF.model.UsernameAttribute;
+import stirling.software.common.model.enumeration.UsernameAttribute;
 
 @NoArgsConstructor
 public class GoogleProvider extends Provider {
diff --git a/src/main/java/stirling/software/SPDF/model/provider/KeycloakProvider.java b/stirling-common/src/main/java/stirling/software/common/model/provider/KeycloakProvider.java
similarity index 93%
rename from src/main/java/stirling/software/SPDF/model/provider/KeycloakProvider.java
rename to stirling-common/src/main/java/stirling/software/common/model/provider/KeycloakProvider.java
index c01d27c20..8b483b4a4 100644
--- a/src/main/java/stirling/software/SPDF/model/provider/KeycloakProvider.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/provider/KeycloakProvider.java
@@ -1,11 +1,9 @@
-package stirling.software.SPDF.model.provider;
+package stirling.software.common.model.provider;
 
 import java.util.ArrayList;
 import java.util.Collection;
-
 import lombok.NoArgsConstructor;
-
-import stirling.software.SPDF.model.UsernameAttribute;
+import stirling.software.common.model.enumeration.UsernameAttribute;
 
 @NoArgsConstructor
 public class KeycloakProvider extends Provider {
diff --git a/src/main/java/stirling/software/SPDF/model/provider/Provider.java b/stirling-common/src/main/java/stirling/software/common/model/provider/Provider.java
similarity index 93%
rename from src/main/java/stirling/software/SPDF/model/provider/Provider.java
rename to stirling-common/src/main/java/stirling/software/common/model/provider/Provider.java
index c15bc34a6..280939be9 100644
--- a/src/main/java/stirling/software/SPDF/model/provider/Provider.java
+++ b/stirling-common/src/main/java/stirling/software/common/model/provider/Provider.java
@@ -1,16 +1,13 @@
-package stirling.software.SPDF.model.provider;
-
-import static stirling.software.SPDF.model.UsernameAttribute.EMAIL;
+package stirling.software.common.model.provider;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
-
 import lombok.Data;
 import lombok.NoArgsConstructor;
-
-import stirling.software.SPDF.model.UsernameAttribute;
-import stirling.software.SPDF.model.exception.UnsupportedUsernameAttribute;
+import stirling.software.common.model.enumeration.UsernameAttribute;
+import stirling.software.common.model.exception.UnsupportedUsernameAttribute;
+import static stirling.software.common.model.enumeration.UsernameAttribute.EMAIL;
 
 @Data
 @NoArgsConstructor
diff --git a/src/main/java/stirling/software/SPDF/utils/validation/Validator.java b/stirling-common/src/main/java/stirling/software/common/util/Validator.java
similarity index 87%
rename from src/main/java/stirling/software/SPDF/utils/validation/Validator.java
rename to stirling-common/src/main/java/stirling/software/common/util/Validator.java
index 83b906857..6237095e7 100644
--- a/src/main/java/stirling/software/SPDF/utils/validation/Validator.java
+++ b/stirling-common/src/main/java/stirling/software/common/util/Validator.java
@@ -1,8 +1,7 @@
-package stirling.software.SPDF.utils.validation;
+package stirling.software.common.util;
 
 import java.util.Collection;
-
-import stirling.software.SPDF.model.provider.Provider;
+import stirling.software.common.model.provider.Provider;
 
 public class Validator {
 
diff --git a/src/test/java/stirling/software/SPDF/utils/validation/ValidatorTest.java b/stirling-common/src/test/java/stirling/software/common/util/ValidatorTest.java
similarity index 80%
rename from src/test/java/stirling/software/SPDF/utils/validation/ValidatorTest.java
rename to stirling-common/src/test/java/stirling/software/common/util/ValidatorTest.java
index 1ec8acd91..ea49d917b 100644
--- a/src/test/java/stirling/software/SPDF/utils/validation/ValidatorTest.java
+++ b/stirling-common/src/test/java/stirling/software/common/util/ValidatorTest.java
@@ -1,24 +1,21 @@
-package stirling.software.SPDF.utils.validation;
-
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+package stirling.software.common.util;
 
 import java.util.List;
 import java.util.stream.Stream;
-
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
+import org.mockito.Mockito;
 import org.mockito.junit.jupiter.MockitoExtension;
-
-import stirling.software.SPDF.model.UsernameAttribute;
-import stirling.software.SPDF.model.provider.GitHubProvider;
-import stirling.software.SPDF.model.provider.GoogleProvider;
-import stirling.software.SPDF.model.provider.Provider;
+import stirling.software.common.model.enumeration.UsernameAttribute;
+import stirling.software.common.model.provider.GitHubProvider;
+import stirling.software.common.model.provider.GoogleProvider;
+import stirling.software.common.model.provider.Provider;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.*;
 
 @ExtendWith(MockitoExtension.class)
 class ValidatorTest {