- 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
126 lines
2.7 KiB
TypeScript
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";
|