Add data validation to the config
This commit is contained in:
parent
4506b97101
commit
be25b95789
2 changed files with 68 additions and 10 deletions
|
|
@ -2,19 +2,11 @@
|
||||||
import "module-alias/register";
|
import "module-alias/register";
|
||||||
|
|
||||||
import startWebsocketServer from "./websocket";
|
import startWebsocketServer from "./websocket";
|
||||||
|
import { loadConfig } from "./utils/config";
|
||||||
import { GameDB } from "./objects/GameDB";
|
import { GameDB } from "./objects/GameDB";
|
||||||
import { Logger } from "tslog";
|
import { Logger } from "tslog";
|
||||||
import toml from "toml";
|
|
||||||
import fs from "fs";
|
|
||||||
|
|
||||||
// load the config
|
export const config: IConfig = loadConfig();
|
||||||
try {
|
|
||||||
var configData = toml.parse(fs.readFileSync("config.toml", "utf-8"));
|
|
||||||
} catch {
|
|
||||||
console.error("Can't find config file. Exiting");
|
|
||||||
process.exit(1);
|
|
||||||
};
|
|
||||||
export const config: IConfig = configData;
|
|
||||||
|
|
||||||
// Define the logger
|
// Define the logger
|
||||||
export const log = new Logger({
|
export const log = new Logger({
|
||||||
|
|
|
||||||
66
server/src/utils/config.ts
Normal file
66
server/src/utils/config.ts
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
import { readFileSync } from "fs";
|
||||||
|
import { log } from "@/main";
|
||||||
|
import toml from "toml";
|
||||||
|
import Joi from "joi";
|
||||||
|
|
||||||
|
const schema = Joi.object({
|
||||||
|
game: Joi.object({
|
||||||
|
type: Joi
|
||||||
|
.string()
|
||||||
|
.allow(
|
||||||
|
`file:json`,
|
||||||
|
// `file:csv`,
|
||||||
|
// `web:json`,
|
||||||
|
// `web:csv`
|
||||||
|
)
|
||||||
|
.required()
|
||||||
|
.message(`Invalid deck type`),
|
||||||
|
location: Joi
|
||||||
|
.string()
|
||||||
|
.required()
|
||||||
|
.message(`The deck location must be a string`),
|
||||||
|
}),
|
||||||
|
server: Joi.object({
|
||||||
|
port: Joi
|
||||||
|
.number()
|
||||||
|
.port()
|
||||||
|
.required()
|
||||||
|
.message(`Invalid port number`),
|
||||||
|
cors: Joi.object({
|
||||||
|
origins: Joi
|
||||||
|
.array()
|
||||||
|
.items(Joi.string())
|
||||||
|
.message(`The CORS origins must be an array of strings`),
|
||||||
|
}),
|
||||||
|
}),
|
||||||
|
log: Joi.object({
|
||||||
|
level: Joi
|
||||||
|
.string()
|
||||||
|
.allow(
|
||||||
|
`silly`,
|
||||||
|
`trace`,
|
||||||
|
`debug`,
|
||||||
|
`info`,
|
||||||
|
`warn`,
|
||||||
|
`error`,
|
||||||
|
`fatal`
|
||||||
|
)
|
||||||
|
.optional()
|
||||||
|
.default(`info`)
|
||||||
|
.message(`Invalid log level`),
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
|
||||||
|
export function loadConfig(): IConfig {
|
||||||
|
const data = toml.parse(readFileSync("config.toml", "utf-8"));
|
||||||
|
const { value, error } = schema.validate(data, {
|
||||||
|
abortEarly: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
log.error(`Configuration object failed to validate`)
|
||||||
|
log.error(error);
|
||||||
|
process.exit(1);
|
||||||
|
};
|
||||||
|
return value;
|
||||||
|
};
|
||||||
Loading…
Add table
Add a link
Reference in a new issue