From cfb23f309a65817334778871dc5dd3c7cb61e7cc Mon Sep 17 00:00:00 2001 From: Sebastian Seedorf Date: Thu, 19 Nov 2020 23:13:18 +0100 Subject: [PATCH] Updated packages and Dockerfile --- Dockerfile | 6 + docker-compose.debug.yml | 27 +-- package-lock.json | 237 ++++++++++--------------- public/js-source/src/utils/userinfo.ts | 32 ++++ public/js-source/src/utils/utils.ts | 14 +- public/js-source/test/SomeModule.ts | 3 +- public/js-source/test/utils.ts | 3 +- src/app.ts | 4 +- src/types/extend-request.d.ts | 23 +-- 9 files changed, 168 insertions(+), 181 deletions(-) create mode 100644 public/js-source/src/utils/userinfo.ts diff --git a/Dockerfile b/Dockerfile index 1d95f9b..9d0bbb1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,7 +22,13 @@ USER appuser COPY . . # install +USER root +RUN . /etc/profile && apk add --virtual .npm-install-virt --no-cache git +USER appuser RUN npm run install-prod +USER root +RUN apk del .npm-install-virt +USER appuser ENV NODE_ENV production # cleanup diff --git a/docker-compose.debug.yml b/docker-compose.debug.yml index 96b2d29..7f85a83 100644 --- a/docker-compose.debug.yml +++ b/docker-compose.debug.yml @@ -15,19 +15,20 @@ services: depends_on: - redis environment: - - "PROXY_USERINFO_SECRET=3d513168-c92d-4f57-8c78-8fb2efad8a34" - - "PROXY_TARGET_URI=http://host.docker.internal:3000" - - "HOST=0.0.0.0" - - "COOKIE_SECRET=05e8cc4b-f95f-4a70-b4a1-b22ce295348d" - - "WELLKNOWN_CONFIG_URI=https://nodejs1-2.biotronik.int/auth/realms/CoE-BS/.well-known/openid-configuration" - - "CLIENT_ID=demo" - - "CLIENT_SECRET=fb49b346-c515-4680-adb1-beee0bd5b66e" - - "CLIENT_SCOPE=openid email profile roles groups" - - "NODE_ENV=debug" - - "SSL_VERIFY=false" - - "EXT_RESOURCE_URI=http://localhost/base" - - "REDIS_URL=redis://redis:6379" - - "NO_PROXY=redis:6379" + - NODE_ENV=debug + - PORT=3000 + - EXTERNAL_BASE_URL=http://localhost + - REDIS_URL=redis://redis:6379 + - WELLKNOWN_CONFIG_URI=https://nodejs1-2.biotronik.int/auth/realms/CoE-BS/.well-known/openid-configuration + - CLIENT_ID=demo + - CLIENT_SECRET=fb49b346-c515-4680-adb1-beee0bd5b66e + - CLIENT_SCOPE=openid email profile roles groups + - EXT_REDIRECT_URI=http://localhost/oauth/redirect + - EXT_POST_LOGOUT_REDIRECT_URI=http://localhost + - EXT_POST_LOGIN_REDIRECT_URI=http://localhost + - PROXY_TARGET_URI=http://localhost:3000 + - SSL_VERIFY=false + - BASE_PATH=/base ports: - 3001:3000 networks: diff --git a/package-lock.json b/package-lock.json index 05b63fb..598439c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,9 +54,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -281,9 +281,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -351,9 +351,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -400,13 +400,6 @@ "integrity": "sha512-Mv027hcLFjE45K8UJ8PjRpdDGfR0aManEFj1KzoN8zXNveHGEygpZGfFf/FTTMl+QEVSrPAUlyxaCApvmv47AQ==", "requires": { "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@formatjs/intl-datetimeformat": { @@ -416,13 +409,6 @@ "requires": { "@formatjs/ecma402-abstract": "^1.2.6", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@formatjs/intl-displaynames": { @@ -432,13 +418,6 @@ "requires": { "@formatjs/ecma402-abstract": "^1.2.6", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@formatjs/intl-getcanonicallocales": { @@ -448,13 +427,6 @@ "requires": { "cldr-core": "37.0.0", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@formatjs/intl-listformat": { @@ -464,13 +436,6 @@ "requires": { "@formatjs/ecma402-abstract": "^1.2.6", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@formatjs/intl-numberformat": { @@ -480,13 +445,6 @@ "requires": { "@formatjs/ecma402-abstract": "^1.2.6", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@formatjs/intl-pluralrules": { @@ -496,13 +454,6 @@ "requires": { "@formatjs/ecma402-abstract": "^1.2.6", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@formatjs/intl-relativetimeformat": { @@ -512,13 +463,6 @@ "requires": { "@formatjs/ecma402-abstract": "^1.2.6", "tslib": "^2.0.1" - }, - "dependencies": { - "tslib": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", - "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" - } } }, "@istanbuljs/load-nyc-config": { @@ -690,9 +634,9 @@ } }, "@types/express-session": { - "version": "1.17.2", - "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.2.tgz", - "integrity": "sha512-QRm/fUuvr/BAosL9CvK351SDQP7wpD8+h3S8ZEE/8IvHJ/ZqHrjZbjx/flYfazyPw7yNi9O5fbjFZbh0vZ1ccg==", + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-57DnyxiqClXOIjoCgeKCUYfKxBPOlOY/k+l1TPK+7bSwyiPTrS5FIk1Ycql7twk4wO7P5lfOVy6akDGiaMSLfw==", "requires": { "@types/express": "*" } @@ -726,9 +670,9 @@ "dev": true }, "@types/node": { - "version": "14.14.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.7.tgz", - "integrity": "sha512-Zw1vhUSQZYw+7u5dAwNbIA9TuTotpzY/OF7sJM9FqPOF3SPjKnxrjoTktXDZgUjybf4cWVBP7O8wvKdSaGHweg==" + "version": "14.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.9.tgz", + "integrity": "sha512-JsoLXFppG62tWTklIoO4knA+oDTYsmqWxHRvd4lpmfQRNhX6osheUOWETP2jMoV/2bEHuMra8Pp3Dmo/stBFcw==" }, "@types/node-sass": { "version": "4.11.1", @@ -776,22 +720,22 @@ } }, "@types/serve-static": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.7.tgz", - "integrity": "sha512-3diZWucbR+xTmbDlU+FRRxBf+31OhFew7cJXML/zh9NmvSPTNoFecAwHB66BUqFgENJtqMiyl7JAwUE/siqdLw==", + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.8.tgz", + "integrity": "sha512-MoJhSQreaVoL+/hurAZzIm8wafFR6ajiTM1m4A0kv6AGeVBl4r4pOV8bGFrjjq1sGxDTnCoF8i22o0/aE5XCyA==", "requires": { "@types/mime": "*", "@types/node": "*" } }, "@typescript-eslint/eslint-plugin": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.7.0.tgz", - "integrity": "sha512-li9aiSVBBd7kU5VlQlT1AqP0uWGDK6JYKUQ9cVDnOg34VNnd9t4jr0Yqc/bKxJr/tDCPDaB4KzoSFN9fgVxe/Q==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.8.1.tgz", + "integrity": "sha512-d7LeQ7dbUrIv5YVFNzGgaW3IQKMmnmKFneRWagRlGYOSfLJVaRbj/FrBNOBC1a3tVO+TgNq1GbHvRtg1kwL0FQ==", "dev": true, "requires": { - "@typescript-eslint/experimental-utils": "4.7.0", - "@typescript-eslint/scope-manager": "4.7.0", + "@typescript-eslint/experimental-utils": "4.8.1", + "@typescript-eslint/scope-manager": "4.8.1", "debug": "^4.1.1", "functional-red-black-tree": "^1.0.1", "regexpp": "^3.0.0", @@ -800,9 +744,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -823,35 +767,35 @@ } }, "@typescript-eslint/experimental-utils": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.7.0.tgz", - "integrity": "sha512-cymzovXAiD4EF+YoHAB5Oh02MpnXjvyaOb+v+BdpY7lsJXZQN34oIETeUwVT2XfV9rSNpXaIcknDLfupO/tUoA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.8.1.tgz", + "integrity": "sha512-WigyLn144R3+lGATXW4nNcDJ9JlTkG8YdBWHkDlN0lC3gUGtDi7Pe3h5GPvFKMcRz8KbZpm9FJV9NTW8CpRHpg==", "dev": true, "requires": { "@types/json-schema": "^7.0.3", - "@typescript-eslint/scope-manager": "4.7.0", - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/typescript-estree": "4.7.0", + "@typescript-eslint/scope-manager": "4.8.1", + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/typescript-estree": "4.8.1", "eslint-scope": "^5.0.0", "eslint-utils": "^2.0.0" } }, "@typescript-eslint/parser": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.7.0.tgz", - "integrity": "sha512-+meGV8bMP1sJHBI2AFq1GeTwofcGiur8LoIr6v+rEmD9knyCqDlrQcFHR0KDDfldHIFDU/enZ53fla6ReF4wRw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.8.1.tgz", + "integrity": "sha512-QND8XSVetATHK9y2Ltc/XBl5Ro7Y62YuZKnPEwnNPB8E379fDsvzJ1dMJ46fg/VOmk0hXhatc+GXs5MaXuL5Uw==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "4.7.0", - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/typescript-estree": "4.7.0", + "@typescript-eslint/scope-manager": "4.8.1", + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/typescript-estree": "4.8.1", "debug": "^4.1.1" }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -866,29 +810,29 @@ } }, "@typescript-eslint/scope-manager": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.7.0.tgz", - "integrity": "sha512-ILITvqwDJYbcDCROj6+Ob0oCKNg3SH46iWcNcTIT9B5aiVssoTYkhKjxOMNzR1F7WSJkik4zmuqve5MdnA0DyA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.8.1.tgz", + "integrity": "sha512-r0iUOc41KFFbZdPAdCS4K1mXivnSZqXS5D9oW+iykQsRlTbQRfuFRSW20xKDdYiaCoH+SkSLeIF484g3kWzwOQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/visitor-keys": "4.7.0" + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/visitor-keys": "4.8.1" } }, "@typescript-eslint/types": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.7.0.tgz", - "integrity": "sha512-uLszFe0wExJc+I7q0Z/+BnP7wao/kzX0hB5vJn4LIgrfrMLgnB2UXoReV19lkJQS1a1mHWGGODSxnBx6JQC3Sg==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.8.1.tgz", + "integrity": "sha512-ave2a18x2Y25q5K05K/U3JQIe2Av4+TNi/2YuzyaXLAsDx6UZkz1boZ7nR/N6Wwae2PpudTZmHFXqu7faXfHmA==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.7.0.tgz", - "integrity": "sha512-5XZRQznD1MfUmxu1t8/j2Af4OxbA7EFU2rbo0No7meb46eHgGkSieFdfV6omiC/DGIBhH9H9gXn7okBbVOm8jw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.8.1.tgz", + "integrity": "sha512-bJ6Fn/6tW2g7WIkCWh3QRlaSU7CdUUK52shx36/J7T5oTQzANvi6raoTsbwGM11+7eBbeem8hCCKbyvAc0X3sQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.7.0", - "@typescript-eslint/visitor-keys": "4.7.0", + "@typescript-eslint/types": "4.8.1", + "@typescript-eslint/visitor-keys": "4.8.1", "debug": "^4.1.1", "globby": "^11.0.1", "is-glob": "^4.0.1", @@ -898,9 +842,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -921,12 +865,12 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.7.0.tgz", - "integrity": "sha512-aDJDWuCRsf1lXOtignlfiPODkzSxxop7D0rZ91L6ZuMlcMCSh0YyK+gAfo5zN/ih6WxMwhoXgJWC3cWQdaKC+A==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.8.1.tgz", + "integrity": "sha512-3nrwXFdEYALQh/zW8rFwP4QltqsanCDz4CwWMPiIZmwlk9GlvBeueEIbq05SEq4ganqM0g9nh02xXgv5XI3PeQ==", "dev": true, "requires": { - "@typescript-eslint/types": "4.7.0", + "@typescript-eslint/types": "4.8.1", "eslint-visitor-keys": "^2.0.0" } }, @@ -2222,9 +2166,9 @@ } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -2607,9 +2551,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -3581,9 +3525,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -4402,8 +4346,7 @@ "node-watch": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.0.tgz", - "integrity": "sha512-OOBiglke5SlRQT5WYfwXTmYqTfXjcTNBHpalyHLtLxDpQYVpVRkJqabcch1kmwJsjV/J4OZuzEafeb4soqtFZA==", - "dev": true + "integrity": "sha512-OOBiglke5SlRQT5WYfwXTmYqTfXjcTNBHpalyHLtLxDpQYVpVRkJqabcch1kmwJsjV/J4OZuzEafeb4soqtFZA==" }, "nopt": { "version": "3.0.6", @@ -4956,7 +4899,7 @@ } }, "pkg-express-utils": { - "version": "git+https://git.biotronik.int/scm/coe-bs-website/node-pkg-express-utils.git#d58aa134ecdb8c86eff83b0d63db283918ad35d7", + "version": "git+https://git.biotronik.int/scm/coe-bs-website/node-pkg-express-utils.git#8dc481b551bb0d73144b111d5e50271b27e8dc64", "from": "git+https://git.biotronik.int/scm/coe-bs-website/node-pkg-express-utils.git", "requires": { "@10xjs/polyfill-analyzer": "^0.1.0", @@ -4970,6 +4913,7 @@ "express-session": "^1.17.1", "json-prune": "^1.1.0", "node-fetch": "^2.6.1", + "node-watch": "^0.7.0", "polyfill-library": "^3.97.0", "proper-url-join": "^2.1.1", "redis": "^3.0.2", @@ -5553,9 +5497,9 @@ } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "requires": { "ms": "2.1.2" @@ -5787,6 +5731,14 @@ "dev": true, "requires": { "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "safe-buffer": { @@ -6328,9 +6280,9 @@ }, "dependencies": { "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "requires": { "ms": "2.1.2" } @@ -6504,10 +6456,9 @@ } }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" }, "tsutils": { "version": "3.17.1", @@ -6516,6 +6467,14 @@ "dev": true, "requires": { "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } } }, "tunnel-agent": { diff --git a/public/js-source/src/utils/userinfo.ts b/public/js-source/src/utils/userinfo.ts new file mode 100644 index 0000000..69cc23e --- /dev/null +++ b/public/js-source/src/utils/userinfo.ts @@ -0,0 +1,32 @@ +export interface UserInfo { + sub: string; + name?: string; + given_name?: string; + family_name?: string; + middle_name?: string; + nickname?: string; + preferred_username?: string; + profile?: string; + picture?: string; + website?: string; + email?: string; + email_verified?: boolean; + gender?: string; + birthdate?: string; + zoneinfo?: string; + locale?: string; + phone_number?: string; + updated_at?: number; + address?: { + formatted?: string; + street_address?: string; + locality?: string; + region?: string; + postal_code?: string; + country?: string; + + [key: string]: unknown; + }; + groups?: string[]; + [key: string]: unknown; +} diff --git a/public/js-source/src/utils/utils.ts b/public/js-source/src/utils/utils.ts index 90b6955..c17ba0e 100644 --- a/public/js-source/src/utils/utils.ts +++ b/public/js-source/src/utils/utils.ts @@ -1,4 +1,5 @@ import {WaitForSync} from './resolvable'; +import {UserInfo} from './userinfo'; export interface ClientConfig { EXTERNAL_BASE_URL: string @@ -20,19 +21,8 @@ export function resetConfig(): void { return configWaiter.reset(); } -export async function getUserInfo(): Promise|undefined> { +export async function getUserInfo(): Promise { const config = await getConfig(); const res = await fetch(config.EXTERNAL_BASE_URL + '/api/user'); return res.json(); } - -export type UserInfo = { - email: string, - email_verified: boolean, - family_name: string, - given_name: string, - groups: string[], - name: string, - preferred_username: string, - sub: string, -}; diff --git a/public/js-source/test/SomeModule.ts b/public/js-source/test/SomeModule.ts index 8f040a6..5c3da80 100644 --- a/public/js-source/test/SomeModule.ts +++ b/public/js-source/test/SomeModule.ts @@ -4,7 +4,8 @@ import {expect} from 'chai'; // @ts-ignore import * as fetchMock from 'fetch-mock'; import {getUserName} from '../src/SomeModule'; -import {setConfig, UserInfo} from '../src/utils/utils'; +import {setConfig} from '../src/utils/utils'; +import {UserInfo} from '../src/utils/userinfo'; describe('frontend:SomeModule', () => { const CONFIG = {EXTERNAL_BASE_URL: 'http://demo.url'}; diff --git a/public/js-source/test/utils.ts b/public/js-source/test/utils.ts index 4f8796e..7857e50 100644 --- a/public/js-source/test/utils.ts +++ b/public/js-source/test/utils.ts @@ -1,11 +1,12 @@ /* eslint-disable promise/catch-or-return,promise/no-callback-in-promise */ -import {setConfig, getConfig, resetConfig, getUserInfo, UserInfo} from '../src/utils/utils'; +import {setConfig, getConfig, resetConfig, getUserInfo} from '../src/utils/utils'; import {Resolvable, WaitForSync} from '../src/utils/resolvable'; import {describe, it} from 'mocha'; import {expect} from 'chai'; // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore import * as fetchMock from 'fetch-mock'; +import {UserInfo} from '../src/utils/userinfo'; describe('frontend:utils - setConfig/getConfig', () => { const CONFIG = {EXTERNAL_BASE_URL: 'http://demo.url'}; diff --git a/src/app.ts b/src/app.ts index 83bc06e..6ae3e37 100644 --- a/src/app.ts +++ b/src/app.ts @@ -38,7 +38,9 @@ const router = express.Router(); // auth proxy middleware router.use(AuthProxy.router); // auto reloader (when running in debug mode) -router.use(AutoReloader.router); +router.use(AutoReloader.getRouter({ + frontendDirs: './public', +})); // session //router.use(Session.getRouter()); diff --git a/src/types/extend-request.d.ts b/src/types/extend-request.d.ts index 068e6fc..5a0236d 100644 --- a/src/types/extend-request.d.ts +++ b/src/types/extend-request.d.ts @@ -2,24 +2,19 @@ declare global { namespace Express { - interface UserInfo { - email: string, - email_verified: boolean, - family_name: string, - given_name: string, - groups: string[], - name: string, - preferred_username: string, - sub: string, - } - interface Request { - getUserInfo(): Promise|undefined>; - noLogging: boolean|undefined; - permissionDetails?: import('role-acl').Permission; + // fetch user info (needs AuthProxy and some headers) + getUserInfo(): Promise; + // fetch user info (needed for HttpLogger) + noHttpLogging: boolean|undefined; + // permission details (after a Permission route) + permissionDetails: import('role-acl').Permission; + // switch session to another user;does not close old session (after Session router) + setSessionById(sessionId: string): Promise; } interface Response { + // initialize a logout (needs AuthProxy and some headers) initLogout(): boolean; } }