From 37a858837e504fc6250a327fec5f9a5d40e59a2d Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 31 Oct 2019 00:44:09 -0700 Subject: [PATCH 01/72] updating --- docker-compose.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6c477aa25b..251a591c8f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: vote: - image: docker.giffin.org/tmcclung/example-voting-app-vote + image: docker.giffin.org/davidgiffin/example-voting-app-vote build: ./vote command: - python @@ -16,7 +16,7 @@ services: - back-tier result: - image: docker.giffin.org/tmcclung/example-voting-app-result + image: docker.giffin.org/davidgiffin/example-voting-app-result build: ./result command: - nodemon @@ -31,7 +31,7 @@ services: - back-tier worker: - image: docker.giffin.org/tmcclung/example-voting-app-worker + image: docker.giffin.org/davidgiffin/example-voting-app-worker build: context: ./worker depends_on: @@ -50,6 +50,7 @@ services: db: image: postgres:9.4 container_name: db + ports: ["5432"] volumes: - "db-data:/var/lib/postgresql/data" networks: From 39caf4d2debfc68ce3e610da4fc853922932f8d6 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 21 Nov 2019 11:18:45 -0800 Subject: [PATCH 02/72] Bears and Eagles --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index 1d194b649b..ebfc32ec2a 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Cats") -option_b = os.getenv('OPTION_B', "Dogs") +option_a = os.getenv('OPTION_A', "Bears") +option_b = os.getenv('OPTION_B', "Eagles") hostname = socket.gethostname() app = Flask(__name__) From d80b30a342d76261d4fde2193761cb8285e6e6ce Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 21 Nov 2019 11:24:14 -0800 Subject: [PATCH 03/72] City and Country --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index ebfc32ec2a..9ff841c9d4 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Bears") -option_b = os.getenv('OPTION_B', "Eagles") +option_a = os.getenv('OPTION_A', "City Bears") +option_b = os.getenv('OPTION_B', "Country Bears") hostname = socket.gethostname() app = Flask(__name__) From ea0bfe0761922b42151fd99640ab4b0b88854ada Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 26 Nov 2019 21:25:13 -0800 Subject: [PATCH 04/72] Land and Sea Bears --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 4427ffa1af..102c0875be 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Cats
+
Sea Bears
{{aPercent | number:1}}%
-
Dogs
+
Land Bears
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 9ff841c9d4..b911688796 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "City Bears") -option_b = os.getenv('OPTION_B', "Country Bears") +option_a = os.getenv('OPTION_A', "Sea Bears") +option_b = os.getenv('OPTION_B', "Land Bears") hostname = socket.gethostname() app = Flask(__name__) From 2002665786f12ce4382ad65f2bcbbc27f15f49fc Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 26 Nov 2019 21:28:45 -0800 Subject: [PATCH 05/72] City and Country --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 102c0875be..2844ad87b1 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Sea Bears
+
City Bears
{{aPercent | number:1}}%
-
Land Bears
+
Country Bears
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index b911688796..9ff841c9d4 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Sea Bears") -option_b = os.getenv('OPTION_B', "Land Bears") +option_a = os.getenv('OPTION_A', "City Bears") +option_b = os.getenv('OPTION_B', "Country Bears") hostname = socket.gethostname() app = Flask(__name__) From 83bff826a28eca5cc02fbed7c3002149a34029bc Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 12 Dec 2019 20:08:46 -0800 Subject: [PATCH 06/72] Updating to work with new builders --- docker-compose.yml | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 251a591c8f..c9e0453a4f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,11 +2,9 @@ version: "3" services: vote: - image: docker.giffin.org/davidgiffin/example-voting-app-vote + image: docker.giffin.org/davidgiffin/example-voting-app/vote build: ./vote - command: - - python - - app.py + command: python app.py volumes: - ./vote:/app ports: @@ -16,11 +14,9 @@ services: - back-tier result: - image: docker.giffin.org/davidgiffin/example-voting-app-result + image: docker.giffin.org/davidgiffin/example-voting-app/result build: ./result - command: - - nodemon - - server.js + command: nodemon server.js volumes: - ./result:/app ports: @@ -31,7 +27,7 @@ services: - back-tier worker: - image: docker.giffin.org/davidgiffin/example-voting-app-worker + image: docker.giffin.org/davidgiffin/example-voting-app/worker build: context: ./worker depends_on: From 2e8bc92e5a3aee6812110b5853a2981f3f57c2d7 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Dec 2019 21:04:08 -0800 Subject: [PATCH 07/72] Fixing image references --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index c9e0453a4f..cd0c3cb5d0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,7 @@ version: "3" services: vote: - image: docker.giffin.org/davidgiffin/example-voting-app/vote + image: docker.giffin.org/dustyspace/example-voting-app/vote build: ./vote command: python app.py volumes: @@ -14,7 +14,7 @@ services: - back-tier result: - image: docker.giffin.org/davidgiffin/example-voting-app/result + image: docker.giffin.org/dustyspace/example-voting-app/result build: ./result command: nodemon server.js volumes: @@ -27,7 +27,7 @@ services: - back-tier worker: - image: docker.giffin.org/davidgiffin/example-voting-app/worker + image: docker.giffin.org/dustyspace/example-voting-app/worker build: context: ./worker depends_on: From f764c612708f1a40723b6cae86b6023d3fa79896 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 12 Jan 2020 10:30:35 -0800 Subject: [PATCH 08/72] Adding depends for result and worker --- docker-compose.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index cd0c3cb5d0..9f9fb57f3e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,6 +9,9 @@ services: - ./vote:/app ports: - "5000:80" + depends_on: + - "redis" + - "db" networks: - front-tier - back-tier @@ -22,6 +25,9 @@ services: ports: - "5001:80" - "5858:5858" + depends_on: + - "redis" + - "db" networks: - front-tier - back-tier From dc62127941e1d632131e9bb9511f58cb2093d7f1 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Jan 2020 08:12:01 -0800 Subject: [PATCH 09/72] make a build go --- docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9f9fb57f3e..ed5d75687f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,6 @@ services: - back-tier result: - image: docker.giffin.org/dustyspace/example-voting-app/result build: ./result command: nodemon server.js volumes: @@ -33,7 +32,6 @@ services: - back-tier worker: - image: docker.giffin.org/dustyspace/example-voting-app/worker build: context: ./worker depends_on: From a953cd407806a1e54ed4a8de7a00a35fb15419de Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Jan 2020 08:15:26 -0800 Subject: [PATCH 10/72] test --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index ed5d75687f..43a02bc9f1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,7 @@ services: - back-tier result: + image: docker.giffin.org/dustyspace/example-voting-app/result build: ./result command: nodemon server.js volumes: From 07605067d83eb992dad4b6bd0f6baf6eaeac03a9 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 20 Jan 2020 20:02:23 -0800 Subject: [PATCH 11/72] Inner city vs metro --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index 9ff841c9d4..205f098aee 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "City Bears") -option_b = os.getenv('OPTION_B', "Country Bears") +option_a = os.getenv('OPTION_A', "Inner-City Bears") +option_b = os.getenv('OPTION_B', "Metro Bears") hostname = socket.gethostname() app = Flask(__name__) From 894ee0a03b449b9fb798e6d40c82dbe2fb9cdd5c Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 20 Jan 2020 20:23:29 -0800 Subject: [PATCH 12/72] white space --- result/views/index.html | 4 ++-- worker/src/Worker/Program.cs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 2844ad87b1..6fd0c94ea6 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
City Bears
+
Inner-City Bears
{{aPercent | number:1}}%
-
Country Bears
+
Metro Bears
{{bPercent | number:1}}%
diff --git a/worker/src/Worker/Program.cs b/worker/src/Worker/Program.cs index e8ca4c1f3e..a9161ca412 100644 --- a/worker/src/Worker/Program.cs +++ b/worker/src/Worker/Program.cs @@ -8,6 +8,7 @@ using Npgsql; using StackExchange.Redis; + namespace Worker { public class Program From 8cb9a3ca956734d80ac35cad77f6d9c1a9b6797f Mon Sep 17 00:00:00 2001 From: David Giffin Date: Fri, 31 Jan 2020 12:26:07 -0800 Subject: [PATCH 13/72] Make vote and result depend on worker --- docker-compose.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 43a02bc9f1..41289bb41b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,8 +10,7 @@ services: ports: - "5000:80" depends_on: - - "redis" - - "db" + - "worker" networks: - front-tier - back-tier @@ -26,8 +25,7 @@ services: - "5001:80" - "5858:5858" depends_on: - - "redis" - - "db" + - "worker" networks: - front-tier - back-tier From 1c8c56d054832cd30597b1e4d477334930dc85a1 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Fri, 31 Jan 2020 14:43:08 -0800 Subject: [PATCH 14/72] city and country --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 6fd0c94ea6..2844ad87b1 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Inner-City Bears
+
City Bears
{{aPercent | number:1}}%
-
Metro Bears
+
Country Bears
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 205f098aee..9ff841c9d4 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Inner-City Bears") -option_b = os.getenv('OPTION_B', "Metro Bears") +option_a = os.getenv('OPTION_A', "City Bears") +option_b = os.getenv('OPTION_B', "Country Bears") hostname = socket.gethostname() app = Flask(__name__) From e2164f870f2f10d1560e8cc9edfdef74c65876d4 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 22 Mar 2020 14:37:59 -0700 Subject: [PATCH 15/72] bears and eagles --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 2844ad87b1..32156a21da 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
City Bears
+
Bears
{{aPercent | number:1}}%
-
Country Bears
+
Eagles
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 9ff841c9d4..ebfc32ec2a 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "City Bears") -option_b = os.getenv('OPTION_B', "Country Bears") +option_a = os.getenv('OPTION_A', "Bears") +option_b = os.getenv('OPTION_B', "Eagles") hostname = socket.gethostname() app = Flask(__name__) From 341fd2d5a4bb325f3836a83673916914dff32249 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 22 Mar 2020 20:02:16 -0700 Subject: [PATCH 16/72] chim vs scoot --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 32156a21da..acb238f7f8 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Bears
+
Chim
{{aPercent | number:1}}%
-
Eagles
+
Scoot
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index ebfc32ec2a..fa91dc0ca2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Bears") -option_b = os.getenv('OPTION_B', "Eagles") +option_a = os.getenv('OPTION_A', "Chim") +option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() app = Flask(__name__) From c2b83c44f7fe3c5ea013c1ea859b843591c9fae5 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 26 Mar 2020 23:06:22 -0700 Subject: [PATCH 17/72] chimmy --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index acb238f7f8..428a669379 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Chim
+
Chimmy
{{aPercent | number:1}}%
-
Scoot
+
Scootie
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index fa91dc0ca2..d44b13344c 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Chim") -option_b = os.getenv('OPTION_B', "Scoot") +option_a = os.getenv('OPTION_A', "Chimmy") +option_b = os.getenv('OPTION_B', "Scootie") hostname = socket.gethostname() app = Flask(__name__) From 38365143344ac5f01b28fa861a27ddc0cb64d075 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 18 Apr 2020 21:31:32 -0700 Subject: [PATCH 18/72] chimmy!> --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 428a669379..acb238f7f8 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Chimmy
+
Chim
{{aPercent | number:1}}%
-
Scootie
+
Scoot
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index d44b13344c..fa91dc0ca2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Chimmy") -option_b = os.getenv('OPTION_B', "Scootie") +option_a = os.getenv('OPTION_A', "Chim") +option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() app = Flask(__name__) From 5fbeb414b0505d935ed058b4575213dcadfcd3a1 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 18 Apr 2020 22:21:51 -0700 Subject: [PATCH 19/72] change stuff --- result/views/index.html | 4 ++-- vote/app.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index acb238f7f8..8cf1131f09 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Chim
+
Chiminey
{{aPercent | number:1}}%
-
Scoot
+
Scootany
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index fa91dc0ca2..cee7cb57ea 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Chim") +option_a = os.getenv('OPTION_A', "Cimmmmmy") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From ec512b7fdf40d39be7731823f2f8bb50dc037f41 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 18 Apr 2020 22:47:00 -0700 Subject: [PATCH 20/72] uuhhhh --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 8cf1131f09..647c91cc92 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,7 +20,7 @@
-
Chiminey
+
Chim
{{aPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index cee7cb57ea..24b17b22bf 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Cimmmmmy") +option_a = os.getenv('OPTION_A', "Chimm") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From b86395cca08067f310306c0f49db33df605eb668 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 18 Apr 2020 23:04:41 -0700 Subject: [PATCH 21/72] more --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 647c91cc92..acb238f7f8 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -25,7 +25,7 @@
-
Scootany
+
Scoot
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 24b17b22bf..fa91dc0ca2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Chimm") +option_a = os.getenv('OPTION_A', "Chim") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From 6ffd54dd3f8f247903ec53a3eb7cf8ae43748f42 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 18 Apr 2020 23:13:43 -0700 Subject: [PATCH 22/72] go --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index acb238f7f8..e7635b6536 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Chim
+
Chimi
{{aPercent | number:1}}%
-
Scoot
+
Scooti
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index fa91dc0ca2..dcf1bbcf74 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Chim") -option_b = os.getenv('OPTION_B', "Scoot") +option_a = os.getenv('OPTION_A', "Chimi") +option_b = os.getenv('OPTION_B', "Scooti") hostname = socket.gethostname() app = Flask(__name__) From 591e7ec1f55cda78c86edd4641b9d26f43a18dd6 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 18 Apr 2020 23:20:16 -0700 Subject: [PATCH 23/72] vote --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index dcf1bbcf74..fa91dc0ca2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Chimi") -option_b = os.getenv('OPTION_B', "Scooti") +option_a = os.getenv('OPTION_A', "Chim") +option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() app = Flask(__name__) From 19232efbaea2b970734ec8cb253dfc347932b28c Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 11:32:04 -0700 Subject: [PATCH 24/72] Test --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index fa91dc0ca2..74a39843de 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Chim") -option_b = os.getenv('OPTION_B', "Scoot") +option_a = os.getenv('OPTION_A', "Chiim") +option_b = os.getenv('OPTION_B', "Scooti") hostname = socket.gethostname() app = Flask(__name__) From 95843bb6d1215069733cbfa1583c2e306c59653f Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 12:54:36 -0700 Subject: [PATCH 25/72] More --- result/views/index.html | 2 +- vote/app.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index e7635b6536..7b31e90c78 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,7 +20,7 @@
-
Chimi
+
Chim
{{aPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 74a39843de..fa91dc0ca2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Chiim") -option_b = os.getenv('OPTION_B', "Scooti") +option_a = os.getenv('OPTION_A', "Chim") +option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() app = Flask(__name__) From 80ddf7f051cb9b366ff054b4ef32bf94e5121f3a Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 18:44:25 -0700 Subject: [PATCH 26/72] Timmy --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 7b31e90c78..acb238f7f8 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -25,7 +25,7 @@
-
Scooti
+
Scoot
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index fa91dc0ca2..c1fd02c6c8 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Chim") +option_a = os.getenv('OPTION_A', "Chimmmmm") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From 9cd21635a3a55beb1abdee1711c749ffb4c2be14 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 18:48:27 -0700 Subject: [PATCH 27/72] go go --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index acb238f7f8..7aa78633aa 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,7 +20,7 @@
-
Chim
+
Chimmy
{{aPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index c1fd02c6c8..24b17b22bf 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Chimmmmm") +option_a = os.getenv('OPTION_A', "Chimm") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From f5b396c8c7a0570cfe51ebd6217cbf11dcc74c86 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 18:53:48 -0700 Subject: [PATCH 28/72] do it --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 7aa78633aa..acb238f7f8 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,7 +20,7 @@
-
Chimmy
+
Chim
{{aPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 24b17b22bf..fa91dc0ca2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Chimm") +option_a = os.getenv('OPTION_A', "Chim") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From 74a4dfca37d95a2b1c9ba2ed80816a30c85b30d2 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 18:58:45 -0700 Subject: [PATCH 29/72] uh --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index acb238f7f8..b26c189e20 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,7 +20,7 @@
-
Chim
+
Chimm
{{aPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index fa91dc0ca2..24b17b22bf 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Chim") +option_a = os.getenv('OPTION_A', "Chimm") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From 98e09672062c0681fc9346955c740bf5668e92c5 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 19:04:39 -0700 Subject: [PATCH 30/72] work! --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index b26c189e20..acb238f7f8 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,7 +20,7 @@
-
Chimm
+
Chim
{{aPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 24b17b22bf..fa91dc0ca2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Chimm") +option_a = os.getenv('OPTION_A', "Chim") option_b = os.getenv('OPTION_B', "Scoot") hostname = socket.gethostname() From dd3bf41c2de4c352bfa8f1a59bc8b119b11df3bf Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 19:10:37 -0700 Subject: [PATCH 31/72] go --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index acb238f7f8..dd468e68a6 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Chim
+
Fred
{{aPercent | number:1}}%
-
Scoot
+
Savage
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index fa91dc0ca2..75c5447a42 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Chim") -option_b = os.getenv('OPTION_B', "Scoot") +option_a = os.getenv('OPTION_A', "Fred") +option_b = os.getenv('OPTION_B', "Savage") hostname = socket.gethostname() app = Flask(__name__) From f9eaa2baa694c4ee816da58b2d62f433d0b8dee2 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 19:36:24 -0700 Subject: [PATCH 32/72] white --- result/views/index.html | 4 ++-- vote/app.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index dd468e68a6..91270336e7 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Fred
+
Fred< /div>
{{aPercent | number:1}}%
-
Savage
+
Savage
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 75c5447a42..875aa30961 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Fred") -option_b = os.getenv('OPTION_B', "Savage") +option_a = os.getenv('OPTION_A', "Fred ") +option_b = os.getenv('OPTION_B', "Savage ") hostname = socket.gethostname() app = Flask(__name__) From b3c73206fa35a120d7c5b78236be135048df83d6 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 19 Apr 2020 19:59:02 -0700 Subject: [PATCH 33/72] work! --- result/views/index.html | 2 +- vote/app.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 91270336e7..89385d2bf1 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -25,7 +25,7 @@
-
Savage
+
Savage
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 875aa30961..75c5447a42 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Fred ") -option_b = os.getenv('OPTION_B', "Savage ") +option_a = os.getenv('OPTION_A', "Fred") +option_b = os.getenv('OPTION_B', "Savage") hostname = socket.gethostname() app = Flask(__name__) From 9f4cae342678a72013c6997807268ed437661218 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Apr 2020 10:40:07 -0700 Subject: [PATCH 34/72] Updating worker --- worker/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/worker/Dockerfile b/worker/Dockerfile index 85c33a5e9e..f8d9b36c5b 100644 --- a/worker/Dockerfile +++ b/worker/Dockerfile @@ -15,3 +15,4 @@ FROM openjdk:8-jre-alpine COPY --from=build /code/target/worker-jar-with-dependencies.jar / CMD ["java", "-XX:+UnlockExperimentalVMOptions", "-XX:+UseCGroupMemoryLimitForHeap", "-jar", "/worker-jar-with-dependencies.jar"] + From 6bc75bcb81f73c899a85dcb3a48abb1d9aebe9aa Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Apr 2020 15:37:28 -0700 Subject: [PATCH 35/72] testing --- vote/app.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vote/app.py b/vote/app.py index 75c5447a42..074bac7ba1 100644 --- a/vote/app.py +++ b/vote/app.py @@ -6,7 +6,7 @@ import json option_a = os.getenv('OPTION_A', "Fred") -option_b = os.getenv('OPTION_B', "Savage") +option_b = os.getenv('OPTION_B', "Flintstone") hostname = socket.gethostname() app = Flask(__name__) From fcbb9a5fbaeb8f749100e790b769847bf703b6fa Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Apr 2020 17:56:56 -0700 Subject: [PATCH 36/72] Change all the services --- result/views/index.html | 4 ++-- vote/app.py | 2 +- worker/src/main/java/worker/Worker.java | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 89385d2bf1..4c99b9b80e 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,12 +20,12 @@
-
Fred< /div> +
Barney
{{aPercent | number:1}}%
-
Savage
+
Flintstone
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 074bac7ba1..f0c7196bf2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Fred") +option_a = os.getenv('OPTION_A', "Barney") option_b = os.getenv('OPTION_B', "Flintstone") hostname = socket.gethostname() diff --git a/worker/src/main/java/worker/Worker.java b/worker/src/main/java/worker/Worker.java index 040c1a2628..23032df095 100644 --- a/worker/src/main/java/worker/Worker.java +++ b/worker/src/main/java/worker/Worker.java @@ -6,6 +6,7 @@ import org.json.JSONObject; class Worker { + public static void main(String[] args) { try { Jedis redis = connectToRedis("redis"); @@ -19,7 +20,7 @@ public static void main(String[] args) { String voterID = voteData.getString("voter_id"); String vote = voteData.getString("vote"); - System.err.printf("Processing vote for '%s' by '%s'\n", vote, voterID); + System.err.printf(" Processing vote for '%s' by '%s'\n", vote, voterID); updateVote(dbConn, voterID, vote); } } catch (SQLException e) { From d30b18cb41ab6b1081ddd64df4607f8b98b1e25f Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Apr 2020 18:25:06 -0700 Subject: [PATCH 37/72] update all the things --- result/views/index.html | 2 +- vote/app.py | 2 +- worker/src/main/java/worker/Worker.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 4c99b9b80e..cc11423e39 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -20,7 +20,7 @@
-
Barney
+
Fred
{{aPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index f0c7196bf2..074bac7ba1 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,7 +5,7 @@ import random import json -option_a = os.getenv('OPTION_A', "Barney") +option_a = os.getenv('OPTION_A', "Fred") option_b = os.getenv('OPTION_B', "Flintstone") hostname = socket.gethostname() diff --git a/worker/src/main/java/worker/Worker.java b/worker/src/main/java/worker/Worker.java index 23032df095..3d8c1e2ad1 100644 --- a/worker/src/main/java/worker/Worker.java +++ b/worker/src/main/java/worker/Worker.java @@ -20,7 +20,7 @@ public static void main(String[] args) { String voterID = voteData.getString("voter_id"); String vote = voteData.getString("vote"); - System.err.printf(" Processing vote for '%s' by '%s'\n", vote, voterID); + System.err.printf("Processing vote for '%s' by '%s' \n", vote, voterID); updateVote(dbConn, voterID, vote); } } catch (SQLException e) { From 7ca8cba20065956957cea17e7dd2d5bca5acc103 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Apr 2020 19:46:06 -0700 Subject: [PATCH 38/72] Testing --- result/views/index.html | 2 +- vote/app.py | 2 +- worker/src/main/java/worker/Worker.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index cc11423e39..8496196c16 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -25,7 +25,7 @@
-
Flintstone
+
Craft
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index 074bac7ba1..a17b5fbac2 100644 --- a/vote/app.py +++ b/vote/app.py @@ -6,7 +6,7 @@ import json option_a = os.getenv('OPTION_A', "Fred") -option_b = os.getenv('OPTION_B', "Flintstone") +option_b = os.getenv('OPTION_B', "Craft") hostname = socket.gethostname() app = Flask(__name__) diff --git a/worker/src/main/java/worker/Worker.java b/worker/src/main/java/worker/Worker.java index 3d8c1e2ad1..7c38a4bb85 100644 --- a/worker/src/main/java/worker/Worker.java +++ b/worker/src/main/java/worker/Worker.java @@ -20,7 +20,7 @@ public static void main(String[] args) { String voterID = voteData.getString("voter_id"); String vote = voteData.getString("vote"); - System.err.printf("Processing vote for '%s' by '%s' \n", vote, voterID); + System.err.printf("Craft Processing vote for '%s' by '%s' \n", vote, voterID); updateVote(dbConn, voterID, vote); } } catch (SQLException e) { From 1a2b758ebceed486ca114f73ff26ddb357b45552 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 23 Apr 2020 11:16:18 -0700 Subject: [PATCH 39/72] test --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index a17b5fbac2..caba3ea12a 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Fred") -option_b = os.getenv('OPTION_B', "Craft") +option_a = os.getenv('OPTION_A', "Fred 1") +option_b = os.getenv('OPTION_B', "Craft 1") hostname = socket.gethostname() app = Flask(__name__) From 4432fff979adcc44f81cf5eae1328f95b6f0cd62 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 18 May 2020 15:10:17 -0700 Subject: [PATCH 40/72] New build --- result/views/index.html | 2 +- vote/app.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/result/views/index.html b/result/views/index.html index 8496196c16..dd468e68a6 100644 --- a/result/views/index.html +++ b/result/views/index.html @@ -25,7 +25,7 @@
-
Craft
+
Savage
{{bPercent | number:1}}%
diff --git a/vote/app.py b/vote/app.py index caba3ea12a..4791ee1386 100644 --- a/vote/app.py +++ b/vote/app.py @@ -6,7 +6,7 @@ import json option_a = os.getenv('OPTION_A', "Fred 1") -option_b = os.getenv('OPTION_B', "Craft 1") +option_b = os.getenv('OPTION_B', "Savage 1") hostname = socket.gethostname() app = Flask(__name__) From 8f7a6bd57c61a22de4d3f667f1c9d5ee32bb4b22 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 7 Jun 2020 21:26:36 -0700 Subject: [PATCH 41/72] Adding uploader --- docker-compose.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 41289bb41b..9e68057065 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,7 +2,6 @@ version: "3" services: vote: - image: docker.giffin.org/dustyspace/example-voting-app/vote build: ./vote command: python app.py volumes: @@ -16,7 +15,6 @@ services: - back-tier result: - image: docker.giffin.org/dustyspace/example-voting-app/result build: ./result command: nodemon server.js volumes: @@ -39,6 +37,11 @@ services: networks: - back-tier + uploader: + image: mayth/simple-upload-server + ports: + - "3000:3000" + redis: image: redis:alpine container_name: redis From ae23597eddd8737d614be60dd33ffc35e2783b6c Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sun, 7 Jun 2020 22:53:12 -0700 Subject: [PATCH 42/72] making the uploader work --- docker-compose.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docker-compose.yml b/docker-compose.yml index 9e68057065..69f14945ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,6 +41,15 @@ services: image: mayth/simple-upload-server ports: - "3000:3000" + command: + - "/usr/local/bin/app" + - "-port" + - '3000' + - "-upload_limit" + - '10485760' + - "-token" + - f9403fc5f537b4ab332d + - "/tmp" redis: image: redis:alpine From 587c50cc9a5eb035dfddbafb7eb034be8bc837a6 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 11 Jun 2020 23:27:46 -0700 Subject: [PATCH 43/72] updating --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index 4791ee1386..75c5447a42 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Fred 1") -option_b = os.getenv('OPTION_B', "Savage 1") +option_a = os.getenv('OPTION_A', "Fred") +option_b = os.getenv('OPTION_B', "Savage") hostname = socket.gethostname() app = Flask(__name__) From 5f5e2a01345b5be7969a160352106bc053ca8858 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 22 Jun 2020 14:03:51 -0700 Subject: [PATCH 44/72] Freddie --- vote/app.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vote/app.py b/vote/app.py index 75c5447a42..eeed6d3fdb 100644 --- a/vote/app.py +++ b/vote/app.py @@ -5,8 +5,8 @@ import random import json -option_a = os.getenv('OPTION_A', "Fred") -option_b = os.getenv('OPTION_B', "Savage") +option_a = os.getenv('OPTION_A', "Fredie") +option_b = os.getenv('OPTION_B', "Savagie") hostname = socket.gethostname() app = Flask(__name__) From f10cf3995482046692cabcc1923c52984035e90b Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 4 Aug 2020 10:48:59 -0700 Subject: [PATCH 45/72] Trying out barrett jacksons db setup --- docker-compose.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 69f14945ad..84be1c7e3c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -59,9 +59,15 @@ services: - back-tier db: - image: postgres:9.4 + image: postgres:9.6.1 container_name: db ports: ["5432"] + environment: + - POSTGRES_DB=database + - POSTGRES_HOST=postgres + - POSTGRES_PASSWORD=root + - POSTGRES_PORT=5432 + - POSTGRES_USER=postgres volumes: - "db-data:/var/lib/postgresql/data" networks: From 97f07e7865c66793c584bb391839d80122b94d54 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Thu, 17 Sep 2020 22:30:36 -0700 Subject: [PATCH 46/72] removing postgres password --- docker-compose.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 84be1c7e3c..2451bf7cf5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -64,8 +64,7 @@ services: ports: ["5432"] environment: - POSTGRES_DB=database - - POSTGRES_HOST=postgres - - POSTGRES_PASSWORD=root + - POSTGRES_HOST=db - POSTGRES_PORT=5432 - POSTGRES_USER=postgres volumes: From 346b80fad8e6aef2e6fa8209be686be67332f0c6 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 17 Apr 2021 18:45:06 -0400 Subject: [PATCH 47/72] whitespace --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 54059ce809..4896e5e252 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ Example Voting App ========= - + A simple distributed application running across multiple Docker containers. Getting started From 53323e98942813d959bccb74fdaf81822c431e95 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 24 Apr 2021 16:26:33 -0400 Subject: [PATCH 48/72] Adding default app config and env config --- .release.yaml | 2 + app-config.yaml | 101 ++++++++++++++++++++++++++++++++++++++++++++++++ env-config.yaml | 29 ++++++++++++++ 3 files changed, 132 insertions(+) create mode 100644 .release.yaml create mode 100644 app-config.yaml create mode 100644 env-config.yaml diff --git a/.release.yaml b/.release.yaml new file mode 100644 index 0000000000..b10996ef6d --- /dev/null +++ b/.release.yaml @@ -0,0 +1,2 @@ +default_app_template: app-config.yaml +default_env_variables: env-config.yaml diff --git a/app-config.yaml b/app-config.yaml new file mode 100644 index 0000000000..08cd3bbe0f --- /dev/null +++ b/app-config.yaml @@ -0,0 +1,101 @@ +--- +app: example-voting-app +auto_deploy: true +context: release-handsup-us-east-1 +domain: example-voting-app.releaseapp.gethandsup.com +mode: development +repo_name: dustyspace/example-voting-app +node_selector: +- key: failure-domain.beta.kubernetes.io/zone + value: us-east-1b +- key: kubernetes.io/arch + value: amd64 +hostnames: +- vote: vote-${env_id}-${domain} +- result: result-${env_id}-${domain} +environment_templates: +- name: ephemeral +- name: permanent +resources: + cpu: + limits: 1000m + requests: 100m + memory: + limits: 1Gi + requests: 100Mi + replicas: 1 +services: +- name: vote + image: dustyspace/example-voting-app/vote + build: + context: "./vote" + has_repo: true + static: false + args: + - python + - app.py + depends_on: + - worker + ports: + - type: node_port + target_port: '80' + port: '5000' + node_selector: + - key: failure-domain.beta.kubernetes.io/zone + value: us-east-1b + - key: kubernetes.io/arch + value: amd64 +- name: result + image: dustyspace/example-voting-app/result + build: + context: "./result" + has_repo: true + static: false + args: + - nodemon + - server.js + depends_on: + - worker + ports: + - type: node_port + target_port: '80' + port: '5001' + - type: node_port + target_port: '5858' + port: '5858' +- name: worker + image: dustyspace/example-voting-app/worker + build: + context: "./worker" + has_repo: true + static: false + depends_on: + - redis + - db +- name: redis + image: redis:alpine + ports: + - type: container_port + port: '6379' +- name: db + image: postgres:9.6.1 + volumes: + - type: persistent + name: db-data + mount_path: "/var/lib/postgresql/data" + ports: + - type: container_port + port: '5432' + storage: + size: 10Gi + type: aws-efs +workflows: +- name: setup + order_from: + - services.all +- name: patch + order_from: + - services.vote + - services.result + - services.worker + diff --git a/env-config.yaml b/env-config.yaml new file mode 100644 index 0000000000..5bc64b58e4 --- /dev/null +++ b/env-config.yaml @@ -0,0 +1,29 @@ +--- +defaults: +- key: POSTGRES_DB + value: database +- key: POSTGRES_HOST + value: db +- key: POSTGRES_PORT + value: '5432' +- key: POSTGRES_USER + value: postgres +- key: POSTGRES_HOST_AUTH_METHOD + value: trust +- key: PGDATA + value: "/var/lib/postgresql/data/pgdata" +services: + db: + - key: POSTGRES_DB + value: database + - key: POSTGRES_HOST + value: db + - key: POSTGRES_PORT + value: '5432' + - key: POSTGRES_USER + value: postgres + - key: POSTGRES_HOST_AUTH_METHOD + value: trust + - key: PGDATA + value: "/var/lib/postgresql/data/pgdata" + From 9df7c94741f67e58f5d31dedaeb10e4720490d7f Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 24 Apr 2021 16:33:44 -0400 Subject: [PATCH 49/72] fixing up release.yaml --- .release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.release.yaml b/.release.yaml index b10996ef6d..648b3fbe2d 100644 --- a/.release.yaml +++ b/.release.yaml @@ -1,2 +1,2 @@ -default_app_template: app-config.yaml -default_env_variables: env-config.yaml +application_template: app-config.yaml +environment_variables: env-config.yaml From 1e511bc9dbd77842fe5917106993dcaeb22d298a Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 27 Apr 2021 05:43:06 -0400 Subject: [PATCH 50/72] moving app and env config to .release --- .release.yaml | 4 ++-- app-config.yaml => .release/app-config.yaml | 0 env-config.yaml => .release/env-config.yaml | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename app-config.yaml => .release/app-config.yaml (100%) rename env-config.yaml => .release/env-config.yaml (100%) diff --git a/.release.yaml b/.release.yaml index 648b3fbe2d..628e5d344f 100644 --- a/.release.yaml +++ b/.release.yaml @@ -1,2 +1,2 @@ -application_template: app-config.yaml -environment_variables: env-config.yaml +application_template: .release/app-config.yaml +environment_variables: .release/env-config.yaml diff --git a/app-config.yaml b/.release/app-config.yaml similarity index 100% rename from app-config.yaml rename to .release/app-config.yaml diff --git a/env-config.yaml b/.release/env-config.yaml similarity index 100% rename from env-config.yaml rename to .release/env-config.yaml From 0b326fff9d9a52c08129913eba224a338b741a88 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 27 Apr 2021 06:34:37 -0400 Subject: [PATCH 51/72] Adding new env var --- .release/env-config.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.release/env-config.yaml b/.release/env-config.yaml index 5bc64b58e4..45a3d41a7c 100644 --- a/.release/env-config.yaml +++ b/.release/env-config.yaml @@ -1,5 +1,7 @@ --- defaults: +- key: FRESH + value: 'and so clean' - key: POSTGRES_DB value: database - key: POSTGRES_HOST From 8a8736b3316a954931e19c946fea44747da99a3e Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 27 Apr 2021 08:35:02 -0400 Subject: [PATCH 52/72] removing us-east-1 node selector --- .release/app-config.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.release/app-config.yaml b/.release/app-config.yaml index 08cd3bbe0f..3221b1c6c0 100644 --- a/.release/app-config.yaml +++ b/.release/app-config.yaml @@ -41,8 +41,6 @@ services: target_port: '80' port: '5000' node_selector: - - key: failure-domain.beta.kubernetes.io/zone - value: us-east-1b - key: kubernetes.io/arch value: amd64 - name: result From b539a95af84e1d3daea071241d9f1a14c9f41c17 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 27 Apr 2021 08:44:35 -0400 Subject: [PATCH 53/72] updating failure zone --- .release/app-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.release/app-config.yaml b/.release/app-config.yaml index 3221b1c6c0..62028600ec 100644 --- a/.release/app-config.yaml +++ b/.release/app-config.yaml @@ -7,7 +7,7 @@ mode: development repo_name: dustyspace/example-voting-app node_selector: - key: failure-domain.beta.kubernetes.io/zone - value: us-east-1b + value: us-west-2a - key: kubernetes.io/arch value: amd64 hostnames: From d31de839dd3a2042b0738e2639e904987e0c8c1c Mon Sep 17 00:00:00 2001 From: David Giffin Date: Wed, 28 Apr 2021 01:01:09 -0400 Subject: [PATCH 54/72] whitespace --- .release/app-config.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.release/app-config.yaml b/.release/app-config.yaml index 62028600ec..42ac33fce4 100644 --- a/.release/app-config.yaml +++ b/.release/app-config.yaml @@ -97,3 +97,6 @@ workflows: - services.result - services.worker + + + From bcbe936a066000cb0244bf42d4a508f0a5d6be22 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Wed, 28 Apr 2021 08:45:25 -0400 Subject: [PATCH 55/72] removing worker --- .release/app-config.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.release/app-config.yaml b/.release/app-config.yaml index 42ac33fce4..21b3deb9c6 100644 --- a/.release/app-config.yaml +++ b/.release/app-config.yaml @@ -95,8 +95,4 @@ workflows: order_from: - services.vote - services.result - - services.worker - - - From fde2b936e6ce03d6224404bba936439cccf3d93a Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 22 Jun 2021 20:45:18 -0400 Subject: [PATCH 56/72] Adding echo --- docker-compose.yml | 4 + echo/.dockerignore | 8 + echo/.gitattributes | 2 + echo/.gitignore | 4 + echo/CHANGELOG.md | 42 +++ echo/Dockerfile | 26 ++ echo/README.md | 170 ++++++++++ echo/docker-compose.yml | 11 + echo/generate-cert.sh | 44 +++ echo/index.js | 116 +++++++ echo/package-lock.json | 560 +++++++++++++++++++++++++++++++ echo/package.json | 25 ++ echo/screenshots/screenshot.png | Bin 0 -> 59182 bytes echo/screenshots/screenshot2.png | Bin 0 -> 29275 bytes echo/screenshots/screenshot3.png | Bin 0 -> 99199 bytes echo/tests.sh | 240 +++++++++++++ 16 files changed, 1252 insertions(+) create mode 100644 echo/.dockerignore create mode 100644 echo/.gitattributes create mode 100644 echo/.gitignore create mode 100644 echo/CHANGELOG.md create mode 100644 echo/Dockerfile create mode 100644 echo/README.md create mode 100644 echo/docker-compose.yml create mode 100644 echo/generate-cert.sh create mode 100644 echo/index.js create mode 100644 echo/package-lock.json create mode 100644 echo/package.json create mode 100644 echo/screenshots/screenshot.png create mode 100644 echo/screenshots/screenshot2.png create mode 100644 echo/screenshots/screenshot3.png create mode 100755 echo/tests.sh diff --git a/docker-compose.yml b/docker-compose.yml index 2451bf7cf5..1c93e55685 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,10 @@ version: "3" services: + echo: + build: ./echo + ports: + - "8080:8080" vote: build: ./vote command: python app.py diff --git a/echo/.dockerignore b/echo/.dockerignore new file mode 100644 index 0000000000..5c3f51279f --- /dev/null +++ b/echo/.dockerignore @@ -0,0 +1,8 @@ +# Ignore everything +** + +# Except +!generate-cert.sh +!index.js +!package.json +!package-lock.json diff --git a/echo/.gitattributes b/echo/.gitattributes new file mode 100644 index 0000000000..1312090792 --- /dev/null +++ b/echo/.gitattributes @@ -0,0 +1,2 @@ +* text=auto +*.sh text eol=lf \ No newline at end of file diff --git a/echo/.gitignore b/echo/.gitignore new file mode 100644 index 0000000000..fe959ccc72 --- /dev/null +++ b/echo/.gitignore @@ -0,0 +1,4 @@ +.*.sw* +node_modules/ +*.log +testarea \ No newline at end of file diff --git a/echo/CHANGELOG.md b/echo/CHANGELOG.md new file mode 100644 index 0000000000..004638dfde --- /dev/null +++ b/echo/CHANGELOG.md @@ -0,0 +1,42 @@ +## Version `19` - 2021-04-08 + +* You can run the container as a different user than the one defined in the image. + +## Version `18` - 2021-02-26 + +* You can pass a `x-set-response-delay-ms` to set a custom delay in milliseconds. + +## Version `17` - 2021-01-15 + +* You can pass a `x-set-response-status-code` header to set the response status code + +## Version `16` - 2020-12-22 + +* Dockerfile optimisation, slightly smaller image size +* This changelog added to the repo + +## Version `15` - 2020-12-15 + +* The image now runs as a non-root user by default. + +## Version `14` - 2020-11-26 + +* Optionally allow running as a non root user. + +``` +docker run --user node -e HTTP_PORT=8080 -e HTTPS_PORT=8443 -p 8080:8080 -p 8443:8443 --rm mendhak/http-https-echo:issue-14-non-root +#or +docker run --user node --sysctl net.ipv4.ip_unprivileged_port_start=0 -p 8080:80 -p 8443:443 --rm mendhak/http-https-echo:issue-14-non-root +``` + +## Version `latest` and others + +_Note: The `latest` tag is no longer being built, I've removed it from the automated builds. Please don't use the `latest` tag any longer._ + +* JWT header +* Choose your own ports +* Choose your own certs +* Ignore a specific path +* JSON payloads +* Single line log output + diff --git a/echo/Dockerfile b/echo/Dockerfile new file mode 100644 index 0000000000..4ed6a059e7 --- /dev/null +++ b/echo/Dockerfile @@ -0,0 +1,26 @@ +FROM node:14-alpine AS build + +WORKDIR /app +COPY . /app + +RUN set -ex \ + # Build JS-Application + && npm install --production \ + # Generate SSL-certificate (for HTTPS) + && apk --no-cache add openssl \ + && sh generate-cert.sh \ + && apk del openssl \ + && rm -rf /var/cache/apk/* \ + # Delete unnecessary files + && rm package* generate-cert.sh \ + # Correct User's file access + && chown -R node:node /app \ + && chmod +r /app/privkey.pem + +FROM node:14-alpine AS final +WORKDIR /app +COPY --from=build /app /app +ENV HTTP_PORT=8080 HTTPS_PORT=8443 +EXPOSE $HTTP_PORT $HTTPS_PORT +USER 1000 +CMD ["node", "./index.js"] diff --git a/echo/README.md b/echo/README.md new file mode 100644 index 0000000000..f471af1d43 --- /dev/null +++ b/echo/README.md @@ -0,0 +1,170 @@ +[![pulls](https://img.shields.io/docker/pulls/mendhak/http-https-echo.svg?style=for-the-badge&logo=docker)](https://hub.docker.com/r/mendhak/http-https-echo) +[![Docker Image Version (latest semver)](https://img.shields.io/docker/v/mendhak/http-https-echo?color=lightblue&label=latest&sort=semver&style=for-the-badge)](https://hub.docker.com/r/mendhak/http-https-echo) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/mendhak/docker-http-https-echo/Build?color=darkgreen&style=for-the-badge)](https://github.com/mendhak/docker-http-https-echo/actions?query=workflow%3ABuild) + + + + +[`mendhak/http-https-echo`](https://hub.docker.com/r/mendhak/http-https-echo) is a Docker image that can echo various HTTP request properties back to client, as well as in the Docker container logs. +You can use your own certificates, choose your ports, decode JWT headers and filter out certain paths. + +![browser](https://raw.githubusercontent.com/mendhak/docker-http-https-echo/master/screenshots/screenshot.png) + +This image is executed as non root by default and is fully compliant with Kubernetes or Openshift deployment. + +Please do not use the `:latest` tag as it will break without warning, use a specific version instead. + +## Basic Usage + +Run with Docker + + docker run -p 8080:8080 -p 8443:8443 --rm -t mendhak/http-https-echo:18 + +Or run with Docker Compose + + docker-compose up + +Then, issue a request via your browser or curl, and watch the response, as well as container log output. + + curl -k -X PUT -H "Arbitrary:Header" -d aaa=bbb https://localhost:8443/hello-world + + +## Choose your ports + +You can choose a different internal port instead of 8080 and 8443 with the `HTTP_PORT` and `HTTPS_PORT` environment variables. + +In this example I'm setting http to listen on 8888, and https to listen on 9999. + + docker run -e HTTP_PORT=8888 -e HTTPS_PORT=9999 -p 8080:8888 -p 8443:9999 --rm -t mendhak/http-https-echo:18 + + +With docker compose, this would be: + + my-http-listener: + image: mendhak/http-https-echo:18 + environment: + - HTTP_PORT=8888 + - HTTPS_PORT=9999 + ports: + - "8080:8888" + - "8443:9999" + + +## Use your own certificates + +Use volume mounting to substitute the certificate and private key with your own. This example uses the snakeoil cert. + + my-http-listener: + image: mendhak/http-https-echo:18 + ports: + - "8080:8080" + - "8443:8443" + volumes: + - /etc/ssl/certs/ssl-cert-snakeoil.pem:/app/fullchain.pem + - /etc/ssl/private/ssl-cert-snakeoil.key:/app/privkey.pem + + + +## Decode JWT header + +If you specify the header that contains the JWT, the echo output will contain the decoded JWT. Use the `JWT_HEADER` environment variable for this. + + docker run -e JWT_HEADER=Authentication -p 8080:8080 -p 8443:8443 --rm -it mendhak/http-https-echo:18 + + +Now make your request with `Authentication: eyJ...` header (it should also work with the `Authentication: Bearer eyJ...` schema too): + + curl -k -H "Authentication: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" http://localhost:8080/ + +And in the output you should see a `jwt` section. + +## Do not log specific path + +Set the environment variable `LOG_IGNORE_PATH` to a path you would like to exclude from verbose logging to stdout. +This can help reduce noise from healthchecks in orchestration/infrastructure like Swarm, Kubernetes, ALBs, etc. + + docker run -e LOG_IGNORE_PATH=/ping -p 8080:8080 -p 8443:8443 --rm -t mendhak/http-https-echo:18 + + +With docker compose, this would be: + + my-http-listener: + image: mendhak/http-https-echo:18 + environment: + - LOG_IGNORE_PATH=/ping + ports: + - "8080:8080" + - "8443:8443" + + +## JSON payloads and JSON output + +If you submit a JSON payload in the body of the request, with Content-Type: application/json, then the response will contain the escaped JSON as well. + +For example, + + curl -X POST -H "Content-Type: application/json" -d '{"a":"b"}' http://localhost:8080/ + +Will contain a `json` property in the response/output. + + ... + "xhr": false, + "connection": {}, + "json": { + "a": "b" + } + } + +## Custom status code + +Use `x-set-response-status-code` to set a custom status code. For example, + + +```bash +curl -v -H "x-set-response-status-code: 401" http://localhost:8080/ +``` + +Will cause the reponse status code to be: + +``` + HTTP/1.1 401 Unauthorized +``` + +## Add a delay before response + +Use `x-set-response-delay-ms` to set a custom delay in milliseconds. This will allow you to simulate slow responses. + +```bash +curl -v -H "x-set-response-delay-ms: 6000" http://localhost:8080/ +``` + + +## Output + +#### Curl output + +![curl](https://raw.githubusercontent.com/mendhak/docker-http-https-echo/master/screenshots/screenshot2.png) + +#### `docker logs` output + +![dockerlogs](https://raw.githubusercontent.com/mendhak/docker-http-https-echo/master/screenshots/screenshot3.png) + + + +## Building + + docker build -t mendhak/http-https-echo . + +Run some tests to make sure features are working as expected. + + ./tests.sh + +To create a new image on Docker Hub, I need to create a tag and push it. + + git tag -s 16 + git push --tags + + +## Changelog + +See the [changelog](CHANGELOG.md) \ No newline at end of file diff --git a/echo/docker-compose.yml b/echo/docker-compose.yml new file mode 100644 index 0000000000..d65fee393d --- /dev/null +++ b/echo/docker-compose.yml @@ -0,0 +1,11 @@ +my-http-listener: + image: mendhak/http-https-echo:18 + environment: + - HTTP_PORT=8888 + - HTTPS_PORT=9999 + ports: + - "8080:8888" + - "8443:9999" + # volumes: + # - /etc/ssl/certs/ssl-cert-snakeoil.pem:/app/fullchain.pem + # - /etc/ssl/private/ssl-cert-snakeoil.key:/app/privkey.pem \ No newline at end of file diff --git a/echo/generate-cert.sh b/echo/generate-cert.sh new file mode 100644 index 0000000000..6d6f7a619c --- /dev/null +++ b/echo/generate-cert.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# source : https://raw.githubusercontent.com/Daplie/nodejs-self-signed-certificate-example/master/make-root-ca-and-certificates.sh + +set -e + +# Create your very own Root Certificate Authority +openssl genrsa \ + -out root-ca.key.pem \ + 2048 + +# Self-sign your Root Certificate Authority +# Since this is private, the details can be as bogus as you like +openssl req \ + -x509 \ + -new \ + -nodes \ + -key root-ca.key.pem \ + -days 9999 \ + -out root-ca.crt.pem \ + -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com" + +# Create a Device Certificate +openssl genrsa \ + -out privkey.pem \ + 2048 + +# Create a request from your Device, which your Root CA will sign +openssl req -new \ + -key privkey.pem \ + -out device-csr.pem \ + -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=my.example.com" + +# Sign the request from Device with your Root CA +# -CAserial certs/ca/my-root-ca.srl +openssl x509 \ + -req -in device-csr.pem \ + -CA root-ca.crt.pem \ + -CAkey root-ca.key.pem \ + -CAcreateserial \ + -out cert.pem \ + -days 9999 + +# Put things in their proper place +cat cert.pem root-ca.crt.pem > fullchain.pem \ No newline at end of file diff --git a/echo/index.js b/echo/index.js new file mode 100644 index 0000000000..5e1f92a91e --- /dev/null +++ b/echo/index.js @@ -0,0 +1,116 @@ +var express = require('express') +const morgan = require('morgan'); +var http = require('http') +var https = require('https') +var app = express() +const os = require('os'); +const jwt = require('jsonwebtoken'); +var concat = require('concat-stream'); +const { promisify } = require('util'); +const sleep = promisify(setTimeout); + +app.set('json spaces', 2); +app.set('trust proxy', ['loopback', 'linklocal', 'uniquelocal']); + +app.use(morgan('combined')); + +app.use(function(req, res, next){ + req.pipe(concat(function(data){ + req.body = data.toString('utf8'); + next(); + })); +}); + +app.all('*', (req, res) => { + const echo = { + path: req.path, + headers: req.headers, + method: req.method, + body: req.body, + cookies: req.cookies, + fresh: req.fresh, + hostname: req.hostname, + ip: req.ip, + ips: req.ips, + protocol: req.protocol, + query: req.query, + subdomains: req.subdomains, + xhr: req.xhr, + os: { + hostname: os.hostname() + }, + connection: { + servername: req.connection.servername + } + }; + + if(req.is('application/json')){ + echo.json = JSON.parse(req.body) + } + + if (process.env.JWT_HEADER) { + let token = req.headers[process.env.JWT_HEADER.toLowerCase()]; + if (!token) { + echo.jwt = token; + } else { + token = token.split(" ").pop(); + const decoded = jwt.decode(token, {complete: true}); + echo.jwt = decoded; + } + } + const setResponseStatusCode = parseInt(req.headers["x-set-response-status-code"], 10) + if (100 <= setResponseStatusCode && setResponseStatusCode < 600) { + res.status(setResponseStatusCode) + } + + const sleepTime = parseInt(req.headers["x-set-response-delay-ms"], 0) + sleep(sleepTime).then(() => { + + res.json(echo); + + if (process.env.LOG_IGNORE_PATH != req.path) { + console.log('-----------------') + + let spacer = 4; + if(process.env.LOG_WITHOUT_NEWLINE){ + spacer = null; + } + + console.log(JSON.stringify(echo, null, spacer)); + } + }); + + +}); + +const sslOpts = { + key: require('fs').readFileSync('privkey.pem'), + cert: require('fs').readFileSync('fullchain.pem'), +}; + +var httpServer = http.createServer(app).listen(process.env.HTTP_PORT || 80, '0.0.0.0'); +var httpsServer = https.createServer(sslOpts,app).listen(process.env.HTTPS_PORT || 443, '0.0.0.0'); + +let calledClose = false; + +process.on('exit', function () { + if (calledClose) return; + console.log('Got exit event. Trying to stop Express server.'); + server.close(function() { + console.log("Express server closed"); + }); +}); + +process.on('SIGINT', shutDown); +process.on('SIGTERM', shutDown); + +function shutDown(){ + console.log('Got a kill signal. Trying to exit gracefully.'); + calledClose = true; + httpServer.close(function() { + httpsServer.close(function() { + console.log("HTTP and HTTPS servers closed. Asking process to exit."); + process.exit() + }); + }); +} diff --git a/echo/package-lock.json b/echo/package-lock.json new file mode 100644 index 0000000000..9d2af6768c --- /dev/null +++ b/echo/package-lock.json @@ -0,0 +1,560 @@ +{ + "name": "@mendhak/http-https-echo", + "version": "1.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + } + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } +} diff --git a/echo/package.json b/echo/package.json new file mode 100644 index 0000000000..3707e4848e --- /dev/null +++ b/echo/package.json @@ -0,0 +1,25 @@ +{ + "name": "@mendhak/http-https-echo", + "repository": { + "type": "git", + "url": "https://github.com/mendhak/docker-http-echo" + }, + "version": "1.0.1", + "description": "JSON service for debugging a web setup", + "main": "index.js", + "scripts": { + "start": "node index.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Mendhak ", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.3.0" + }, + "dependencies": { + "concat-stream": "^2.0.0", + "express": "^4.17.1", + "jsonwebtoken": "^8.5.0", + "morgan": "^1.10.0" + } +} diff --git a/echo/screenshots/screenshot.png b/echo/screenshots/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..902a612808f5f12118246dbd1ab7594e9bd03e8f GIT binary patch literal 59182 zcmZ6yb97x_)GpjMX^h79iP6}$ZR5nYlQy<(+jbh;X>8l(J^j7k``t0_`QvP@v9R}? z&wM6UsJyHgJPbC>moH!7CB%glzkK-y@#V|ca469KmyTymF33XWu)nhetd85v|{`k8fXD<0&9-&_eAq*AYmVgMsS2U!% z88L5RffxiyLVaFXg@-)+~I6j2=MKC)KK9XbsA!dAK(J) z5J;FAWHNI{XJ>#PP$3T|KiPE_75=h^3OqANJ!+ZzrY@B$p)W=uge}_4(!@%YH3|Rd-WSKjGHilp0})D#3RrM zTEyUeF#1`12{$b4=lumPv_pA7&_z|8P<2}D?d@eh%l^K5BSI;48F-DxF%mFW#CSHR=5SA|A>kVd^pt$xop z)e3b14GpZuMrY6z)@<17O{YvIGdQ$emW{J5aLUT+ykA{5ydQN0bAMD;R)W?WpPnB6 z*Mg_=4c2tygBN1k4l}>!*SZbg#p~+osz##)T4G`%sM*~5x{RkM7wF>2ix<={S^RN} zIk+<4XW1)P_v$T_ElcO%+C#KicoQS10WR6HSKPCW;pEumTn2}qPgFeJ1y=rZx;n4z zR~ZO4EE`D0n#e}j0|gYsMUz9>j=UnFofEumRVWsl zBjaqF2YszlOX?dk4n7F@<-)G-tR~%`2y>=C3m0q&Ny%}BkfM3*+a7EV@?AGfE|SPH z+`+_oR`#(k4c>=rZ#E*_D>gPFSa{Nvi?JjWubWltoDN>4GwTrw?NFD+c<2NyR42CY zn>S6L2dMF%iSaz1t73r__pT**2oTwpMkWtfo|_lFsSvOrYVRqTcnHM<{iB zf3N4wn5_6tU3y*{H}?}S{9BGccCO)o^a8WH`BH-)UafQ(BDJ#X7=(#$9lVeW5&qcB zP5G>LW7sqGsXg#ui}RzD)@uOodMW>uv$3&JI+HW;;lYKjbuX?yD|CEZdgq$`@87>p zE-qQBi5-il#t&!9(&?=5zbva-gFG)glgEB`!&NViK@xcV@%s*YbaeFR@YcJ`x}Kgw6il4By73n*tWXc>Eq1USwdLW2;m4r!xYstRY7?$;^)cr;PVvprrS4#I zOn9pi*iY_v##75S1l;6l{0-j&QeB^WjSX$Z;Dtwn#I^~7o9NxQb+`T6;)m(yw#gy7cu1uZOIuP2SEfU*6&hK7W&Fc=WR z!~me1SG`ABAUoO4&MVYw^Dbf6EgJJEK+ha{zURB|ZrawkT^sIPKT#ekEjlyHy??$q<>?dhWn$3k=9gD{~N%jcPpc}ov+yhNb znOx4)Y0zQQS*;C^XA8Y<(>DuhYGMis03g_su(qZpB_$o=9)#sQ*ouC?!-a@QGABZ<%kDt#yO7FW2oDQPJeP z-@Upr{MjZI`UJD}u8SF?Yl#s;L5cKZ3e>Z&>5?)5JW(jYJHkj|jGQfNNE@1a4E@I^5k8$!B zJQn=i;&y*l2@!^6JNEMw)N4GKs$*C*OL}MS_~Xg zj~GM`0tAUfqi~lO0l->yyY_X8uvv@-1U$}!iF7t4dHG*6X51Eupa^bNO%%L?@wk^3x07&5QqSoo? zFVn?C^z(D|A^m=`@7{rdjj}J>J`U?Ht_R|~BCtXJSD6Ym1437Np3`?|YMW@-as`fQ zPP}O3I|%#Y;fn&2jzM868~mnu&G*!+t&Z#L@qzd;JTM=LYw>P=o4 zsY2Do2B#hm`n~aqQUWH(tey~9bg5}K4w|oz#jPZQf;I?~eRD~X?8wOSB!fl|9ZBCZ z8z8u~Ifg?=z5wC2I?m7+F0O7nKU^vh$W>`D5xOdb_TSzi5ocY7sNeS6;27&}=_{)W ztZZSIb#%Zhp$j<9hRwh&7U{heNKv{T2t~#Y2v9MFOS0b8k|foxr|;1}J{B%E-Y6hI z9p)gPn-{kA$gOnMNyN#{?W8uK>rJ|UhhY(3<~^TUyVYen7YG!H@1F2o_e2T4FyXuX zd{D~L(iI~_9%9%-|F{fY{mpKzWqRBENk_7=9FoKxN5J>MzKC#3ICz<%_43U>Ee-o0 zcLGtok+HG-`ug}lSPcAIf6@HduV4@{Nl7k>IANmsPEJlaWhV@qAnQyPAIeY2FCy|i zFfh=KJ1d?}ngTVis3<7>XV+866s>yAuYqukd~@$amnEyFcv&3%p(wl#5FmrZb&~6n zTT)UI;W)sA8N2l$%`%0>68&_cQfSfHrsG-^8AYzLKK1Gu#5F0x{8rB|Uej04iy9hG z!}s}jtt2F%!_jFu_q+rLh@oc=i-g zLbz6$^?0{~s(aHLu~X3>PLvnfANVkV zAYR8__=jIb#jl4@wfsJ$xTV%;NKswgO}z1@6avE7*tp-Y6F#qwhGdM<@nAf+sRX( zbat0~eY^fRgKqhKt2QiKKbH25^-)3eLdWkwPk`pmQQF`4H-MmfK{Ae?fpZv-*Kf^f z8UlR>%DNCmoZY}2RXg?h?&q38IVSGUF@kFk2jW3} z>ibwf|A$1$p@+bZD<6_YuTKRS*(w4uLL!4)r<+V}2PuZT`I`$A#M{{hMlzqV(F45m zh^}qb7o4&ueOWXdH7i4>ZhHWp0=2y#Hn$Yf=F2i3_sx*rZN3Kn+6e1PbJL#`FhmwH z;;BUjSqY9-6%K5o|u?m zW?_kqiQ$)(os=j>?9@954GsP08zTfGy7!KajgkEPd6_WFwf0v{Z(^y|$o*!7{Pm;B zVP6s(2PYN~y0*5~^+*3`I(N-!P6hzTcskX3+FA0Q1li9D)zdC#v>lM(2w6ZrKzfN; zlAS1czWDjQPdY}LSVdzfnNb%R_>#1}Vl|A93`=0(HkTe>jfo@~qaF`yhM~mAM54>* z_e+z$U0wc^zu6e;czIgy@a}1T-VE**sTy+FN-7mo=kw%Pfc@Yvl@eVfv3hbN3Yv*# zqS$s5Vll?W5_($blVfaMmr{;a?0mq}%`DchPxBNDYPi_p`}9bicHi7?f*!)A^Gdjc z&QGs!B54f!Ui{Y&NW0@VtDLo|DRe%ms`?jj`~G?flvYeY0@K^`)pPqzdWd*f^gEdE zOGe35Xz1DX=8o^DJM?-FdtGkq;-gg&HPbOa%#ftuBGJO13M|VSxfh1b_I>WWO#WtM)6Zb@~D?c|^xI1%$)`@Y?;} zOy8N{*vMvm@6b@QU6JAk_pj$snADZ*(Q;K_uMk>;7$inxpXE_$OrXU4gS(XZ{9g$? z62ESK@HWfw60|YE*j2Ck(2K;RA`a?)W^!w85kP8$yaJg8Mkd%apCzl(v zY0i#ibhR*mf0apAC;Ln^hJ=nea!!otH5 zN7{?bL16+o2%*jR%~Ezv!h$j?(R`%(Wv}7LJ}cJv46hsOkzNe{p&%(2V&ZQ>v`&;r=IkDla?2z(`_M=pLJOpVj4vGriccWWoy^y<^+ z8Ugl%?hru?c_ZqJsvKj}v;(iM?LnNHsD2{5|xn5dvIGsitVN|gYBTg{lljs>`$BZh$|3}w{&(ADs_ zBa4uS1G;avDV)w!)M{12NybIesSXQ6`Mr0=3=c+;E{nLpqB)_3h0IyF^n7$!Hcrl* z=TNpF_=8r4$I*bjj4N`I5@e_t%F-2?pe%3H0D4OLI%>$3c?T@&Tb=Nkx>^*Bko zN#>(9+3}BNEb^h0X;pL75V$-aZ8!h!$yBwqz4PAuGjSzxE~UOR^hPDU)XZW#Q;p<~ zz?~ys(IWMA#z7Drv1ihuiRHlVR*o#z+ov@UtJ6x8IlhuMvZCCY_-dxSLp^z*+wtWdR`{t{LuJdH@e<=C;x3K^4Uqv*6_M4a-PLDucH=b zxBcgj6TXmgQA_UEvBi<@%f~h6-=Ud~dZr5TXvrMH14Wg<4L2?fcWH2~a`k#IXq8MB zD@*I#V}A@cb1?)I(c-$TQob4I)6eVSLJjGz2SruhM{HjPm3ZVT6Q#yPoNhMU`0aVy z-rrS{CLf31EASdE6$)i+mHiAaCZggjk%yYrrtsW6{|37l5;FEWb(+0{gW11-2VU+^6;u*u zXJ?JP-tHvggh63mP-qM!G&i@me9p9i0143fzc>S%t;y@d`Pq7VG9H&pjs31@60Mdf z;g)HC$TkoN^eHp9Cy9k}Je(wDVu}Z``WmNWMNUpm5SjXC&sx@P4kk0Dx_#bx<8!lm zN4Qdvz$aA$KWtk@L>%K+2~O2t2K}k?(O-omM{2%`;z%q9!ePaT z<*m!On7}}&^d@G>jr{s{!>Gh?!Z_JrWp&MCwSiO&REI{;BF?XRfl!m7=&33P_ttR( zBcdrCknY;%6h$jAh#>`9GKvg5v(vJ|OcG38(U3F#n3LX%#2gFB2=IP~b!vOO$mt*r zBQH-dDAZ6##nX~x5DHUd$Va*gt~G`~IH_JAU;0gn`CDI%d@}BqLb~xzmNQV=V*5uO zGVM})J>{g#P)V>^#fpSdbY!oB5#{~x5d`(|vOCZOgWk%F&nX*&k| zG8Z__&ppWg8){F-4o$Dy2l@RBLU};cL%Od%3>(H+?A_4pWA7Il=-e1gf!t zy&J`mo?y_J-}*k`**$VR9%^)JoUJZf8X!Hkq&vPXjmHT*6AqUz$}1Q_6r;8EU0nJu zMn_w+YDmy5<6OPZ9#m6KgwmlH8C69`7z)~x z;4zy4vtQ!$(#mWK^d}ZJtslgU=O(i+h`SwraMEFL6iX-$6toh7cHpKL;#Hq7EN~+( zM)k!p@%zH8trWNnu?+7hA)?IOr1>pwvu>hrIQ+VC=@C96346u6^pco(HgzzN@+pY{ zDVIlU#NYjLNi@ftbc)N%!yh+15woX;rhFdi>(fFrxm=OM2PmkhI7yfYM2V5o($myi z%#c=_tosgcLDcNev_W5s*(_joZcfg0PH8Cjv%oi#Wp3UU_clEd@z zh=bs;1T{5R7}DEZp2k{ihcc~>mw$;g)mi^>s<7<-J+iUBI(dm3d7%@9uLS*lwnj%M z6v#a{hYhjBcu4T(T-FaJ$1@H!Q$`BaE5T`@Pl%gdR#u_a991}$gp7d4P>uZs6#v^z zv#dh$hU+5amC?5&Gv`SZW_`!~>$)dSAhg0hPV(tjkm0oW77zFaCh&t74+#@W&;3=b zx1=m=aW!%oNK8t)PtAL+9MGv{a(k^AT5i)B)j?wNf&|L;aDo~i2E4OCd}QG>%aF3L z+$V^2LirJ9!1lAFZD$zPYC?+`jqY_{J7%efY45BOTcy<0WqEWrdQA zK?8&O3(l=-dbpkRC-e%s^Z)R?;sYhUz`sx)%EkWdSKFN=805R80kwnb<(QI>b2za? z&VU!)RdbhaB?R5|;t-D&zk^jU`gZ}I)t`YSvmXyP-U=3UYe5c0t#NH9shJXMJ|B`hq51Yx40kU`Uf?w-1 zak(=8U>iP486N%#An9?i2tA_W!E;u=JQrpfCQOwWqXzUjHzcC(f_D(X$wHbu!#(;= zt9Z1nT!~r%fi3b*nfh|nnLbR%si8vzLLO#<;H&A!^AiQ6?(|{wa{n@NGNVS(JP+yl zoj)oNuY(yAdk`YkFd&!b%M}0S<+;P5ra7tFz%Uk5$+~N0=*ZZ2gb8NJ>_=C--pUq_ z4~U53h7EGffjOb39NF@Ark7X0fcZS%mNpD2nop?Xd~y zBIwPO>5}5JJZ2c1R=a>F4(i`8;F1-HKsKQCb%6j%B<4^Rue=?;XSEWhkw( z^z;&=E10zcY#*6kRGkY}=%QEr#|KLXV|6-?O*^fx@*#gO1I!t9PcL( z@|z0dw_)qAk2kBUq4X(nrct5c1ig}@HUr^NA_%+QnRa0bR*ac}6% zdA#gHvDChG@;PksJlahmUhH4{ju(B;G3S_?urj(UG^%k*tT)`3^$P+_b{`?r(cIUV zt};@w`i?siG%#4)kVa5V{4w~YJ^n(ez*XnnxomRggDHuoh}!|;VppSu zjZ(s_Pg9${!1mM2XHYu$PmU9Z(s}~Y2@d|rR@KmQ?Frxb^54*3TmM@N0HuSrx}@0{ zcqG++J1qZmflx#!6?fj}99*#cvw_ z`^+vvIX`l~*C2vs{L2sp@&`{MhgODkR*Lk^@xJaqWeVdI)z3i*J0X-hN|PNXwC|zk z`fd`*)jZhZQh?+#R054fQ6tIh+P{PngPBfK{~c|af~jJ7d?k@cwV8h=b-2_j_ih%_ zZL3Rp!`B|^zEZa>sawK&0c?$LT;N;~W%3TGrR;Nn>{VsWeV}mM(;46Mh9=@X+wD$K zlyj-G5LaoYd1g`WFcJ@o+vU=m=K1P<o#H;}`Xd^R@PoH0se2 zO{h&>koJ@MSsgLS^#02%ag&#F+gnvja@RF`uxD9@(gYBm+m(=f^S7gz%xfe{Vk-kC ztjM?LcXY4>kqP{%wl}DaJ);S=rzI+)yEakPV+NH zC=2_fip;YONRrg&y1XEkIH302-%KcUVc#i1VtoG8{w}eYK1WCe` zfyu-t7G5y<%vE4UdANM<&R#CWgsf@WlWhCN4*eVa--Hn|_L@QLmkU0teS#|Jjd9iUX z%xKGb)&cWHfP*5O8z3@FH8BRFPJoP0r^o1*ym)?-(m=Owi(#Fg&SHtx+=ygi?dT8q zk~6cv!@~@5E@^#eM!Dz~>2P<{;=P!sMI9Y@YGtWa2XszYh6iv#2OQ?MOW{*7g5Bf7 zoMX*fj%Z3L+ehcpx#dqQk9EauC=(@w5@d?E;UnVo0`p=zGI%@;cyO$Wv$M5N4~oZu z5#!R*xh|S*{=;Dbl(oNl;Z}=(MpW&bTJ+%5#iu6z$~y)3qIG&uA0Bo=vMw*on+XQi z#AU>al+g-0tKcC4obtncG>*-z6O~=dQ&6F$9MIntb)HVB%&rFi>=Co^!RB{oHMzmK zA0sgPGI3e1gq$LWnsWfj$V0Xx|5<;e{)A!B(U0&BX)5CXJNfR2;ZTJyu`WUlU5+Aqp|g z{La+Maq3}9D{$F;@7Y|( zXXMZ_LPf`{Lj(ihLi&TTcMbv&rfYnzaxnHTa@!qfT6kfHc*FkWi0s;VX3fsILFy3dtD z)Ft3fEPYvzS3jh)4xi)1*EZRj_9&LI<{eBg77X~QUXx#D%wa(0%&q*+=joZ)ev9A# z-mjfz6ck)U70~KM*5zW!zuXr=f)0mF;+vl`P3lla~t8{6^YXN^a-f({i_U-^AEZWpR3iO1PeHM@O6#oO+8)pPoUG&f?}(=LHd^pq6i01=K8HFzJcvB~-kV)8 zMq@5J7jOwHlGsL6>y_u=k#w_(=m$S7fqTt9<6xVeAy-Wk%Fn&z;~^)HdCMpqd0YZ5 zp~m%UM(mel_-`Z8EjBf=@TX0)Xc779N?5n|?aw3ro4LM=R7otD!{YUGnw$LUb4MjB zk-0eus7R>)eLV>dV)__(lR8Mbog~|};U_N~G$}rVi#CtEIMF4wzLV$rlukRa`!0$! z>g?PmQP%V0yv9aoB|(TPefUJ3ub|QzlZ6{bPOjDCD@*dpkdY`{gdaQ=Qok40#bw6( zp5K)iaL)J8_6)CFcO(1h)6QCWTp}Leg6>`Gn(6pGM6r7wINQLi&uF3*w9{OGjUoSO zhM4o6XHkLvEs)7do74Q@(amTAp-s|5z158bT0{slB|(~^4o^oG*e{MaMYrMicP_B~ z6Feh`lO~EL3=+QgI~=wlG3kUyZ^V+~ZEYZ1T{ESy>TLp+tMA_&5>u|K>q{8iMVw|H_&~qb=rcO#<(nXtlH^ zE@<$z$tjqX{@PkVqSs+P7c1tYrrNg-Eyg;5XMuLFAkS1Z<{X7Qp>z* zWBkp531#TOP-22`2-R?#+)^Bu12tKl?>`NaT|sKL!h&sUju>ECMD7uM$f0g^7DS?Z zlg6Iz-4SuDZHbehqv$tcBV2~T;;Rj5D^8ZfcYR`J?$5v5gr=1I`qdoc0%O7aA;^1!q82CwpJ8G7D zcUig5JQkE_3WD=* zq(PPjs)$SsRKM{>$9NBByX?TlkIyC4LY+hkx`r$N+i~E%@YBHC56g$ant3xXZQwQ= z#+{3ul|{tO9;AY19}ME=5wN4v6?SG4s`@gv<--ew(zLdw7vwj`o-tA&$DP;A@nDkH zEr)BTh4+x;H=mZMoV#7>1uhu(T#x-`4@zT5ATz)+C!eqV^ymCReltqfk^M9+gHF?o zy45lp84#s97kXK2DSv8w){X7wn6l5$yO+Nw1o|Yfdj(y&y-1M=65B)ZXL~F!twuH} z%{Gkj8O8@a0F<7b(eX+H-U?PbTVEzQ-O{Vs-Y*)vC@mb{`HLkML)B3)I@e?cQ=>O+ zLKr>-Nxsx(u@k8MQ3v_;rkaY#S>$nFYIIvZqd5t4FRV!wZThd*g@IVgPU6f4uhk0b ztJLQ1br54*@6isi;zwQH{?ZMan9L;jS14C zL$f7DKyeJ-#CT7qSi(NacwnL(0ISAnz+6G5K{@cbMW8R|^z39F3uP`^M}$h^&XKx+ z1IUe!W$SJGUS4&&4a-IRItGIi`SpCK|_}mtPwCRWCMX-6etpA|U}Bj#j4R zmqSBSwOz^;`P1?-ZP<~hY4i4UMPG<0CP9jbn z>-K^!f&De3Z=KlrL91?eg4Da(kYuc#RKT=d=A?URk$;eGJq-{dUrY`rILTAp zbP>!Lf|yJ4w8SE&Q?uCfX$AW>;hIxyCa`{T2^d;x>32qde0KKx_OWx_Drs0IK<)5# zN!e<VO829$L>Z1?Vfy8hv(~#AeCQ9j)quWHhM#cymWPglpEZzLG=?45boFD8wm165X(C!evo}1 z`Qjlgq;~JEVvHOo0U;3_f`I;=8I6aGNUPt82&9|t8Or+di^v8ux}hV7=@KZL_W$7M zDv`8E82uj@TEZ8`XFrq5)xQqxAEqwgEX77Jc5ynJaV$=C*kG8}4#A!%# zi`DA;%OQf<b&li3JLg($dnpb#8R= zY0{wA)z>qmB8;o6D`9N=@+zQ&LdyTO7ckQInE} z20%^@>2I(ZP{XN?9QkG!7TygXpVCBvu+4sH74^dor`0_s^{!>~rqkX}JOMTRd4(QU z%|wcZB6YSJw0c zdikxB&c8U*60(dA#=e>7=L)(@l?*-^{+4l`dd&q|&pI!r&Ab1^YrA~-OAQ~pxVZQq zAR}H0C3^_q94EKN_r$GSkS|`idF)T55S&vmb8lI|41uY){PsYu$xgd697|^=WCa3N zp~65pR*98Lk4FacgY^`}V^w!ewp9YAroIU#r{kgLbBVxi+TO-rw7hd9-8B;XzVBp= zQ!h3sprHe*i@Kor6;Q2MR~0satRujdKj0MTfriNeK-Q~1*vdC=^Izo)r%RclU2Gep zXjteM61TVI<~}#loRp!W;}D@=pH)ShzPmelz$Mcu#W-XzD-*WSjcj%-=@VnQ$@{v&9jJ{el4?$fipCDGsvm>^PH>`qK+|2cd}H zGB&=2aeid6k6Gq1i%cm`1~`UQkvKce-n*e~CwiK-cPBk{CFeQ1%y|ub!?vX+nXkJ% z=MnJ0*O0kQlrsOgVEqQ#3E~!UR3W)yqb<2xC}rkZmZiS6#Kyvd+V}aY!kodDy>Pf9 z-}h?cx9;Qd(GXfhDP{KYfbQpvoP(U%6`z!zG~=}^$@#G?-XX?yVy(95Jda1~v{4`M zA^>}R!R<5C7?mY7id+_%>45FgOz;_RY2M{SIl)#r&`j0v(-zr-Tl7e-+`PqtI(A85 zweq~+RZGg;w+TrFtg$LFDm{7HZ5cW3Vo9=w(dEcqqcQj)d+`wu17reyO-bpenKN0d zM;~4&!prjJgB~k=F#j&C|1dUJNpO~-;(7fRY(_s>Rz@LJo^N$74{iD5p`2zJ^kSS1 zOjJadSDf`HOliv${#GG#;-q49aTaV8a@_Od@|5M>o4tO}*0zGo-tsKxy&(rvYTcp^f+kwYBvK&PN~`u;?T)& z4De$4iAOGF3C{x+$4dzVy`DbSLhnl%3f|}lygj*QR+bdv69Ld1W0ALN{YObV6rhm3s?YEf@4_e`OZpkwNwc&V`7O-`sv&3sEtMD#HX-Ma89&@rlsHf zqTxtcjltr70`@Lx+cS=duJ=QMlLWz@H3XO4ox%9YDPaeELZ_{;es-c6jYR=f_=$g2 z6ih1Nug+}HoHE1GpsKAyYRu#knpGj6OB95Jimjw#Oq;|sI@v@ufxryQqB?(SVC1O`&*9zdHvWV!;%qK5uAQfU^&P7HTw9b zWH%4^9z{(8K`26D+bOWWM?y^^G|&P2n6~UGMFg5jGVA?vF`{1PXdB5|%X%~9q$>;s zLC{^=zkN%?jN?$S@G5iDx2WJ(owK~%|9-`DHUi5{61Gxfe;p;Hgo*18{!{)J++{Qc z;v#*_>C+yR^h?hmTw(qWB80;tNRvN`g|=5<&)~`*9hF3IA;hgpqIX9culjl*RI48t zDj5g=a)^5AqGcQE>sQ4hnZrQC44ac(U_uZ%W>|`?a!k3)7lGh}SDWbG%2@a5q-MER z=2$0aPTlRTSrUw~c8U7fr#~1Omj92ve4|gqQTo2HqoYK}9|sHf5X+-;fjkA+qTevJ z&no@j3R|ieh*yEYX6Qin>jidAX(2I=a}~kF9xU|(RRRjBVY}X}ucLpQtV$2M(i?#E zgza!KKtYS|jZ8u4QOLUU&;t@Fj^FO?x==dvVK=+q)j!LBn9txF@<5VWDaWjn0n5Kl zdY2M-X~W3Y*MJgg3Z}I5HL0X)s?g~o#AUy$j)j?P(*6+so+HkEb~bG5PYI>NFO9Bq zP>V@L6ZPTjk*tjbgJsPnc=|4H1(W=!#-0jEF2Js#C`nu;29Xcpba$>2uv$sc7F9J6 z+NJc{H9oRm&(z2XpB=+l1x)8#Uv2W+LL_6{Tu>=H*6KaJp(aGbu2FWjDti|| zG~TJR%Q*Dcv`w2K=RzUvcE79dE(_nl%r~b#Y?(&@N@q!_%a}&38b(r`vfadBp~&;j zWy7q2J;x9ytIou)9>f|E`eCJK79qRC$`sD`yw<{6ByU!&qda=`Oh;B|{7;f|nw}w6 z54lZ&A=dXut}6;OoV8{6cV-z|VgloA4?;6L!n_p4r|&qF4O zbM>nty>d(p)1LmSk4{MC2)U9x!p)qu5v)eI+kmz?DL1tK<{|m8bMY!n2%%rod9qF( z@(hM9=UPr3bJ3pz9xd#UL*Eg;+-1?%@~ro_8_F+8FwaEQWAUNf( zHYaJ260<+;H@PP?CChfP28Cu!7d4>aDonsIP$gSPWAH?)CK3gbu+}%Fhnnc6##FeM zRWB%5b8?W5qL}gpzWetFAj5utT`@&LhL4z1)KDcLvTC^d4uJ`X!#`=?3km^(D^^6B&Haw5T5x^vO z1g5&}BbQE84Gl=@F31~dVCRmk#^YxdxNxARtOZ9Wd)$g7h3RfIvGo@Sr3sgtdmaxcGpa zrY1LjK)Bs?CzO3xiBQ3I6igEtRgsebFqCa3mdY7YF)Y`FdOQ-REN$sdrg=dD?TE}! z*HQRq@zFu3{tQ6@ao~pW z;2Rw=@;iV4RJU!&0Pqd|Z_u{%Kj^nGBO)mW2bVB+A*vi=X-7_U=9upvlpa6c?M0bL zEJX((1Y0)`XKs&L9WOa8s~g8wEHCT3%qGy&DETFT9Q;wiF^vo`fcfOzb;kSW+q?yL6zCHAdG`p(5ucKtvY^9O#?kq&DBk^`}DflL5Ckr+TT z*n9MYqs%*3I1t9*I3#4N}}OVi4F2t(jB9|f|j&LM4sn%CL4uO2(V!O6%lHZoij&)w(7*)R7wG$ zcPLgJl?p_1py5YFHannvn}m%;3ms02cT5Y0;|IVsEQ~Y-%$X~Arp)m3A3bpB!N|mEtFhr1=tnsfi92+X9D&EoctHX%8?{Z1fNfz;7*kEwu z1z=N^x@SJ3!2uq%sJGWeM73FMloc-kHot8zNw6vUOfC{Jr$v8@Ell*050=1J7ki@~ zHU7PnV}CM09%)0ZS$^$cE5m$iy(aTo?!0eRxqlN$KWjOFSIpT&rA+aC%`w3iXYhT7 zzOMM!y5n1_C_DzGuRTFoJ9NDWxtHNjluyYYDO`=20pZu3&O z(-3;(;pwr*yB+KE31PH3kzQ{jG?n9GH_F>bkD$+%@7H~jY(y+{7{R8{e3l4eQ0mjE zPXt?o!T43QA}$IAt}X6Z=I%T}CjaTAEF@F?Fgr^?%jTNwburSz%h^28M>yK-^-H5C z_xSzsZq_P(esEgFBj;{k{%Lm>c!Hn^{{56q;gdho+bd+LEiAp!^z)8{*Ep z6>4kE_jbpH$!J03_3q?aIf6glzzF&}28`lqnm>=%Hp`P&*%yMI-WV<)fr*3e47a7+ z?0=Rn`DDC3zh7<>8#*(o3T$t7X73~;Zt?I+zGo?aE$U{7Wo{~ zJLq!j20)eg`f&Zd288a1?yl&eSt@^8Lhi33?DBB?5pV+3$mOcu`@2-YNF_g8;2Voj z%I)GFM) zA|lB55Mhw7HGVX@Jmu%jkm#r;y$`^De4eho3_=Ox>cKtr0 z&|=CpdAo}faB7oOsK8&|o;p7BKLs#oQcdjzilazLr!KDDoYWP>1v#v*AB-Vl$=$7* zr;7536aTs|D~7u_?R^w`1zFjhPS096*hl}yMtpjSr+Y+@WR0Sn)HS>2y1jFoUKGN| zldsSP#&Kx~v0h09PJ{PGjlm2R2!8qIt>U*;#o%|(QqVw8OBi-Vfb++@C`ytYP-QiA zF&*O>-Vz-#ggWXR>ORAr(a5?z_|+mhk!X|op1ZO>@T{F!auY8rOBfF2HBPs`M`3Vm zZdVja;;R1Z$yA#@X3AlMVYNiAOj#+!P^k@rcqbbVvif}gKvIMFk>)RuYJ z$A{&`I~}vjJ>sr)eMl!G&l(I|H)?*z&6#PzDPFrP^JVd|rw1mqnYK^TKTVDBosBvs zo%K|H$n}3~0r2lVcPpOvV4+8|ad=J~RjPJ3c;GBGC1|83Ia()q;Hmbu8SimicNb)k zt4{|niK?oQ3oo;mVSVNh{Od{0nblQHszx&(z=L6ECGc`Y4gp7(+MLp6II>*37e3~z8Xlkhba z?TBxU-KawyP$jMOv1iar?U*uj3^jAWYoP^K_vy;w;wZdCK+stpN_ElM2kuXlM=f=O zR(XUV?`m&*`hSS}#xThNCE6X^wr$(CcWi6Nwr$(Cy<^+hnI7Br%$s}PyWjhhPAB>D zr8||XQ&p!lA-T&Nt;Lc34geO2h=E0&wOE&|6XH4Z5`)#*Iy;`IH zHlq|tNpN~BT-)_qptpZs4u|`2OqfpewdPnkqrY2i zE>Hj@A<6t>a>FldZHfI$8$~XNk6+}yh3ITP2M@=1+k!+2oY26CZqBGJY}E!!L~%c? zrGmWWc#BV!6Q6&w_Ri(dOJ-?YJ7(~cD!IWTJ}9h!Pz-q)pr&#dyWvLwdw1iwG2R_3 zFge_FDvf0;LQF~;?f}|xR?+Hf#y0iiTwr|J137yvsZS73LB}U~;^T0K?Ci)|_yM2c z$pQ05cuDN5T8Sqanx)Bvq?@`#*_^opXPoTGlB*Ky@Sz;iw=!V~!JrDT`+sT+i;3ME z^EQ&`r9GB<8zENR=1_nh3E&W6L*wNPo=E32Q81$xG3mIch>XuFg3tne08l1+NH5a1k7O>m%k7t_BFg&C;q+t;&Os zwd`lv#kZevm%}Q{DfzkY@Np%y|3$95I2Tu1(F2-NQ2xnF4V1l8ZL`NtlrW}|B0)*r ztQnr+NS6!leY*<)__@$v!Q8G3ofjDwO|}y4jS2RzeFNteaQpJY1>5TNGbuXVFi7mS z1#PPZ?+QDDlwInhRd;+{IC2ef+4P#p=+^cJ+d)R{q#rghE8C!|bR{s+kGye&5uU?* z+CL3wrHY>5l|K!U$WXsHT9tjpM|CoUX3xV(RuYkR72p*+dm_hh!skYNE(ssEkd1TY z+@JBO1*+tHwTU1iLB0C;Il>qPi<8pv$c4c`2MuUt1eYnO1NHC>KZ@Q9I081+#elWW z8}^@)@AxxI=QlT}I$h4!x;c(yh3Em6(2c*nL$z@c+6|q;k7d}wxYKF^ zmkjd)s;9%`n{IA990U~O+|BAH@je5meXw)u(t8ODqv1P8CezY&lvOs}IP*`03U$qW z%KBNB!Bv-wH*tlB7E&eY=h&`8*CCPPdO>Ehg2Jny4tRiKbD(5UR18q(e+1uyZ* zWt-!@Y< z?mmedFZNcIN&PrPrx%q#$To9;o(?@&wSRH1oTn|^NrSaOmmt^`Ci5nJTo;?=T@XWc zutuo27REiOKn0;#U?N_+&eLbfr%{7dq7#mK7fO$z65LnhrXH&l1A1((#Ndv`jtO36 zMXo0jyyYNV<&-S0LXWCvqWVv%(pQh7Pc~s2n5Bxb42e}C<4jlM&XIPH9Loq;OSO3MBI&|DRlmk|x+P{Wl)L)6YUm$&ZflQ%@8k50mW*q3f{^fWpeBmL% zECr1Q>dtXJJnfd`rG{;STWr}wSG82@AH}$)Z+boCs+EGt&K?c}#GBayp9Ki7f?`9p&t_OhGgq#uG}hTKZd$VYe)tNw1LS-na-RO|9zw;477m-M$#41dDIB zSLM>E&jsV@EiNR*`(V{Iv}-yuujOrpl+r7(L>N%Unq7d-0F?> zTF4x`Mpfj2GrWi2O6ZF7^oH{WQ4>TB-taEVs#*5(X)xXIFZg`~5p^6}QWvY!1WXB} zaA1v?i5L1$Y-FiLH1l?l?tn&u@P3!ZZ%{fh`G zA()ar;j#eNfVY3GFyB2*ybo#e4GIVk>EVz1aw-an#$s#$B^@#$w?yY7#~@_m71EH( zcMA=EKQFI+sD3sO6zT}wreI3b1f5Ner^%XsA1%LRvCv8x!L2FU<`!Z_GMJtcCatTOXK{`6%WdJ?um_BiXQ~WkW>Me=7_&7b(Sr#@SoV$}iU7Gh&vFIG& zXOOy;a8X?!*w&Qju0|=Mh-q0W?yQQ=+#DGnR4eQoI%zE(iK6VX=z%v%3)5os@g@}w ze{gv~+00-{HQ(vl56<|B3=J6H(?yiJgj$ZpwK|eVceKJ%$q2v*yOf0yh>XVM%i~cA zMnW*__x~V$H{-hKLl)8Mq$ZLazRRV9(ICRD+=I{fuxHFOIURcxJb(a~@8wsG<6oKx zWSU&-Iclr zv9X}s4-CfIRh!vPn>7UidvV+#fA1t?mMsIyth=o;h6}j@Eo5_6_2Q3OBwB>)c`4j& zvPNT-`(})IQ4Tg}(f_z~TscH6V<2m=ld{g7F}FL^O}e)mygrKX-mNI-O#l?M+?)BJ7IlWb6H3WQHo`7pPdfu*}w-{k{ReYogUr-t8bp8qo z-yp?5@B}^|VD`%kU3y_9Vz3#q;#h#;=tho+3rLk>G3?g;P(cddh< zA>%qq{`KURgu4DG=OB|iAaP{)Yhw@nA~#2szYWK>PG--|d>sxSEWqP8x|4hU)K*Q8bV;t{l48kE-y3uR)1h3oEFOIKve%=4Q=ZMXumN5 zHY3;n3|M5GVYv36{~ihG*RhyLBGkEOzAmdHbC5f`Pwp&FkrKhm@^Z#(WOtZMvlw0vtZPQVZ7 ziT8X>CapH^eURU~NAPR^zQWg4pe2O8q6I543cOsW3u3SixkQ#>|i*h2c_& zfZnLP+WhKEX)Mt*Me1>53$!!JM&7VhTjRL4^fE@!C%S>-a=`nW_+ormg@1MQWwer2 z-w`>W-^OA*A>Ggawk|f|qqiz{fv(*e<1hgI&Tl&gXsm}s^@=u#D1!Z+R6ke3Nw#_z zeEA(-36Ms(0e+OyQDM`6Z)y>xT@T&$b5%I5FQmS0jE}Nvw0mkzCg^zjrna^mPd#20 z-i8RFdI4bYS}Xl}S%r5^LCNp9!4-zt^Wu)Wz{k&7>Ft&rhc!@RW%l&8;v$3#=tnfi zNwPL2FD?922vdVvDfw@T1SufoyG}o`7B>*`y9*-zn4WB&Yu|Ms);IFo0nxz~un{K33LF z80=K=99#0^X%@{)lrhK&pp(*_<`8xam$S9bkp=l26VT3r`P5}iojIwqz~GvBmAO-C z>(Mv^+L#oufI3iHuAs*ra%(M@Ol54CChSgf#!4gzW^_9}i@D6jQ+eoQM3W?Lm@F49 z6zu7amv1cHxlA^V^i|0W;D0L?vnQm^Li9B(*JFGja`DcrscmOT@2%jzct3x^NFb|t zRm2>q7EwS4WypNOfQ}7Ga%gLJ$kL(QiBy0xw|HI9yj4Mo+`|m1C-#9w_*iNEs_7gI zySO?qT>()dxp-F$BU>{&L=)Xrk5*KW5+dcK;I(vN8yVBF_HAq#O^lBo%L+3@OIh4R z5cui$a)9A1rtu>q!1loAV$w^pRz{uyu{3lgV;~#D9JZcrssvsb>VaiLN;jFSzsdwS z0TEOHPeh;ziv(%{MT5a|^o)IOLnWOHuZAatocJJkh_eZ-YEt;xaqge2=rBp7&4p7Y zYngmgXV%dH-m;XTGg$Gah?SfHor8Q$ZqKeDF1rN=ESR2Y@g~-0SBkHzYG&u) z@bYbM#Ls0JhgAG)HIabSmVF)!ED$=={1);#9$8ETq!84nOsr25W1}eptSgzQ z?$9+Pa(fHx7hvoI4UAqW;gHR*V9Irt{q{%PXH1OpG9*?=TGp9ElmF^HZCP!Vp$ZBf zi<#0mPg21p1H0ZK(OnWePNA4>gb5qj&Fr9yJW6w19f=01bEe2BETW8!>75Xzi5e}D>ug7@+L(^Y7#p>`%}Mk6bh5=2&QGG8(k;B&2HF}J&WSpC!mtP|x3Ab0&kTK;4$m=) zg)Qcc7^HJ}AT`VV7Y*}W%D3l9tsyR!91$rIFD=W7VXEv;8DP<^pd$kZcI;h++Ho&W zAZWgvh2hRYZM_4#jj7^jC*Zy<1y=Y|G zlW74&PkQO=UZ@NExeKWx%sx9$K8zSW4siJFxDaod!sg_M!J)a13TRRIKAm`iUI_x@ zyjC%*ZHebib6(DSMJWXcu~SbZ0<-c+e2YMWz_Bgz1Hk3MBQ5HqpEX`jIG~uNE?PRq z+c>dbY=uY||FieMhm_8ZRdLJ-g21uWi_0;~ ztIO)Q$!*obOep>$=V^2RBCy>J0bd9U{n(Bz5e*i8g5Kp}4d8mOe;+A)r zBvaM>FJwGwlx6+$9hAxVcZmwy^1^V)w%Gm4S|?{4A81ceq}?Z_%Iyt>#|(_>2P&c1 z)N-F|!sWbZyzCCYp0AQ`#&jt$^esp9 z?sL!0-J%5HbDXkQqwj>{fknhyO;|ZVKwQ;lp6{BnJo6_f6iCTJQ1ohyHJ!t<&5P5m6pJBv>bSZqN#^Olx?di2csnSA|^NM)Ri*yR!erC@uMUs1& zk<<8p|3bb#(p`Gjlg;CajUF5Au@rc;#Yfx|;1u)`c`XM!S$a^U6d>;QBPj8rVURrL zA|qe}H~%0?6zv+V0IWzbzI8X$2oLmJJp?;V>}wza-25jN0ZhFrE_wB{ehyK=k&qm4 zD(~}{3j)NaugF3BZ^Jzft4xo#ah6$oU@wQH+NG$K_n^#?)Z}fliN3x84LHQ@Jn+7C{doz=AoB@hkMvg1Q`0Y zj$IQWS^VFF+a4g#tnoMU&yW;Po1ImR&QN>SIWS@@FMZfprOsW%lsY_7KJr_=1^K5l z`Dol1w~Nw`Plw`+K96VSg|gH3HUd&fbbIZ06M6E|%%`SPV2 ze?@+N5?R8hFA67ABfQ6eX&|?hR~sMv#~ILCjqy|Ay~50Q?2@>{yPwa^tVVvVol^2e z%BeBg?sDH?;J^(oL%n*n{pk{jZncHn@(iln$-E2!S#>oQZ)eA40GZE|e2YiD#duZl z?UQuk4Y~V2W|9@_=Mddi;t#yL;)VUPp4bPCdr<1I^tT6oXzCpQu;eIZIsF$1&c;X| z?lXBpIQ&c?Ovk9C26C)BX^)gnl!_xK5l#;Dg2 z{6TOOZnkJ_6TJ5rR%-jU0N-e5HCiuXrN1tFNEC3tdRnn?ch^VxV+MU&c=>hbGBy1+gD^ZNMm1+_Y1GZ3~`#^A&6smVHNPC<6jLyH+*N?T#{=5>9aso07o0rl)faj zz|;#zRC!?-`j}0? zCeN{<%dE0n@zoxms<1#=*i?$g<}822yFtjo-9UAhV~24%w@n~le(FP0Sz#g6Y-{>e#Seq<=3NfPM^vFa$rFLcitAI$37X=kvcEG zw?fXNIvHjTBv!NBS1*jME3e9KXPNWYEpU>XPIh3zuj>!k>nmWdM$?5Po3+!Ril$m5 z%#Wvniim+Q==>m`8Iz2!C*TZg=6WC4*C!Vfg;m59lxx`*8kJkBP?*jcb$()#UYR2dY}=WBz#`yx{Q zTncVQ@(EU@mr417Ykry6b1dlV6)5)T{;*k!-g4R7PN7XPs%*9<0Y&W%*{2*J00CZZ zgEn-<_aw^_kNW&W0IF)CJJ7QE{C?g)$!=e$3p$lkP4PvXMW#4V1D($BYILPeTkaZM z+v_4{Yssg@^ZBdofs-hH<=YfSLhnlff`7Z`T!p{<25O|0yP7~AKB zTrw%VVNvKsS}dbwq9G29u?Y`X%i!VeR$8&V1yz_wB> zr*39S358#eHL6!rNq)wX^@gyw6)@v$ampWB7ux?SP+$e$g31h^uZ<2=eAe>x{n;hJ zcf$221Ttn0#&($x86FG1`>7j`GsmE?7zCS6Z{Nt7ucz^iRf0qADP$nupNe8lV7s|n zaNZ%acq}~4bKlB1l>f5H?NUp<3}No6Fc8&&XSBPd?=-`{A)}ymF8MJAIJipSX5(-_ zy;@p*yCSxb3~Xf-+?YY&S0a@Ihp5M@_)GaT6%grzSdwzMfQI^j%~vDqhK^cvgT3*9mYf&)XF^`*E_OkIRZv^1$SsEEfA> zAG%meC~60;KJxG|H@DYWg5N!Q*>KPuy@5K}f|KVePmBzgxtrC&!LuofQTL?uD-9F- z?hv@y%S>(&>29TVeVr<56~CO=Cf z3i-qXq-IzYeQ-QV8wr5-X}?QdeI%tB8{_jkcSCNLXuBQ0Yf*Fu?-0Z1Zw$vE1Exc& zmKEaV{$_-!5z1tt|y6bk8fYx+aR43j70FXEyiH}W~h{A1YQ z@&fNz77-fNVsaW3Xi-dLUVg#L0OpCg@K!GinNQAH+fvEuhB=41L&=MO$)SMMfoyXF z6Q^)Kl3;(nQM?AK-l>XXJ(&JmOJv$mG<{R*2?w5#HfNfPBoyjZK`G zoN0+$wt0nAi#{S&;$UJw7s8_FCo1#3f|VGQ%a)rrq-9`wLKkuH>oLvbNVGDN@Z~i# zEdmoD(s)|<_K3JYJH5PZQoOundK5Ek$y|2&oN$5g39$SKX9WP?Lk^lDALGe{kB~!h zqma(zOf<-?lXTGYSt6jEmuzXMBDRvc46{tkS#81gnv_=ZvUW&S%e6}Gn|NTLxhu}7loCJ3InZbeEq22z&T}f$iU+&) zJC)(AP!*(CigUoFAl8Vdm?Wg5I%8_Prtqd=ajd5d2P6bLyKjrc9!#2T{W^Au7tahJOaMGycCPfAa2cBx>gVmx9~4p%>9HV zx#Z#7OO{Ny+H|W<1*0JQwY6Pbo?jK^x|D&SY9;Z0iY2i)ToE&>ja(s?-}crX5a_ zGefA?5nB%hPV}`Xb}}}N=>+Xz5&g!Wv~&*h;s%S{v6u5C?(eH z1pB3vY#(*wZpb*)@LwsxQ1JoE9azsb~W$urT=%{bimB;7Pc2WIBz?L z!JuzmnKX7c{}9XI7ABZQKOi=TA@z=Ex=NkS_bG`2;;hXTDBHP`DVrY^zu2fxOhf%5<*S znhWzCCPs#dm5oH|PudrSf_P^QJ6Q+vUXOM%Gy2W9#^f)7Kj?zA1+^3k)lB1AkBbNu z@jm^z#Gahb7PgF3r`+$xt^!CN=-|aztP2JDQUJfrr9hlD1 zKprKcb`}-9jZ*ntB0jVlFf<}@m;XfuC`jDq<@Rl>iO^b7cyKTEvWIi14)yqevN1f> z+(fDN@=DsgQ6UJjpbRQB9%aDA6f(-4eF&gx%N1Yc|G9IOI8E!L zJ%*_JmH1QAA#W=5E1AHZzssI-2GiAP`*I25xYR0?-ba86V}G)ob7B5Y1UuFMOZ9RD zGAY;h7a#IYM6t&SV_nSvnz@v-AOZX3 zGN2M-%n`ITAT?JuW);{(tq?W5I3g9j+zK)@K+;0-IUxc6el*J1R8-;0Xs?U?)h{#5 zQ1((?X&JG^GKm>DnR!lm#SVoX7FdL2GMVWXsNTWBJ%|jJQ`L!=;Oh7~7 z=)pZKpE!aVoRUnC5|LYrztHuP-n&Zh%`J0I7LU#@5Yzl35l>^arhoio2h*ZL3S6Kh ze)*SL(vHRnRX}Cfm{u^fV7h~qMzQk{(v~n-YHTW#V7c)lrK~(aD4bT@ftuH}P?MS; z{)S9?GkQKFB8o_~w|(FyhPuHtp@8xq|A!xzus@;b zZ&a;*|BVLb(hueP1T?No3=Y8vlvgoA=A$K~L}-$D;OcRb-1UdCv!9}8I(B2}9{(}5 z=tlT^Isq|-Fe6-Zb?h9`CZph?xmuz+!-&-);?O#VW|TiC9Ro5rv8Kt-?^@&d5zsWA zXqyLo%6iuezp+Fyg$SZnTRu%6x0%xSV)_#h$rxrAxyd$1gEyV-%C>&Lva9`v{VbNG zNjfPwiGwIwE{%D;LkB`?)%8gdy`@P0 zSvyRcs?k)-@Wa zJ7jV$QiCQRyra z-c!p-*QEgDe0T1w(*FNCuy2AzJSE%z%DyTVpy2&elP_YAq{%?I4j+HS)+~DUR z2GE!)uK(<_qx3D(I~U+QK{=#D$E|a=AzgRuJC@)9J_sbe*8ajV4Fu1PbIdr4t4y~B zy&B}MXlt2L(tAK90+mgs+P3#M5G>4Dk$!8bu_!@`%)5{>> z)G6`RCb(ip_>9J1=+!nzRVMv4Ht#_F-5E!?^egFrCvBIOxzx7v_YVJqQ?upIW!}&P z=to5NM|m>sLEfh+^WKQY28KaiGGTmJ*Vig*3cmGa8;{(jiKwz2j4^Jrt5-(LbGWN{DY6+n5E$A6~7gDkJEOz zKi=I>N<-S)UX-wfAk|+E?Y`%tj&pbN)lNBo(FU&Ocu4e>LHPaez}aD_6huHG>%Vn$ z=9dtgH0u_BJAlgJ6_Z%GrH+GA=68?aU{&bmlSPg;yx0jxPhr^XiHGOR-p)09Mf$Z40Bt9o-%qb|q5kT1PMj<_ zx7z}>j@vJ=UJo-w#xXN9moEHI?Gji*c6HNi$D|qukcC!bZh2307;7K$aY8{rd!z>1 z>63{TTmc=-^n!&Zk~jOGvN{~$us_g#>)@;TXDZp`K#d0x!!)5w=fbU~$X@JCBSSd9 z6+sb@Q2d(ruO8PnQjnHgR44Seiek+9)$HS+rbMFt9IuS_uN#L)$!h;muS-(3pw}*7`lmP zIYiwx{?Sh2o6MZn|JqenkiMjWK_>TcwfusfdNhIa>*k1m8(sbS-_c{= z?Hv@qc*DP7dgXJ9n~#g!SDCaNHOr7bAtf;2&&w|huEQzE)qJ>$pSGPGY`&`CO6171?Gy}YS^cS#A;+xm_an8^<#;?SHUId75n$4W{dgFCXU-JZN~h zCZ!qL0(}A zH|7Qg3Rc>fpTiFNGKqyW6msUs0J?*XL4LZ?1@#ZD*GopwYqXiK zu){=^jzx5>V4S?ZFS57bpVM1+W1|G#DBpc2-sOK1#s7N7~+#NGpj|@YnO0V!yng8_X+*DdhD=aN}|93VG(ei9iGXbo>hk@8C_%z6rh5r&YGVe_a*hhw#rU z8brtBP3@;Mpx_0LNFsj)UNsvS*o}qTB?u`Y5T-40_WT$y&p~CAi?_NF4sh4FNdc8+ z3vGXgEbufZ*&QID63=0vFQyy?`VX88)yT1;x&pI?N?L7PR7`Gt zKmX4ihWWQG(ah|HE zDXk#;F^OWAa;D4uj1HHrJ{>hdXA?xc+kq;&KO^W_75t|voMm8MVjh{FmyiRHYI*Z< zuFouQ^Gpl+8ZrwJkBlt^Nvp=}SaMR%ZFvTQhNygnB215&f2+YL(B%2FHOR&LiLF-4 zFP(N5Q2UM59-Pdemw?&&ZLCAG%Wv$h%lozArr;)++X{TIm6t*XliG6+0t+R z-VbU6e>j;-iNt6R?p5kP(VM^@wLo6zN)@ClG}0C=>8r6rQu2H zHaCs=ewhJ9NiZ0u4)e2I5rPafOzZ6&9v;{3K1NO=@j78i%ktjqC$`(RzIXd^$(iT} z%;4uNqi1V9oc$gDs=9Ym{W)^8_Rc)eS81VNZro^SnaP9}2u&fK<%+m!>VFwpJQRa! zaMy89?+Fl8-nP=kudt?C-+VW@9q+oTJ??&QTVLKryWz6{rhpQE0fCHJh*g6`8sSy7 z_O7gG*`7aF+1jdY2%opLwpz9Pt||O2R?#%YEDebW2^BAxn6F`G! z8B{jD&zDaDAAg3=Jf~#^V17NT=XLoA6x5b$cZVTB^`oa@MvJmq{ydsVQTcHh7ZmjA zP|du6p6A&zDPc!>Gp#YV_UFCwzCj11Xt0*T$-#E2bse8wcFHs+?Afh0VPuxU_~@FQ<-;;W2Ou;EjG@G;sPM#e zJHZrux%07o*iQ9JuGu(~(Xn0`;(Xpa=6UMep_v(5%kpE=vh-{AQ*|+rv3C0{J}T25 z18?0v#%q{&VD_gehUbHM%usN9Hx-c7NR^HK^Z@N23zbx8kU-t7D^Xgw}yw)Kp#jPmuZFaT^MowVKy$!Zp(Dp;pu3<4I z^-wfey@^MpdNcn!%G)g^i9=)jTHPfVr{#@ka)LsVrx=czS7W6haf17md?QkjC~<-$ zDKdq!V?^f9XN2gUKPlsXSBM=1kum?Xg*bte5DNCcE0VZ3#89wjldylb4jW4DvT9{? z8PRS!9@X$ObVa2km;`!yC*s~o2Da_D^q8AN$EnQtm&2a>@X7f*(@r{4)iO=qJ{6F0 zXW#IIud_^!1YCEY`91*!G+<`@55Guy+amVp$ecR_cPk|@eFpiass&tyi`NxEGA$-C zTXaX;$h6YZU$^L%a-|x={-i-XGro@ZAOF=wju>)q6UJAMHXfc6{bb^W?GOAN^jq71 zMHa*8Z4%oQaswOos1!_?>TT3$M1&D{e2-je#$TArOhE|+I{ly3!eO5(ky&{m5^^w6 z#;Q%cN+#em{ramh(62Kfn?`eqay(taFHu`8vi~%l34vCkF<*1R!0Igw%@n0jF==Ls zTnjl37iIpj9c|0Co%)F&xI^X3wA+yU(Kjh-pZNF=s0?>8dJ3zD@Um~ z3-*Y0Y<>8GRYh!AQmr6BL)udd)^VhtSr#Q((@rLcZmz+svJx@2c%0wWF?WcTNRVnt z)xTD1@Aea6$6`q}#l8)p6m)eUGf#Le(%n2`Z4q(gB$W2b5kvPb;)%L?+lt?WXdv8P z2Fn(z8F)Q=;G!96mU?NWd>qUswXKgX@D3SIqC*sQ)5|a3dU#2-!PHSh;=7`@EVO3sH5dL0UX94J|JNTbR7_hukxT15*~r|lFV2(12<1bu$=xBcjbYjQvyAL1XU|cZu5_F6rLPl} zFLke0qH>do%wk-qa@x=X-}UL$`+OXdf{Zem?YM68X2f+`VO71Ig!v@WD3@~lO-f+p z;qv}<}8QrwQ36Y6(l+jI(8)(6lzFJ*%NO zcK0z;DnQHJ2U}i*U&L6kz5aY47Xot~OM;e&V$s_n-cqTp?4=S8tL4{_bT(MzO@YG) z5yJH`iTx`!x4>RunKfwdrp&Gk(n`uDrbWK!tpWkjTa8CMS01HwlFzgEMXm8MK4G4hKd^0({fvRE|ub!vOt3^NjJ9V6)*O8I~JSj$hMAfjMmG!?$RWla?O#_ zBE2<3-}fQpE^2uLv`%~W(Y9;2XBm|1YB)vN4K_)(dNCslQH$MGAv;yPC?$!C-6Zch z7I@x!?{?ACK9bQkg{$Mimpzbc7IL^lI zZ44d~gTU~JQs#RuBqlcp7-TAKy~nC1I}ZWP{T3j8mDbr~Q7foHm;Vb33(zLeRk&io z8IO$dOW)yJKJJ}@%$f%ddN>^7jYO|$=@%$Qwe&5IP~WxyF0aQp~;X*8yu198Tos3Wh@k&V7#1`11AC9Qy@Ra|OSk)q0|ng3CJBE)v1K zI-e6Bz$JBh1Wt@Sn!47x2*lJm8kZJCa4nIIkG)ff9Ad$oI)~`bx#&dY^o z-5^t$OKkA{m_TnOVK@uCaXIi55n8O0V|LDYm^WMIsDJ=VV*0#bm#!&;1VWt3#}3v* z2x8%PFoHai&Po8^bq4tp;QJH#8Ei5n^y8efHo_ZGJuDH|pj# zIy(_3yvT7A1@s@3&$hWz0~~8*Bt)j=bB`6lj@l$?`!Z{k z4ycrM;q7!ylSX!-snS6%1m|{Ef*?lGDfRbNdVhIA!^K^e->$#=lxE`neW*mmYbcH0 zsV;%H(=i})kSrsG8zLmb!wM+*1tl$1j;cmyF}b8Lf~75}rW8eV4oM3YqbbE&a|1FR zO_pH}L#sX)&+XpFf0mMl*xYV_wX+e(2o5|PO?KK0W+@Txgy6ei4?ClmS#9-fJ&#RI zw9&xS2%Nx_@cQXf8R11iwXHeev53402H}SvX4ku(GhNS=Ic(D^8Uw!%;-~JbGiz@# zQDpbN?pdC!T_>?3%s#VXJR(t@D{?e#E7>_Nd2Z=fE`h@o-UhGymyYoMs{_-C&+2)} zPLr>MUQ2|E@XsG|H&c#Mn(=NiBigmzgF6|%q* zNY?L90J*QTM<%?w;KWWcdeE(~EYX50$*`y#K@*8%?091J-VB8|J|3Kh0jDrmqL_!! zwtZh|K|CBtdSdK2L7FAi7<+XzHMnrs)ClrDPeN?;3IJnBuWzDamImEpNay1TYsj-e-;{#+ z+}Y{be7JS$4Lb%DJ{{uYDg{F1Vpsj-VsH^tdAP;LDFrDs5#v#DIEMntgIBo$`%43E zG^}V(%bRtRNmIZT9pXhLVj3ImAEKP9y~oge<2~UY3K5IlWI#@v@MBrh<5wT|903F% zQ4}m8xXQ#DOHKv;Gk+)Oo~@Sjxoz*IfgZr7U|_F(kgGw977)Elvpbd z<3zg?%g6LdL~F}-I+H~^V}ZYhR_`ELa8GXD0_}PkgIQ@cBF)skJ*G8ot0fXd(n1ph)KYU)j(9} z#9ExMzhVoV+uwO4zf7o5I3|TjbKa=F6YOdYn^93!78@MnL1Rh^Mz#1PE4m?*F7@z0 zh53#=7t5AwEeaG6V;ua6-*C8>yB(PD1a-wAgo$iRgA{>!g&cL$0AlMA9Xs7GV}(gGrR*@M$OgOo5glUP{iEZ8KmbyPQmB=|EQJwH}%iw15Gm4SIVLXI_#g#t$c`zvin}YE ziA@#wSQHFa@AL@Vf`Mp5PuzK@aZk6@huZHS;UokSjb6UR9}`J>R3XP%)g&pXfoupF zY>La4C;Ve2xYJNrOgDVPwg_sP0w6J#0kLNyomsB#n~aG2oPjmk*4}Py#N6CP?stsXBEctG6tux4`f3h_%2t`TC1ff{Y@Bzd5C-`aGKz_}m|t-$V!;e` z4G=rzN8lvxU-cCx)Ddbn%`~|FiYFrP_Denk5pynw{IezZcnkT#eE5I(ddDEix~OZg zi(Txp?JnE4ZQHhOTUpg*+eVjN)n(hZHTk^X%zQBu6Z0!G?v2Pe_uP|PYpuO!u8CC0 z=b+0!eK7sy16pLNoR1UyTz|GdyBQwpJ-EZ80JBvmAu%{9y+N>nAZh*MyK%7y2vG>4_eq@}L9B+eWg2ydK;>JzUWv?fmU;bVJg0sAz?x3CUwKU5+AI2> z>Ao1S4phg1q8$Rg5Rp0cPxTFGRuuFLHg8gsbH76vp83XEfaJ@(DQ2&nshbcRDilI-;%A7xX$AwQQ%gTpEt z{n-lIR2G@(5#;za4fE4pI?`jjzn9|gmk3IMf515XFe0}#xS0%#oncQ6jyf0S{oPo@ zDlq!dW=i;1 zBCG551NEAJXb`*~QzyR;zDxu=R>1P?rwAiAX@THr;ZYiQ)ifkxnU~rSWS@;}li>c1O^{0^y=|DdYAATwLhmI9b!j1gMO7Ar%bL;!W1Q313^l$6+iK zD%TI9r~sk&iXP_5x69v6#6TQ$H+rD#b(6*4g)Z$}`TZ2C%Lb{sc4FW6NRTRA1`@R- zU`Kt@9ufKcg8Tqp*n=J8hRNAdn+mBD+(?chHdjA#-7b$Olp%RG5Lo}&_>=IL@EDNI zF7NO>pehC+RSO>DPRFdeVrZ+`K3viuE;>J zbc*^|QqMVTXxqNxc6$K%REkd9h>@Lkv;-oPVGoG6lY80tbxJq5^BnAc1@tHlPHFSN zT%wydYj?F%?_@nMYTypZv_n$gA-}RXw**1w#&6@_@4B0EelB0P4Bkr_)mV{lqAP#o z3U;AcDwVqJf7HeA`444a{ezD^s2Sa_8dLl_ZrIU7Np6D7UHCR{iX~UmL9f6nrdhg8w03bCc|@fUn&2%6Vr_l<3mP zPPm8)BRa8Slca<~Vqwpuv1729kOsg(H5uIcq)Q)X6%`X^r9Cud9*`Z(L-NW(dTRg6 zX4YJ>NnnGp^-M;Sg|zhyX2Y>!EW(wPuM{+wnp?1$BV$n|8#OsIHIWItlmI9rR}&?( zYNVj4@JxjuNO#Jv;Ym7+&1EucY|%kmV{=LgaXOXs`vY5l8v*0Pk55J*hLe`N| zbIUr7bfTb8q>Qd+NZ+l%Dr3fyH?W4TX7-(BZnnb#)x+VuGeakG#zp7JaH8XVT4@6o zP-VW20k3anlQGfGia(!-F+7{1U6qN~v)`aHZ4LiyMmcNYH+JV#E4Y;)QH6CyvyKRk zMtJB)%q9<=IVHl=9SQvm44gG2;>MBGUyCsW3k!9%f>ezCCq&FWrvW=JAx=u73H-lt zN;;8|BF~J~H&BxUef${h|6LzUm{j^N+z|Qyt{(pHaKmF30umT5upu+<^0soO7CQ|d zQWk5471lZ0%1lDqm-~ zf!EWNqm08f9~FC?!p9onu1HcM1MmbrWGDQrGnWG4_u@E8f>oaUbMv~+H&(io$@360 zBJ0b@VbB3oR-V@_1lD)6)_5`u0ucrv;J3_CH3{nm_p;H(TVQ1|9(ZsEJ5Tc)+{e99 zzW3+l=C5n6d9xnZI=GR5%kdp10nw5yfU%C$H=*vnPT!$xgkz?u#n zXA!M__x#8VEcwLEne%*Ch3H4Y4LR7?b~j%klp4LO$GTHA zIapY@Pfssd9(zEXDCL(`b6?>)7$i-wIxWj;bK@{c*gz+SbOiC&?J-}b8YW;iyMtt5{T&Sma%vc#|%_*q;UT3RQ<>qspC+%A;jCC>Ldkg9Q zPLz$>xz6)ld7=zW`0F`Q_?={EoMEpQ|MqoPEZzeO|E&JCd*0@V1MstT>80-~1CY}7 z)WuSpX)CQ0^>S-B6k5tXLh&<{2+2}&MmvG4tuxDfnrPcjxy|fg$2(M@O^la1-+F2J z1~_;jGCczY8S}+(vZXJgk)=#)u$zQjYv9C0q_*YdoY~fkpw{6MJy^bK>0|$r==j?$ z&2%1r*(NSS>l9cjMiaWi3`fuh95umlP%32T^r#_Qz8oG=>3jF@RG6L#U`dzo)c6(k zOx~@u%{0sZ*7KDEc%tQ6U)^ZjFR|c_ls#ud(AguPE?+ACoZER5oLq7oGNqrm3-d+e zYv(*r?KPe6q%e@SxS77k?XWq^#0gHQw7=DG^9yS|iMZy+ugf3X>F+w~h~@K=1oZ0t zrhGNX!^(|Yxr8BxPo77T2e^Go?`L$ng>~&d;1X~O6XK2?ggjTR-MN@{J#DaT92F0Vo$BEYD{5j0?U2fXNI;2qRFXI2BWo&&q zEd>&6aDu6;RXd?IUn#D=lHF)(4G!aoD3#L#^cM`sG9PB+jt2y!tSrlyDOf+GcPs~k z2ssn_9Pi$sJtjx3W>9qirU<#DV2T8(o|oK5lI`Q{!K#U5lJYv)rl(}Jq|#Y@29-sN z206hs%V-8Uuk3E$49u7%9wfCkycSs=>UtPhPa|znm7xby31ev_ERr@&vb-C1kxVif z?ITmg0H1rj#Yz$5tji&7#lplYGy1&#(gBX_Qj-*^!DbO|n7w*IZ2B7v&JFf`C|Nv}df!;wBFS7KO}M8mie$|o7+72O(Tl>c_1 zRf;PigIdM0IC=wQuJw6ODhZ5(8-JVX<#{*|7T79A#aA=D?8=H>K{$}oDvqiYS^i=< zT#XDjn?7i=8++GJH3}`nq87I9#*UE_<>4wnNlIF*?lr0y`a+FL0;8A=W6R?29W}W& z8C1V2SDMi7>Q$UeW%9fy)1({glaV#n4$32zgdOTBAfAS*=pjFbp#c#Dub-1aTd+Ai zvq8xgCQdPK5hduP1=>(~dg=PX9NGaD6SA0PR6m+k_G$&ZN3l{kS;~J4U2na{X&{4m zzx@3YT|NA1%G}e)SoB;NI*U!E^}OZM?x~U3x3qVe=ML7-&Fslkh_CRLs*x)je`-7a8d=_we#C@ZP1GRouqWlgL}ZXKI%@n6z zj}bFjbQUT9#^r79e$W`=ZnTe6m__|Y$ zq~G2=8c!RT*!&XQh?`a{L#Oxq_14#vjVq|c^OwJG$IzZza2DIUPYWUwbFpMA{{BRc zt+t;i*0+-~wEARP{nFkB1f;%i*YHRtgm&bwqM6<;tovIOTuhPYN5;=o zUk@BA5%p^U9}^I}_~aP$|BPf8N)ojowQPGy#;?C=JCc1tG#eiJsj~eCveYt8B}KH< zj-ljbzu%|;nYRJg@K#$uL&tol0L!w7i9PS+=An-Q4u}MpeLt2OO0Ov+z5;eD#9$&q z^LR-d;LDa!QF6$aKq<&hHLhElMgAW~448>X*Y`H3fI9 z$t$q+t!cF9auQcSRmw1FD1jn98bNWf9SJDmDHG9s$~vVWPRqzBR1`GXyz@fhG+Ik% zh~GmFNLturPl0Er=3D38m+Ed|fYe6_CQ z#|j^Q1{@E?s0pqGJ*oH>nKYFBu6*MyY3U-hUf8Yz9TL!--?B;I!{^>-JSh-o!7ngI zEQy@GB-|)HodK3dJR&{tlYdjP@f^phJk0svs zBhP>pdwxVx^``u~*0xNN>6ZR)zjH`Cjs6E@jRezkp(X$ZO#l7l)qjxie?aRXh@?Tn z|At<>4sg>oS?LSPIq6F*#pqLXNa=A$@@eTSz9e{1hE>&dT^FG#In{WYs0|dLxtQ(@ zz>$YGTE_Opy@@N78W{ZV_=wdqB2VJMtDoju^Hkv5eYHheHc8zZ*q%&O>6E)oA!Dc( zwRx&k(RblVLV6-s?Le@*t%L4-`IdZs8cy@EwYx^l4Paa2zqrSuyrPS(BUKX1$tb;9 zq7^Xh0<|Y>lc?o>-SOkG#xLDO4HU77$YqJhiv$nK-L7!{?jgWH(jjMPTH*fY3YQGd zW)fZUVTaEOK^zlyepKI`H7OEHN`FOoWhEjN;l>V&!p$}Y5+#s)i%;;>dZ3OeK9dW7 z8Tqa53+jpL;A67!9D%q$T%7V7*yW5pX3w5h*!Wi?XaD;bKCnCJuyxXo@k&)p|ELIjE(7%d3t7Vh_=f|QV);ja7==!6T>E{vN$Y+qpAy?z#n%}kjnxRo zcU&irYkVtVx~Gl8ODNDXg$^@{RBeig3do~=)B>G>PD9kq%n^yj?Q(1Ut;_wvUB;)! zT-Dh{rrDIgCv}L5A~*jq1$)Ko>SHpFjaJ5*kD~h`*P}q4C?$i*ey#Tvj0MbGD`j{7 zHIdZIZW08saJw$Mz3e_y?`b>}-Do5+A%^bC^_DRy-Hoz|TEgl+aQc{3D#J^`8j1i{lRdmJ>1 zw8qk}_+_EW;%BEA%Ga)tc~6P=yfs9Cl) zS*z}~8P-XKpbq-Qlxl58?0%K$u}iQx#dy8*?S2}+bn-MUiNwb$b=C&uP${&xN4YA( zHZaJZ`adDbQmNF(JPV-hU$|w*Q4LkTL-l9eqz9+iQyOM3Mmc-II8Gk>kR7eDDbY(8 zKBdjta&AOxG3Gid{K$i{!}?3W|03lf&Hwc>pK7?PGZ#cu`GSC|NOaN={~V3f-%n)E zOx9r^b*8Iawl@3xxKmI0q1W3}y_a!vD;Y#Puj0=rsq?-#(my!1J4mW{huUiM`)-wj z#lDASqF*dB@F-F*zII#tum`Cxopx%da;}SeL@_s=AnWO6#ocQ36*81^NEGAvCHXZe zGBJRDL*3X}a{iym{Rl>><}%{F{Bqjr7F~T5AgukDzhjGVr`pDcLF)CRs7lCAgLC7@ zuF`#3EZvi;#|XVJQ(}Rcw2|ozMS4klnc(f^I@Jbab);-CHQn^xwA$2V{PN2NWUj5+ z^XmqTsMJ*$G@faHT9eUE?HCJGtQ?!#KeTZ4#k;cWUTc3HFNlNHSAp(faKCx z#%nKEfGCBLao55s`VlBbB3cG7Iw-7jPb47frl&5jzlEHslyZ`D`l414g`Y=Cm3{7} zfu*0tfzGbvEfczHQ`SVi_*dE=$9i;2ljP7qhyV*~a%VC^R;P14s!#kAnzd*_sTlMu z;N%5Kfx;&_g{}?^dm$n z3f`>K-s%Yz@Ct3Ukw=xC3Bm7}-x8U_-+=JvR1gj3_zh~NkXAlPOXZwlYQf3NLBN)@ z>vBWzHijtpb3BSD-BZJAa;2I`79^!lPi~zJ$>xuHS8IzeJdAH|d4|U+VkUaUc1XaN z6J-hKI zD9$~xEb?0uU4y$o7ROFo(!|URBi?cZ0(edkTC{GB8|t%diqF36`$+9W;GkgmoRl#~ z5;gs}<695Y^&0jq#U{DC4MM{GypDIrn65j<>yt5&wH_T5&(K;U_6r!&%`-yi1?`GL zjpHTV)cI2JX$7Q@U-yi48eno6+i}p{3cji1Ddeu}y&F`MYjH7648G*v)qqNRS8Jd~fO=dVDedDa4Q!EB1NcAq_3C;KM zE^})SLWX}*%J8gxkt>MM7B)q@GuR*wGdaGtJ;5EFVr>)xP3ku-+$-uCP||tbRL$NK z9OoVNTIc)-?RlA#lmn>OGzpriTpn{d-0^9>+ zM0S}APdKFQLLs<{o=z#CXEcT1uMhKZi7rYtk-IcX+~UJE7%(aqtA0Xgfx)Q8N_M~7 zI8l>g2cB6Ez04ARN#G1u8#^c>xJ`??N>y}54W82kb(S#F>4un~X2X@Ui+J$oiVQyH zi!_^KUvE)8t#e1%uj|$dPZheYqu$M>Ht8qkf8@VI3CH69F*wRXirwZzsB|Y#*3X25 z_#J97n)G>+*|y(_`ME4OcTC4s#m~@SqOOr3oBS<7kxbwX=bsqryDO9($|e+U!7tLv zGWP-;7ew3m>A2v%4NBx=rN1WE%s$v=03uci0+i7zisg&Eo<89bC2+!08mS;E_ChEP zcX}pRxWIL{piM-UO{qY)#O3ASidv)mM=qeDQhG5;{AksS<7S+ENFTm&XHC%i!*%ww z*dtVvC4V2z1zqEvGA>^-TB}xPLl;Y*Tk;?P!+nk-`?eCT(=TgkGedz(iyU7f*$Vmc zEQ@rRLArsZ@EIB0P8jcOg>H#g?TF2*S#U=$Pn_od?_n366coKViPJP?jy|dgy_NT~ z$4;}YRyX9`#W#b4lDC#UB#sAbrU%MzaQTYnUjA9F-CrjE2l#=mq`B6=1auWp`1}$~ zL20!;?4T?3;I^u=ADEC6*bs4Kh{(hcf<#9Bh&zSC%InkK8#AU3zHK-!pjABb760vKlguf*&7Tblx zPHD5*U5Kv((F0>|CO5-}zzyu)Bw3H*gY_UFi&{2XatoAFZ#8;^BDsgm#tJGhWwD`iQia$sT)B57ICweN1Cs5|Er$69)9Gl;jP`6KFZJ z(EvL&iWOPlr|Kqx*elizWj#!a*O<*ca90z*@Rwp2bumc_U*6BQF}BzRJbg3Qo`2rB zp_lnuM>tRkK^VAjKuz@Xn6mxNtw3TosRsb(B=((T^Ws29+Bh%*AR4G+aVwDtW(ii& zn!Wrj5~8{43Zc6w(2mMA557oJn(DmfM#&=$-1O#V>3%ms>NKd=7C)lEA_+5x1Pl6} ztaCKPknquiV~XoAfWuUi^=H5zbVIT3pnDv2YKl-vk@CFAA^Qq8|TY56~^eSh2T;m zhg!<0=acj9&Hm7ZjSS~mka2ktk@Bs}{Lz705H*Wr9{AQXtsDF@FJ5V}SG?m14;RO| zzMPQFwY+y>mpr{dgylbk^i3le3_((yp;fiYj%0j9nkl^P57jwl)I*}ty>X~(&ei3U zBZv|Z!dXpjKGmo(ONi9?$Yd6s5T2r(83$B=Z#66(n#TU5P_%-NTX^~EV}mBG)Y|>x zMe12f@exH_{H7bUX@CEodJDy9I|M} z6x*90f}STu#HH}~Fhgs3(U|2ZCrgll7-?-hZBKYl5uNb-q}0>uR!3LDak14hx{^_P z6zR7Reth7_b?)7&u@-@*Qto3N;Bl#Qu|c#dlf|SF4Ob9enfI5=o=BG9PrSDpm|0

EvLCsma1R|0iinLTHaGxc^=+?$uNY=bhzpE^ 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

kYEhm#B6ZQ4$gj)^lHNv-0|-D@dhtEBt_&lSEOc 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 yZ$lUEkW}e<{hSzpalQCcsOqW literal 0 HcmV?d00001 diff --git a/echo/screenshots/screenshot2.png b/echo/screenshots/screenshot2.png new file mode 100644 index 0000000000000000000000000000000000000000..0af97aa54a578442f19ddc24affec96168e3c154 GIT binary patch literal 29275 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 Z^+xnhL!vaQK#d5e*i)CMS=hT literal 0 HcmV?d00001 diff --git a/echo/screenshots/screenshot3.png b/echo/screenshots/screenshot3.png new file mode 100644 index 0000000000000000000000000000000000000000..a83c00d4599bce201252246a147ed7c5a5443eae GIT binary patch literal 99199 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 TSPG910(^-J%Lr8o==uF0)HlJy literal 0 HcmV?d00001 diff --git a/echo/tests.sh b/echo/tests.sh new file mode 100755 index 0000000000..252723f088 --- /dev/null +++ b/echo/tests.sh @@ -0,0 +1,240 @@ +#!/usr/bin/env bash + +set -euo pipefail + +function message { + echo "" + echo "---------------------------------------------------------------" + echo $1 + echo "---------------------------------------------------------------" +} + +RESTORE=$(echo -en '\033[0m') +RED=$(echo -en '\033[01;31m') +GREEN=$(echo -en '\033[01;32m') + +function failed { + echo ${RED}✗$1${RESTORE} +} + +function passed { + echo ${GREEN}✓$1${RESTORE} +} + +if ! [ -x "$(command -v jq)" ]; then + message "JQ not installed. Installing..." + sudo apt -y install jq +fi + + +message " Build image " +docker build -t mendhak/http-https-echo:latest . + +mkdir -p testarea +pushd testarea + +message " Cleaning up from previous test run " +docker ps -q --filter "name=http-echo-tests" | grep -q . && docker stop http-echo-tests + +message " Start container normally " +docker run -d --rm --name http-echo-tests -p 8080:8080 -p 8443:8443 -t mendhak/http-https-echo +sleep 5 + + +message " Make http(s) request, and test the path, method, header and status code. " +REQUEST=$(curl -s -k -X PUT -H "Arbitrary:Header" -d aaa=bbb https://localhost:8443/hello-world) +if [ $(echo $REQUEST | jq -r '.path') == '/hello-world' ] && \ + [ $(echo $REQUEST | jq -r '.method') == 'PUT' ] && \ + [ $(echo $REQUEST | jq -r '.headers.arbitrary') == 'Header' ] +then + passed "HTTPS request passed." +else + failed "HTTPS request failed." + echo $REQUEST | jq + exit 1 +fi +REQUEST_WITH_STATUS_CODE=$(curl -s -k -o /dev/null -w "%{http_code}" -H "x-set-response-status-code: 404" https://localhost:8443/hello-world) +REQUEST_WITH_STATUS_CODE_V=$(curl -v -k -o /dev/null -w "%{http_code}" -H "x-set-response-status-code: 404" https://localhost:8443/hello-world) +if [ $(echo $REQUEST_WITH_STATUS_CODE == '404') ] +then + passed "HTTPS status code request passed." +else + failed "HTTPS status code request failed." + echo $REQUEST_WITH_STATUS_CODE_V + exit 1 +fi + +REQUEST_WITH_SLEEP_MS=$(curl -o /dev/null -Ss -H "x-set-response-delay-ms: 6000" -k https://localhost:8443/ -w '%{time_total}') +if [[ $(echo "$REQUEST_WITH_SLEEP_MS>5" | bc -l) == 1 ]]; then + passed "Request with response delay passed" +else + failed "Request with response delay failed" + echo $REQUEST_WITH_SLEEP_MS + exit 1 +fi + +REQUEST_WITH_INVALID_SLEEP_MS=$(curl -o /dev/null -Ss -H "x-set-response-delay-ms: XXXX" -k https://localhost:8443/ -w '%{time_total}') +if [[ $(echo "$REQUEST_WITH_INVALID_SLEEP_MS<2" | bc -l) == 1 ]]; then + passed "Request with invalid response delay passed" +else + failed "Request with invalid response delay failed" + echo $REQUEST_WITH_INVALID_SLEEP_MS + exit 1 +fi + +REQUEST=$(curl -s -X PUT -H "Arbitrary:Header" -d aaa=bbb http://localhost:8080/hello-world) +if [ $(echo $REQUEST | jq -r '.path') == '/hello-world' ] && \ + [ $(echo $REQUEST | jq -r '.method') == 'PUT' ] && \ + [ $(echo $REQUEST | jq -r '.headers.arbitrary') == 'Header' ] +then + passed "HTTP request with arbitrary header passed." +else + failed "HTTP request with arbitrary header failed." + echo $REQUEST | jq + exit 1 +fi + +message " Make JSON request, and test that json is in the output. " +REQUEST=$(curl -s -X POST -H "Content-Type: application/json" -d '{"a":"b"}' http://localhost:8080/) +if [ $(echo $REQUEST | jq -r '.json.a') == 'b' ] +then + passed "JSON test passed." +else + failed "JSON test failed." + echo $REQUEST | jq + exit 1 +fi + +message " Stop containers " +docker stop http-echo-tests + +message " Start container with different internal ports " +docker run -d --rm -e HTTP_PORT=8888 -e HTTPS_PORT=9999 --name http-echo-tests -p 8080:8888 -p 8443:9999 -t mendhak/http-https-echo +sleep 5 + +message " Make http(s) request, and test the path, method and header. " +REQUEST=$(curl -s -k -X PUT -H "Arbitrary:Header" -d aaa=bbb https://localhost:8443/hello-world) +if [ $(echo $REQUEST | jq -r '.path') == '/hello-world' ] && \ + [ $(echo $REQUEST | jq -r '.method') == 'PUT' ] && \ + [ $(echo $REQUEST | jq -r '.headers.arbitrary') == 'Header' ] +then + passed "HTTPS request passed." +else + failed "HTTPS request failed." + echo $REQUEST | jq + exit 1 +fi + +REQUEST=$(curl -s -X PUT -H "Arbitrary:Header" -d aaa=bbb http://localhost:8080/hello-world) +if [ $(echo $REQUEST | jq -r '.path') == '/hello-world' ] && \ + [ $(echo $REQUEST | jq -r '.method') == 'PUT' ] && \ + [ $(echo $REQUEST | jq -r '.headers.arbitrary') == 'Header' ] +then + passed "HTTP request passed." +else + failed "HTTP request failed." + echo $REQUEST | jq + exit 1 +fi + + +message " Stop containers " +docker stop http-echo-tests + + +message " Start container with JWT_HEADER " +docker run -d --rm -e JWT_HEADER=Authentication --name http-echo-tests -p 8080:8080 -p 8443:8443 -t mendhak/http-https-echo +sleep 5 + +REQUEST=$(curl -s -k -H "Authentication: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" https://localhost:8443/ ) +if [ $(echo $REQUEST | jq -r '.jwt.header.typ') == 'JWT' ] && \ + [ $(echo $REQUEST | jq -r '.jwt.header.alg') == 'HS256' ] && \ + [ $(echo $REQUEST | jq -r '.jwt.payload.sub') == '1234567890' ] +then + passed "JWT request passed." +else + failed "JWT request failed." + echo $REQUEST | jq + exit 1 +fi + +message " Stop containers " +docker stop http-echo-tests + + +message " Start container with LOG_IGNORE_PATH " +docker run -d --rm -e LOG_IGNORE_PATH=/ping --name http-echo-tests -p 8080:8080 -p 8443:8443 -t mendhak/http-https-echo +sleep 5 +curl -s -k -X POST -d "banana" https://localhost:8443/ping > /dev/null + +if [ $(docker logs http-echo-tests | wc -l) == 1 ] && \ + ! [ $(docker logs http-echo-tests | grep banana) ] +then + passed "LOG_IGNORE_PATH ignored the /ping path" +else + failed "LOG_IGNORE_PATH failed" + docker logs http-echo-tests + exit 1 +fi + + +message " Stop containers " +docker stop http-echo-tests + +message " Start container with LOG_WITHOUT_NEWLINE " +docker run -d --rm -e LOG_WITHOUT_NEWLINE=1 --name http-echo-tests -p 8080:8080 -p 8443:8443 -t mendhak/http-https-echo +sleep 5 +curl -s -k -X POST -d "tiramisu" https://localhost:8443/ > /dev/null + +if [ $(docker logs http-echo-tests | wc -l) == 3 ] && \ + [ $(docker logs http-echo-tests | grep tiramisu) ] +then + passed "LOG_WITHOUT_NEWLINE logged output in single line" +else + failed "LOG_WITHOUT_NEWLINE failed" + docker logs http-echo-tests + exit 1 +fi + + +message " Stop containers " +docker stop http-echo-tests + +message " Check that container is running as a NON ROOT USER by default" +docker run -d --name http-echo-tests --rm mendhak/http-https-echo + +WHOAMI=$(docker exec http-echo-tests whoami) + +if [ "$WHOAMI" == "node" ] +then + passed "Running as non root user" +else + failed "Running as root user" + exit 1 +fi + +message " Stop containers " +docker stop http-echo-tests + +message " Check that container is running as user different that the user defined in image" +IMAGE_USER="$(docker image inspect mendhak/http-https-echo -f '{{ .ContainerConfig.User }}')" +CONTAINER_USER="$((IMAGE_USER + 1000000))" +docker run -d --name http-echo-tests --rm -u "${CONTAINER_USER}" -p 8080:8080 mendhak/http-https-echo +sleep 5 +curl -s http://localhost:8080 > /dev/null + +WHOAMI="$(docker exec http-echo-tests id -u)" + +if [ "$WHOAMI" == "$CONTAINER_USER" ] +then + passed "Running as $CONTAINER_USER user" +else + failed "Not running as $CONTAINER_USER user or failed to start" + exit 1 +fi + +message " Stop containers " +docker stop http-echo-tests + +popd +rm -rf testarea From f943cce37be4fbf90a3dca222fc6952b72239580 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 03:12:19 -0400 Subject: [PATCH 57/72] prep for gitops --- .release.yaml | 4 ++-- .release/{app-config.yaml => application_template.yaml} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename .release/{app-config.yaml => application_template.yaml} (100%) diff --git a/.release.yaml b/.release.yaml index 628e5d344f..49c851ab13 100644 --- a/.release.yaml +++ b/.release.yaml @@ -1,2 +1,2 @@ -application_template: .release/app-config.yaml -environment_variables: .release/env-config.yaml +application_template: .release/application_template.yaml +environment_variables: .release/environment_variables.yaml diff --git a/.release/app-config.yaml b/.release/application_template.yaml similarity index 100% rename from .release/app-config.yaml rename to .release/application_template.yaml From 2f5ec98bbbd15c263d74cb19c4a1236fb97bb01f Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 03:26:18 -0400 Subject: [PATCH 58/72] remove node selector --- .release/application_template.yaml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.release/application_template.yaml b/.release/application_template.yaml index 21b3deb9c6..e21251f62b 100644 --- a/.release/application_template.yaml +++ b/.release/application_template.yaml @@ -5,11 +5,6 @@ context: release-handsup-us-east-1 domain: example-voting-app.releaseapp.gethandsup.com mode: development repo_name: dustyspace/example-voting-app -node_selector: -- key: failure-domain.beta.kubernetes.io/zone - value: us-west-2a -- key: kubernetes.io/arch - value: amd64 hostnames: - vote: vote-${env_id}-${domain} - result: result-${env_id}-${domain} From ce3528254eaf6f3621bbfe30ff6fcc4549f92af6 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 03:30:56 -0400 Subject: [PATCH 59/72] Updating domain --- .release/application_template.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.release/application_template.yaml b/.release/application_template.yaml index e21251f62b..44eb1a1d3b 100644 --- a/.release/application_template.yaml +++ b/.release/application_template.yaml @@ -2,7 +2,7 @@ app: example-voting-app auto_deploy: true context: release-handsup-us-east-1 -domain: example-voting-app.releaseapp.gethandsup.com +domain: app.releaseapp.gethandsup.com mode: development repo_name: dustyspace/example-voting-app hostnames: From 47802ee34073f9a6abc10782ec6e9998498662e9 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 03:34:45 -0400 Subject: [PATCH 60/72] removing node selector --- .release/application_template.yaml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.release/application_template.yaml b/.release/application_template.yaml index 44eb1a1d3b..910086891d 100644 --- a/.release/application_template.yaml +++ b/.release/application_template.yaml @@ -35,9 +35,6 @@ services: - type: node_port target_port: '80' port: '5000' - node_selector: - - key: kubernetes.io/arch - value: amd64 - name: result image: dustyspace/example-voting-app/result build: From 49bcb3a86df349d2d6a229e30782bf4794e51a61 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 03:43:16 -0400 Subject: [PATCH 61/72] parallel workflow --- .release/application_template.yaml | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/.release/application_template.yaml b/.release/application_template.yaml index 910086891d..358e4eac85 100644 --- a/.release/application_template.yaml +++ b/.release/application_template.yaml @@ -81,10 +81,23 @@ services: type: aws-efs workflows: - name: setup - order_from: - - services.all + parallelize: + - step: data + tasks: + - services.db + - services.redis + - step: worker + tasks: + - services.worker + - step: frontend + tasks: + - services.result + - services.vote - name: patch - order_from: - - services.vote - - services.result + parallelize: + - step: all + tasks: + - services.worker + - services.result + - services.vote From 319d29583f5402edab82e37c80b972ca311e34b4 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 03:46:04 -0400 Subject: [PATCH 62/72] comment 5858 --- .release/application_template.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.release/application_template.yaml b/.release/application_template.yaml index 358e4eac85..ef485d3af1 100644 --- a/.release/application_template.yaml +++ b/.release/application_template.yaml @@ -50,9 +50,9 @@ services: - type: node_port target_port: '80' port: '5001' - - type: node_port - target_port: '5858' - port: '5858' +# - type: node_port +# target_port: '5858' +# port: '5858' - name: worker image: dustyspace/example-voting-app/worker build: From 11214e4b237a7b360cddee3aece862d62deae4d5 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 03:48:06 -0400 Subject: [PATCH 63/72] Updating app template --- .release/application_template.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.release/application_template.yaml b/.release/application_template.yaml index ef485d3af1..358e4eac85 100644 --- a/.release/application_template.yaml +++ b/.release/application_template.yaml @@ -50,9 +50,9 @@ services: - type: node_port target_port: '80' port: '5001' -# - type: node_port -# target_port: '5858' -# port: '5858' + - type: node_port + target_port: '5858' + port: '5858' - name: worker image: dustyspace/example-voting-app/worker build: From 9b49715e25ccd1376d3cfd1f25c8c020cc57c735 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 16 Aug 2021 04:05:19 -0400 Subject: [PATCH 64/72] remove 5858 --- .release/application_template.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.release/application_template.yaml b/.release/application_template.yaml index 358e4eac85..ef485d3af1 100644 --- a/.release/application_template.yaml +++ b/.release/application_template.yaml @@ -50,9 +50,9 @@ services: - type: node_port target_port: '80' port: '5001' - - type: node_port - target_port: '5858' - port: '5858' +# - type: node_port +# target_port: '5858' +# port: '5858' - name: worker image: dustyspace/example-voting-app/worker build: From 663ae5a80453728b6eeacdd83eab84d14c36715a Mon Sep 17 00:00:00 2001 From: David Giffin Date: Sat, 11 Sep 2021 04:45:49 -0400 Subject: [PATCH 65/72] Adding cluster configs --- .release/clusters/default.yaml | 11 +++++++++++ .release/clusters/release-test-us-west-2.yaml | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 .release/clusters/default.yaml create mode 100644 .release/clusters/release-test-us-west-2.yaml diff --git a/.release/clusters/default.yaml b/.release/clusters/default.yaml new file mode 100644 index 0000000000..6e4d01252f --- /dev/null +++ b/.release/clusters/default.yaml @@ -0,0 +1,11 @@ +--- +charts: +- name: argo-wf + repo_url: https://argoproj.github.io/argo-helm + add: argo + install: argo/argo-workflows + version: "0.2.12" + include_crds: true + directory: helm/argo + values: values.yaml + name_template: "argo-workflows" diff --git a/.release/clusters/release-test-us-west-2.yaml b/.release/clusters/release-test-us-west-2.yaml new file mode 100644 index 0000000000..6e4d01252f --- /dev/null +++ b/.release/clusters/release-test-us-west-2.yaml @@ -0,0 +1,11 @@ +--- +charts: +- name: argo-wf + repo_url: https://argoproj.github.io/argo-helm + add: argo + install: argo/argo-workflows + version: "0.2.12" + include_crds: true + directory: helm/argo + values: values.yaml + name_template: "argo-workflows" From 739ec63ff553e44f7940c8dbe25737c8a1059db0 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Sep 2021 12:59:45 -0400 Subject: [PATCH 66/72] Updating cluster config --- .release/clusters/release-test-us-west-2.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.release/clusters/release-test-us-west-2.yaml b/.release/clusters/release-test-us-west-2.yaml index 6e4d01252f..789963a148 100644 --- a/.release/clusters/release-test-us-west-2.yaml +++ b/.release/clusters/release-test-us-west-2.yaml @@ -9,3 +9,5 @@ charts: directory: helm/argo values: values.yaml name_template: "argo-workflows" +context: release-test-us-west-2 +namesapce: argo-wf-test From 5d8bdd7e084994ec5c7a64f7f393b738d7b422c2 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Sep 2021 16:13:27 -0400 Subject: [PATCH 67/72] spelling namespace properly --- .release/clusters/release-test-us-west-2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.release/clusters/release-test-us-west-2.yaml b/.release/clusters/release-test-us-west-2.yaml index 789963a148..1c55ac49e9 100644 --- a/.release/clusters/release-test-us-west-2.yaml +++ b/.release/clusters/release-test-us-west-2.yaml @@ -10,4 +10,4 @@ charts: values: values.yaml name_template: "argo-workflows" context: release-test-us-west-2 -namesapce: argo-wf-test +namespace: argo-wf-test From b3b98bacb588a7c364ea6680cc029f37890888ad Mon Sep 17 00:00:00 2001 From: David Giffin Date: Tue, 21 Sep 2021 20:35:00 -0400 Subject: [PATCH 68/72] adding argo --- helm/argo/values.yaml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 helm/argo/values.yaml diff --git a/helm/argo/values.yaml b/helm/argo/values.yaml new file mode 100644 index 0000000000..7fefdb23ae --- /dev/null +++ b/helm/argo/values.yaml @@ -0,0 +1,22 @@ +singleNamespace: true + +workflow: + rbac: + create: false + +controller: + metricsConfig: + enabled: true + serviceAccount: + name: "argo" + workflowNamespaces: [] + clusterWorkflowTemplates: + enabled: false + +clusterWorkflowTemplates: + enabled: false + enableEditing: false + +server: + serviceAccount: + name: "argo-server" From 4b54f6e672b849decffc811d2cd7a87a7f0a124f Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 8 Nov 2021 10:46:56 -0500 Subject: [PATCH 69/72] whitespace --- vote/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/vote/Dockerfile b/vote/Dockerfile index ad14ad92fb..4cf8e47f6f 100644 --- a/vote/Dockerfile +++ b/vote/Dockerfile @@ -16,3 +16,4 @@ EXPOSE 80 # Define our command to be run when launching the container CMD ["gunicorn", "app:app", "-b", "0.0.0.0:80", "--log-file", "-", "--access-logfile", "-", "--workers", "4", "--keep-alive", "0"] + From 92489577e65b7500a2eb08d66ab4ec595bb66078 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 8 Nov 2021 17:07:42 -0500 Subject: [PATCH 70/72] whitespace --- vote/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/vote/Dockerfile b/vote/Dockerfile index 4cf8e47f6f..ad14ad92fb 100644 --- a/vote/Dockerfile +++ b/vote/Dockerfile @@ -16,4 +16,3 @@ EXPOSE 80 # Define our command to be run when launching the container CMD ["gunicorn", "app:app", "-b", "0.0.0.0:80", "--log-file", "-", "--access-logfile", "-", "--workers", "4", "--keep-alive", "0"] - From 36f7d440c79985da42c7b18224bd0fdad5f88868 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 8 Nov 2021 17:20:01 -0500 Subject: [PATCH 71/72] more whitespace --- vote/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/vote/Dockerfile b/vote/Dockerfile index ad14ad92fb..4cf8e47f6f 100644 --- a/vote/Dockerfile +++ b/vote/Dockerfile @@ -16,3 +16,4 @@ EXPOSE 80 # Define our command to be run when launching the container CMD ["gunicorn", "app:app", "-b", "0.0.0.0:80", "--log-file", "-", "--access-logfile", "-", "--workers", "4", "--keep-alive", "0"] + From 2c21da8ba3c1d4aa6ade8cbe3733aed5c02fc7c0 Mon Sep 17 00:00:00 2001 From: David Giffin Date: Mon, 8 Nov 2021 17:21:33 -0500 Subject: [PATCH 72/72] more more space --- vote/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vote/Dockerfile b/vote/Dockerfile index 4cf8e47f6f..cb548609cb 100644 --- a/vote/Dockerfile +++ b/vote/Dockerfile @@ -17,3 +17,5 @@ EXPOSE 80 # Define our command to be run when launching the container CMD ["gunicorn", "app:app", "-b", "0.0.0.0:80", "--log-file", "-", "--access-logfile", "-", "--workers", "4", "--keep-alive", "0"] + +