jaller94/cs2d-webadmin

View on GitHub
src/router-filesystem.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Router } from 'express';
import { json } from 'body-parser';
import { readFile, writeFile } from 'fs';
import * as util from 'util';

const router = Router();

router.use(json());

const configFiles = [
    'sys/bans.lst',
    'sys/mapcycle.cfg',
    'sys/server.cfg',
    'sys/serverinfo.txt',
    'sys/weapons_recoil.cfg',
];

function isConfigFile(path: string) {
    return configFiles.includes(path);
}

function isServerLuaFile(path: string) {
    return path.startsWith('sys/lua/');
}

router.get(/^\/(.*)/,
    function(req, res) {
        const filepath = req.params[0];
        console.log('filepath', filepath);
        if (isConfigFile(filepath)) {
            readFile('server/' + filepath, 'latin1', (err, data) => {
                res.set({ 'Content-Type': 'text/plain; charset=utf8' });
                if (err) res.end(err.message);
                res.end(data);
            })
        } else {
            res.status(403).end('Forbidden!');
        }
    }
);

router.post(/^\/(.*)/,
    function(req, res) {
        const filepath = req.params[0];
        if (typeof req.body.body !== 'string') {
            res.end('invalid format');
        } else if (isConfigFile(filepath)) {
            writeFile('server/' + filepath, req.body.body, 'latin1', (err) => {
                if (err) res.end(err.message);
                res.end('success');
            })
        } else {
            res.status(403).end('Forbidden!');
        }
    }
);

export default router;