-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgit-server.js
More file actions
executable file
·64 lines (45 loc) · 1.85 KB
/
git-server.js
File metadata and controls
executable file
·64 lines (45 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env node
const express = require('express');
const bodyParser = require('body-parser');
const spawn = require('child_process').spawn;
const path = require('path');
const backend = require('git-http-backend');
const zlib = require('zlib');
/*
Express application
*/
let app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static('./public'));
app.all('/gitsrv/*', (req, res) => {
console.log("---------------------------------------")
console.log("url", req.url);
console.log("params", req.params);
console.log("query", req.query);
console.log("method", req.method);
console.log("headers", req.headers);
console.log("---------------------------------------")
let splittedURL = req.url.split('/');
let user = splittedURL[2];
let repo = splittedURL[3];
var dir = path.join(__dirname, `${process.env.GIT_SHARED_REPOSITORIES_LOCATION}/${user}`, repo);
//TODO: check if directory exists
req = req.headers['content-encoding'] == 'gzip' ? req.pipe(zlib.createGunzip()) : req;
req.pipe(backend(req.url, function (err, service) {
if (err) return res.end(err + '\n');
res.setHeader('content-type', service.type);
console.log("+++++++++++++++++++++++++++++++++++++++")
console.log(`service.action: ${service.action}`);
console.log(`repo: ${repo}`);
console.log('service.fields: ', service.fields);
console.log(`service.cmd: ${service.cmd}`);
console.log(`service.args: ${service.args}`);
console.log("+++++++++++++++++++++++++++++++++++++++")
var ps = spawn(service.cmd, service.args.concat(dir));
ps.stdout.pipe(service.createStream()).pipe(ps.stdin);
})).pipe(res);
});
app.listen(process.env.GIT_HTTP_PORT)
console.log(`🚀 Git Server is started - listening on ${process.env.GIT_HTTP_PORT}`);
console.log(__dirname);