forked from openiap/opencore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebServer.ts
More file actions
112 lines (96 loc) · 4.09 KB
/
Copy pathWebServer.ts
File metadata and controls
112 lines (96 loc) · 4.09 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
import * as path from "path";
import * as winston from "winston";
import * as http from "http";
import * as https from "https";
import * as express from "express";
import * as compression from "compression";
import * as bodyParser from "body-parser";
import * as cookieParser from "cookie-parser";
import * as cookieSession from "cookie-session";
import * as crypto from "crypto";
import * as flash from "flash";
import * as morgan from "morgan";
import * as samlp from "samlp";
import { SamlProvider } from "./SamlProvider";
import { LoginProvider } from "./LoginProvider";
import { DatabaseConnection } from "./DatabaseConnection";
import { Config } from "./Config";
export class WebServer {
private static _logger: winston.Logger;
private static app: express.Express;
static async configure(logger: winston.Logger, baseurl: string): Promise<http.Server> {
this._logger = logger;
this.app = express();
// this.app.use(morgan('combined', { stream: (winston.stream as any).write }));
var loggerstream = {
write: function (message, encoding) {
logger.silly(message);
}
};
this.app.use(morgan('combined', { stream: loggerstream }));
this.app.use(compression());
this.app.use(bodyParser.urlencoded({ extended: true }));
this.app.use(bodyParser.json());
this.app.use(cookieParser());
this.app.use(cookieSession({
name: "session",
keys: ["key1", "key2"]
}));
this.app.use(flash());
// Add headers
this.app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*');
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', "true");
// Pass to next layer of middleware
next();
});
this.app.use("/", express.static(path.join(__dirname, "/public")));
await LoginProvider.configure(this._logger, this.app, baseurl);
await SamlProvider.configure(this._logger, this.app, baseurl);
var server: http.Server = null;
if (Config.tls_crt != '' && Config.tls_key != '') {
var options: any = {
cert: Config.tls_crt,
key: Config.tls_key
};
if (Config.tls_crt.indexOf("---") == -1) {
options = {
cert: Buffer.from(Config.tls_crt, 'base64').toString('ascii'),
key: Buffer.from(Config.tls_key, 'base64').toString('ascii')
};
}
var ca: string = Config.tls_ca;
if (ca !== "") {
if (ca.indexOf("---") === -1) {
ca = Buffer.from(Config.tls_ca, 'base64').toString('ascii');
}
options.ca = ca;
// options.cert += "\n" + ca;
}
if (Config.tls_passphrase !== "") {
// options.cert = [options.cert, Config.tls_passphrase];
// options.key = [options.key, Config.tls_passphrase];
options.passphrase = Config.tls_passphrase;
}
server = https.createServer(options, this.app);
// var redirapp = express();
// var _http = http.createServer(redirapp);
// redirapp.get('*', function (req, res) {
// //res.redirect('https://' + req.headers.host + req.url);
// res.status(200).json({ status: "ok" });
// })
// _http.listen(80);
} else {
server = http.createServer(this.app);
}
server.listen(Config.port);
return server;
}
}