SHOW:
|
|
- or go back to the newest paste.
| 1 | var | |
| 2 | https = require('https'),
| |
| 3 | AdmZip = require('adm-zip'),
| |
| 4 | app = require('express')();
| |
| 5 | ||
| 6 | app.get("/*", function(req, res) {
| |
| 7 | ||
| 8 | var | |
| 9 | parts = req.params[0].split('/'),
| |
| 10 | owner = parts[0], | |
| 11 | repo = parts[1], | |
| 12 | branch = parts[2], | |
| 13 | top_dir = repo + '-' + branch + '/', | |
| 14 | zip_address = 'https://nodeload.github.com/' + owner + '/' + repo + '/zip/' + branch; | |
| 15 | ||
| 16 | https.get(zip_address, function(response) {
| |
| 17 | var data = [], dataLen = 0; | |
| 18 | response.on('data', function(chunk) {
| |
| 19 | ||
| 20 | data.push(chunk); | |
| 21 | dataLen += chunk.length; | |
| 22 | ||
| 23 | }).on('end', function() {
| |
| 24 | var buf = new Buffer(dataLen); | |
| 25 | for (var i = 0, len = data.length, pos = 0; i < len; i++) {
| |
| 26 | data[i].copy(buf, pos); | |
| 27 | pos += data[i].length; | |
| 28 | } | |
| 29 | var zip = new AdmZip(buf); | |
| 30 | - | |
| 30 | + | var new_zip = new AdmZip(); |
| 31 | - | // Modify zip file, to remove the top-level directory |
| 31 | + | var zipEntries = zip.getEntries(); |
| 32 | - | |
| 32 | + | |
| 33 | - | var out = zip.toBuffer(); |
| 33 | + | zipEntries.forEach(function(entry) {
|
| 34 | if (!entry.isDirectory) {
| |
| 35 | console.log(entry.entryName.replace(top_dir, '')); | |
| 36 | console.log(zip.readAsText(entry)); | |
| 37 | new_zip.addFile(entry.entryName.replace(top_dir, ''), zip.readAsText(entry), ""); | |
| 38 | } | |
| 39 | }); | |
| 40 | ||
| 41 | var out = new_zip.toBuffer(); | |
| 42 | res.header('Content-Type', 'application/zip');
| |
| 43 | res.header('Content-Disposition', 'attachment; filename="' + repo + '.zip"');
| |
| 44 | res.send(out); | |
| 45 | }); | |
| 46 | ||
| 47 | }); | |
| 48 | ||
| 49 | }); | |
| 50 | ||
| 51 | app.listen(3000); |