continuwuity/servers/element-web/config.js
2024-12-16 02:23:12 +00:00

61 lines
2.1 KiB
JavaScript

import fs from 'node:fs';
// Read base config
let baseConfig = JSON.parse(fs.readFileSync('./config.json', 'utf8'));
// Server list
const servers = JSON.parse(fs.readFileSync('./servers.json', 'utf8'));
// Default server config
const defaultServerConfig = "element.ellis.link";
const defaultConfigPath = './public/config.json';
// raim.ist config
const raimConfig = await fetch('https://riot.raim.ist/config.json').then(res => res.json());
baseConfig = {
...baseConfig,
enable_presence_by_hs_url: {
...raimConfig.enable_presence_by_hs_url,
...baseConfig.enable_presence_by_hs_url,
},
setting_defaults: {
...baseConfig.setting_defaults,
custom_themes: raimConfig.setting_defaults.custom_themes,
},
};
// biome-ignore lint/complexity/noForEach: <explanation>
Object.keys(servers).forEach(server => {
// Get server config
const serverConfig = servers[server];
// Create overridden config
const overriddenConfig = {
...baseConfig,
default_server_name: serverConfig.serverName,
default_server_config: {
...baseConfig?.default_server_config,
"m.homeserver": {
...baseConfig.default_server_config["m.homeserver"],
base_url: serverConfig.baseUrl
},
"org.matrix.msc3575.proxy": {
...baseConfig.default_server_config["org.matrix.msc3575.proxy"],
url: serverConfig.baseUrl
}
},
room_directory: {
...baseConfig.room_directory,
servers: [
serverConfig.serverName,
...baseConfig.room_directory.servers.filter(s => s !== serverConfig.serverName)
]
}
};
// Write config
const configPath = `./public/config.${server}.json`;
console.log(`Writing config to ${configPath}`);
fs.writeFileSync(configPath, JSON.stringify(overriddenConfig, null, 4));
// write default config
if (server === defaultServerConfig) {
console.log(`Writing default config to ${defaultConfigPath}`);
fs.writeFileSync(defaultConfigPath, JSON.stringify(overriddenConfig, null, 4));
}
});