summaryrefslogtreecommitdiff
path: root/src/Main.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/Main.ts')
-rw-r--r--src/Main.ts84
1 files changed, 84 insertions, 0 deletions
diff --git a/src/Main.ts b/src/Main.ts
new file mode 100644
index 0000000..bf75f2a
--- /dev/null
+++ b/src/Main.ts
@@ -0,0 +1,84 @@
+// Copyright 2022 NotDankEnough (ilotterytea)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import express from "express";
+
+import cookieParser from "cookie-parser";
+import bodyParser from "body-parser";
+
+import http from "http";
+import https from "https";
+
+import { Logger } from "tslog";
+
+import ProfileRouter from "./routers/Profile";
+import AuthRouter from "./routers/Auth";
+import ImageRouter from "./routers/Image";
+import { PrismaClient } from "@prisma/client";
+
+const log: Logger = new Logger({name: "main"});
+
+function Main(dirPath: string, cfg: {[key: string]: any}, cli_options?: {[key: string]: any}): void {
+ const App: express.Express = express();
+ const prisma: PrismaClient = new PrismaClient();
+
+ var httpc: http.Server | null = null;
+ var httpsc: https.Server | null = null;
+
+ App.set("view engine", "ejs");
+ App.set("views", `${dirPath}/static/ejs`);
+
+ App.use(cookieParser());
+ App.use(bodyParser.urlencoded({extended: false}));
+
+ App.use("/me", ProfileRouter(dirPath, prisma));
+ App.use("/auth", AuthRouter(dirPath, cfg, prisma));
+ App.use("/", ImageRouter(dirPath, cfg, prisma));
+
+ App.use(express.static(`${dirPath}/static`));
+
+ if (cli_options) {
+ if (!cli_options.noSsl) {
+ httpc = http.createServer(App);
+ httpc.listen(parseInt(cfg.Ports.HTTP), () => {
+ log.info("Image hoster is running on port", cfg.Ports.HTTP);
+ });
+ } else {
+ if (
+ !cfg.Certificate.Key ||
+ !cfg.Certificate.Cert ||
+ !cfg.Certificate.Ca
+ ) {
+ log.error("No paths for certificate provided.");
+ process.exit(1);
+ }
+
+ const credentials = {
+ key: cfg.Certificate.Key,
+ cert: cfg.Certificate.Cert,
+ ca: cfg.Certificate.Ca
+ }
+
+ httpsc = https.createServer(credentials, App);
+ httpsc.listen(parseInt(cfg.Ports.HTTPS), () => {
+ log.info("Image hoster is running on port", cfg.Ports.HTTPS, "(SSL)");
+ });
+ }
+ } else {
+ log.error("NO CLI OPTIONS PROVIDED!!!")
+ process.exit(1);
+ }
+}
+
+export default Main; \ No newline at end of file