Typescript migration
* app.js * main.js * router.js
This commit is contained in:
parent
94d01310b9
commit
9652519267
12 changed files with 256 additions and 157 deletions
server
15
server/@types/http-auth/index.d.ts
vendored
Normal file
15
server/@types/http-auth/index.d.ts
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
declare module "http-auth" {
|
||||
import {RequestHandler} from "express"
|
||||
|
||||
class Auth {}
|
||||
|
||||
class BasicAuth extends Auth {}
|
||||
class BasicAuthOptions {}
|
||||
|
||||
type BasicAuthChecker =
|
||||
(username: string, password: string, callback: BasicAuthCheckerCallback) => void
|
||||
type BasicAuthCheckerCallback = (result: boolean | Error, customUser?: string) => void
|
||||
|
||||
function basic(options: BasicAuthOptions, checker: BasicAuthChecker): BasicAuth
|
||||
function connect(auth: Auth): RequestHandler
|
||||
}
|
|
@ -1,71 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
const _ = require('lodash')
|
||||
const auth = require('http-auth');
|
||||
const bodyParser = require('body-parser');
|
||||
const compress = require('compression');
|
||||
const express = require('express');
|
||||
const fs = require('graceful-fs')
|
||||
|
||||
const config = require('./config').config
|
||||
|
||||
const app = express();
|
||||
|
||||
module.exports = (() => {
|
||||
const router = express.Router();
|
||||
|
||||
// urls beneath /internal are protected
|
||||
const internalAuth = auth.basic(
|
||||
{
|
||||
realm: 'Knotenformular - Intern'
|
||||
},
|
||||
function (username, password, callback) {
|
||||
callback(
|
||||
config.server.internal.active &&
|
||||
username === config.server.internal.user &&
|
||||
password === config.server.internal.password
|
||||
);
|
||||
}
|
||||
);
|
||||
router.use('/internal', auth.connect(internalAuth));
|
||||
|
||||
router.use(bodyParser.json());
|
||||
router.use(bodyParser.urlencoded({ extended: true }));
|
||||
|
||||
const adminDir = __dirname + '/../admin';
|
||||
const clientDir = __dirname + '/../client';
|
||||
const templateDir = __dirname + '/templates';
|
||||
|
||||
const jsTemplateFiles = [
|
||||
'/config.js'
|
||||
];
|
||||
|
||||
router.use(compress());
|
||||
|
||||
function serveTemplate (mimeType, req, res, next) {
|
||||
return fs.readFile(templateDir + '/' + req.path + '.template', 'utf8', function (err, body) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
res.writeHead(200, { 'Content-Type': mimeType });
|
||||
res.end(_.template(body)({ config: config.client }));
|
||||
|
||||
return null; // to suppress warning
|
||||
});
|
||||
}
|
||||
|
||||
router.use(function (req, res, next) {
|
||||
if (jsTemplateFiles.indexOf(req.path) >= 0) {
|
||||
return serveTemplate('application/javascript', req, res, next);
|
||||
}
|
||||
return next();
|
||||
});
|
||||
|
||||
router.use('/internal/admin', express.static(adminDir + '/'));
|
||||
router.use('/', express.static(clientDir + '/'));
|
||||
|
||||
app.use(config.server.rootPath, router);
|
||||
|
||||
return app;
|
||||
})()
|
67
server/app.ts
Normal file
67
server/app.ts
Normal file
|
@ -0,0 +1,67 @@
|
|||
import _ from "lodash"
|
||||
import auth, {BasicAuthCheckerCallback} from "http-auth"
|
||||
import bodyParser from "body-parser"
|
||||
import compress from "compression"
|
||||
import express, {Express, NextFunction, Request, Response} from "express"
|
||||
import fs from "graceful-fs"
|
||||
|
||||
const config = require('./config').config
|
||||
|
||||
const app: Express = express();
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
// urls beneath /internal are protected
|
||||
const internalAuth = auth.basic(
|
||||
{
|
||||
realm: 'Knotenformular - Intern'
|
||||
},
|
||||
function (username: string, password: string, callback: BasicAuthCheckerCallback): void {
|
||||
callback(
|
||||
config.server.internal.active &&
|
||||
username === config.server.internal.user &&
|
||||
password === config.server.internal.password
|
||||
);
|
||||
}
|
||||
);
|
||||
router.use('/internal', auth.connect(internalAuth));
|
||||
|
||||
router.use(bodyParser.json());
|
||||
router.use(bodyParser.urlencoded({ extended: true }));
|
||||
|
||||
const adminDir = __dirname + '/../admin';
|
||||
const clientDir = __dirname + '/../client';
|
||||
const templateDir = __dirname + '/templates';
|
||||
|
||||
const jsTemplateFiles = [
|
||||
'/config.js'
|
||||
];
|
||||
|
||||
router.use(compress());
|
||||
|
||||
function serveTemplate (mimeType: string, req: Request, res: Response, next: NextFunction): void {
|
||||
return fs.readFile(templateDir + '/' + req.path + '.template', 'utf8', function (err, body) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
res.writeHead(200, { 'Content-Type': mimeType });
|
||||
res.end(_.template(body)({ config: config.client }));
|
||||
|
||||
return null; // to suppress warning
|
||||
});
|
||||
}
|
||||
|
||||
router.use(function (req: Request, res: Response, next: NextFunction): void {
|
||||
if (jsTemplateFiles.indexOf(req.path) >= 0) {
|
||||
return serveTemplate('application/javascript', req, res, next);
|
||||
}
|
||||
return next();
|
||||
});
|
||||
|
||||
router.use('/internal/admin', express.static(adminDir + '/'));
|
||||
router.use('/', express.static(clientDir + '/'));
|
||||
|
||||
app.use(config.server.rootPath, router);
|
||||
|
||||
export default app;
|
8
server/init.js
Normal file
8
server/init.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
'use strict';
|
||||
|
||||
(function () {
|
||||
// Use graceful-fs instead of fs also in all libraries to have more robust fs handling.
|
||||
const realFs = require('fs');
|
||||
const gracefulFs = require('graceful-fs');
|
||||
gracefulFs.gracefulify(realFs);
|
||||
})();
|
|
@ -1,6 +1,6 @@
|
|||
'use strict';
|
||||
|
||||
const app = require('./app');
|
||||
const app = require('./app').default;
|
||||
const config = require('./config').config;
|
||||
|
||||
// Hack to allow proper logging of Error.
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
#!/usr/bin/env node
|
||||
/*jslint node: true */
|
||||
'use strict';
|
||||
|
||||
(function () {
|
||||
// Use graceful-fs instead of fs also in all libraries to have more robust fs handling.
|
||||
const realFs = require('fs');
|
||||
const gracefulFs = require('graceful-fs');
|
||||
gracefulFs.gracefulify(realFs);
|
||||
})();
|
||||
|
||||
const config = require('./config').config;
|
||||
|
||||
const Logger = require('./logger')
|
||||
Logger.tag('main', 'startup').info('Server starting up...');
|
||||
|
||||
require('./db/database').init()
|
||||
.then(() => {
|
||||
Logger.tag('main').info('Initializing...');
|
||||
|
||||
const app = require('./app');
|
||||
|
||||
require('./jobs/scheduler').init();
|
||||
require('./router').init();
|
||||
|
||||
app.listen(config.server.port, '::');
|
||||
module.exports = app;
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Could not init database: ', error);
|
||||
process.exit(1);
|
||||
});
|
23
server/main.ts
Executable file
23
server/main.ts
Executable file
|
@ -0,0 +1,23 @@
|
|||
import "./init"
|
||||
import { config } from "./config"
|
||||
import Logger from "./logger"
|
||||
import db from "./db/database"
|
||||
import scheduler from "./jobs/scheduler"
|
||||
import { init as initRouter } from "./router"
|
||||
import app from "./app"
|
||||
|
||||
Logger.tag('main', 'startup').info('Server starting up...');
|
||||
|
||||
db.init()
|
||||
.then(() => {
|
||||
Logger.tag('main').info('Initializing...');
|
||||
|
||||
scheduler.init();
|
||||
initRouter();
|
||||
|
||||
app.listen(config.server.port, '::');
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Could not init database: ', error);
|
||||
process.exit(1);
|
||||
});
|
|
@ -1,52 +0,0 @@
|
|||
'use strict';
|
||||
|
||||
const express = require('express');
|
||||
|
||||
const app = require('./app')
|
||||
const config = require('./config').config
|
||||
const VersionResource = require('./resources/versionResource')
|
||||
const StatisticsResource = require('./resources/statisticsResource')
|
||||
const FrontendResource = require('./resources/frontendResource')
|
||||
const NodeResource = require('./resources/nodeResource')
|
||||
const MonitoringResource = require('./resources/monitoringResource')
|
||||
const TaskResource = require('./resources/taskResource')
|
||||
const MailResource = require('./resources/mailResource')
|
||||
|
||||
module.exports = {
|
||||
init () {
|
||||
const router = express.Router();
|
||||
|
||||
router.post('/', FrontendResource.render);
|
||||
|
||||
router.get('/api/version', VersionResource.get);
|
||||
|
||||
router.post('/api/node', NodeResource.create);
|
||||
router.put('/api/node/:token', NodeResource.update);
|
||||
router.delete('/api/node/:token', NodeResource.delete);
|
||||
router.get('/api/node/:token', NodeResource.get);
|
||||
|
||||
router.put('/api/monitoring/confirm/:token', MonitoringResource.confirm);
|
||||
router.put('/api/monitoring/disable/:token', MonitoringResource.disable);
|
||||
|
||||
router.get('/internal/api/statistics', StatisticsResource.get);
|
||||
|
||||
router.get('/internal/api/tasks', TaskResource.getAll);
|
||||
router.put('/internal/api/tasks/run/:id', TaskResource.run);
|
||||
router.put('/internal/api/tasks/enable/:id', TaskResource.enable);
|
||||
router.put('/internal/api/tasks/disable/:id', TaskResource.disable);
|
||||
|
||||
router.get('/internal/api/monitoring', MonitoringResource.getAll);
|
||||
|
||||
router.get('/internal/api/mails', MailResource.getAll);
|
||||
router.get('/internal/api/mails/:id', MailResource.get);
|
||||
router.delete('/internal/api/mails/:id', MailResource.delete);
|
||||
router.put('/internal/api/mails/reset/:id', MailResource.resetFailures);
|
||||
|
||||
router.put('/internal/api/nodes/:token', NodeResource.update);
|
||||
router.delete('/internal/api/nodes/:token', NodeResource.delete);
|
||||
router.get('/internal/api/nodes', NodeResource.getAll);
|
||||
router.get('/internal/api/nodes/:token', NodeResource.get);
|
||||
|
||||
app.use(config.server.rootPath, router);
|
||||
}
|
||||
}
|
49
server/router.ts
Normal file
49
server/router.ts
Normal file
|
@ -0,0 +1,49 @@
|
|||
import express from "express"
|
||||
|
||||
import app from "./app"
|
||||
import {config} from "./config"
|
||||
|
||||
import VersionResource from "./resources/versionResource"
|
||||
import StatisticsResource from "./resources/statisticsResource"
|
||||
import FrontendResource from "./resources/frontendResource"
|
||||
import NodeResource from "./resources/nodeResource"
|
||||
import MonitoringResource from "./resources/monitoringResource"
|
||||
import TaskResource from "./resources/taskResource"
|
||||
import MailResource from "./resources/mailResource"
|
||||
|
||||
export function init (): void {
|
||||
const router = express.Router();
|
||||
|
||||
router.post('/', FrontendResource.render);
|
||||
|
||||
router.get('/api/version', VersionResource.get);
|
||||
|
||||
router.post('/api/node', NodeResource.create);
|
||||
router.put('/api/node/:token', NodeResource.update);
|
||||
router.delete('/api/node/:token', NodeResource.delete);
|
||||
router.get('/api/node/:token', NodeResource.get);
|
||||
|
||||
router.put('/api/monitoring/confirm/:token', MonitoringResource.confirm);
|
||||
router.put('/api/monitoring/disable/:token', MonitoringResource.disable);
|
||||
|
||||
router.get('/internal/api/statistics', StatisticsResource.get);
|
||||
|
||||
router.get('/internal/api/tasks', TaskResource.getAll);
|
||||
router.put('/internal/api/tasks/run/:id', TaskResource.run);
|
||||
router.put('/internal/api/tasks/enable/:id', TaskResource.enable);
|
||||
router.put('/internal/api/tasks/disable/:id', TaskResource.disable);
|
||||
|
||||
router.get('/internal/api/monitoring', MonitoringResource.getAll);
|
||||
|
||||
router.get('/internal/api/mails', MailResource.getAll);
|
||||
router.get('/internal/api/mails/:id', MailResource.get);
|
||||
router.delete('/internal/api/mails/:id', MailResource.delete);
|
||||
router.put('/internal/api/mails/reset/:id', MailResource.resetFailures);
|
||||
|
||||
router.put('/internal/api/nodes/:token', NodeResource.update);
|
||||
router.delete('/internal/api/nodes/:token', NodeResource.delete);
|
||||
router.get('/internal/api/nodes', NodeResource.getAll);
|
||||
router.get('/internal/api/nodes/:token', NodeResource.get);
|
||||
|
||||
app.use(config.server.rootPath, router);
|
||||
}
|
|
@ -43,7 +43,10 @@
|
|||
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
||||
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
||||
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||
// "typeRoots": [], /* List of folders to include type definitions from. */
|
||||
"typeRoots": [ /* List of folders to include type definitions from. */
|
||||
"../node_modules/@types",
|
||||
"@types"
|
||||
],
|
||||
// "types": [], /* Type declaration files to be included in compilation. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
||||
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue