From 6e63bacba748c41ad91d7199b467483193b08ff4 Mon Sep 17 00:00:00 2001
From: Einhornimmond
Date: Fri, 11 Feb 2022 10:15:09 +0100
Subject: [PATCH 001/110] let handle mysql the paging
---
backend/src/graphql/resolver/AdminResolver.ts | 16 ++++++----
backend/src/typeorm/repository/User.ts | 31 +++++++++++++++++++
2 files changed, 41 insertions(+), 6 deletions(-)
diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts
index 54fe9335e..2b6138dee 100644
--- a/backend/src/graphql/resolver/AdminResolver.ts
+++ b/backend/src/graphql/resolver/AdminResolver.ts
@@ -32,7 +32,13 @@ export class AdminResolver {
@Args() { searchText, currentPage = 1, pageSize = 25, notActivated = false }: SearchUsersArgs,
): Promise {
const userRepository = getCustomRepository(UserRepository)
- const users = await userRepository.findBySearchCriteria(searchText)
+ let users: dbUser[]
+ let count: number
+ if(notActivated) {
+ [users, count] = await userRepository.findBySearchCriteriaPagedNotActivated(searchText, currentPage, pageSize)
+ } else {
+ [users, count] = await userRepository.findBySearchCriteriaPaged(searchText, currentPage, pageSize)
+ }
let adminUsers = await Promise.all(
users.map(async (user) => {
const adminUser = new UserAdmin()
@@ -41,16 +47,14 @@ export class AdminResolver {
adminUser.lastName = user.lastName
adminUser.email = user.email
adminUser.creation = await getUserCreations(user.id)
- adminUser.emailChecked = await hasActivatedEmail(user.email)
+ adminUser.emailChecked = user.emailChecked
adminUser.hasElopage = await hasElopageBuys(user.email)
return adminUser
}),
)
- if (notActivated) adminUsers = adminUsers.filter((u) => !u.emailChecked)
- const first = (currentPage - 1) * pageSize
return {
- userCount: adminUsers.length,
- userList: adminUsers.slice(first, first + pageSize),
+ userCount: count,
+ userList: adminUsers,
}
}
diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts
index 59d6ff465..bf9d55587 100644
--- a/backend/src/typeorm/repository/User.ts
+++ b/backend/src/typeorm/repository/User.ts
@@ -1,5 +1,6 @@
import { EntityRepository, Repository } from '@dbTools/typeorm'
import { User } from '@entity/User'
+import internal from 'stream'
@EntityRepository(User)
export class UserRepository extends Repository {
@@ -43,4 +44,34 @@ export class UserRepository extends Repository {
)
.getMany()
}
+ async findBySearchCriteriaPaged(searchCriteria: string, currentPage: number, pageSize: number): Promise<[User[], number]> {
+ return await this.createQueryBuilder('user')
+ .where(
+ 'user.firstName like :name or user.lastName like :lastName or user.email like :email',
+ {
+ name: `%${searchCriteria}%`,
+ lastName: `%${searchCriteria}%`,
+ email: `%${searchCriteria}%`,
+ },
+ )
+ .take(pageSize)
+ .skip((currentPage - 1 ) * pageSize)
+ .getManyAndCount()
+ }
+
+ async findBySearchCriteriaPagedNotActivated(searchCriteria: string, currentPage: number, pageSize: number): Promise<[User[], number]> {
+ return await this.createQueryBuilder('user')
+ .where(
+ 'user.firstName like :name or user.lastName like :lastName or user.email like :email',
+ {
+ name: `%${searchCriteria}%`,
+ lastName: `%${searchCriteria}%`,
+ email: `%${searchCriteria}%`,
+ emailChecked: false
+ },
+ )
+ .take(pageSize)
+ .skip((currentPage - 1 ) * pageSize)
+ .getManyAndCount()
+ }
}
From 26f537f6e31cda22fe3cec1976a374b9c146f5c5 Mon Sep 17 00:00:00 2001
From: ogerly
Date: Fri, 11 Feb 2022 14:00:53 +0100
Subject: [PATCH 002/110] confirm pending creation box, confirmbutton right
---
admin/src/components/UserTable.vue | 15 ++++++++++-----
1 file changed, 10 insertions(+), 5 deletions(-)
diff --git a/admin/src/components/UserTable.vue b/admin/src/components/UserTable.vue
index fb24cf0f1..932ea2d22 100644
--- a/admin/src/components/UserTable.vue
+++ b/admin/src/components/UserTable.vue
@@ -13,18 +13,23 @@
{{ overlayText.text2 }}
-
-
+
+
+
{{ overlayText.button_cancel }}
-
-
+
{{ overlayText.button_ok }}
-
+
+
+
+
+
From bc68db6b21301f531a8dac36af2a28a8ee86c40b Mon Sep 17 00:00:00 2001
From: ogerly
Date: Fri, 11 Feb 2022 14:01:31 +0100
Subject: [PATCH 003/110] confirm pending creation box, confirmbutton right,
yarn lint
---
admin/src/components/UserTable.vue | 28 +++++++++++++++-------------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/admin/src/components/UserTable.vue b/admin/src/components/UserTable.vue
index 932ea2d22..e2222fc0c 100644
--- a/admin/src/components/UserTable.vue
+++ b/admin/src/components/UserTable.vue
@@ -15,21 +15,23 @@
-
- {{ overlayText.button_cancel }}
-
-
- {{ overlayText.button_ok }}
-
+
+
+ {{ overlayText.button_cancel }}
+
+
+
+
+ {{ overlayText.button_ok }}
+
+
-
-
From 7834054a77dcb3e47383c4da017112d15afa0fe2 Mon Sep 17 00:00:00 2001
From: ogerly
Date: Fri, 11 Feb 2022 15:08:09 +0100
Subject: [PATCH 004/110] add components Overlay.vue, add localize for
Overlay.vue
---
admin/src/components/Overlay.vue | 66 +++++++++++++++++++++++++++++
admin/src/components/UserTable.vue | 68 ++++--------------------------
admin/src/locales/de.json | 4 +-
admin/src/locales/en.json | 3 +-
4 files changed, 80 insertions(+), 61 deletions(-)
create mode 100644 admin/src/components/Overlay.vue
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
new file mode 100644
index 000000000..e9af36cdd
--- /dev/null
+++ b/admin/src/components/Overlay.vue
@@ -0,0 +1,66 @@
+
+
+
+ {{ $t('overlay.confirm.title') }}
+
+
+ {{ $t('overlay.confirm.text') }}
+
+
+
+ {{ $t('name') }}
+ {{ items.firstName }} {{ items.lastName }}
+
+
+ {{ $t('e_mail') }}
+ {{ items.email }}
+
+
+ {{ $t('transactionlist.amount') }}
+ {{ items.amount }} GDD
+
+
+ {{ $t('transactionlist.memo') }}
+ {{ items.memo }}
+
+
+ {{ $t('creation_for_month') }}
+ {{ items.date }}
+
+
+
+
+
+
+ {{ $t('overlay.confirm.question') }}
+
+
+
+
+
+ {{ $t('overlay.confirm.cancel') }}
+
+
+
+
+ {{ $t('overlay.confirm.yes') }}
+
+
+
+
+
+
+
+
diff --git a/admin/src/components/UserTable.vue b/admin/src/components/UserTable.vue
index e2222fc0c..de59cb277 100644
--- a/admin/src/components/UserTable.vue
+++ b/admin/src/components/UserTable.vue
@@ -1,38 +1,7 @@
-
-
- {{ overlayText.header }}
-
-
- {{ overlayText.text1 }}
-
-
-
-
-
- {{ overlayText.text2 }}
-
-
-
-
-
- {{ overlayText.button_cancel }}
-
-
-
-
- {{ overlayText.button_ok }}
-
-
-
-
-
+
+
@@ -159,7 +128,7 @@
variant="success"
v-show="type === 'PageCreationConfirm'"
size="md"
- @click="overlayShow('confirm', row.item)"
+ @click="overlayShow(row.item)"
class="mr-2"
>
@@ -170,6 +139,7 @@
From 73bded2bf610c0fe5172973b6ca781c138bfac30 Mon Sep 17 00:00:00 2001
From: Alexander Friedland
Date: Tue, 15 Feb 2022 14:06:30 +0100
Subject: [PATCH 019/110] Update admin/src/components/Overlay.vue
Co-authored-by: Moriz Wahl
---
admin/src/components/Overlay.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
index 5890d8b41..aaf50b2f7 100644
--- a/admin/src/components/Overlay.vue
+++ b/admin/src/components/Overlay.vue
@@ -18,7 +18,7 @@
{{ $t('transactionlist.memo') }}
- {{ items.memo }}
+ {{ item.memo }}
{{ $t('name') }}
From 13e0d99dbf5987667366c641ffb1133fe3cb709f Mon Sep 17 00:00:00 2001
From: Alexander Friedland
Date: Tue, 15 Feb 2022 14:06:38 +0100
Subject: [PATCH 020/110] Update admin/src/components/Overlay.vue
Co-authored-by: Moriz Wahl
---
admin/src/components/Overlay.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
index aaf50b2f7..25ca9d254 100644
--- a/admin/src/components/Overlay.vue
+++ b/admin/src/components/Overlay.vue
@@ -26,7 +26,7 @@
{{ $t('e_mail') }}
- {{ items.email }}
+ {{ item.email }}
From 71e1cd50e987802396f3d4823c282d61814c0c58 Mon Sep 17 00:00:00 2001
From: Alexander Friedland
Date: Tue, 15 Feb 2022 14:06:45 +0100
Subject: [PATCH 021/110] Update admin/src/pages/CreationConfirm.vue
Co-authored-by: Moriz Wahl
---
admin/src/pages/CreationConfirm.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/src/pages/CreationConfirm.vue b/admin/src/pages/CreationConfirm.vue
index 304d628b5..2334a5a8b 100644
--- a/admin/src/pages/CreationConfirm.vue
+++ b/admin/src/pages/CreationConfirm.vue
@@ -2,7 +2,7 @@
From 39e38bea2c901f697b9d3af1429d909590528b6c Mon Sep 17 00:00:00 2001
From: Alexander Friedland
Date: Tue, 15 Feb 2022 14:06:56 +0100
Subject: [PATCH 022/110] Update admin/src/components/Overlay.vue
Co-authored-by: Moriz Wahl
---
admin/src/components/Overlay.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
index 25ca9d254..af1c428b4 100644
--- a/admin/src/components/Overlay.vue
+++ b/admin/src/components/Overlay.vue
@@ -47,7 +47,7 @@
size="md"
variant="success"
class="m-3 text-right"
- @click="$emit('confirm-creation', items)"
+ @click="$emit('confirm-creation', item)"
>
{{ $t('overlay.confirm.yes') }}
From 0d3efa9900985207a78f2f80ce938a23949dd146 Mon Sep 17 00:00:00 2001
From: Alexander Friedland
Date: Tue, 15 Feb 2022 14:07:06 +0100
Subject: [PATCH 023/110] Update admin/src/components/Overlay.vue
Co-authored-by: Moriz Wahl
---
admin/src/components/Overlay.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
index af1c428b4..6a4e3e94a 100644
--- a/admin/src/components/Overlay.vue
+++ b/admin/src/components/Overlay.vue
@@ -22,7 +22,7 @@
{{ $t('name') }}
- {{ items.firstName }} {{ items.lastName }}
+ {{ item.firstName }} {{ item.lastName }}
{{ $t('e_mail') }}
From 9f87e7a8c6d0d5d32998247b2b0d536442016396 Mon Sep 17 00:00:00 2001
From: Alexander Friedland
Date: Tue, 15 Feb 2022 14:07:22 +0100
Subject: [PATCH 024/110] Update admin/src/components/Overlay.vue
Co-authored-by: Moriz Wahl
---
admin/src/components/Overlay.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
index 6a4e3e94a..b6afb28e4 100644
--- a/admin/src/components/Overlay.vue
+++ b/admin/src/components/Overlay.vue
@@ -7,7 +7,7 @@
{{ $t('transactionlist.amount') }}
- {{ items.amount }} GDD
+ {{ item.amount }} GDD
From e83e65aca73b055722f08e127bf018c2e8014cb0 Mon Sep 17 00:00:00 2001
From: Alexander Friedland
Date: Tue, 15 Feb 2022 14:07:32 +0100
Subject: [PATCH 025/110] Update admin/src/components/Overlay.vue
Co-authored-by: Moriz Wahl
---
admin/src/components/Overlay.vue | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/admin/src/components/Overlay.vue b/admin/src/components/Overlay.vue
index b6afb28e4..bf477c491 100644
--- a/admin/src/components/Overlay.vue
+++ b/admin/src/components/Overlay.vue
@@ -13,7 +13,7 @@
{{ $t('creation_for_month') }}
- {{ $d(new Date(items.date), 'month') }} {{ $d(new Date(items.date), 'year') }}
+ {{ $d(new Date(item.date), 'month') }} {{ $d(new Date(item.date), 'year') }}
From a3d697182dc88f7973f3148aa84c3db24ba04e0b Mon Sep 17 00:00:00 2001
From: Moriz Wahl
Date: Wed, 16 Feb 2022 12:26:27 +0100
Subject: [PATCH 026/110] fix: Backend Unit Tests Running Again
---
backend/jest.config.js | 36 +++++++++++++++++-------------------
backend/test/testSetup.ts | 6 ++++++
2 files changed, 23 insertions(+), 19 deletions(-)
create mode 100644 backend/test/testSetup.ts
diff --git a/backend/jest.config.js b/backend/jest.config.js
index 75b674cb1..d9e7065d4 100644
--- a/backend/jest.config.js
+++ b/backend/jest.config.js
@@ -1,21 +1,19 @@
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
-module.exports = async () => {
- process.env.TZ = 'UTC'
- return {
- verbose: true,
- preset: 'ts-jest',
- collectCoverage: true,
- collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**'],
- moduleNameMapper: {
- '@entity/(.*)': '/../database/build/entity/$1',
- // This is hack to fix a problem with the library `ts-mysql-migrate` which does differentiate between its ts/js state
- '@dbTools/(.*)': '/../database/src/$1',
- /*
- '@dbTools/(.*)':
- process.env.NODE_ENV === 'development'
- ? '/../database/src/$1'
- : '/../database/build/src/$1',
- */
- },
- }
+module.exports = {
+ verbose: true,
+ preset: 'ts-jest',
+ collectCoverage: true,
+ collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**'],
+ setupFiles: ['/test/testSetup.ts'],
+ moduleNameMapper: {
+ '@entity/(.*)':
+ process.env.NODE_ENV === 'development'
+ ? '/../database/entity/$1'
+ : '/../database/build/entity/$1',
+ // This is hack to fix a problem with the library `ts-mysql-migrate` which does differentiate between its ts/js state
+ '@dbTools/(.*)':
+ process.env.NODE_ENV === 'development'
+ ? '/../database/src/$1'
+ : '/../database/build/src/$1',
+ },
}
diff --git a/backend/test/testSetup.ts b/backend/test/testSetup.ts
new file mode 100644
index 000000000..ed2c5cf49
--- /dev/null
+++ b/backend/test/testSetup.ts
@@ -0,0 +1,6 @@
+/* eslint-disable no-console */
+
+// disable console.info for apollo log
+
+// eslint-disable-next-line @typescript-eslint/no-empty-function
+console.info = () => {}
From fccf64ec3623ba155a850bc0811b4007bca6559c Mon Sep 17 00:00:00 2001
From: Moriz Wahl
Date: Wed, 16 Feb 2022 12:29:24 +0100
Subject: [PATCH 027/110] set time zone in package json
---
backend/package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/backend/package.json b/backend/package.json
index 7f4cfc239..b72386a68 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -14,7 +14,7 @@
"dev": "nodemon -w src --ext ts --exec ts-node src/index.ts",
"lint": "eslint . --ext .js,.ts",
"CI_workflow_test": "jest --runInBand --coverage ",
- "test": "NODE_ENV=development jest --runInBand --coverage "
+ "test": "TZ=UTC NODE_ENV=development jest --runInBand --coverage "
},
"dependencies": {
"@types/jest": "^27.0.2",
From 1335bb8e26cd9f30ba65f8edeb9e4ac0461c2c92 Mon Sep 17 00:00:00 2001
From: Moriz Wahl
Date: Wed, 16 Feb 2022 13:18:59 +0100
Subject: [PATCH 028/110] activate UserResolver test again
---
.../{UserResolver.test.ts.disabled => UserResolver.test.ts} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename backend/src/graphql/resolver/{UserResolver.test.ts.disabled => UserResolver.test.ts} (100%)
diff --git a/backend/src/graphql/resolver/UserResolver.test.ts.disabled b/backend/src/graphql/resolver/UserResolver.test.ts
similarity index 100%
rename from backend/src/graphql/resolver/UserResolver.test.ts.disabled
rename to backend/src/graphql/resolver/UserResolver.test.ts
From 631346b63cab4b0f620fc4366e042aa71b645811 Mon Sep 17 00:00:00 2001
From: Moriz Wahl
Date: Wed, 16 Feb 2022 13:19:27 +0100
Subject: [PATCH 029/110] remove deleted entities
---
.../src/graphql/resolver/UserResolver.test.ts | 54 +++-------------
backend/src/server/plugins.ts | 64 ++++++++++---------
2 files changed, 43 insertions(+), 75 deletions(-)
diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts
index 02e490edd..2ba9374f0 100644
--- a/backend/src/graphql/resolver/UserResolver.test.ts
+++ b/backend/src/graphql/resolver/UserResolver.test.ts
@@ -7,8 +7,6 @@ import { GraphQLError } from 'graphql'
import createServer from '../../server/createServer'
import { resetDB, initialize } from '@dbTools/helpers'
import { getRepository } from 'typeorm'
-import { LoginUser } from '@entity/LoginUser'
-import { LoginUserBackup } from '@entity/LoginUserBackup'
import { LoginEmailOptIn } from '@entity/LoginEmailOptIn'
import { User } from '@entity/User'
import CONFIG from '../../config'
@@ -84,16 +82,10 @@ describe('UserResolver', () => {
})
describe('valid input data', () => {
- let loginUser: LoginUser[]
let user: User[]
- let loginUserBackup: LoginUserBackup[]
let loginEmailOptIn: LoginEmailOptIn[]
beforeAll(async () => {
- loginUser = await getRepository(LoginUser).createQueryBuilder('login_user').getMany()
user = await getRepository(User).createQueryBuilder('state_user').getMany()
- loginUserBackup = await getRepository(LoginUserBackup)
- .createQueryBuilder('login_user_backup')
- .getMany()
loginEmailOptIn = await getRepository(LoginEmailOptIn)
.createQueryBuilder('login_email_optin')
.getMany()
@@ -102,7 +94,7 @@ describe('UserResolver', () => {
describe('filling all tables', () => {
it('saves the user in login_user table', () => {
- expect(loginUser).toEqual([
+ expect(user).toEqual([
{
id: expect.any(Number),
email: 'peter@lustig.de',
@@ -141,22 +133,11 @@ describe('UserResolver', () => {
])
})
- it('saves the user in login_user_backup table', () => {
- expect(loginUserBackup).toEqual([
- {
- id: expect.any(Number),
- passphrase: expect.any(String),
- userId: loginUser[0].id,
- mnemonicType: 2,
- },
- ])
- })
-
it('creates an email optin', () => {
expect(loginEmailOptIn).toEqual([
{
id: expect.any(Number),
- userId: loginUser[0].id,
+ userId: user[0].id,
verificationCode: expect.any(String),
emailOptInTypeId: 1,
createdAt: expect.any(Date),
@@ -196,9 +177,7 @@ describe('UserResolver', () => {
mutation,
variables: { ...variables, email: 'bibi@bloxberg.de', language: 'es' },
})
- await expect(
- getRepository(LoginUser).createQueryBuilder('login_user').getMany(),
- ).resolves.toEqual(
+ await expect(getRepository(User).createQueryBuilder('user').getMany()).resolves.toEqual(
expect.arrayContaining([
expect.objectContaining({
email: 'bibi@bloxberg.de',
@@ -215,9 +194,7 @@ describe('UserResolver', () => {
mutation,
variables: { ...variables, email: 'raeuber@hotzenplotz.de', publisherId: undefined },
})
- await expect(
- getRepository(LoginUser).createQueryBuilder('login_user').getMany(),
- ).resolves.toEqual(
+ await expect(getRepository(User).createQueryBuilder('user').getMany()).resolves.toEqual(
expect.arrayContaining([
expect.objectContaining({
email: 'raeuber@hotzenplotz.de',
@@ -274,13 +251,11 @@ describe('UserResolver', () => {
const loginEmailOptIn = await getRepository(LoginEmailOptIn)
.createQueryBuilder('login_email_optin')
.getMany()
- loginUser = await getRepository(LoginUser).createQueryBuilder('login_user').getMany()
emailOptIn = loginEmailOptIn[0].verificationCode.toString()
result = await mutate({
mutation: setPasswordMutation,
variables: { code: emailOptIn, password: 'Aa12345_' },
})
- newLoginUser = await getRepository(LoginUser).createQueryBuilder('login_user').getMany()
newUser = await getRepository(User).createQueryBuilder('state_user').getMany()
})
@@ -296,31 +271,22 @@ describe('UserResolver', () => {
expect(newLoginUser[0].password).toEqual('3917921995996627700')
})
- it('updates the public Key on both user tables', () => {
- expect(newLoginUser[0].pubKey).toEqual(expect.any(Buffer))
- expect(newLoginUser[0].pubKey).not.toEqual(loginUser[0].pubKey)
- expect(newLoginUser[0].pubKey).toEqual(newUser[0].pubkey)
- })
-
- it('updates the private Key', () => {
- expect(newLoginUser[0].privKey).toEqual(expect.any(Buffer))
- expect(newLoginUser[0].privKey).not.toEqual(loginUser[0].privKey)
- })
-
it('removes the optin', async () => {
await expect(
getRepository(LoginEmailOptIn).createQueryBuilder('login_email_optin').getMany(),
).resolves.toHaveLength(0)
})
+ /*
it('calls the klicktipp API', () => {
expect(klicktippSignIn).toBeCalledWith(
- loginUser[0].email,
- loginUser[0].language,
- loginUser[0].firstName,
- loginUser[0].lastName,
+ user[0].email,
+ user[0].language,
+ user[0].firstName,
+ user[0].lastName,
)
})
+ */
it('returns true', () => {
expect(result).toBeTruthy()
diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts
index 049f63a08..a407135ea 100644
--- a/backend/src/server/plugins.ts
+++ b/backend/src/server/plugins.ts
@@ -4,40 +4,42 @@
import { ApolloLogPlugin, LogMutateData } from 'apollo-log'
import cloneDeep from 'lodash.clonedeep'
-const plugins = [
- {
- requestDidStart() {
- return {
- willSendResponse(requestContext: any) {
- const { setHeaders = [] } = requestContext.context
- setHeaders.forEach(({ key, value }: { [key: string]: string }) => {
- if (requestContext.response.http.headers.get(key)) {
- requestContext.response.http.headers.set(key, value)
- } else {
- requestContext.response.http.headers.append(key, value)
- }
- })
- return requestContext
- },
- }
- },
+const setHeadersPlugin = {
+ requestDidStart() {
+ return {
+ willSendResponse(requestContext: any) {
+ const { setHeaders = [] } = requestContext.context
+ setHeaders.forEach(({ key, value }: { [key: string]: string }) => {
+ if (requestContext.response.http.headers.get(key)) {
+ requestContext.response.http.headers.set(key, value)
+ } else {
+ requestContext.response.http.headers.append(key, value)
+ }
+ })
+ return requestContext
+ },
+ }
},
- ApolloLogPlugin({
- mutate: (data: LogMutateData) => {
- // We need to deep clone the object in order to not modify the actual request
- const dataCopy = cloneDeep(data)
+}
- // mask password if part of the query
- if (dataCopy.context.request.variables && dataCopy.context.request.variables.password) {
- dataCopy.context.request.variables.password = '***'
- }
+const apolloLogPlugin = ApolloLogPlugin({
+ mutate: (data: LogMutateData) => {
+ // We need to deep clone the object in order to not modify the actual request
+ const dataCopy = cloneDeep(data)
- // mask token at all times
- dataCopy.context.context.token = '***'
+ // mask password if part of the query
+ if (dataCopy.context.request.variables && dataCopy.context.request.variables.password) {
+ dataCopy.context.request.variables.password = '***'
+ }
- return dataCopy
- },
- }),
-]
+ // mask token at all times
+ dataCopy.context.context.token = '***'
+
+ return dataCopy
+ },
+})
+
+const plugins =
+ process.env.NODE_ENV === 'development' ? [setHeadersPlugin] : [setHeadersPlugin, apolloLogPlugin]
export default plugins
From fe8546da08d7dee97b1f6c581290f5c70aea0aa5 Mon Sep 17 00:00:00 2001
From: Moriz Wahl
Date: Wed, 16 Feb 2022 13:19:46 +0100
Subject: [PATCH 030/110] add typeorm package
---
backend/package.json | 3 +-
backend/yarn.lock | 186 ++++++++++++++++++++++++++++++++++++++++++-
2 files changed, 184 insertions(+), 5 deletions(-)
diff --git a/backend/package.json b/backend/package.json
index b72386a68..c9b2fea30 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -39,7 +39,8 @@
"reflect-metadata": "^0.1.13",
"sodium-native": "^3.3.0",
"ts-jest": "^27.0.5",
- "type-graphql": "^1.1.1"
+ "type-graphql": "^1.1.1",
+ "typeorm": "^0.2.41"
},
"devDependencies": {
"@types/express": "^4.17.12",
diff --git a/backend/yarn.lock b/backend/yarn.lock
index 6ef0d5701..bee9cce71 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -677,6 +677,11 @@
dependencies:
"@sinonjs/commons" "^1.7.0"
+"@sqltools/formatter@^1.2.2":
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20"
+ integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg==
+
"@szmarczak/http-timer@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421"
@@ -1019,6 +1024,11 @@
dependencies:
"@types/yargs-parser" "*"
+"@types/zen-observable@0.8.3":
+ version "0.8.3"
+ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3"
+ integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw==
+
"@typescript-eslint/eslint-plugin@^4.28.0":
version "4.33.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276"
@@ -1217,6 +1227,11 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
+any-promise@^1.0.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+ integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
+
anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
@@ -1423,6 +1438,11 @@ apollo-utilities@^1.0.1, apollo-utilities@^1.3.0:
ts-invariant "^0.4.0"
tslib "^1.10.0"
+app-root-path@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad"
+ integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==
+
arg@^4.1.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
@@ -1435,6 +1455,11 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
@@ -1560,6 +1585,11 @@ balanced-match@^1.0.0:
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
@@ -1650,6 +1680,14 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
busboy@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.3.1.tgz#170899274c5bf38aae27d5c62b71268cd585fd1b"
@@ -1769,6 +1807,18 @@ cli-boxes@^2.2.1:
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+cli-highlight@^2.1.11:
+ version "2.1.11"
+ resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf"
+ integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==
+ dependencies:
+ chalk "^4.0.0"
+ highlight.js "^10.7.1"
+ mz "^2.4.0"
+ parse5 "^5.1.1"
+ parse5-htmlparser2-tree-adapter "^6.0.0"
+ yargs "^16.0.0"
+
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -2092,6 +2142,11 @@ dotenv@^10.0.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81"
integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==
+dotenv@^8.2.0:
+ version "8.6.0"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
+ integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
+
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
@@ -2881,6 +2936,11 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+highlight.js@^10.7.1:
+ version "10.7.3"
+ resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531"
+ integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==
+
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
@@ -2972,6 +3032,11 @@ iconv-lite@^0.6.2:
dependencies:
safer-buffer ">= 2.1.2 < 3.0.0"
+ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
ignore-by-default@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
@@ -3711,6 +3776,13 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsdom@^16.6.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@@ -4087,6 +4159,11 @@ minimist@^1.2.0, minimist@^1.2.5:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
+mkdirp@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
module-alias@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0"
@@ -4131,6 +4208,15 @@ mysql2@^2.3.0:
seq-queue "^0.0.5"
sqlstring "^2.3.2"
+mz@^2.4.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
+ integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
+ dependencies:
+ any-promise "^1.0.0"
+ object-assign "^4.0.1"
+ thenify-all "^1.0.0"
+
named-placeholders@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8"
@@ -4240,7 +4326,7 @@ nwsapi@^2.2.0:
resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
-object-assign@^4:
+object-assign@^4, object-assign@^4.0.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
@@ -4401,11 +4487,23 @@ parse-json@^4.0.0:
error-ex "^1.3.1"
json-parse-better-errors "^1.0.1"
-parse5@6.0.1:
+parse5-htmlparser2-tree-adapter@^6.0.0:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6"
+ integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==
+ dependencies:
+ parse5 "^6.0.1"
+
+parse5@6.0.1, parse5@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
+parse5@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
parseurl@^1.3.2, parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -4763,6 +4861,11 @@ safe-buffer@^5.0.1:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+sax@>=0.6.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
saxes@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
@@ -5123,6 +5226,20 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+thenify-all@^1.0.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
+ integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=
+ dependencies:
+ thenify ">= 3.1.0 < 4"
+
+"thenify@>= 3.1.0 < 4":
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
+ integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
+ dependencies:
+ any-promise "^1.0.0"
+
throat@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
@@ -5307,6 +5424,28 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
+typeorm@^0.2.41:
+ version "0.2.41"
+ resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.41.tgz#88758101ac158dc0a0a903d70eaacea2974281cc"
+ integrity sha512-/d8CLJJxKPgsnrZWiMyPI0rz2MFZnBQrnQ5XP3Vu3mswv2WPexb58QM6BEtmRmlTMYN5KFWUz8SKluze+wS9xw==
+ dependencies:
+ "@sqltools/formatter" "^1.2.2"
+ app-root-path "^3.0.0"
+ buffer "^6.0.3"
+ chalk "^4.1.0"
+ cli-highlight "^2.1.11"
+ debug "^4.3.1"
+ dotenv "^8.2.0"
+ glob "^7.1.6"
+ js-yaml "^4.0.0"
+ mkdirp "^1.0.4"
+ reflect-metadata "^0.1.13"
+ sha.js "^2.4.11"
+ tslib "^2.1.0"
+ xml2js "^0.4.23"
+ yargs "^17.0.1"
+ zen-observable-ts "^1.0.0"
+
typescript@^4.3.4:
version "4.4.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
@@ -5572,6 +5711,19 @@ xml-name-validator@^3.0.0:
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+xml2js@^0.4.23:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66"
+ integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~11.0.0"
+
+xmlbuilder@~11.0.0:
+ version "11.0.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
+ integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
+
xmlchars@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
@@ -5605,7 +5757,12 @@ yargs-parser@20.x, yargs-parser@^20.2.2:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
-yargs@^16.2.0:
+yargs-parser@^21.0.0:
+ version "21.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.0.tgz#a485d3966be4317426dd56bdb6a30131b281dc55"
+ integrity sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==
+
+yargs@^16.0.0, yargs@^16.2.0:
version "16.2.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
@@ -5618,6 +5775,19 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
+yargs@^17.0.1:
+ version "17.3.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.3.1.tgz#da56b28f32e2fd45aefb402ed9c26f42be4c07b9"
+ integrity sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.3"
+ y18n "^5.0.5"
+ yargs-parser "^21.0.0"
+
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
@@ -5631,7 +5801,15 @@ zen-observable-ts@^0.8.21:
tslib "^1.9.3"
zen-observable "^0.8.0"
-zen-observable@^0.8.0:
+zen-observable-ts@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83"
+ integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA==
+ dependencies:
+ "@types/zen-observable" "0.8.3"
+ zen-observable "0.8.15"
+
+zen-observable@0.8.15, zen-observable@^0.8.0:
version "0.8.15"
resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15"
integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==
From b514539917051f2dfcdb06e5eca5611062fb8f39 Mon Sep 17 00:00:00 2001
From: ogerly
Date: Thu, 17 Feb 2022 09:03:31 +0100
Subject: [PATCH 031/110] add version in footer
---
admin/src/components/ContentFooter.vue | 42 ++++++++++++++++++++++----
1 file changed, 36 insertions(+), 6 deletions(-)
diff --git a/admin/src/components/ContentFooter.vue b/admin/src/components/ContentFooter.vue
index 1e7e20f9e..510318e61 100644
--- a/admin/src/components/ContentFooter.vue
+++ b/admin/src/components/ContentFooter.vue
@@ -1,15 +1,45 @@
-
+
-
-
- {{ $t('gradido_admin_footer') }}
-
Version: 1.0.0
-
+
+
+
+
+
From 68d53bc6bc0dbc236cd1ad2159c14c009d015cbe Mon Sep 17 00:00:00 2001
From: ogerly
Date: Thu, 17 Feb 2022 09:30:17 +0100
Subject: [PATCH 032/110] add go -1 back if 404 page not found in adminarea
---
admin/src/components/NotFoundPage.vue | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/admin/src/components/NotFoundPage.vue b/admin/src/components/NotFoundPage.vue
index 68a8fb3c4..bc3a02336 100755
--- a/admin/src/components/NotFoundPage.vue
+++ b/admin/src/components/NotFoundPage.vue
@@ -4,7 +4,7 @@
- zurück
+ {{ $t('back') }}
From f7fa134346f673461656a42fa5a7eb5f5786867d Mon Sep 17 00:00:00 2001
From: ogerly
Date: Thu, 17 Feb 2022 09:57:52 +0100
Subject: [PATCH 038/110] yarn test fixed
---
frontend/src/views/NotFoundPage.spec.js | 12 ++++++++++--
frontend/src/views/NotFoundPage.vue | 5 ++++-
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/frontend/src/views/NotFoundPage.spec.js b/frontend/src/views/NotFoundPage.spec.js
index 709b24807..c14f03b4f 100644
--- a/frontend/src/views/NotFoundPage.spec.js
+++ b/frontend/src/views/NotFoundPage.spec.js
@@ -3,11 +3,15 @@ import NotFoundPage from './NotFoundPage'
const localVue = global.localVue
+const mocks = {
+ $t: jest.fn((t) => t),
+}
+
describe('NotFoundPage', () => {
let wrapper
const Wrapper = () => {
- return mount(NotFoundPage, { localVue })
+ return mount(NotFoundPage, { localVue, mocks })
}
describe('mount', () => {
@@ -16,7 +20,11 @@ describe('NotFoundPage', () => {
})
it('has a svg', () => {
- expect(wrapper.find('svg').exists()).toBeTruthy()
+ expect(wrapper.find('svg.test-404').exists()).toBeTruthy()
+ })
+
+ it('has a back button', () => {
+ expect(wrapper.find('.test-back').exists()).toBeTruthy()
})
})
})
diff --git a/frontend/src/views/NotFoundPage.vue b/frontend/src/views/NotFoundPage.vue
index 2efa6a4dc..3fe01d091 100755
--- a/frontend/src/views/NotFoundPage.vue
+++ b/frontend/src/views/NotFoundPage.vue
@@ -9,6 +9,7 @@
- {{ $t('back') }}
+
+ {{ $t('back') }}
+
From bc43c495ad342330dae974c5d13f90ae40719c56 Mon Sep 17 00:00:00 2001
From: Ulf Gebhardt
Date: Thu, 17 Feb 2022 10:00:02 +0100
Subject: [PATCH 039/110] replace `disabled` (flag) with `deletedAt` (date) on
`users`
---
.../0023-users_disabled_soft_delete/User.ts | 75 +++++++++++++++++++
database/entity/User.ts | 2 +-
.../0023-users_disabled_soft_delete.ts | 26 +++++++
3 files changed, 102 insertions(+), 1 deletion(-)
create mode 100644 database/entity/0023-users_disabled_soft_delete/User.ts
create mode 100644 database/migrations/0023-users_disabled_soft_delete.ts
diff --git a/database/entity/0023-users_disabled_soft_delete/User.ts b/database/entity/0023-users_disabled_soft_delete/User.ts
new file mode 100644
index 000000000..107b43f18
--- /dev/null
+++ b/database/entity/0023-users_disabled_soft_delete/User.ts
@@ -0,0 +1,75 @@
+import {
+ BaseEntity,
+ Entity,
+ PrimaryGeneratedColumn,
+ Column,
+ OneToMany,
+ DeleteDateColumn,
+} from 'typeorm'
+import { UserSetting } from '../UserSetting'
+
+@Entity('users', { engine: 'InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' })
+export class User extends BaseEntity {
+ @PrimaryGeneratedColumn('increment', { unsigned: true })
+ id: number
+
+ @Column({ name: 'public_key', type: 'binary', length: 32, default: null, nullable: true })
+ pubKey: Buffer
+
+ @Column({ name: 'privkey', type: 'binary', length: 80, default: null, nullable: true })
+ privKey: Buffer
+
+ @Column({ length: 255, unique: true, nullable: false, collation: 'utf8mb4_unicode_ci' })
+ email: string
+
+ @Column({
+ name: 'first_name',
+ length: 255,
+ nullable: true,
+ default: null,
+ collation: 'utf8mb4_unicode_ci',
+ })
+ firstName: string
+
+ @Column({
+ name: 'last_name',
+ length: 255,
+ nullable: true,
+ default: null,
+ collation: 'utf8mb4_unicode_ci',
+ })
+ lastName: string
+
+ @DeleteDateColumn()
+ deletedAt: Date
+
+ @Column({ type: 'bigint', default: 0, unsigned: true })
+ password: BigInt
+
+ @Column({ name: 'email_hash', type: 'binary', length: 32, default: null, nullable: true })
+ emailHash: Buffer
+
+ @Column({ name: 'created', default: () => 'CURRENT_TIMESTAMP', nullable: false })
+ createdAt: Date
+
+ @Column({ name: 'email_checked', type: 'bool', nullable: false, default: false })
+ emailChecked: boolean
+
+ @Column({ length: 4, default: 'de', collation: 'utf8mb4_unicode_ci', nullable: false })
+ language: string
+
+ @Column({ name: 'publisher_id', default: 0 })
+ publisherId: number
+
+ @Column({
+ type: 'text',
+ name: 'passphrase',
+ collation: 'utf8mb4_unicode_ci',
+ nullable: true,
+ default: null,
+ })
+ passphrase: string
+
+ @OneToMany(() => UserSetting, (userSetting) => userSetting.user)
+ settings: UserSetting[]
+}
diff --git a/database/entity/User.ts b/database/entity/User.ts
index 867d63112..d2c201c54 100644
--- a/database/entity/User.ts
+++ b/database/entity/User.ts
@@ -1 +1 @@
-export { User } from './0020-rename_and_clean_state_users/User'
+export { User } from './0023-users_disabled_soft_delete/User'
diff --git a/database/migrations/0023-users_disabled_soft_delete.ts b/database/migrations/0023-users_disabled_soft_delete.ts
new file mode 100644
index 000000000..2e62d4b71
--- /dev/null
+++ b/database/migrations/0023-users_disabled_soft_delete.ts
@@ -0,0 +1,26 @@
+/* MIGRATION TO IMPLEMENT SOFT DELETE ON THE USERS TABLE
+ *
+ * Replace the `disabled` column with `deletedAt` containing
+ * a date as it is standard for soft delete fields
+ */
+
+export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) {
+ // Create new `deletedAt` column
+ await queryFn(
+ 'ALTER TABLE `users` ADD COLUMN `deletedAt` datetime DEFAULT NULL AFTER `disabled`;',
+ )
+
+ // Insert a 1.1.2022 as date for those users with `disabled=1`
+ await queryFn('UPDATE `users` SET `deletedAt` = "2022-01-01 00:00:00" WHERE `disabled` = 1;')
+
+ // Delete `disabled` column
+ await queryFn('ALTER TABLE `users` DROP COLUMN `disabled`;')
+}
+
+export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) {
+ await queryFn(
+ 'ALTER TABLE `users` ADD COLUMN `disabled` tinyint(4) NOT NULL DEFAULT 0 AFTER `deletedAt`;',
+ )
+ await queryFn('UPDATE `users` SET `disabled` = 1 WHERE `deletedAt` IS NOT NULL;')
+ await queryFn('ALTER TABLE `users` DROP COLUMN `deletedAt`;')
+}
From f6776576284a19bb110b16744d8e448ef6ba0f25 Mon Sep 17 00:00:00 2001
From: ogerly
Date: Thu, 17 Feb 2022 10:01:19 +0100
Subject: [PATCH 040/110] yarn test fixed adminarea
---
admin/src/components/NotFoundPage.spec.js | 10 +++++++++-
admin/src/components/NotFoundPage.vue | 4 +++-
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/admin/src/components/NotFoundPage.spec.js b/admin/src/components/NotFoundPage.spec.js
index 709b24807..99eef569b 100644
--- a/admin/src/components/NotFoundPage.spec.js
+++ b/admin/src/components/NotFoundPage.spec.js
@@ -3,11 +3,15 @@ import NotFoundPage from './NotFoundPage'
const localVue = global.localVue
+const mocks = {
+ $t: jest.fn((t) => t),
+}
+
describe('NotFoundPage', () => {
let wrapper
const Wrapper = () => {
- return mount(NotFoundPage, { localVue })
+ return mount(NotFoundPage, { localVue, mocks })
}
describe('mount', () => {
@@ -18,5 +22,9 @@ describe('NotFoundPage', () => {
it('has a svg', () => {
expect(wrapper.find('svg').exists()).toBeTruthy()
})
+
+ it('has a back button', () => {
+ expect(wrapper.find('.test-back').exists()).toBeTruthy()
+ })
})
})
diff --git a/admin/src/components/NotFoundPage.vue b/admin/src/components/NotFoundPage.vue
index 2efa6a4dc..b42c3d8bb 100755
--- a/admin/src/components/NotFoundPage.vue
+++ b/admin/src/components/NotFoundPage.vue
@@ -1186,7 +1186,9 @@
- {{ $t('back') }}
+
+ {{ $t('back') }}
+
From a0b8d8266f3fe291d08cb46223ebf3d249edb390 Mon Sep 17 00:00:00 2001
From: ogerly
Date: Thu, 17 Feb 2022 10:01:46 +0100
Subject: [PATCH 041/110] yarn test fixed frontend walet
---
frontend/src/views/NotFoundPage.spec.js | 2 +-
frontend/src/views/NotFoundPage.vue | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/frontend/src/views/NotFoundPage.spec.js b/frontend/src/views/NotFoundPage.spec.js
index c14f03b4f..99eef569b 100644
--- a/frontend/src/views/NotFoundPage.spec.js
+++ b/frontend/src/views/NotFoundPage.spec.js
@@ -20,7 +20,7 @@ describe('NotFoundPage', () => {
})
it('has a svg', () => {
- expect(wrapper.find('svg.test-404').exists()).toBeTruthy()
+ expect(wrapper.find('svg').exists()).toBeTruthy()
})
it('has a back button', () => {
diff --git a/frontend/src/views/NotFoundPage.vue b/frontend/src/views/NotFoundPage.vue
index 3fe01d091..b42c3d8bb 100755
--- a/frontend/src/views/NotFoundPage.vue
+++ b/frontend/src/views/NotFoundPage.vue
@@ -9,7 +9,6 @@