From b0b34832830060bfeced08c4f6bce653e9253234 Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Fri, 8 Mar 2019 14:56:04 +0900 Subject: [PATCH 1/9] [bump] Start 0.9.1-SNAPSHOT --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04813fd348..7c8899e09b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "piping-server", - "version": "0.9.0", + "version": "0.9.1-SNAPSHOT", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 0bbfae1b36..629953223c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "piping-server", - "version": "0.9.0", + "version": "0.9.1-SNAPSHOT", "description": "Streaming Data Transfer Server over HTTP/HTTPS", "bin": { "piping-server": "dist/src/index.js" From ea3ef38350a54dfa2213ecd5eee9d7864c611f64 Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sat, 9 Mar 2019 12:45:51 +0900 Subject: [PATCH 2/9] [change] Specify --http-port in CircleCI for working-test of yargs and Dockerfile when specifying arguments after image name --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index d2792da02d..ee117a60e3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -31,7 +31,7 @@ jobs: command: | set -x # Run a server - docker run -d -p 8080:8080 piping-server + docker run -d -p 8080:80 piping-server --http-port=80 # Wait for server running sleep 1 # Create a file to send From 363b8a13ff859fffe159450e82c555c3ae06b62f Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sat, 9 Mar 2019 12:58:36 +0900 Subject: [PATCH 3/9] [fix] Allow user to ctrl-c to terminate piping-server docker container --- Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4fc7b23694..6be09a3202 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,8 @@ FROM node:10.15-alpine LABEL maintainer="Ryo Ota " +RUN apk add --no-cache tini + COPY . /app # Move to /app @@ -13,5 +15,5 @@ RUN npm install && \ npm run build && \ npm prune --production -# Run entry (Run the server) -ENTRYPOINT ["node", "dist/src/index.js"] +# Run a server +ENTRYPOINT [ "tini", "--", "node", "dist/src/index.js" ] From 06b6b51d49b5ad9d6b21e0169e25f05191c2578c Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sun, 10 Mar 2019 08:45:25 +0900 Subject: [PATCH 4/9] [change] Return "Content-Length" and "Content-Type" when accessing index, /version and /help --- src/piping.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/piping.ts b/src/piping.ts index 8b9bfaf08b..ff4a899781 100644 --- a/src/piping.ts +++ b/src/piping.ts @@ -238,10 +238,19 @@ export class Server { case "GET": switch (reqPath) { case NAME_TO_RESERVED_PATH.index: + res.writeHead(200, { + "Content-Length": Buffer.byteLength(indexPage), + "Content-Type": "text/html" + }); res.end(indexPage); break; case NAME_TO_RESERVED_PATH.version: - res.end(VERSION + "\n"); + const versionPage: string = VERSION + "\n"; + res.writeHead(200, { + "Content-Length": Buffer.byteLength(versionPage), + "Content-Type": "text/plain" + }); + res.end(versionPage); break; case NAME_TO_RESERVED_PATH.help: // x-forwarded-proto is https or not @@ -255,7 +264,13 @@ export class Server { const hostname: string = req.headers.host || "hostname"; // tslint:disable-next-line:no-shadowed-variable const url = `${scheme}://${hostname}`; - res.end(generateHelpPage(url)); + + const helpPage: string = generateHelpPage(url); + res.writeHead(200, { + "Content-Length": Buffer.byteLength(helpPage), + "Content-Type": "text/plain" + }); + res.end(helpPage); break; case NAME_TO_RESERVED_PATH.faviconIco: // (from: https://stackoverflow.com/a/35408810/2885946) From 31cca315d3692e54cbec10d71957130f261863fe Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sun, 10 Mar 2019 09:01:06 +0900 Subject: [PATCH 5/9] [test] Ensure returning "Content-Length" and "Content-Type" when accessing index, /version and /help --- test/piping.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/test/piping.test.ts b/test/piping.test.ts index 553cafdc85..5f22bc1e49 100644 --- a/test/piping.test.ts +++ b/test/piping.test.ts @@ -63,6 +63,14 @@ describe("piping.Server", () => { // Body should be index page assert.equal(res1.getBody("UTF-8").includes("Piping"), true); assert.equal(res2.getBody("UTF-8").includes("Piping"), true); + + // Should have "Content-Length" + assert.strictEqual(res1.headers["content-length"], Buffer.byteLength(res1.getBody("UTF-8")).toString()); + assert.strictEqual(res2.headers["content-length"], Buffer.byteLength(res2.getBody("UTF-8")).toString()); + + // Should have "Content-Type" + assert.strictEqual(res1.headers["content-type"], "text/html"); + assert.strictEqual(res2.headers["content-type"], "text/html"); }); it("should return version page", async () => { @@ -72,12 +80,22 @@ describe("piping.Server", () => { // Body should be index page // (from: https://stackoverflow.com/a/22339262/2885946) assert.equal(res.getBody("UTF-8"), VERSION + "\n"); + + // Should have "Content-Length" + assert.strictEqual(res.headers["content-length"], Buffer.byteLength(res.getBody("UTF-8")).toString()); + // Should have "Content-Type" + assert.strictEqual(res.headers["content-type"], "text/plain"); }); it("should return help page", async () => { // Get response const res = await thenRequest("GET", `${pipingUrl}/help`); + // Should have "Content-Length" + assert.strictEqual(res.headers["content-length"], Buffer.byteLength(res.getBody("UTF-8")).toString()); + // Should have "Content-Type" + assert.strictEqual(res.headers["content-type"], "text/plain"); + // Status should be OK assert.equal(res.statusCode, 200); }); From 66dbb7d69456ed247321ba1cbf970834feb80c85 Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sun, 10 Mar 2019 09:12:05 +0900 Subject: [PATCH 6/9] [test] Use assert.strictEqual() instead of assert.equal() --- test/piping.test.ts | 128 ++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/test/piping.test.ts b/test/piping.test.ts index 5f22bc1e49..e1f419985e 100644 --- a/test/piping.test.ts +++ b/test/piping.test.ts @@ -61,8 +61,8 @@ describe("piping.Server", () => { const res2 = await thenRequest("GET", `${pipingUrl}/`); // Body should be index page - assert.equal(res1.getBody("UTF-8").includes("Piping"), true); - assert.equal(res2.getBody("UTF-8").includes("Piping"), true); + assert.strictEqual(res1.getBody("UTF-8").includes("Piping"), true); + assert.strictEqual(res2.getBody("UTF-8").includes("Piping"), true); // Should have "Content-Length" assert.strictEqual(res1.headers["content-length"], Buffer.byteLength(res1.getBody("UTF-8")).toString()); @@ -79,7 +79,7 @@ describe("piping.Server", () => { // Body should be index page // (from: https://stackoverflow.com/a/22339262/2885946) - assert.equal(res.getBody("UTF-8"), VERSION + "\n"); + assert.strictEqual(res.getBody("UTF-8"), VERSION + "\n"); // Should have "Content-Length" assert.strictEqual(res.headers["content-length"], Buffer.byteLength(res.getBody("UTF-8")).toString()); @@ -97,7 +97,7 @@ describe("piping.Server", () => { assert.strictEqual(res.headers["content-type"], "text/plain"); // Status should be OK - assert.equal(res.statusCode, 200); + assert.strictEqual(res.statusCode, 200); }); it("should return no favicon", async () => { @@ -105,7 +105,7 @@ describe("piping.Server", () => { const res = await thenRequest("GET", `${pipingUrl}/favicon.ico`); // Status should be No Content - assert.equal(res.statusCode, 204); + assert.strictEqual(res.statusCode, 204); }); it("should return no robots.txt", async () => { @@ -113,7 +113,7 @@ describe("piping.Server", () => { const res = await thenRequest("GET", `${pipingUrl}/robots.txt`); // Status should not be found - assert.equal(res.statusCode, 404); + assert.strictEqual(res.statusCode, 404); }); it("should not allow user to send the reserved paths", async () => { @@ -125,7 +125,7 @@ describe("piping.Server", () => { body: "this is a content" }); // Should be failed - assert.equal(req.statusCode, 400); + assert.strictEqual(req.statusCode, 400); } }); }); @@ -143,9 +143,9 @@ describe("piping.Server", () => { const data = await reqPromise; // Body should be the sent data - assert.equal(data.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data.getBody("UTF-8"), "this is a content"); // Content-length should be returned - assert.equal(data.headers["content-length"], "this is a content".length); + assert.strictEqual(data.headers["content-length"], "this is a content".length.toString()); }); it("should pass sender's Content-Type to receivers' one", async () => { @@ -164,7 +164,7 @@ describe("piping.Server", () => { const data = await reqPromise; // Content-Type should be returned - assert.equal(data.headers["content-type"], "text/plain"); + assert.strictEqual(data.headers["content-type"], "text/plain"); }); it("should pass sender's Content-Disposition to receivers' one", async () => { @@ -183,7 +183,7 @@ describe("piping.Server", () => { const data = await reqPromise; // Content-Disposition should be returned - assert.equal(data.headers["content-disposition"], "attachment; filename=\"myfile.txt\""); + assert.strictEqual(data.headers["content-disposition"], "attachment; filename=\"myfile.txt\""); }); it("should have Access-Control-Allow-Origin headers in GET/POST response", async () => { @@ -198,13 +198,13 @@ describe("piping.Server", () => { }); // Headers of POST response should have Access-Control-Allow-Origin - assert.equal(postRes.headers["access-control-allow-origin"], "*"); + assert.strictEqual(postRes.headers["access-control-allow-origin"], "*"); // Get data const data = await reqPromise; // Headers of GET response should have Access-Control-Allow-Origin - assert.equal(data.headers["access-control-allow-origin"], "*"); + assert.strictEqual(data.headers["access-control-allow-origin"], "*"); }); it("should handle connection (sender: O, receiver: O)", async () => { @@ -218,9 +218,9 @@ describe("piping.Server", () => { const data = await thenRequest("GET", `${pipingUrl}/mydataid`); // Body should be the sent data - assert.equal(data.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data.getBody("UTF-8"), "this is a content"); // Content-length should be returned - assert.equal(data.headers["content-length"], "this is a content".length); + assert.strictEqual(data.headers["content-length"], "this is a content".length.toString()); }); it("should be sent chunked data", async () => { @@ -240,7 +240,7 @@ describe("piping.Server", () => { const data = await thenRequest("GET", `${pipingUrl}/mydataid`); // Body should be the sent data - assert.equal(data.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data.getBody("UTF-8"), "this is a content"); }); it("should be sent by PUT method", async () => { @@ -254,9 +254,9 @@ describe("piping.Server", () => { const data = await thenRequest("GET", `${pipingUrl}/mydataid`); // Body should be the sent data - assert.equal(data.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data.getBody("UTF-8"), "this is a content"); // Content-length should be returned - assert.equal(data.headers["content-length"], "this is a content".length); + assert.strictEqual(data.headers["content-length"], "this is a content".length.toString()); }); // tslint:disable-next-line:max-line-length @@ -275,12 +275,12 @@ describe("piping.Server", () => { const [data1, data2, data3] = await Promise.all([dataPromise1, dataPromise2, dataPromise3]); // Body should be the sent data and content-length should be returned - assert.equal(data1.getBody("UTF-8"), "this is a content"); - assert.equal(data1.headers["content-length"], "this is a content".length); - assert.equal(data2.getBody("UTF-8"), "this is a content"); - assert.equal(data2.headers["content-length"], "this is a content".length); - assert.equal(data3.getBody("UTF-8"), "this is a content"); - assert.equal(data3.headers["content-length"], "this is a content".length); + assert.strictEqual(data1.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data1.headers["content-length"], "this is a content".length.toString()); + assert.strictEqual(data2.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data2.headers["content-length"], "this is a content".length.toString()); + assert.strictEqual(data3.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data3.headers["content-length"], "this is a content".length.toString()); }); // tslint:disable-next-line:max-line-length @@ -300,12 +300,12 @@ describe("piping.Server", () => { const [data1, data2, data3] = await Promise.all([dataPromise1, dataPromise2, dataPromise3]); // Body should be the sent data and content-length should be returned - assert.equal(data1.getBody("UTF-8"), "this is a content"); - assert.equal(data1.headers["content-length"], "this is a content".length); - assert.equal(data2.getBody("UTF-8"), "this is a content"); - assert.equal(data2.headers["content-length"], "this is a content".length); - assert.equal(data3.getBody("UTF-8"), "this is a content"); - assert.equal(data3.headers["content-length"], "this is a content".length); + assert.strictEqual(data1.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data1.headers["content-length"], "this is a content".length.toString()); + assert.strictEqual(data2.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data2.headers["content-length"], "this is a content".length.toString()); + assert.strictEqual(data3.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data3.headers["content-length"], "this is a content".length.toString()); }); // tslint:disable-next-line:max-line-length @@ -328,12 +328,12 @@ describe("piping.Server", () => { const [data1, data2, data3] = await Promise.all([dataPromise1, dataPromise2, dataPromise3]); // Body should be the sent data and content-length should be returned - assert.equal(data1.getBody("UTF-8"), "this is a content"); - assert.equal(data1.headers["content-length"], "this is a content".length); - assert.equal(data2.getBody("UTF-8"), "this is a content"); - assert.equal(data2.headers["content-length"], "this is a content".length); - assert.equal(data3.getBody("UTF-8"), "this is a content"); - assert.equal(data3.headers["content-length"], "this is a content".length); + assert.strictEqual(data1.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data1.headers["content-length"], "this is a content".length.toString()); + assert.strictEqual(data2.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data2.headers["content-length"], "this is a content".length.toString()); + assert.strictEqual(data3.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data3.headers["content-length"], "this is a content".length.toString()); }); it("should handle multi receiver connection (receiver?n=2: O, sender?n=1: X: because too less n)", async () => { @@ -350,7 +350,7 @@ describe("piping.Server", () => { }); // Should be rejected - assert.equal(sendData.statusCode, 400); + assert.strictEqual(sendData.statusCode, 400); // Quit get request getReq1.abort(); @@ -370,7 +370,7 @@ describe("piping.Server", () => { }); // Should be rejected - assert.equal(sendData.statusCode, 400); + assert.strictEqual(sendData.statusCode, 400); // Quit get request getReq1.abort(); @@ -398,7 +398,7 @@ describe("piping.Server", () => { const data1 = await dataPromise1; // Should be rejected - assert.equal(data1.statusCode, 400); + assert.strictEqual(data1.statusCode, 400); // Quit send request sendReq.abort(); @@ -426,7 +426,7 @@ describe("piping.Server", () => { const data1 = await dataPromise1; // Should be rejected - assert.equal(data1.statusCode, 400); + assert.strictEqual(data1.statusCode, 400); // Quit send request sendReq.abort(); @@ -451,7 +451,7 @@ describe("piping.Server", () => { }) ); // Should be rejected - assert.equal((await getReqPromise3).statusCode, 400); + assert.strictEqual((await getReqPromise3).statusCode, 400); // Quit get requests getReq1.abort(); getReq2.abort(); @@ -476,7 +476,7 @@ describe("piping.Server", () => { }) ); // Should be rejected - assert.equal((await getReqPromise3).statusCode, 400); + assert.strictEqual((await getReqPromise3).statusCode, 400); // Quit get requests getReq1.abort(); getReq2.abort(); @@ -500,7 +500,7 @@ describe("piping.Server", () => { }); // Should be rejected - assert.equal(sendData.statusCode, 400); + assert.strictEqual(sendData.statusCode, 400); // Quit get requests getReq1.abort(); @@ -525,7 +525,7 @@ describe("piping.Server", () => { }); // Should be rejected - assert.equal(sendData.statusCode, 400); + assert.strictEqual(sendData.statusCode, 400); // Quit get requests getReq1.abort(); @@ -556,7 +556,7 @@ describe("piping.Server", () => { const data2 = await thenRequest("GET", `${pipingUrl}/mydataid?n=3`); // Should be rejected - assert.equal(data2.statusCode, 400); + assert.strictEqual(data2.statusCode, 400); // Quit get request getReq1.abort(); @@ -588,7 +588,7 @@ describe("piping.Server", () => { const data2 = await thenRequest("GET", `${pipingUrl}/mydataid?n=1`); // Should be rejected - assert.equal(data2.statusCode, 400); + assert.strictEqual(data2.statusCode, 400); // Quit get request getReq1.abort(); @@ -626,11 +626,11 @@ describe("piping.Server", () => { const [data1, data2, data3] = await Promise.all([dataPromise1, dataPromise2, dataPromise3]); // Body should be the sent data - assert.equal(data1.getBody("UTF-8"), "this is a content"); - assert.equal(data2.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data1.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data2.getBody("UTF-8"), "this is a content"); // Should be bad request - assert.equal(data3.statusCode, 400); + assert.strictEqual(data3.statusCode, 400); }); // tslint:disable-next-line:max-line-length @@ -653,11 +653,11 @@ describe("piping.Server", () => { const [data1, data2, data3] = await Promise.all([dataPromise1, dataPromise2, dataPromise3]); // Body should be the sent data - assert.equal(data1.getBody("UTF-8"), "this is a content"); - assert.equal(data2.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data1.getBody("UTF-8"), "this is a content"); + assert.strictEqual(data2.getBody("UTF-8"), "this is a content"); // Should be bad request - assert.equal(data3.statusCode, 400); + assert.strictEqual(data3.statusCode, 400); }); it("should unregister a sender before establishing", async () => { @@ -682,10 +682,10 @@ describe("piping.Server", () => { const sendData = await sendPromise1; // Should be sent - assert.equal(sendData.statusCode, 200); + assert.strictEqual(sendData.statusCode, 200); // Get-response should be 200 - assert.equal(get1.statusCode, 200); + assert.strictEqual(get1.statusCode, 200); }); it("should unregister a receiver before establishing", async () => { @@ -707,11 +707,11 @@ describe("piping.Server", () => { }); // Should be sent - assert.equal(sendData.statusCode, 200); + assert.strictEqual(sendData.statusCode, 200); // 2nd-get response should be 200 const get2 = await getPromise2; - assert.equal(get2.statusCode, 200); + assert.strictEqual(get2.statusCode, 200); }); context("If number of receivers <= 0", () => { @@ -722,7 +722,7 @@ describe("piping.Server", () => { }); // Should be rejected - assert.equal(res.statusCode, 400); + assert.strictEqual(res.statusCode, 400); }); it("should not allow n=-1", async () => { @@ -732,7 +732,7 @@ describe("piping.Server", () => { }); // Should be rejected - assert.equal(res.statusCode, 400); + assert.strictEqual(res.statusCode, 400); }); }); @@ -750,8 +750,8 @@ describe("piping.Server", () => { const getPromise1 = thenRequest("GET", `${pipingUrl}/mydataid`); const getData1 = await getPromise1; - assert.equal(getData1.statusCode, 200); - assert.equal(getData1.getBody("UTF-8"), "this is a content"); + assert.strictEqual(getData1.statusCode, 200); + assert.strictEqual(getData1.getBody("UTF-8"), "this is a content"); }); it("should pass sender's Content-Type to receivers' one", async () => { @@ -772,8 +772,8 @@ describe("piping.Server", () => { const getPromise1 = thenRequest("GET", `${pipingUrl}/mydataid`); const getData1 = await getPromise1; - assert.equal(getData1.statusCode, 200); - assert.equal(getData1.headers["content-type"], "text/plain"); + assert.strictEqual(getData1.statusCode, 200); + assert.strictEqual(getData1.headers["content-type"], "text/plain"); }); it("should pass sender's Content-Disposition to receivers' one", async () => { @@ -794,9 +794,9 @@ describe("piping.Server", () => { const getPromise1 = thenRequest("GET", `${pipingUrl}/mydataid`); const getData1 = await getPromise1; - assert.equal(getData1.statusCode, 200); + assert.strictEqual(getData1.statusCode, 200); const contentDisposition = "form-data; name=\"dummy form name\"; filename=\"myfile.txt\""; - assert.equal(getData1.headers["content-disposition"], contentDisposition); + assert.strictEqual(getData1.headers["content-disposition"], contentDisposition); }); }); }); From e1f9a387986e04ecdfdb5a17c776354ef18ca73c Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sun, 10 Mar 2019 09:14:54 +0900 Subject: [PATCH 7/9] [lint] Require === and !== not == and != --- tslint.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tslint.json b/tslint.json index cbaf6ca0c4..ee445e6d7c 100644 --- a/tslint.json +++ b/tslint.json @@ -15,7 +15,8 @@ "singleline": "never" } ], - "object-literal-shorthand": false + "object-literal-shorthand": false, + "triple-equals": true }, "rulesDirectory": [] } \ No newline at end of file From 93cc6d5b2895d246c3c686eb0827a8a5189b6ebe Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sun, 10 Mar 2019 09:27:56 +0900 Subject: [PATCH 8/9] [docs] Update docker-run description --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8661412acf..7ecee449e9 100644 --- a/README.md +++ b/README.md @@ -98,12 +98,17 @@ Options: Run a Piping server on by the following command. ```bash -docker run -it -p 8181:8080 nwtgck/piping-server +docker run -p 8181:8080 nwtgck/piping-server ``` -You can also specify options like the following. +You can also specify an option like the following. ```bash -docker run -it -p 8181:80 nwtgck/piping-server --http-port=80 +docker run -p 8181:80 nwtgck/piping-server --http-port=80 ``` +You can run a server in background and it automatically always restarts. + +```bash +docker run -p 8181:80 -d --restart=always nwtgck/piping-server --http-port=80 +``` From 4cbd78cefe9239e02c27736514485bb34009fb82 Mon Sep 17 00:00:00 2001 From: Ryo Ota Date: Sun, 10 Mar 2019 09:45:02 +0900 Subject: [PATCH 9/9] [bump/docs] Bump up version to 0.9.1 and Update CHANGELOG.md --- CHANGELOG.md | 9 ++++++++- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e97de5260..08057e70f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) ## [Unreleased] +## [0.9.1] - 2019-03-10 +### Fixed +* Allow user to ctrl-c to terminate piping-server docker container +### Changed +* Return "Content-Length" and "Content-Type" when accessing index, /version and /help + ## [0.9.0] - 2019-03-08 ### Changed * Make logs for sender consistent @@ -143,7 +149,8 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) * Docker automated build on Docker Hub * Support HTTPS -[Unreleased]: https://github.com/nwtgck/piping-server/compare/v0.9.0...HEAD +[Unreleased]: https://github.com/nwtgck/piping-server/compare/v0.9.1...HEAD +[0.9.1]: https://github.com/nwtgck/piping-seraver/compare/v0.9.0...v0.9.1 [0.9.0]: https://github.com/nwtgck/piping-seraver/compare/v0.8.10...v0.9.0 [0.8.10]: https://github.com/nwtgck/piping-seraver/compare/v0.8.9...v0.8.10 [0.8.9]: https://github.com/nwtgck/piping-seraver/compare/v0.8.8...v0.8.9 diff --git a/package-lock.json b/package-lock.json index 7c8899e09b..dbf720d66a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "piping-server", - "version": "0.9.1-SNAPSHOT", + "version": "0.9.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 629953223c..efcab8fd88 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "piping-server", - "version": "0.9.1-SNAPSHOT", + "version": "0.9.1", "description": "Streaming Data Transfer Server over HTTP/HTTPS", "bin": { "piping-server": "dist/src/index.js"