Commit fe7904f3 authored by 神楽坂玲奈's avatar 神楽坂玲奈

init

parents
/.idea/
/node_modules/
FROM node
RUN apt-get update
RUN apt-get install -y gdebi-core
RUN wget https://repo.varnish-cache.org/pkg/5.0.0/varnish_5.0.0-1_amd64.deb
RUN gdebi -n varnish_5.0.0-1_amd64.deb
RUN rm varnish_5.0.0-1_amd64.deb
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY npm-shrinkwrap.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
CMD [ "./entrypoint.sh" ]
#!/usr/bin/env bash
varnishd -b localhost:3000
npm start
{
"name": "mycard-tarball",
"version": "0.0.1",
"dependencies": {
"accepts": {
"version": "1.3.3",
"from": "accepts@>=1.2.2 <2.0.0",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz"
},
"any-promise": {
"version": "1.3.0",
"from": "any-promise@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz"
},
"bytes": {
"version": "2.4.0",
"from": "bytes@2.4.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz"
},
"co": {
"version": "4.6.0",
"from": "co@>=4.4.0 <5.0.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz"
},
"co-body": {
"version": "4.2.0",
"from": "co-body@>=4.2.0 <5.0.0",
"resolved": "https://registry.npmjs.org/co-body/-/co-body-4.2.0.tgz"
},
"composition": {
"version": "2.3.0",
"from": "composition@>=2.1.1 <3.0.0",
"resolved": "https://registry.npmjs.org/composition/-/composition-2.3.0.tgz"
},
"content-disposition": {
"version": "0.5.1",
"from": "content-disposition@>=0.5.0 <0.6.0",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.1.tgz"
},
"content-type": {
"version": "1.0.2",
"from": "content-type@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz"
},
"cookies": {
"version": "0.6.1",
"from": "cookies@>=0.6.1 <0.7.0",
"resolved": "https://registry.npmjs.org/cookies/-/cookies-0.6.1.tgz"
},
"copy-to": {
"version": "2.0.1",
"from": "copy-to@>=2.0.1 <3.0.0",
"resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz"
},
"debug": {
"version": "2.2.0",
"from": "debug@*",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz"
},
"deep-equal": {
"version": "1.0.1",
"from": "deep-equal@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz"
},
"delegates": {
"version": "1.0.0",
"from": "delegates@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
},
"depd": {
"version": "1.1.0",
"from": "depd@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz"
},
"destroy": {
"version": "1.0.4",
"from": "destroy@>=1.0.3 <2.0.0",
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
},
"ee-first": {
"version": "1.1.1",
"from": "ee-first@1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
},
"error-inject": {
"version": "1.0.0",
"from": "error-inject@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz"
},
"escape-html": {
"version": "1.0.3",
"from": "escape-html@>=1.0.1 <1.1.0",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
},
"fresh": {
"version": "0.3.0",
"from": "fresh@>=0.3.0 <0.4.0",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz"
},
"http-assert": {
"version": "1.2.0",
"from": "http-assert@>=1.1.0 <2.0.0",
"resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.2.0.tgz",
"dependencies": {
"http-errors": {
"version": "1.4.0",
"from": "http-errors@>=1.4.0 <1.5.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.4.0.tgz"
}
}
},
"http-errors": {
"version": "1.5.0",
"from": "http-errors@>=1.2.8 <2.0.0",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.0.tgz"
},
"iconv-lite": {
"version": "0.4.13",
"from": "iconv-lite@0.4.13",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz"
},
"inflation": {
"version": "2.0.0",
"from": "inflation@>=2.0.0 <2.1.0",
"resolved": "https://registry.npmjs.org/inflation/-/inflation-2.0.0.tgz"
},
"inherits": {
"version": "2.0.1",
"from": "inherits@2.0.1",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"isarray": {
"version": "0.0.1",
"from": "isarray@0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz"
},
"keygrip": {
"version": "1.0.1",
"from": "keygrip@>=1.0.0 <1.1.0",
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.1.tgz"
},
"koa": {
"version": "1.2.4",
"from": "koa@latest",
"resolved": "https://registry.npmjs.org/koa/-/koa-1.2.4.tgz"
},
"koa-bodyparser": {
"version": "2.2.0",
"from": "koa-bodyparser@latest",
"resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-2.2.0.tgz"
},
"koa-compose": {
"version": "2.4.0",
"from": "koa-compose@>=2.3.0 <3.0.0",
"resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-2.4.0.tgz"
},
"koa-is-json": {
"version": "1.0.0",
"from": "koa-is-json@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz"
},
"koa-route": {
"version": "2.4.2",
"from": "koa-route@latest",
"resolved": "https://registry.npmjs.org/koa-route/-/koa-route-2.4.2.tgz"
},
"media-typer": {
"version": "0.3.0",
"from": "media-typer@0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
},
"methods": {
"version": "1.1.2",
"from": "methods@>=1.1.0 <1.2.0",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
},
"mime-db": {
"version": "1.24.0",
"from": "mime-db@>=1.24.0 <1.25.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.24.0.tgz"
},
"mime-types": {
"version": "2.1.12",
"from": "mime-types@>=2.0.7 <3.0.0",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.12.tgz"
},
"ms": {
"version": "0.7.1",
"from": "ms@0.7.1",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz"
},
"negotiator": {
"version": "0.6.1",
"from": "negotiator@0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz"
},
"on-finished": {
"version": "2.3.0",
"from": "on-finished@>=2.1.0 <3.0.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
},
"only": {
"version": "0.0.2",
"from": "only@0.0.2",
"resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz"
},
"parseurl": {
"version": "1.3.1",
"from": "parseurl@>=1.3.0 <2.0.0",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz"
},
"path-to-regexp": {
"version": "1.6.0",
"from": "path-to-regexp@>=1.2.0 <2.0.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.6.0.tgz"
},
"qs": {
"version": "4.0.0",
"from": "qs@>=4.0.0 <4.1.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-4.0.0.tgz"
},
"raw-body": {
"version": "2.1.7",
"from": "raw-body@>=2.1.2 <2.2.0",
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz"
},
"setprototypeof": {
"version": "1.0.1",
"from": "setprototypeof@1.0.1",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.1.tgz"
},
"statuses": {
"version": "1.3.0",
"from": "statuses@>=1.2.0 <2.0.0",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.0.tgz"
},
"type-is": {
"version": "1.6.13",
"from": "type-is@>=1.5.5 <2.0.0",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.13.tgz"
},
"unpipe": {
"version": "1.0.0",
"from": "unpipe@1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
},
"vary": {
"version": "1.1.0",
"from": "vary@>=1.0.0 <2.0.0",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.0.tgz"
}
}
}
{
"name": "mycard-tarball",
"version": "0.0.1",
"dependencies": {
"koa": "latest",
"koa-bodyparser": "latest",
"koa-route": "latest"
}
}
const path = require('path');
const child_process = require('child_process');
const crypto = require('crypto');
const koa = require('koa');
const bodyParser = require('koa-bodyparser');
const route = require('koa-route');
const app = koa();
app.use(bodyParser());
let tasks = new Map();
app.use(route.post('/metalinks/:id', function *(id) {
let files = this.request.body.map(file=>path.normalize(file));
let task_id = crypto.createHash('sha256').update(id + files.sort().join(), 'utf8').digest('hex');
tasks.set(task_id, {app_id: id, files: files});
this.type = 'application/metalink4+xml';
this.body = `<?xml version="1.0" encoding="UTF-8"?>
<metalink xmlns="urn:ietf:params:xml:ns:metalink">
<file name="${task_id}.tar.xz">
<url priority="1">http://thief.mycard.moe/update/tasks/${task_id}.tar.xz</url>
<url priority="1">http://thief.my-card.in/update/tasks/${task_id}.tar.xz</url>
</file>
</metalink>`
}));
app.use(route.get('/tasks/:id.tar.xz', function *(id) {
let task = tasks.get(id);
let tar = child_process.spawn('tar', ['-Jc', '-C', path.join('apps', task.app_id)].concat(task.files), {XZ_OPT: '-9e'});
this.body = tar.stdout;
}));
app.listen(3000);
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment