diff options
Diffstat (limited to 'src/api/v1.js')
-rw-r--r-- | src/api/v1.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/api/v1.js b/src/api/v1.js new file mode 100644 index 0000000..7920afc --- /dev/null +++ b/src/api/v1.js @@ -0,0 +1,74 @@ +const express = require("express"); +const git = require("./git"); +const sanitization = require("./sanitization"); + +const router = express.Router(); + +router.get("/info", function(req, res) +{ + res.json({ "data": req.settings }); + return; +}); + +router.get("/repos", async function(req, res) +{ + let repos = await git.getRepos(req.settings["base_dir"]); + + if(repos["error"]) { + res.status(500).send("Internal server error!"); + return; + } + + res.json({ "data": repos }); +}); + +router.use("/repos/:repo", async function(req, res, next) +{ + if(!sanitization.sanitizeRepoName(req.params.repo)) { + res.status(400).json({ "error": "Unacceptable git repository name!" }); + return; + } + next(); +}); + +router.get("/repos/:repo", async function(req, res) +{ + const repo = `${req.params.repo}.git`; + const desc = await git.getRepoFile(req.settings["base_dir"], repo, "description"); + + res.json({ "data": { "name": req.params.repo, "description": desc } }); +}); + +router.get("/repos/:repo/log", async function(req, res) +{ + const repo = `${req.params.repo}.git`; + const log = await git.getLog(req.settings["base_dir"], repo); + + if(log["error"]) { + if(typeof log["error"] === "string") { + res.status(500).json({ "error": log["error"] }); + return; + } + switch(log["error"]) { + case 404: + res.status(404).json({ "error": "Git repository doesn't exist!" }); + return; + } + return; + } + res.json({ data: log }); +}); + +router.get("/repos/:repo/log/:commit", async function(req, res) +{ + if(!sanitization.sanitizeCommitID(req.params.commit)) { + res.status(400).json({ "error": "Unacceptable commit id!" }); + return; + } + + const commit = await git.getCommit(req.settings["base_dir"], req.params.repo, req.params.commit); + + res.json({ data: commit }); +}); + +module.exports = router;
\ No newline at end of file |