aboutsummaryrefslogtreecommitdiff
path: root/src/app.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.js')
-rw-r--r--src/app.js166
1 files changed, 0 insertions, 166 deletions
diff --git a/src/app.js b/src/app.js
deleted file mode 100644
index 8904219..0000000
--- a/src/app.js
+++ /dev/null
@@ -1,166 +0,0 @@
-const fastify = require("fastify")();
-const fastify_static = require('fastify-static');
-const api = require("./api/v1");
-const yaml = require('js-yaml');
-const fs = require('fs');
-const { exit } = require("process");
-const path = require("path");
-const util = require("./api/util");
-const git = require("./api/git");
-
-const settings = yaml.load(fs.readFileSync(__dirname + "/../settings.yml", 'utf8'));
-const settings_keys = Object.keys(settings);
-
-const mandatory_settings = [ "host", "port", "title", "about", "base_dir" ];
-
-// Make sure that all the required settings are present
-const settings_not_included = mandatory_settings.filter(x => !settings_keys.includes(x));
-if(settings_not_included.length !== 0) {
- console.log(`Error: settings.yml is missing ${(settings_not_included.length > 1) ? "keys" : "key"}:`);
- console.log(settings_not_included.join(", "));
- exit(1);
-}
-
-// Make sure that there's not an excessive amount of settings
-const mandatory_not_included = settings_keys.filter(x => !mandatory_settings.includes(x));
-if(mandatory_not_included.length !== 0) {
- console.log(`Error: settings.yml includes ${(mandatory_not_included.length > 1) ? "pointless keys" : "a pointless key"}:`);
- console.log(mandatory_not_included.join(", "));
- exit(1);
-}
-
-// Make sure that the base directory specified in the settings actually exists
-try {
- fs.readdirSync(settings["base_dir"]);
-}
-catch {
- console.error(`Error: Tried opening the base directory. No such directory: ${settings["base_dir"]}`);
- exit(1);
-}
-
-const dist_dir = path.join(__dirname, "/../dist");
-
-fastify.setNotFoundHandler({
- preValidation: (req, reply, done) => done(),
- preHandler: (req, reply, done) => done()
-}, function (req, reply)
-{
- reply.send("404: Not found");
-});
-
-fastify.addContentTypeParser("application/x-git-upload-pack-request", (req, payload, done) => done(null, payload));
-
-fastify.register(fastify_static, { root: dist_dir });
-fastify.register(api, { prefix: "/api/v1", config: { settings: settings } });
-
-fastify.route({
- method: "GET",
- path: "/",
- handler: (req, reply) => reply.sendFile("app.html")
-});
-
-fastify.route({
- method: "GET",
- path: "/app.html",
- handler: (req, reply) => reply.redirect("/")
-});
-
-fastify.register((fastify_repo, opts, done) =>
-{
- fastify_repo.setNotFoundHandler({
- preValidation: (req, reply, done) => done(),
- preHandler: (req, reply, done) => done()
- }, function (req, reply)
- {
- reply.send("404: Not found");
- });
-
- fastify_repo.addHook("onRequest", async (req, reply) =>
- {
- const repo_verification = await util.verifyRepoName(req.params.repo, settings.base_dir);
- if(repo_verification !== true) {
- if(repo_verification === "ERR_REPO_REGEX") {
- reply.code(400).send("Unacceptable git repository name!\n");
- }
- else if(repo_verification === "ERR_REPO_NOT_FOUND") {
- reply.code(404).send("Git repository not found!\n");
- }
- }
- });
-
- fastify_repo.route({
- method: "GET",
- path: "/:page",
- handler: (req, reply) =>
- {
- if([ "log", "refs", "tree" ].includes(req.params.page)) {
- reply.sendFile("app.html");
- }
- }
- });
-
- fastify_repo.route({
- method: "GET",
- path: "/log/:subpage",
- handler: async (req, reply) =>
- {
- const commit_verification = await util.verifyCommitID(settings.base_dir, req.params.repo + ".git", req.params.subpage);
- console.log(commit_verification);
- if(commit_verification !== true) {
- reply.callNotFound();
- }
-
- reply.sendFile("app.html");
- }
- });
-
- fastify_repo.route({
- method: "GET",
- path: "/tree/*",
- handler: async (req, reply) =>
- {
- reply.sendFile("app.html");
- }
- });
-
- fastify_repo.route({
- method: "GET",
- path: "/info/refs",
- handler: (req, reply) =>
- {
- if(!req.query.service) {
- reply.code(403).send("Missing service query parameter\n");
- return;
- }
- else if(req.query.service !== "git-upload-pack") {
- reply.code(403).send("Access denied!\n");
- return;
- }
- else if(Object.keys(req.query).length !== 1) {
- reply.header("Content-Type", "application/x-git-upload-pack-advertisement");
- reply.code(403).send("Too many query parameters!\n");
- return;
- }
-
- git.connectToGitHTTPBackend(settings["base_dir"], req, reply);
- }
- });
-
- fastify_repo.route({
- method: "POST",
- path: "/git-upload-pack",
- handler: (req, reply) => git.connectToGitHTTPBackend(settings["base_dir"], req, reply)
- });
-
- done();
-}, { prefix: "/:repo" });
-
-fastify.listen(settings["port"],(err, addr) =>
-{
- if(err) {
- console.error(err);
- exit(1);
- }
-
- console.log(`App is running on ${addr}`);
-}); \ No newline at end of file