|
@@ -14,7 +14,10 @@ const portSchema = z.number().positive().gt(0).lte(65535);
|
|
|
|
|
|
const environmentSchema = z.object({
|
|
|
app: z.object({
|
|
|
- base_url: z.string().url().transform((url) => url.toLowerCase()),
|
|
|
+ base_url: z
|
|
|
+ .string()
|
|
|
+ .url()
|
|
|
+ .transform((url) => url.toLowerCase()),
|
|
|
log_level: z.enum(["debug", "info", "warn", "error"]),
|
|
|
save_logs: z.boolean()
|
|
|
}),
|
|
@@ -76,97 +79,102 @@ const environmentSchema = z.object({
|
|
|
.optional()
|
|
|
});
|
|
|
|
|
|
-const loadConfig = (configPath: string) => {
|
|
|
- try {
|
|
|
- const yamlContent = fs.readFileSync(configPath, "utf8");
|
|
|
- const config = yaml.load(yamlContent);
|
|
|
- return config;
|
|
|
- } catch (error) {
|
|
|
- if (error instanceof Error) {
|
|
|
- throw new Error(
|
|
|
- `Error loading configuration file: ${error.message}`
|
|
|
- );
|
|
|
- }
|
|
|
- throw error;
|
|
|
- }
|
|
|
-};
|
|
|
-
|
|
|
-const configFilePath1 = path.join(APP_PATH, "config.yml");
|
|
|
-const configFilePath2 = path.join(APP_PATH, "config.yaml");
|
|
|
-
|
|
|
-let environment: any;
|
|
|
-if (fs.existsSync(configFilePath1)) {
|
|
|
- environment = loadConfig(configFilePath1);
|
|
|
-} else if (fs.existsSync(configFilePath2)) {
|
|
|
- environment = loadConfig(configFilePath2);
|
|
|
-}
|
|
|
-if (!environment) {
|
|
|
- const exampleConfigPath = path.join(__DIRNAME, "config.example.yml");
|
|
|
- if (fs.existsSync(exampleConfigPath)) {
|
|
|
+export function getConfig() {
|
|
|
+ const loadConfig = (configPath: string) => {
|
|
|
try {
|
|
|
- const exampleConfigContent = fs.readFileSync(
|
|
|
- exampleConfigPath,
|
|
|
- "utf8"
|
|
|
- );
|
|
|
- fs.writeFileSync(configFilePath1, exampleConfigContent, "utf8");
|
|
|
- environment = loadConfig(configFilePath1);
|
|
|
+ const yamlContent = fs.readFileSync(configPath, "utf8");
|
|
|
+ const config = yaml.load(yamlContent);
|
|
|
+ return config;
|
|
|
} catch (error) {
|
|
|
if (error instanceof Error) {
|
|
|
throw new Error(
|
|
|
- `Error creating configuration file from example: ${error.message}`
|
|
|
+ `Error loading configuration file: ${error.message}`
|
|
|
);
|
|
|
}
|
|
|
throw error;
|
|
|
}
|
|
|
- } else {
|
|
|
- throw new Error(
|
|
|
- "No configuration file found and no example configuration available"
|
|
|
- );
|
|
|
+ };
|
|
|
+
|
|
|
+ const configFilePath1 = path.join(APP_PATH, "config.yml");
|
|
|
+ const configFilePath2 = path.join(APP_PATH, "config.yaml");
|
|
|
+
|
|
|
+ let environment: any;
|
|
|
+ if (fs.existsSync(configFilePath1)) {
|
|
|
+ environment = loadConfig(configFilePath1);
|
|
|
+ } else if (fs.existsSync(configFilePath2)) {
|
|
|
+ environment = loadConfig(configFilePath2);
|
|
|
+ }
|
|
|
+ if (!environment) {
|
|
|
+ const exampleConfigPath = path.join(__DIRNAME, "config.example.yml");
|
|
|
+ if (fs.existsSync(exampleConfigPath)) {
|
|
|
+ try {
|
|
|
+ const exampleConfigContent = fs.readFileSync(
|
|
|
+ exampleConfigPath,
|
|
|
+ "utf8"
|
|
|
+ );
|
|
|
+ fs.writeFileSync(configFilePath1, exampleConfigContent, "utf8");
|
|
|
+ environment = loadConfig(configFilePath1);
|
|
|
+ } catch (error) {
|
|
|
+ if (error instanceof Error) {
|
|
|
+ throw new Error(
|
|
|
+ `Error creating configuration file from example: ${error.message}`
|
|
|
+ );
|
|
|
+ }
|
|
|
+ throw error;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw new Error(
|
|
|
+ "No configuration file found and no example configuration available"
|
|
|
+ );
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-if (!environment) {
|
|
|
- throw new Error("No configuration file found");
|
|
|
-}
|
|
|
+ if (!environment) {
|
|
|
+ throw new Error("No configuration file found");
|
|
|
+ }
|
|
|
|
|
|
-const parsedConfig = environmentSchema.safeParse(environment);
|
|
|
+ const parsedConfig = environmentSchema.safeParse(environment);
|
|
|
|
|
|
-if (!parsedConfig.success) {
|
|
|
- const errors = fromError(parsedConfig.error);
|
|
|
- throw new Error(`Invalid configuration file: ${errors}`);
|
|
|
-}
|
|
|
+ if (!parsedConfig.success) {
|
|
|
+ const errors = fromError(parsedConfig.error);
|
|
|
+ throw new Error(`Invalid configuration file: ${errors}`);
|
|
|
+ }
|
|
|
|
|
|
-const packageJsonPath = path.join(__DIRNAME, "..", "package.json");
|
|
|
-let packageJson: any;
|
|
|
-if (fs.existsSync && fs.existsSync(packageJsonPath)) {
|
|
|
- const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
|
|
|
- packageJson = JSON.parse(packageJsonContent);
|
|
|
+ const packageJsonPath = path.join(__DIRNAME, "..", "package.json");
|
|
|
+ let packageJson: any;
|
|
|
+ if (fs.existsSync && fs.existsSync(packageJsonPath)) {
|
|
|
+ const packageJsonContent = fs.readFileSync(packageJsonPath, "utf8");
|
|
|
+ packageJson = JSON.parse(packageJsonContent);
|
|
|
|
|
|
- if (packageJson.version) {
|
|
|
- process.env.APP_VERSION = packageJson.version;
|
|
|
+ if (packageJson.version) {
|
|
|
+ process.env.APP_VERSION = packageJson.version;
|
|
|
+ }
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-process.env.NEXT_PORT = parsedConfig.data.server.next_port.toString();
|
|
|
-process.env.SERVER_EXTERNAL_PORT =
|
|
|
- parsedConfig.data.server.external_port.toString();
|
|
|
-process.env.SERVER_INTERNAL_PORT =
|
|
|
- parsedConfig.data.server.internal_port.toString();
|
|
|
-process.env.FLAGS_EMAIL_VERIFICATION_REQUIRED = parsedConfig.data.flags
|
|
|
- ?.require_email_verification
|
|
|
- ? "true"
|
|
|
- : "false";
|
|
|
-process.env.SESSION_COOKIE_NAME = parsedConfig.data.server.session_cookie_name;
|
|
|
-process.env.RESOURCE_SESSION_COOKIE_NAME =
|
|
|
- parsedConfig.data.server.resource_session_cookie_name;
|
|
|
-process.env.EMAIL_ENABLED = parsedConfig.data.email ? "true" : "false";
|
|
|
-process.env.DISABLE_SIGNUP_WITHOUT_INVITE = parsedConfig.data.flags
|
|
|
- ?.disable_signup_without_invite
|
|
|
- ? "true"
|
|
|
- : "false";
|
|
|
-process.env.DISABLE_USER_CREATE_ORG = parsedConfig.data.flags
|
|
|
- ?.disable_user_create_org
|
|
|
- ? "true"
|
|
|
- : "false";
|
|
|
+ process.env.NEXT_PORT = parsedConfig.data.server.next_port.toString();
|
|
|
+ process.env.SERVER_EXTERNAL_PORT =
|
|
|
+ parsedConfig.data.server.external_port.toString();
|
|
|
+ process.env.SERVER_INTERNAL_PORT =
|
|
|
+ parsedConfig.data.server.internal_port.toString();
|
|
|
+ process.env.FLAGS_EMAIL_VERIFICATION_REQUIRED = parsedConfig.data.flags
|
|
|
+ ?.require_email_verification
|
|
|
+ ? "true"
|
|
|
+ : "false";
|
|
|
+ process.env.SESSION_COOKIE_NAME =
|
|
|
+ parsedConfig.data.server.session_cookie_name;
|
|
|
+ process.env.RESOURCE_SESSION_COOKIE_NAME =
|
|
|
+ parsedConfig.data.server.resource_session_cookie_name;
|
|
|
+ process.env.EMAIL_ENABLED = parsedConfig.data.email ? "true" : "false";
|
|
|
+ process.env.DISABLE_SIGNUP_WITHOUT_INVITE = parsedConfig.data.flags
|
|
|
+ ?.disable_signup_without_invite
|
|
|
+ ? "true"
|
|
|
+ : "false";
|
|
|
+ process.env.DISABLE_USER_CREATE_ORG = parsedConfig.data.flags
|
|
|
+ ?.disable_user_create_org
|
|
|
+ ? "true"
|
|
|
+ : "false";
|
|
|
+
|
|
|
+ return parsedConfig.data;
|
|
|
+}
|
|
|
|
|
|
-export default parsedConfig.data;
|
|
|
+export default getConfig();
|