diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java index 9cf25b4c..944b8e6c 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/metadata/MetaDataAction.java @@ -149,6 +149,8 @@ public class MetaDataAction metaDataOutput.setBranding(metaDataInput.getInstance().getBranding()); } + metaDataOutput.setEnvironmentValues(metaDataInput.getInstance().getEnvironmentValues()); + // todo post-customization - can do whatever w/ the result if you want? return metaDataOutput; diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java index 46194024..40174412 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/actions/metadata/MetaDataOutput.java @@ -45,6 +45,7 @@ public class MetaDataOutput extends AbstractActionOutput private Map reports; private Map apps; private Map widgets; + private Map environmentValues; private List appTree; private QBrandingMetaData branding; @@ -202,4 +203,27 @@ public class MetaDataOutput extends AbstractActionOutput { this.branding = branding; } + + + + /******************************************************************************* + ** Getter for environmentValues + ** + *******************************************************************************/ + public Map getEnvironmentValues() + { + return environmentValues; + } + + + + /******************************************************************************* + ** Setter for environmentValues + ** + *******************************************************************************/ + public void setEnvironmentValues(Map environmentValues) + { + this.environmentValues = environmentValues; + } + } diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java index b3fa4650..147ca32c 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/QInstance.java @@ -50,6 +50,8 @@ import com.kingsrook.qqq.backend.core.model.metadata.reporting.QReportMetaData; import com.kingsrook.qqq.backend.core.model.metadata.tables.QTableMetaData; import com.kingsrook.qqq.backend.core.modules.authentication.metadata.QAuthenticationMetaData; import com.kingsrook.qqq.backend.core.utils.StringUtils; +import io.github.cdimascio.dotenv.Dotenv; +import io.github.cdimascio.dotenv.DotenvEntry; /******************************************************************************* @@ -83,6 +85,8 @@ public class QInstance private Map queueProviders = new LinkedHashMap<>(); private Map queues = new LinkedHashMap<>(); + private Map environmentValues = new LinkedHashMap<>(); + // todo - lock down the object (no more changes allowed) after it's been validated? @JsonIgnore @@ -93,6 +97,51 @@ public class QInstance + /******************************************************************************* + ** + *******************************************************************************/ + public QInstance() + { + loadEnvironmentValues(); + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private void loadEnvironmentValues() + { + String prefix = "QQQ_ENV_"; + for(String name : System.getenv().keySet()) + { + String value = System.getenv(name); + addEnvironmentValueIfNameMatchesPrefix(prefix, name, value); + } + + Dotenv dotenv = Dotenv.configure().ignoreIfMissing().load(); + for(DotenvEntry entry : dotenv.entries()) + { + addEnvironmentValueIfNameMatchesPrefix(prefix, entry.getKey(), entry.getValue()); + } + } + + + + /******************************************************************************* + ** + *******************************************************************************/ + private void addEnvironmentValueIfNameMatchesPrefix(String prefix, String name, String value) + { + if(name.startsWith(prefix)) + { + name = name.replaceFirst(prefix, ""); + environmentValues.put(name, value); + } + } + + + /******************************************************************************* ** Get the backend for a given table name *******************************************************************************/ @@ -937,4 +986,26 @@ public class QInstance this.queues = queues; } + + + /******************************************************************************* + ** Getter for environmentValues + ** + *******************************************************************************/ + public Map getEnvironmentValues() + { + return environmentValues; + } + + + + /******************************************************************************* + ** Setter for environmentValues + ** + *******************************************************************************/ + public void setEnvironmentValues(Map environmentValues) + { + this.environmentValues = environmentValues; + } + }