This repository has been archived on 2026-03-19. You can view files and clone it, but cannot push or open issues or pull requests.
Files
galvanic-corrosion/src/config.ts
zombieb 616f5dd619 Basic live service:
- Matchmaking
- Instance
- Presence (albeit empty atm)

Authentication fixes; differentiate between user and profile
Default auth timeout is now 3 hours
Add "operators" database key ("all users with operator permissions", or "developer" role set in token), add check in `Profile`
Fix default profile image filename reference when not set
account/me
Log hile reporting, do stuff with the report later ("Server" user for commands, operators can check reports)
Refresh login done by client automatically when token expires, requires extra work
2025-03-24 21:50:22 -04:00

126 lines
2.7 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: 3,
},
};
/** 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";