diff options
| author | Kevin J Hoerr <kjhoerr@protonmail.com> | 2019-12-08 15:56:02 -0500 |
|---|---|---|
| committer | Kevin J Hoerr <kjhoerr@protonmail.com> | 2019-12-08 15:56:02 -0500 |
| commit | 90424d59e7f038af6f9b6b69029ab5c43b1a01ee (patch) | |
| tree | 518b9cd3b3df7718b14d63f360c046211b137caf /src | |
| parent | 3205965afbd9c4fce00dc03cccd6b6223ddb1d15 (diff) | |
| download | ao-coverage-90424d59e7f038af6f9b6b69029ab5c43b1a01ee.tar.gz ao-coverage-90424d59e7f038af6f9b6b69029ab5c43b1a01ee.tar.bz2 ao-coverage-90424d59e7f038af6f9b6b69029ab5c43b1a01ee.zip | |
Use HeadIdentifier as reference for file retrieval
Diffstat (limited to 'src')
| -rw-r--r-- | src/errors.ts | 8 | ||||
| -rw-r--r-- | src/routes.ts | 92 |
2 files changed, 61 insertions, 39 deletions
diff --git a/src/errors.ts b/src/errors.ts index 4026164..3af634d 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -11,3 +11,11 @@ export class InvalidReportDocumentError extends Error { this.message = "Invalid report document"; } } + +export const Messages = { + FileNotFound: "File not found", + FileTooLarge: "Uploaded file is too large", + InvalidFormat: "Invalid reporting format", + InvalidToken: "Invalid token", + UnknownError: "Unknown error occurred" +}; diff --git a/src/routes.ts b/src/routes.ts index 4f622a2..4bfee0d 100644 --- a/src/routes.ts +++ b/src/routes.ts @@ -1,14 +1,15 @@ import express from "express"; import { JSDOM } from "jsdom"; import { badgen } from "badgen"; +import winston from "winston"; import path from "path"; import fs from "fs"; -import formats, { Format } from "./formats"; -import Metadata from "./metadata"; +import formats from "./formats"; +import Metadata, { HeadIdentity } from "./metadata"; import { config_or_error } from "./util/config"; import logger_config from "./util/logger"; -import winston from "winston"; +import { Messages } from "./errors"; const TOKEN = process.env.TOKEN || ""; const UPLOAD_LIMIT = Number(process.env.UPLOAD_LIMIT || 4194304); @@ -26,17 +27,17 @@ export default (metadata: Metadata) => { const { token, format } = req.query; //TODO @Metadata token should come from metadata if (token != TOKEN) { - return res.status(401).send("Invalid token"); + return res.status(401).send(Messages.InvalidToken); } if (!formats.list_formats().includes(format)) { - return res.status(406).send("Report format unknown"); + return res.status(406).send(Messages.InvalidFormat); } var contents = ""; req.on("data", raw => { if (contents.length + raw.length > UPLOAD_LIMIT) { - res.status(413).send("Uploaded file is too large"); + res.status(413).send(Messages.FileTooLarge); } else { contents += raw; } @@ -80,34 +81,46 @@ export default (metadata: Metadata) => { .then(result => result ? res.status(200).send() - : res.status(500).send("Unknown error occurred") + : res.status(500).send(Messages.UnknownError) ); }); }); + const retrieve_file = ( + res: express.Response, + identity: HeadIdentity, + file: string + ) => { + const { organization: org, repository: repo, branch, head } = identity; + + const pathname = path.join(HOST_DIR, org, repo, branch, head, file); + fs.access(pathname, fs.constants.R_OK, err => + err === null + ? res.sendFile(pathname) + : res.status(404).send(Messages.FileNotFound) + ); + }; + router.get("/v1/:org/:repo/:branch.svg", (req, res) => { const { org, repo, branch } = req.params; metadata.getHeadCommit(org, repo, branch).then( result => { if (typeof result === "string") { - res.sendFile( - path.join( - HOST_DIR, - org, - repo, - branch, - result.toString(), - "badge.svg" - ) - ); + const identity = { + organization: org, + repository: repo, + branch, + head: result.toString() + }; + retrieve_file(res, identity, "badge.svg"); } else { res.status(404).send(result.message); } }, err => { logger.error(err); - res.status(500).send("Unknown error occurred"); + res.status(500).send(Messages.UnknownError); } ); }); @@ -118,23 +131,20 @@ export default (metadata: Metadata) => { metadata.getHeadCommit(org, repo, branch).then( result => { if (typeof result === "string") { - res.sendFile( - path.join( - HOST_DIR, - org, - repo, - branch, - result.toString(), - "index.html" - ) - ); + const identity = { + organization: org, + repository: repo, + branch, + head: result.toString() + }; + retrieve_file(res, identity, "index.html"); } else { res.status(404).send(result.message); } }, err => { logger.error(err); - res.status(500).send("Unknown error occurred"); + res.status(500).send(Messages.UnknownError); } ); }); @@ -142,21 +152,25 @@ export default (metadata: Metadata) => { // provide hard link for commit router.get("/v1/:org/:repo/:branch/:commit.svg", (req, res) => { const { org, repo, branch, commit } = req.params; - - const file = path.join(HOST_DIR, org, repo, branch, commit, "badge.svg"); - fs.access(file, fs.constants.R_OK, err => - err === null ? res.sendFile(file) : res.status(404).send("File not found") - ); + const identity = { + organization: org, + repository: repo, + branch, + head: commit + }; + retrieve_file(res, identity, "badge.svg"); }); // provide hard link for commit router.get("/v1/:org/:repo/:branch/:commit.html", (req, res) => { const { org, repo, branch, commit } = req.params; - - const file = path.join(HOST_DIR, org, repo, branch, commit, "index.html"); - fs.access(file, fs.constants.R_OK, err => - err === null ? res.sendFile(file) : res.status(404).send("File not found") - ); + const identity = { + organization: org, + repository: repo, + branch, + head: commit + }; + retrieve_file(res, identity, "index.html"); }); return router; |
