Skip to content

Commit 73484ee

Browse files
fix(docker): generate env.js at runtime with escaping (#7)
1 parent 06c72cf commit 73484ee

5 files changed

Lines changed: 67 additions & 1 deletion

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ Thumbs.db
4949
# Compiled source
5050
*.js
5151
*.js.map
52+
!src/assets/env.js
53+
!src/assets/env.template.js
5254

5355
# TypeScript type definition files
5456
*.d.ts

Dockerfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ ENV PLATFORM_BACKEND_SERVER=platform-backend-service:8080 \
3636
JUPYTER_SERVER=jupyterhub:8000 \
3737
JUPYTER_CONTEXT=notebook \
3838
JUPYTER_LANDING_PATH=/hub/spawn
39+
COPY docker-entrypoint.sh /docker-entrypoint.sh
40+
RUN chmod +x /docker-entrypoint.sh
3941
COPY nginx.conf.template /etc/nginx/templates/default.conf.template
4042
RUN rm -rf /usr/share/nginx/html/*
4143
COPY --from=build /app/dist/fl-platform/browser /usr/share/nginx/html
4244
EXPOSE 80
43-
CMD ["/bin/sh", "-c", "envsubst '$$PLATFORM_BACKEND_SERVER $$PLATFORM_BACKEND_CONTEXT $$NOTEBOOK_ENABLED $$JUPYTER_SERVER $$JUPYTER_CONTEXT' < /etc/nginx/templates/default.conf.template > /etc/nginx/conf.d/default.conf && envsubst '$$FRONTEND_VERSION $$BACKEND_VERSION $$EXAFLOW_VERSION $$MIP_VERSION $$NOTEBOOK_ENABLED $$JUPYTER_CONTEXT $$JUPYTER_LANDING_PATH' < /usr/share/nginx/html/assets/env.template.js > /usr/share/nginx/html/assets/env.js && exec nginx -g 'daemon off;'"]
45+
CMD ["/docker-entrypoint.sh"]

docker-entrypoint.sh

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/bin/sh
2+
3+
set -eu
4+
5+
escape_js() {
6+
printf '%s' "$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'
7+
}
8+
9+
FRONTEND_VERSION_ESCAPED=$(escape_js "${FRONTEND_VERSION:-}")
10+
BACKEND_VERSION_ESCAPED=$(escape_js "${BACKEND_VERSION:-}")
11+
EXAFLOW_VERSION_ESCAPED=$(escape_js "${EXAFLOW_VERSION:-}")
12+
MIP_VERSION_ESCAPED=$(escape_js "${MIP_VERSION:-}")
13+
NOTEBOOK_ENABLED_ESCAPED=$(escape_js "${NOTEBOOK_ENABLED:-0}")
14+
JUPYTER_CONTEXT_ESCAPED=$(escape_js "${JUPYTER_CONTEXT:-notebook}")
15+
JUPYTER_LANDING_PATH_ESCAPED=$(escape_js "${JUPYTER_LANDING_PATH:-/hub/spawn}")
16+
17+
envsubst '$PLATFORM_BACKEND_SERVER $PLATFORM_BACKEND_CONTEXT $NOTEBOOK_ENABLED $JUPYTER_SERVER $JUPYTER_CONTEXT' \
18+
< /etc/nginx/templates/default.conf.template \
19+
> /etc/nginx/conf.d/default.conf
20+
21+
mkdir -p /usr/share/nginx/html/assets
22+
23+
cat > /usr/share/nginx/html/assets/env.js <<EOF
24+
(function (window) {
25+
window.__env = window.__env || {};
26+
27+
// Environment variables
28+
window.__env.FRONTEND_VERSION = "${FRONTEND_VERSION_ESCAPED}";
29+
window.__env.BACKEND_VERSION = "${BACKEND_VERSION_ESCAPED}";
30+
window.__env.EXAFLOW_VERSION = "${EXAFLOW_VERSION_ESCAPED}";
31+
window.__env.MIP_VERSION = "${MIP_VERSION_ESCAPED}";
32+
window.__env.NOTEBOOK_ENABLED = "${NOTEBOOK_ENABLED_ESCAPED}";
33+
window.__env.JUPYTER_CONTEXT_PATH = "/${JUPYTER_CONTEXT_ESCAPED}";
34+
window.__env.JUPYTER_LANDING_PATH = "${JUPYTER_LANDING_PATH_ESCAPED}";
35+
}(this));
36+
EOF
37+
38+
exec nginx -g 'daemon off;'

src/assets/env.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
(function (window) {
2+
window.__env = window.__env || {};
3+
4+
// Environment variables
5+
window.__env.FRONTEND_VERSION = '';
6+
window.__env.BACKEND_VERSION = '';
7+
window.__env.EXAFLOW_VERSION = '';
8+
window.__env.MIP_VERSION = '';
9+
window.__env.NOTEBOOK_ENABLED = '0';
10+
window.__env.JUPYTER_CONTEXT_PATH = '/notebook';
11+
window.__env.JUPYTER_LANDING_PATH = '/hub/spawn';
12+
}(this));

src/assets/env.template.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
(function (window) {
2+
window.__env = window.__env || {};
3+
4+
// Environment variables
5+
window.__env.FRONTEND_VERSION = '${FRONTEND_VERSION}';
6+
window.__env.BACKEND_VERSION = '${BACKEND_VERSION}';
7+
window.__env.EXAFLOW_VERSION = '${EXAFLOW_VERSION}';
8+
window.__env.MIP_VERSION = '${MIP_VERSION}';
9+
window.__env.NOTEBOOK_ENABLED = '${NOTEBOOK_ENABLED}';
10+
window.__env.JUPYTER_CONTEXT_PATH = '/${JUPYTER_CONTEXT}';
11+
window.__env.JUPYTER_LANDING_PATH = '${JUPYTER_LANDING_PATH}';
12+
}(this));

0 commit comments

Comments
 (0)