clonegur/backend/main.ts

41 lines
1.5 KiB
TypeScript
Raw Normal View History

2023-06-29 19:18:52 +00:00
import clonegur from "./clonegur.ts";
2023-06-30 21:25:21 +00:00
import { APIRouter } from "./routers/APIRouter.ts";
import AppRouter from "./routers/AppRouter.ts";
import { StaticRouter } from "./routers/StaticRouter.ts";
import { route } from "./server/decorators.ts";
import RestRequest from "./server/RestRequest.ts";
2023-06-29 19:18:52 +00:00
2023-06-30 21:25:21 +00:00
if (Deno.args[0] === "devel") {
class DevelRouter extends AppRouter {
@route('api/*') api;
@route('*') static;
public constructor(api: APIRouter, _static: StaticRouter) {
super();
this.api = api;
this.static = _static;
}
}
const app = await clonegur('http://localhost:80/');
const server = Deno.listen({ port: 80, hostname: '127.0.0.1' });
new DevelRouter(app.api, app.static).attach(server);
}
else if (Deno.args[0] === "prod") {
const api = Deno.args[1] ?? 'api.clonegur.topcheto.eu';
const stt = Deno.args[2] ?? 'clonegur.topcheto.eu';
const app = await clonegur('https://:80/');
const server = Deno.listenTls({ port: 80, hostname: '127.0.0.1' });
server.accept().then(async conn => {
for await (const req of Deno.serveHttp(conn)) {
const url = new URL(req.request.url);
if (url.hostname === api) app.api.handle(RestRequest.fromMessage(req));
else if (url.hostname === stt) app.static.handle(RestRequest.fromMessage(req));
else req.respondWith(new Response("nope :/", {
status: 404
}));
}
});
}