diff options
Diffstat (limited to 'packages/server/src/app.ts')
-rw-r--r-- | packages/server/src/app.ts | 92 |
1 files changed, 3 insertions, 89 deletions
diff --git a/packages/server/src/app.ts b/packages/server/src/app.ts index deddf00..f52333c 100644 --- a/packages/server/src/app.ts +++ b/packages/server/src/app.ts @@ -1,12 +1,8 @@ -import { Repository } from "./git/repository"; -import { Route } from "./types/fastify"; -import { Tag } from "./git/tag"; -import api from "./api/v1"; +import api from "./routes/api/v1"; import { fastify as fastifyFactory, FastifyInstance } from "fastify"; import fastifyStatic from "fastify-static"; -import { verifyRepoName } from "./api/util"; -import { BaseError } from "./git/error"; import { Settings } from "./types"; +import repo from "./routes/repo"; export default function buildApp(settings: Settings, dist_dir: string): FastifyInstance { const fastify = fastifyFactory(); @@ -36,89 +32,7 @@ export default function buildApp(settings: Settings, dist_dir: string): FastifyI fastify.addContentTypeParser("application/x-git-receive-pack-request", (req, payload, done) => done(null, payload)); fastify.register(api, { prefix: "/api/v1", config: { settings: settings } }); - - fastify.route<Route>({ - method: "GET", - url: "/:repo([a-zA-Z0-9\\.\\-_]+)/info/refs", - handler: async(req, reply) => { - reply.header("Content-Type", "application/x-git-upload-pack-advertisement"); - - if(!verifyRepoName(req.params.repo)) { - reply.code(400).send({ error: "Bad request" }); - return; - } - - if(!req.query.service) { - reply.header("Content-Type", "text/plain"); - reply.code(403).send("Missing service query parameter\n"); - return; - } - - if(req.query.service !== "git-upload-pack") { - reply.header("Content-Type", "text/plain"); - reply.code(403).send("Access denied!\n"); - return; - } - - if(Object.keys(req.query).length !== 1) { - reply.code(403).send("Too many query parameters!\n"); - return; - } - - const repository = await Repository.open(settings.base_dir, req.params.repo); - repository.HTTPconnect(req, reply); - } - }); - - fastify.route<Route>({ - method: "POST", - url: "/:repo([a-zA-Z0-9\\.\\-_]+)/git-upload-pack", - handler: async(req, reply) => { - if(!verifyRepoName(req.params.repo)) { - reply.code(400).send({ error: "Bad request" }); - return; - } - - const repository = await Repository.open(settings.base_dir, req.params.repo); - repository.HTTPconnect(req, reply); - } - }); - - fastify.route({ - method: "POST", - url: "/:repo([a-zA-Z0-9\\.\\-_]+)/git-receive-pack", - handler: (req, reply) => { - reply.header("Content-Type", "application/x-git-receive-pack-result"); - reply.code(403).send("Access denied!"); - } - }); - - fastify.route<Route>({ - method: "GET", - url: "/:repo([a-zA-Z0-9\\.\\-_]+)/refs/tags/:tag", - handler: async(req, reply) => { - if(!verifyRepoName(req.params.repo)) { - reply.code(400).send({ error: "Bad request" }); - return; - } - - const repository: Repository | BaseError = await Repository.open(settings.base_dir, req.params.repo).catch(err => err); - - if(repository instanceof BaseError) { - reply.code(repository.code).send(repository.message); - return; - } - - const tag = await Tag.lookup(repository, req.params.tag).catch(err => err); - - if(tag instanceof BaseError) { - reply.code(tag.code).send(tag.message); - return; - } - - tag.downloadTarball(reply); - } - }); + fastify.register(repo, { prefix: "/:repo([a-zA-Z0-9\\.\\-_]+)", config: { settings: settings } }); return fastify; }
\ No newline at end of file |