From 6cdb40ca5a19ef6ca1ef119aacc6f8f5b43c1496 Mon Sep 17 00:00:00 2001 From: tawoe Date: Tue, 14 May 2024 17:10:19 +0200 Subject: [PATCH 1/3] update copyright notice --- .gitignore | 2 +- Dockerfiles/Dockerfile_frontend | 4 ++-- Dockerfiles/frontend_build.env | 4 ++++ components.d.ts | 7 +++---- server/app.ts | 1 - server/controllers/CallbackController.ts | 1 - server/controllers/ConnectController.ts | 1 - server/controllers/RequestController.ts | 1 - server/controllers/StatusController.ts | 1 - server/controllers/UserController.ts | 1 - server/middlewares/OauthAccessTokenMiddleware.ts | 1 - server/middlewares/OauthRequestTokenMiddleware.ts | 1 - server/services/OBPClientService.ts | 1 - server/services/OauthInjectedService.ts | 1 - src/App.vue | 3 +-- src/assets/base.css | 1 - src/assets/element-plus-override.css | 1 - src/assets/highlightjs-override.css | 1 - src/assets/main.css | 1 - src/components/Collections.vue | 3 +-- src/components/Content.vue | 3 +-- src/components/GlossarySearchNav.vue | 3 +-- src/components/HeaderNav.vue | 3 +-- src/components/Menu.vue | 3 +-- src/components/MessageDocsSearchNav.vue | 3 +-- src/components/Preview.vue | 3 +-- src/components/SearchNav.vue | 3 +-- src/language/index.ts | 1 - src/main.ts | 1 - src/obp/api-version.ts | 1 - src/obp/common-functions.ts | 1 - src/obp/glossary.ts | 1 - src/obp/index.ts | 1 - src/obp/keys.ts | 1 - src/obp/message-docs.ts | 1 - src/obp/resource-docs.ts | 1 - src/obp/style-setting.ts | 1 - src/router/index.ts | 1 - src/views/APIServerErrorView.vue | 3 +-- src/views/APIServerStatusView.vue | 3 +-- src/views/BodyView.vue | 3 +-- src/views/GlossaryView.vue | 3 +-- src/views/InternalServerErrorView.vue | 3 +-- src/views/MessageDocsView.vue | 3 +-- src/views/NotFoundView.vue | 3 +-- 45 files changed, 26 insertions(+), 64 deletions(-) create mode 100644 Dockerfiles/frontend_build.env diff --git a/.gitignore b/.gitignore index bfafd79..ec00bd1 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ dist-ssr server-dist coverage *.local -.env +.env_* /cypress/videos/ /cypress/screenshots/ diff --git a/Dockerfiles/Dockerfile_frontend b/Dockerfiles/Dockerfile_frontend index 68e36b8..c7941bc 100644 --- a/Dockerfiles/Dockerfile_frontend +++ b/Dockerfiles/Dockerfile_frontend @@ -3,6 +3,7 @@ FROM node:lts-bullseye as builder ADD .. /home/node/app/ WORKDIR /home/node/app # Install the dependencies +COPY Dockerfiles/frontend_build.env /home/node/app/.env RUN npm install RUN npm run build @@ -14,8 +15,7 @@ ADD Dockerfiles/nginx.conf "${NGINX_DEFAULT_CONF_PATH}" COPY --from=builder /home/node/app/dist /opt/app-root/src RUN chgrp -R 0 /opt/app-root/src/ && chmod -R g+rwX /opt/app-root/src/ USER 1001 -CMD ["nginx", "-g", "daemon off;"] - +CMD sed -i "s@replaceobpapihost@$VITE_OBP_API_HOST@g" /home/app/dist/index*.js ; nginx -g "daemon off;" diff --git a/Dockerfiles/frontend_build.env b/Dockerfiles/frontend_build.env new file mode 100644 index 0000000..4dad90d --- /dev/null +++ b/Dockerfiles/frontend_build.env @@ -0,0 +1,4 @@ +VITE_OBP_API_HOST=replaceobpapihost +VITE_OBP_API_MANAGER_HOST=replaceobpapimanagerhost +VITE_OBP_API_VERSION=v5.1.0 + diff --git a/components.d.ts b/components.d.ts index f58c18f..b53b581 100644 --- a/components.d.ts +++ b/components.d.ts @@ -9,12 +9,12 @@ export {} declare module '@vue/runtime-core' { export interface GlobalComponents { + Collections: typeof import('./src/components/Collections.vue')['default'] Content: typeof import('./src/components/Content.vue')['default'] ElAlert: typeof import('element-plus/es')['ElAlert'] ElAside: typeof import('element-plus/es')['ElAside'] ElBacktop: typeof import('element-plus/es')['ElBacktop'] ElButton: typeof import('element-plus/es')['ElButton'] - ElCard: typeof import('element-plus/es')['ElCard'] ElCol: typeof import('element-plus/es')['ElCol'] ElCollapse: typeof import('element-plus/es')['ElCollapse'] ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem'] @@ -32,10 +32,9 @@ declare module '@vue/runtime-core' { ElIcon: typeof import('element-plus/es')['ElIcon'] ElInput: typeof import('element-plus/es')['ElInput'] ElMain: typeof import('element-plus/es')['ElMain'] + ElMenu: typeof import('element-plus/es')['ElMenu'] + ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElRow: typeof import('element-plus/es')['ElRow'] - ElTable: typeof import('element-plus/es')['ElTable'] - ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] - ElTag: typeof import('element-plus/es')['ElTag'] GlossarySearchNav: typeof import('./src/components/GlossarySearchNav.vue')['default'] HeaderNav: typeof import('./src/components/HeaderNav.vue')['default'] Menu: typeof import('./src/components/Menu.vue')['default'] diff --git a/server/app.ts b/server/app.ts index 82f7d58..9b9c458 100644 --- a/server/app.ts +++ b/server/app.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/controllers/CallbackController.ts b/server/controllers/CallbackController.ts index f878588..992d7a3 100644 --- a/server/controllers/CallbackController.ts +++ b/server/controllers/CallbackController.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/controllers/ConnectController.ts b/server/controllers/ConnectController.ts index 1d7125e..5f144a5 100644 --- a/server/controllers/ConnectController.ts +++ b/server/controllers/ConnectController.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/controllers/RequestController.ts b/server/controllers/RequestController.ts index 37185fa..7213910 100644 --- a/server/controllers/RequestController.ts +++ b/server/controllers/RequestController.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/controllers/StatusController.ts b/server/controllers/StatusController.ts index efe1909..af0f2b3 100644 --- a/server/controllers/StatusController.ts +++ b/server/controllers/StatusController.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/controllers/UserController.ts b/server/controllers/UserController.ts index 63e7b61..ca46e9c 100644 --- a/server/controllers/UserController.ts +++ b/server/controllers/UserController.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/middlewares/OauthAccessTokenMiddleware.ts b/server/middlewares/OauthAccessTokenMiddleware.ts index a0a5b1b..de331fb 100644 --- a/server/middlewares/OauthAccessTokenMiddleware.ts +++ b/server/middlewares/OauthAccessTokenMiddleware.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/middlewares/OauthRequestTokenMiddleware.ts b/server/middlewares/OauthRequestTokenMiddleware.ts index de38e19..8ca866a 100644 --- a/server/middlewares/OauthRequestTokenMiddleware.ts +++ b/server/middlewares/OauthRequestTokenMiddleware.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/services/OBPClientService.ts b/server/services/OBPClientService.ts index 7943435..898848c 100644 --- a/server/services/OBPClientService.ts +++ b/server/services/OBPClientService.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/server/services/OauthInjectedService.ts b/server/services/OauthInjectedService.ts index fe6c454..4965d17 100644 --- a/server/services/OauthInjectedService.ts +++ b/server/services/OauthInjectedService.ts @@ -1,5 +1,4 @@ /* - * * * Open Bank Project - API Explorer II * Copyright (C) 2023-2024, TESOBE GmbH * diff --git a/src/App.vue b/src/App.vue index a866d57..be09cbd 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,5 +1,4 @@ From 8da07fdb415e412b639c9bdc427552ed0c423e02 Mon Sep 17 00:00:00 2001 From: tawoe Date: Wed, 15 May 2024 13:10:49 +0200 Subject: [PATCH 2/3] add container prestart script --- Dockerfiles/Dockerfile_frontend | 12 +++++- Dockerfiles/frontend_build.env | 4 +- Dockerfiles/go.mod | 3 ++ Dockerfiles/prestart.go | 76 +++++++++++++++++++++++++++++++++ 4 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 Dockerfiles/go.mod create mode 100644 Dockerfiles/prestart.go diff --git a/Dockerfiles/Dockerfile_frontend b/Dockerfiles/Dockerfile_frontend index c7941bc..9438070 100644 --- a/Dockerfiles/Dockerfile_frontend +++ b/Dockerfiles/Dockerfile_frontend @@ -7,15 +7,25 @@ COPY Dockerfiles/frontend_build.env /home/node/app/.env RUN npm install RUN npm run build +FROM golang:bookworm as gobuilder + +WORKDIR /usr/src/app +COPY Dockerfiles/prestart.go ./main.go +COPY Dockerfiles/go.mod ./ + +RUN go build -v -o /usr/src/app/prestart + FROM registry.access.redhat.com/ubi9/nginx-120 USER 0 RUN dnf update -y RUN chown -R 1001 /var/log/nginx ADD Dockerfiles/nginx.conf "${NGINX_DEFAULT_CONF_PATH}" COPY --from=builder /home/node/app/dist /opt/app-root/src +COPY --from=gobuilder /usr/src/app/prestart /bin/prestart + RUN chgrp -R 0 /opt/app-root/src/ && chmod -R g+rwX /opt/app-root/src/ USER 1001 -CMD sed -i "s@replaceobpapihost@$VITE_OBP_API_HOST@g" /home/app/dist/index*.js ; nginx -g "daemon off;" +CMD /bin/prestart ; nginx -g "daemon off;" diff --git a/Dockerfiles/frontend_build.env b/Dockerfiles/frontend_build.env index 4dad90d..bcd5a95 100644 --- a/Dockerfiles/frontend_build.env +++ b/Dockerfiles/frontend_build.env @@ -1,4 +1,4 @@ -VITE_OBP_API_HOST=replaceobpapihost -VITE_OBP_API_MANAGER_HOST=replaceobpapimanagerhost +VITE_OBP_API_HOST=VITE_OBP_API_HOST +VITE_OBP_API_MANAGER_HOST=VITE_OBP_API_MANAGER_HOST VITE_OBP_API_VERSION=v5.1.0 diff --git a/Dockerfiles/go.mod b/Dockerfiles/go.mod new file mode 100644 index 0000000..dacd30d --- /dev/null +++ b/Dockerfiles/go.mod @@ -0,0 +1,3 @@ +module GoHelpers + +go 1.21 diff --git a/Dockerfiles/prestart.go b/Dockerfiles/prestart.go new file mode 100644 index 0000000..c9c6e85 --- /dev/null +++ b/Dockerfiles/prestart.go @@ -0,0 +1,76 @@ +package main + +import ( + "log" + "net/url" + "os" + "path/filepath" + "regexp" + "strings" +) + +func main() { + config := []string{"VITE_OBP_API_HOST", "VITE_OBP_API_MANAGER_HOST"} + configMap := make(map[string]string) + + for _, key := range config { + rawURL := os.Getenv(key) + if rawURL == "" { + continue + } + cleanURL := checkURL(rawURL) + configMap[key] = cleanURL + } + + dir := "/opt/app-root/src/assets" + pattern := "index-.*\\.js$" + + re, err := regexp.Compile(pattern) + if err != nil { + log.Fatal(err) + } + + files, err := os.ReadDir(dir) + if err != nil { + log.Fatal(err) + } + + for _, file := range files { + if re.MatchString(file.Name()) { + filePath := filepath.Join(dir, file.Name()) + content, err := os.ReadFile(filePath) + if err != nil { + panic(err) + } + modifiedContent := string(content) + for old, new := range configMap { + modifiedContent = strings.Replace(modifiedContent, old, new, -1) + } + err = os.WriteFile(filePath, []byte(modifiedContent), 0644) + if err != nil { + panic(err) + } + } + } + +} + +func checkURL(rawURL string) string { + + parsedURL, err := url.Parse(rawURL) + if err != nil { + log.Fatal(err) + } + + validURL := regexp.MustCompile(`^https?:\/\/[^\s/$.?#].[^\s]*$`) + if !validURL.MatchString(rawURL) { + log.Fatal("Invalid URL or potential code injection detected") + } + + cleanURL := &url.URL{ + Scheme: parsedURL.Scheme, + Host: parsedURL.Host, + Path: parsedURL.Path, + } + return cleanURL.String() +} From bbf6268649b7a164083ee7f18e9db2e043450f54 Mon Sep 17 00:00:00 2001 From: tawoe Date: Wed, 15 May 2024 13:16:15 +0200 Subject: [PATCH 3/3] .env bugfix .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ec00bd1..d04e4d4 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ dist-ssr server-dist coverage *.local +.env .env_* /cypress/videos/