File size: 2,673 Bytes
01fcadf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { readFileSync } from "node:fs";
import { fileURLToPath } from "node:url";
import chalk from "chalk";
import { TomlPrimitive, parse } from "smol-toml";

interface TomlData {
    marketplace: {
        enabled: boolean;
        psk: String;
    };
    server: {
        server: {
            port: number;
            wisp: boolean;
            logging: boolean;
        };
    };
    db: {
        name: string;
        username: string;
        password: string;
        postgres: boolean;
    };
    postgres: {
        domain: string;
        port: number;
    };
}

interface Verify {
    name: string;
    typeOF: any;
    type: any;
}

let doc = readFileSync(fileURLToPath(new URL("../config.toml", import.meta.url))).toString();
const parsedDoc = parse(doc) as unknown as TomlData;

function verify(t: Verify[]) {
    for (let i: number = 0; i !== t.length; i++) {
        if (typeof t[i].typeOF !== t[i].type) {
            throw new Error(`Invalid structure: "${t[i].name}" should be a(n) ${t[i].type}`);
        }
    }
}

verify([
    { name: "marketplace", typeOF: parsedDoc.marketplace, type: "object" },
    { name: "marketplace.enabled", typeOF: parsedDoc.marketplace.enabled, type: "boolean" },
    { name: "marketplace.psk", typeOF: parsedDoc.marketplace.psk, type: "string" },
    { name: "server", typeOF: parsedDoc.server, type: "object" },
    { name: "server.server", typeOF: parsedDoc.server.server, type: "object" },
    { name: "server.server.port", typeOF: parsedDoc.server.server.port, type: "number" },
    { name: "server.server.wisp", typeOF: parsedDoc.server.server.wisp, type: "boolean" },
    { name: "server.server.logging", typeOF: parsedDoc.server.server.logging, type: "boolean" },
    { name: "db", typeOF: parsedDoc.db, type: "object" },
    { name: "db.name", typeOF: parsedDoc.db.name, type: "string" },
    { name: "db.username", typeOF: parsedDoc.db.username, type: "string" },
    { name: "db.password", typeOF: parsedDoc.db.password, type: "string" },
    { name: "db.postgres", typeOF: parsedDoc.db.postgres, type: "boolean" },
    { name: "postgres", typeOF: parsedDoc.postgres, type: "object" },
    { name: "postgres.domain", typeOF: parsedDoc.postgres.domain, type: "string" },
    { name: "postgres.port", typeOF: parsedDoc.postgres.port, type: "number" }
]);

if (parsedDoc.marketplace.psk === "CHANGEME") {
    console.warn(chalk.yellow.bold('PSK should be changed from "CHANGEME"'));
}
if (parsedDoc.db.password === "password") {
    console.warn(chalk.red.bold("You should change your DB password!!"));
}

export { TomlData, parsedDoc };