122 lines
2.6 KiB
TypeScript
122 lines
2.6 KiB
TypeScript
import Logging from "@proxnet/undead-logging";
|
|
import * as fs from "node:fs";
|
|
|
|
const log = new Logging("Config");
|
|
|
|
type RedisConfiguration = {
|
|
host: string,
|
|
port: number,
|
|
username: string,
|
|
password: string,
|
|
db: number
|
|
}
|
|
|
|
type WebConfiguration = {
|
|
port: number,
|
|
host: string,
|
|
publichost: string,
|
|
securepublichost: boolean
|
|
}
|
|
|
|
type PublicConfiguration = {
|
|
serverName: string,
|
|
serverId: string,
|
|
owner: string,
|
|
motd: string,
|
|
levelScale: number,
|
|
maxLevels: number
|
|
patches: string[],
|
|
}
|
|
|
|
type LoggingConfiguration = {
|
|
notfound: boolean,
|
|
debug: boolean,
|
|
network: boolean
|
|
}
|
|
|
|
type DiscordConfiguration = {
|
|
token: string,
|
|
clientId: string,
|
|
guildId: string
|
|
}
|
|
|
|
type AuthConfiguration = {
|
|
secret: string,
|
|
/**
|
|
* In Hours
|
|
*/
|
|
timeout: number
|
|
}
|
|
|
|
export type GalvanicConfiguration = {
|
|
redis: RedisConfiguration,
|
|
web: WebConfiguration,
|
|
public: PublicConfiguration,
|
|
logging: LoggingConfiguration,
|
|
discord: DiscordConfiguration | null,
|
|
auth: AuthConfiguration
|
|
}
|
|
|
|
export const defaultConfig: GalvanicConfiguration = {
|
|
redis: {
|
|
host: "127.0.0.1",
|
|
port: 6379,
|
|
username: "",
|
|
password: "",
|
|
db: 0
|
|
},
|
|
web: {
|
|
port: 3000,
|
|
host: "127.0.0.1",
|
|
publichost: "127.0.0.1:3000",
|
|
securepublichost: false,
|
|
},
|
|
public: {
|
|
serverName: "Galvanic Corrosion",
|
|
serverId: "galvanic-corrosion-default",
|
|
owner: "John Doe",
|
|
motd: "A Galvanic Corrosion server.",
|
|
levelScale: 1,
|
|
maxLevels: 30,
|
|
patches: [],
|
|
},
|
|
logging: {
|
|
notfound: false,
|
|
debug: false,
|
|
network: false
|
|
},
|
|
discord: null,
|
|
auth: {
|
|
secret: "CHANGE-ME-PLEASE",
|
|
timeout: 48
|
|
}
|
|
}
|
|
|
|
/** The current configuration. Read and parsed only during startup. */
|
|
let config: GalvanicConfiguration;
|
|
try {
|
|
if (!configurationExists()) generateDefaultConfig();
|
|
config = JSON.parse(fs.readFileSync('./config.json').toString());
|
|
} catch (err) {
|
|
log.e(`Could not get config: ${err}`);
|
|
Deno.exit(1);
|
|
}
|
|
|
|
/** Does the configuration file exist on the disk? */
|
|
export function configurationExists() {
|
|
return fs.existsSync('./config.json');
|
|
}
|
|
|
|
/** Place [or overwrite] the [existing] default configuration in the current directory */
|
|
export function generateDefaultConfig() {
|
|
fs.writeFileSync('./config.json', JSON.stringify(defaultConfig, undefined, ' '));
|
|
}
|
|
|
|
/** Get current server configuration */
|
|
export function getConfig() {
|
|
return config;
|
|
}
|
|
|
|
export const devMode = Deno.args.includes('--dev');
|
|
|
|
export * as Config from './config.ts'; |