From 145989e2848af0a9c32e32c99327d0616d1bf5dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 19 Apr 2022 14:43:25 +0200 Subject: [PATCH 001/162] Replace notActivated by isEmailChecked --- admin/src/graphql/searchUsers.js | 4 ++-- admin/src/pages/Creation.spec.js | 8 ++++---- admin/src/pages/Creation.vue | 2 +- admin/src/pages/UserSearch.spec.js | 12 ++++++------ admin/src/pages/UserSearch.vue | 2 +- backend/src/graphql/arg/SearchUsersArgs.ts | 2 +- backend/src/graphql/resolver/AdminResolver.ts | 6 +++--- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/admin/src/graphql/searchUsers.js b/admin/src/graphql/searchUsers.js index e28508d1b..889b01972 100644 --- a/admin/src/graphql/searchUsers.js +++ b/admin/src/graphql/searchUsers.js @@ -5,14 +5,14 @@ export const searchUsers = gql` $searchText: String! $currentPage: Int $pageSize: Int - $notActivated: Boolean + $isEmailChecked: Boolean $isDeleted: Boolean ) { searchUsers( searchText: $searchText currentPage: $currentPage pageSize: $pageSize - notActivated: $notActivated + isEmailChecked: $isEmailChecked isDeleted: $isDeleted ) { userCount diff --git a/admin/src/pages/Creation.spec.js b/admin/src/pages/Creation.spec.js index 204c35817..58c7e3796 100644 --- a/admin/src/pages/Creation.spec.js +++ b/admin/src/pages/Creation.spec.js @@ -71,8 +71,8 @@ describe('Creation', () => { searchText: '', currentPage: 1, pageSize: 25, + isEmailChecked: true, isDeleted: false, - notActivated: false, }, }), ) @@ -271,8 +271,8 @@ describe('Creation', () => { searchText: 'XX', currentPage: 1, pageSize: 25, + isEmailChecked: true, isDeleted: false, - notActivated: false, }, }), ) @@ -288,8 +288,8 @@ describe('Creation', () => { searchText: '', currentPage: 1, pageSize: 25, + isEmailChecked: true, isDeleted: false, - notActivated: false, }, }), ) @@ -305,8 +305,8 @@ describe('Creation', () => { searchText: '', currentPage: 2, pageSize: 25, + isEmailChecked: true, isDeleted: false, - notActivated: false, }, }), ) diff --git a/admin/src/pages/Creation.vue b/admin/src/pages/Creation.vue index e5b93350f..ab4993beb 100644 --- a/admin/src/pages/Creation.vue +++ b/admin/src/pages/Creation.vue @@ -102,7 +102,7 @@ export default { searchText: this.criteria, currentPage: this.currentPage, pageSize: this.perPage, - notActivated: false, + isEmailChecked: true, isDeleted: false, }, fetchPolicy: 'network-only', diff --git a/admin/src/pages/UserSearch.spec.js b/admin/src/pages/UserSearch.spec.js index 0b98d4d11..c2bceaade 100644 --- a/admin/src/pages/UserSearch.spec.js +++ b/admin/src/pages/UserSearch.spec.js @@ -82,7 +82,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - notActivated: null, + isEmailChecked: null, isDeleted: null, }, }), @@ -101,7 +101,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - notActivated: true, + isEmailChecked: false, isDeleted: null, }, }), @@ -121,7 +121,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - notActivated: null, + isEmailChecked: null, isDeleted: true, }, }), @@ -141,7 +141,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 2, pageSize: 25, - notActivated: null, + isEmailChecked: null, isDeleted: null, }, }), @@ -161,7 +161,7 @@ describe('UserSearch', () => { searchText: 'search string', currentPage: 1, pageSize: 25, - notActivated: null, + isEmailChecked: null, isDeleted: null, }, }), @@ -178,7 +178,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - notActivated: null, + isEmailChecked: null, isDeleted: null, }, }), diff --git a/admin/src/pages/UserSearch.vue b/admin/src/pages/UserSearch.vue index b2737bae6..718656b9f 100644 --- a/admin/src/pages/UserSearch.vue +++ b/admin/src/pages/UserSearch.vue @@ -85,7 +85,7 @@ export default { searchText: this.criteria, currentPage: this.currentPage, pageSize: this.perPage, - notActivated: this.filterCheckedEmails, + isEmailChecked: !this.filterCheckedEmails, // Wolle: has this boolean really to be negated as well? isDeleted: this.filterDeletedUser, }, fetchPolicy: 'no-cache', diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts index 2a94d8998..72fdf0499 100644 --- a/backend/src/graphql/arg/SearchUsersArgs.ts +++ b/backend/src/graphql/arg/SearchUsersArgs.ts @@ -12,7 +12,7 @@ export default class SearchUsersArgs { pageSize?: number @Field(() => Boolean, { nullable: true }) - notActivated?: boolean | null + isEmailChecked?: boolean | null @Field(() => Boolean, { nullable: true }) isDeleted?: boolean | null diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 7ca3460ee..62e64f7f5 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -56,15 +56,15 @@ export class AdminResolver { searchText, currentPage = 1, pageSize = 25, - notActivated = null, + isEmailChecked = null, isDeleted = null, }: SearchUsersArgs, ): Promise { const userRepository = getCustomRepository(UserRepository) const filterCriteria: ObjectLiteral[] = [] - if (notActivated !== null) { - filterCriteria.push({ emailChecked: !notActivated }) + if (isEmailChecked !== null) { + filterCriteria.push({ emailChecked: isEmailChecked }) } if (isDeleted !== null) { From 3344dfc771e641498ec0046d46d1cc7984087b8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 19 Apr 2022 15:13:59 +0200 Subject: [PATCH 002/162] Fix admin tests --- admin/src/pages/UserSearch.spec.js | 2 +- admin/src/pages/UserSearch.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/admin/src/pages/UserSearch.spec.js b/admin/src/pages/UserSearch.spec.js index c2bceaade..0f11a0435 100644 --- a/admin/src/pages/UserSearch.spec.js +++ b/admin/src/pages/UserSearch.spec.js @@ -101,7 +101,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - isEmailChecked: false, + isEmailChecked: true, isDeleted: null, }, }), diff --git a/admin/src/pages/UserSearch.vue b/admin/src/pages/UserSearch.vue index 718656b9f..f1c222a78 100644 --- a/admin/src/pages/UserSearch.vue +++ b/admin/src/pages/UserSearch.vue @@ -85,7 +85,7 @@ export default { searchText: this.criteria, currentPage: this.currentPage, pageSize: this.perPage, - isEmailChecked: !this.filterCheckedEmails, // Wolle: has this boolean really to be negated as well? + isEmailChecked: this.filterCheckedEmails, isDeleted: this.filterDeletedUser, }, fetchPolicy: 'no-cache', From c4fcd54ef5f996efb83d6de442623e533c782988 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Wed, 20 Apr 2022 03:33:38 +0200 Subject: [PATCH 003/162] Create LICENSE --- LICENSE | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..261eeb9e9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From 03e1624c11394d98a2804e65384c8bc39d56d9c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 20 Apr 2022 08:48:13 +0200 Subject: [PATCH 004/162] Rename isEmailChecked to emailChecked --- admin/src/graphql/searchUsers.js | 4 ++-- admin/src/pages/Creation.spec.js | 8 ++++---- admin/src/pages/Creation.vue | 2 +- admin/src/pages/UserSearch.spec.js | 12 ++++++------ admin/src/pages/UserSearch.vue | 2 +- backend/src/graphql/arg/SearchUsersArgs.ts | 2 +- backend/src/graphql/resolver/AdminResolver.ts | 6 +++--- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/admin/src/graphql/searchUsers.js b/admin/src/graphql/searchUsers.js index 889b01972..ca7bc4718 100644 --- a/admin/src/graphql/searchUsers.js +++ b/admin/src/graphql/searchUsers.js @@ -5,14 +5,14 @@ export const searchUsers = gql` $searchText: String! $currentPage: Int $pageSize: Int - $isEmailChecked: Boolean + $emailChecked: Boolean $isDeleted: Boolean ) { searchUsers( searchText: $searchText currentPage: $currentPage pageSize: $pageSize - isEmailChecked: $isEmailChecked + emailChecked: $emailChecked isDeleted: $isDeleted ) { userCount diff --git a/admin/src/pages/Creation.spec.js b/admin/src/pages/Creation.spec.js index 58c7e3796..1f172139b 100644 --- a/admin/src/pages/Creation.spec.js +++ b/admin/src/pages/Creation.spec.js @@ -71,7 +71,7 @@ describe('Creation', () => { searchText: '', currentPage: 1, pageSize: 25, - isEmailChecked: true, + emailChecked: true, isDeleted: false, }, }), @@ -271,7 +271,7 @@ describe('Creation', () => { searchText: 'XX', currentPage: 1, pageSize: 25, - isEmailChecked: true, + emailChecked: true, isDeleted: false, }, }), @@ -288,7 +288,7 @@ describe('Creation', () => { searchText: '', currentPage: 1, pageSize: 25, - isEmailChecked: true, + emailChecked: true, isDeleted: false, }, }), @@ -305,7 +305,7 @@ describe('Creation', () => { searchText: '', currentPage: 2, pageSize: 25, - isEmailChecked: true, + emailChecked: true, isDeleted: false, }, }), diff --git a/admin/src/pages/Creation.vue b/admin/src/pages/Creation.vue index ab4993beb..6657b5915 100644 --- a/admin/src/pages/Creation.vue +++ b/admin/src/pages/Creation.vue @@ -102,7 +102,7 @@ export default { searchText: this.criteria, currentPage: this.currentPage, pageSize: this.perPage, - isEmailChecked: true, + emailChecked: true, isDeleted: false, }, fetchPolicy: 'network-only', diff --git a/admin/src/pages/UserSearch.spec.js b/admin/src/pages/UserSearch.spec.js index 0f11a0435..18950c46a 100644 --- a/admin/src/pages/UserSearch.spec.js +++ b/admin/src/pages/UserSearch.spec.js @@ -82,7 +82,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - isEmailChecked: null, + emailChecked: null, isDeleted: null, }, }), @@ -101,7 +101,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - isEmailChecked: true, + emailChecked: true, isDeleted: null, }, }), @@ -121,7 +121,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - isEmailChecked: null, + emailChecked: null, isDeleted: true, }, }), @@ -141,7 +141,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 2, pageSize: 25, - isEmailChecked: null, + emailChecked: null, isDeleted: null, }, }), @@ -161,7 +161,7 @@ describe('UserSearch', () => { searchText: 'search string', currentPage: 1, pageSize: 25, - isEmailChecked: null, + emailChecked: null, isDeleted: null, }, }), @@ -178,7 +178,7 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - isEmailChecked: null, + emailChecked: null, isDeleted: null, }, }), diff --git a/admin/src/pages/UserSearch.vue b/admin/src/pages/UserSearch.vue index f1c222a78..06abd25aa 100644 --- a/admin/src/pages/UserSearch.vue +++ b/admin/src/pages/UserSearch.vue @@ -85,7 +85,7 @@ export default { searchText: this.criteria, currentPage: this.currentPage, pageSize: this.perPage, - isEmailChecked: this.filterCheckedEmails, + emailChecked: this.filterCheckedEmails, isDeleted: this.filterDeletedUser, }, fetchPolicy: 'no-cache', diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts index 72fdf0499..677d1958b 100644 --- a/backend/src/graphql/arg/SearchUsersArgs.ts +++ b/backend/src/graphql/arg/SearchUsersArgs.ts @@ -12,7 +12,7 @@ export default class SearchUsersArgs { pageSize?: number @Field(() => Boolean, { nullable: true }) - isEmailChecked?: boolean | null + emailChecked?: boolean | null @Field(() => Boolean, { nullable: true }) isDeleted?: boolean | null diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 62e64f7f5..2801a2b81 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -56,15 +56,15 @@ export class AdminResolver { searchText, currentPage = 1, pageSize = 25, - isEmailChecked = null, + emailChecked = null, isDeleted = null, }: SearchUsersArgs, ): Promise { const userRepository = getCustomRepository(UserRepository) const filterCriteria: ObjectLiteral[] = [] - if (isEmailChecked !== null) { - filterCriteria.push({ emailChecked: isEmailChecked }) + if (emailChecked !== null) { + filterCriteria.push({ emailChecked: emailChecked }) } if (isDeleted !== null) { From e8aba864309665c5842c24cf95a94856e1aceb84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 20 Apr 2022 08:53:12 +0200 Subject: [PATCH 005/162] Rename isDeleted to deletedAt --- admin/src/graphql/searchUsers.js | 4 ++-- admin/src/pages/Creation.spec.js | 8 ++++---- admin/src/pages/Creation.vue | 2 +- admin/src/pages/UserSearch.spec.js | 12 ++++++------ admin/src/pages/UserSearch.vue | 2 +- backend/src/graphql/arg/SearchUsersArgs.ts | 2 +- backend/src/graphql/resolver/AdminResolver.ts | 6 +++--- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/admin/src/graphql/searchUsers.js b/admin/src/graphql/searchUsers.js index ca7bc4718..fc81f3f1b 100644 --- a/admin/src/graphql/searchUsers.js +++ b/admin/src/graphql/searchUsers.js @@ -6,14 +6,14 @@ export const searchUsers = gql` $currentPage: Int $pageSize: Int $emailChecked: Boolean - $isDeleted: Boolean + $deletedAt: Boolean ) { searchUsers( searchText: $searchText currentPage: $currentPage pageSize: $pageSize emailChecked: $emailChecked - isDeleted: $isDeleted + deletedAt: $deletedAt ) { userCount userList { diff --git a/admin/src/pages/Creation.spec.js b/admin/src/pages/Creation.spec.js index 1f172139b..e60625dd2 100644 --- a/admin/src/pages/Creation.spec.js +++ b/admin/src/pages/Creation.spec.js @@ -72,7 +72,7 @@ describe('Creation', () => { currentPage: 1, pageSize: 25, emailChecked: true, - isDeleted: false, + deletedAt: false, }, }), ) @@ -272,7 +272,7 @@ describe('Creation', () => { currentPage: 1, pageSize: 25, emailChecked: true, - isDeleted: false, + deletedAt: false, }, }), ) @@ -289,7 +289,7 @@ describe('Creation', () => { currentPage: 1, pageSize: 25, emailChecked: true, - isDeleted: false, + deletedAt: false, }, }), ) @@ -306,7 +306,7 @@ describe('Creation', () => { currentPage: 2, pageSize: 25, emailChecked: true, - isDeleted: false, + deletedAt: false, }, }), ) diff --git a/admin/src/pages/Creation.vue b/admin/src/pages/Creation.vue index 6657b5915..30900a468 100644 --- a/admin/src/pages/Creation.vue +++ b/admin/src/pages/Creation.vue @@ -103,7 +103,7 @@ export default { currentPage: this.currentPage, pageSize: this.perPage, emailChecked: true, - isDeleted: false, + deletedAt: false, }, fetchPolicy: 'network-only', }) diff --git a/admin/src/pages/UserSearch.spec.js b/admin/src/pages/UserSearch.spec.js index 18950c46a..907cbd7e0 100644 --- a/admin/src/pages/UserSearch.spec.js +++ b/admin/src/pages/UserSearch.spec.js @@ -83,7 +83,7 @@ describe('UserSearch', () => { currentPage: 1, pageSize: 25, emailChecked: null, - isDeleted: null, + deletedAt: null, }, }), ) @@ -102,7 +102,7 @@ describe('UserSearch', () => { currentPage: 1, pageSize: 25, emailChecked: true, - isDeleted: null, + deletedAt: null, }, }), ) @@ -122,7 +122,7 @@ describe('UserSearch', () => { currentPage: 1, pageSize: 25, emailChecked: null, - isDeleted: true, + deletedAt: true, }, }), ) @@ -142,7 +142,7 @@ describe('UserSearch', () => { currentPage: 2, pageSize: 25, emailChecked: null, - isDeleted: null, + deletedAt: null, }, }), ) @@ -162,7 +162,7 @@ describe('UserSearch', () => { currentPage: 1, pageSize: 25, emailChecked: null, - isDeleted: null, + deletedAt: null, }, }), ) @@ -179,7 +179,7 @@ describe('UserSearch', () => { currentPage: 1, pageSize: 25, emailChecked: null, - isDeleted: null, + deletedAt: null, }, }), ) diff --git a/admin/src/pages/UserSearch.vue b/admin/src/pages/UserSearch.vue index 06abd25aa..e5f584a25 100644 --- a/admin/src/pages/UserSearch.vue +++ b/admin/src/pages/UserSearch.vue @@ -86,7 +86,7 @@ export default { currentPage: this.currentPage, pageSize: this.perPage, emailChecked: this.filterCheckedEmails, - isDeleted: this.filterDeletedUser, + deletedAt: this.filterDeletedUser, }, fetchPolicy: 'no-cache', }) diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts index 677d1958b..103152bac 100644 --- a/backend/src/graphql/arg/SearchUsersArgs.ts +++ b/backend/src/graphql/arg/SearchUsersArgs.ts @@ -15,5 +15,5 @@ export default class SearchUsersArgs { emailChecked?: boolean | null @Field(() => Boolean, { nullable: true }) - isDeleted?: boolean | null + deletedAt?: boolean | null } diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 2801a2b81..495e6fb3f 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -57,7 +57,7 @@ export class AdminResolver { currentPage = 1, pageSize = 25, emailChecked = null, - isDeleted = null, + deletedAt = null, }: SearchUsersArgs, ): Promise { const userRepository = getCustomRepository(UserRepository) @@ -67,8 +67,8 @@ export class AdminResolver { filterCriteria.push({ emailChecked: emailChecked }) } - if (isDeleted !== null) { - filterCriteria.push({ deletedAt: isDeleted ? Not(IsNull()) : IsNull() }) + if (deletedAt !== null) { + filterCriteria.push({ deletedAt: deletedAt ? Not(IsNull()) : IsNull() }) } const userFields = ['id', 'firstName', 'lastName', 'email', 'emailChecked', 'deletedAt'] From 29745204b21a55c10d45cb23750b95354c23d381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 20 Apr 2022 09:47:03 +0200 Subject: [PATCH 006/162] Create Message component --- .../src/components/Message/Message.spec.js | 101 ++++++++++++++++++ frontend/src/components/Message/Message.vue | 72 +++++++++++++ frontend/src/pages/ForgotPassword.vue | 5 + 3 files changed, 178 insertions(+) create mode 100644 frontend/src/components/Message/Message.spec.js create mode 100644 frontend/src/components/Message/Message.vue diff --git a/frontend/src/components/Message/Message.spec.js b/frontend/src/components/Message/Message.spec.js new file mode 100644 index 000000000..9d65e792c --- /dev/null +++ b/frontend/src/components/Message/Message.spec.js @@ -0,0 +1,101 @@ +import { mount } from '@vue/test-utils' +import Thx from './Message' + +const localVue = global.localVue + +const createMockObject = (comingFrom) => { + return { + $t: jest.fn((t) => t), + $route: { + params: { + comingFrom, + }, + }, + } +} + +describe('Message', () => { + let wrapper + + const Wrapper = (mocks) => { + return mount(Thx, { localVue, mocks }) + } + + describe('mount', () => { + beforeEach(() => { + wrapper = Wrapper(createMockObject('forgotPassword')) + }) + + it('renders the thx page', () => { + expect(wrapper.find('div.header').exists()).toBeTruthy() + }) + + it('renders the title', () => { + expect(wrapper.find('p.h1').text()).toBe('site.thx.title') + }) + }) + + describe('coming from /forgot-password', () => { + beforeEach(() => { + wrapper = Wrapper(createMockObject('forgotPassword')) + }) + + it('renders the thanks text', () => { + expect(wrapper.find('p.h4').text()).toBe('site.thx.email') + }) + + it('renders the thanks redirect button', () => { + expect(wrapper.find('a.btn').text()).toBe('login') + }) + + it('links the redirect button to /login', () => { + expect(wrapper.find('a.btn').attributes('href')).toBe('/login') + }) + }) + + describe('coming from /reset-password', () => { + beforeEach(() => { + wrapper = Wrapper(createMockObject('resetPassword')) + }) + + it('renders the thanks text', () => { + expect(wrapper.find('p.h4').text()).toBe('site.thx.reset') + }) + + it('renders the thanks redirect button', () => { + expect(wrapper.find('a.btn').text()).toBe('login') + }) + + it('links the redirect button to /login', () => { + expect(wrapper.find('a.btn').attributes('href')).toBe('/login') + }) + }) + + describe('coming from /register', () => { + beforeEach(() => { + wrapper = Wrapper(createMockObject('register')) + }) + + it('renders the thanks text', () => { + expect(wrapper.find('p.h4').text()).toBe('site.thx.register') + }) + }) + + describe('coming from /login', () => { + beforeEach(() => { + wrapper = Wrapper(createMockObject('login')) + }) + + it('renders the thanks text', () => { + expect(wrapper.find('p.h4').text()).toBe('site.thx.activateEmail') + }) + + it('renders the thanks redirect button', () => { + expect(wrapper.find('a.btn').text()).toBe('settings.password.reset') + }) + + it('links the redirect button to /forgot-password', () => { + expect(wrapper.find('a.btn').attributes('href')).toBe('/forgot-password') + }) + }) +}) diff --git a/frontend/src/components/Message/Message.vue b/frontend/src/components/Message/Message.vue new file mode 100644 index 000000000..26468f9e3 --- /dev/null +++ b/frontend/src/components/Message/Message.vue @@ -0,0 +1,72 @@ + + + diff --git a/frontend/src/pages/ForgotPassword.vue b/frontend/src/pages/ForgotPassword.vue index 580a0ed97..e357652c8 100644 --- a/frontend/src/pages/ForgotPassword.vue +++ b/frontend/src/pages/ForgotPassword.vue @@ -36,16 +36,21 @@ {{ $t('back') }} + + + diff --git a/frontend/src/pages/ForgotPassword.spec.js b/frontend/src/pages/ForgotPassword.spec.js index e97eb1018..eaf4558e1 100644 --- a/frontend/src/pages/ForgotPassword.spec.js +++ b/frontend/src/pages/ForgotPassword.spec.js @@ -116,11 +116,15 @@ describe('ForgotPassword', () => { await flushPromises() }) - it('shows error message', () => { + it('shows error title, subtitle, login button', () => { expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('error.email-already-sent') expect(wrapper.find('.test-message-button').text()).toBe('login') }) + + it('button link redirects to /login', () => { + expect(wrapper.find('.test-message-button').attributes('href')).toBe('/login') + }) }) describe('success', () => { @@ -136,11 +140,15 @@ describe('ForgotPassword', () => { await flushPromises() }) - it('shows thx, email, send, login button', () => { + it('shows success title, subtitle, login button', () => { expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.title') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.email') expect(wrapper.find('.test-message-button').text()).toBe('login') }) + + it('button link redirects to /login', () => { + expect(wrapper.find('.test-message-button').attributes('href')).toBe('/login') + }) }) }) }) diff --git a/frontend/src/pages/ForgotPassword.vue b/frontend/src/pages/ForgotPassword.vue index 9a1885959..535a7d6d2 100644 --- a/frontend/src/pages/ForgotPassword.vue +++ b/frontend/src/pages/ForgotPassword.vue @@ -37,7 +37,22 @@ - + + + + From 621786c91d7615774bc7d1a955c0304c54e86a01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 21 Apr 2022 07:51:00 +0200 Subject: [PATCH 010/162] Rename after suggestion emailChecked withActivated and deletedAt to withDeleted --- admin/src/graphql/searchUsers.js | 12 +++++----- admin/src/pages/Creation.spec.js | 16 ++++++------- admin/src/pages/Creation.vue | 4 ++-- admin/src/pages/UserSearch.spec.js | 24 +++++++++---------- admin/src/pages/UserSearch.vue | 4 ++-- backend/src/graphql/arg/SearchUsersArgs.ts | 4 ++-- backend/src/graphql/resolver/AdminResolver.ts | 12 +++++----- 7 files changed, 38 insertions(+), 38 deletions(-) diff --git a/admin/src/graphql/searchUsers.js b/admin/src/graphql/searchUsers.js index fc81f3f1b..706927eb1 100644 --- a/admin/src/graphql/searchUsers.js +++ b/admin/src/graphql/searchUsers.js @@ -5,15 +5,15 @@ export const searchUsers = gql` $searchText: String! $currentPage: Int $pageSize: Int - $emailChecked: Boolean - $deletedAt: Boolean + $withActivated: Boolean + $withDeleted: Boolean ) { searchUsers( searchText: $searchText currentPage: $currentPage pageSize: $pageSize - emailChecked: $emailChecked - deletedAt: $deletedAt + withActivated: $withActivated + withDeleted: $withDeleted ) { userCount userList { @@ -22,10 +22,10 @@ export const searchUsers = gql` lastName email creation - emailChecked hasElopage emailConfirmationSend - deletedAt + withActivated + withDeleted } } } diff --git a/admin/src/pages/Creation.spec.js b/admin/src/pages/Creation.spec.js index e60625dd2..d1d6f0f2e 100644 --- a/admin/src/pages/Creation.spec.js +++ b/admin/src/pages/Creation.spec.js @@ -71,8 +71,8 @@ describe('Creation', () => { searchText: '', currentPage: 1, pageSize: 25, - emailChecked: true, - deletedAt: false, + withActivated: true, + withDeleted: false, }, }), ) @@ -271,8 +271,8 @@ describe('Creation', () => { searchText: 'XX', currentPage: 1, pageSize: 25, - emailChecked: true, - deletedAt: false, + withActivated: true, + withDeleted: false, }, }), ) @@ -288,8 +288,8 @@ describe('Creation', () => { searchText: '', currentPage: 1, pageSize: 25, - emailChecked: true, - deletedAt: false, + withActivated: true, + withDeleted: false, }, }), ) @@ -305,8 +305,8 @@ describe('Creation', () => { searchText: '', currentPage: 2, pageSize: 25, - emailChecked: true, - deletedAt: false, + withActivated: true, + withDeleted: false, }, }), ) diff --git a/admin/src/pages/Creation.vue b/admin/src/pages/Creation.vue index 30900a468..76d6077f5 100644 --- a/admin/src/pages/Creation.vue +++ b/admin/src/pages/Creation.vue @@ -102,8 +102,8 @@ export default { searchText: this.criteria, currentPage: this.currentPage, pageSize: this.perPage, - emailChecked: true, - deletedAt: false, + withActivated: true, + withDeleted: false, }, fetchPolicy: 'network-only', }) diff --git a/admin/src/pages/UserSearch.spec.js b/admin/src/pages/UserSearch.spec.js index 907cbd7e0..602852608 100644 --- a/admin/src/pages/UserSearch.spec.js +++ b/admin/src/pages/UserSearch.spec.js @@ -82,8 +82,8 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - emailChecked: null, - deletedAt: null, + withActivated: null, + withDeleted: null, }, }), ) @@ -101,8 +101,8 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - emailChecked: true, - deletedAt: null, + withActivated: true, + withDeleted: null, }, }), ) @@ -121,8 +121,8 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - emailChecked: null, - deletedAt: true, + withActivated: null, + withDeleted: true, }, }), ) @@ -141,8 +141,8 @@ describe('UserSearch', () => { searchText: '', currentPage: 2, pageSize: 25, - emailChecked: null, - deletedAt: null, + withActivated: null, + withDeleted: null, }, }), ) @@ -161,8 +161,8 @@ describe('UserSearch', () => { searchText: 'search string', currentPage: 1, pageSize: 25, - emailChecked: null, - deletedAt: null, + withActivated: null, + withDeleted: null, }, }), ) @@ -178,8 +178,8 @@ describe('UserSearch', () => { searchText: '', currentPage: 1, pageSize: 25, - emailChecked: null, - deletedAt: null, + withActivated: null, + withDeleted: null, }, }), ) diff --git a/admin/src/pages/UserSearch.vue b/admin/src/pages/UserSearch.vue index e5f584a25..f0bf60ae1 100644 --- a/admin/src/pages/UserSearch.vue +++ b/admin/src/pages/UserSearch.vue @@ -85,8 +85,8 @@ export default { searchText: this.criteria, currentPage: this.currentPage, pageSize: this.perPage, - emailChecked: this.filterCheckedEmails, - deletedAt: this.filterDeletedUser, + withActivated: this.filterCheckedEmails, + withDeleted: this.filterDeletedUser, }, fetchPolicy: 'no-cache', }) diff --git a/backend/src/graphql/arg/SearchUsersArgs.ts b/backend/src/graphql/arg/SearchUsersArgs.ts index 103152bac..fab17e527 100644 --- a/backend/src/graphql/arg/SearchUsersArgs.ts +++ b/backend/src/graphql/arg/SearchUsersArgs.ts @@ -12,8 +12,8 @@ export default class SearchUsersArgs { pageSize?: number @Field(() => Boolean, { nullable: true }) - emailChecked?: boolean | null + withActivated?: boolean | null @Field(() => Boolean, { nullable: true }) - deletedAt?: boolean | null + withDeleted?: boolean | null } diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 495e6fb3f..bdb078ad1 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -56,19 +56,19 @@ export class AdminResolver { searchText, currentPage = 1, pageSize = 25, - emailChecked = null, - deletedAt = null, + withActivated = null, + withDeleted = null, }: SearchUsersArgs, ): Promise { const userRepository = getCustomRepository(UserRepository) const filterCriteria: ObjectLiteral[] = [] - if (emailChecked !== null) { - filterCriteria.push({ emailChecked: emailChecked }) + if (withActivated !== null) { + filterCriteria.push({ withActivated: withActivated }) } - if (deletedAt !== null) { - filterCriteria.push({ deletedAt: deletedAt ? Not(IsNull()) : IsNull() }) + if (withDeleted !== null) { + filterCriteria.push({ withDeleted: withDeleted ? Not(IsNull()) : IsNull() }) } const userFields = ['id', 'firstName', 'lastName', 'email', 'emailChecked', 'deletedAt'] From ef6b3c78df7ce0c20c082b257b1a8e56b8c41966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 21 Apr 2022 08:46:57 +0200 Subject: [PATCH 011/162] Fix translation of ForgotPassword login button text --- frontend/src/pages/ForgotPassword.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/pages/ForgotPassword.vue b/frontend/src/pages/ForgotPassword.vue index 535a7d6d2..85ac6b87d 100644 --- a/frontend/src/pages/ForgotPassword.vue +++ b/frontend/src/pages/ForgotPassword.vue @@ -42,14 +42,14 @@ v-if="success" :headline="$t('site.thx.title')" :subtitle="$t('site.thx.email')" - buttonText="login" + :buttonText="$t('login')" linkTo="/login" /> From 3dddbabb9918eb6ede352fa0af79f3acfd9bdae9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 21 Apr 2022 09:09:54 +0200 Subject: [PATCH 012/162] Fix error after Ulf's hint --- frontend/src/components/Message/Message.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/Message/Message.vue b/frontend/src/components/Message/Message.vue index 7a2f7bb9c..092f003ce 100644 --- a/frontend/src/components/Message/Message.vue +++ b/frontend/src/components/Message/Message.vue @@ -5,9 +5,9 @@
-

{{ $t(headline) }}

+

{{ headline }}

-

{{ $t(subtitle) }}

+

{{ subtitle }}


- {{ $t(buttonText) }} + {{ buttonText }}
From 13b5e02c241770073dfb4dd40a7dbd35a133ddc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 21 Apr 2022 09:16:07 +0200 Subject: [PATCH 013/162] Removed comment after Ulf's suggestion --- frontend/src/pages/ForgotPassword.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/pages/ForgotPassword.vue b/frontend/src/pages/ForgotPassword.vue index 85ac6b87d..46adc20d7 100644 --- a/frontend/src/pages/ForgotPassword.vue +++ b/frontend/src/pages/ForgotPassword.vue @@ -98,7 +98,6 @@ export default { }, }, created() { - // Wolle: what shall happen here? change needed? if (this.$route.params.comingFrom) { this.subtitle = 'settings.password.resend_subtitle' } From 097d33fb9702e6ad92e3a716eba6525eeff9a8ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 21 Apr 2022 09:40:34 +0200 Subject: [PATCH 014/162] Refactor Login page --- frontend/src/components/Message/Message.vue | 2 +- frontend/src/locales/de.json | 3 +- frontend/src/locales/en.json | 5 ++-- frontend/src/pages/Login.vue | 31 +++++++++++++++++++-- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/Message/Message.vue b/frontend/src/components/Message/Message.vue index 092f003ce..384bc6d1c 100644 --- a/frontend/src/components/Message/Message.vue +++ b/frontend/src/components/Message/Message.vue @@ -2,7 +2,7 @@
- +

{{ headline }}

diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index df25d837c..d69150f90 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -230,7 +230,8 @@ "register": "Du bist jetzt registriert, bitte überprüfe deine Emails und klicke auf den Aktivierungslink.", "reset": "Dein Passwort wurde geändert.", "resetPassword": "Den Code den Du genutzt hast ist zu alt bitte fordere ein neuen über die Passwort Reset Seite an.", - "title": "Danke!" + "title": "Danke!", + "unsetPassword": "Dein Passwort wurde noch nicht gesetzt. Bitte setze es neu." } }, "success": "Erfolg", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 4734abf00..5da0a1d6b 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -222,7 +222,7 @@ "uppercase": "One uppercase letter required." }, "thx": { - "activateEmail": "Your account has not been activated yet, please check your emails and click the activation link or order a new activation link over the password reset page.", + "activateEmail": "Your account has not been activated yet. Please check your emails and click the activation link or order a new activation link over the password reset page.", "checkEmail": "Your email has been successfully verified. You can sign in now.", "email": "We have sent you an email.", "emailActivated": "Thank you your email has been activated.", @@ -230,7 +230,8 @@ "register": "You are registered now, please check your emails and click the activation link.", "reset": "Your password has been changed.", "resetPassword": "The code you used was to old please order a new on over the password reset page.", - "title": "Thank you!" + "title": "Thank you!", + "unsetPassword": "Your password has not been set yet. Please set it again." } }, "success": "Success", diff --git a/frontend/src/pages/Login.vue b/frontend/src/pages/Login.vue index 79532cb21..a84bfc1ab 100755 --- a/frontend/src/pages/Login.vue +++ b/frontend/src/pages/Login.vue @@ -13,7 +13,7 @@
- + @@ -57,11 +57,31 @@ + + + + + +
+ diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 7cd11d0a7..1b7dc7167 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -35,7 +35,9 @@ "error": "Fehler!", "no-account": "Leider konnten wir keinen (aktivierten) Account mit diesen Daten finden.", "no-transactionlist": "Es gab leider einen Fehler. Es wurden keine Transaktionen vom Server übermittelt.", - "session-expired": "Die Sitzung wurde aus Sicherheitsgründen beendet." + "session-expired": "Die Sitzung wurde aus Sicherheitsgründen beendet.", + "unknown-error": "Unbekanter Fehler: ", + "user-already-exists": "Ein Benutzer mit diesen Daten existiert bereits." }, "footer": { "app_version": "App version {version}", @@ -213,6 +215,9 @@ "new_wallet": "Neues Konto erstellen", "signin": "Anmelden" }, + "register": { + "message-button-text": "Alles klar" + }, "signup": { "agree": "Ich stimme der Datenschutzerklärung zu.", "dont_match": "Die Passwörter stimmen nicht überein.", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 0c51edb0c..aeff775d4 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -35,7 +35,9 @@ "error": "Error!", "no-account": "Unfortunately we could not find an (activated) account to the given data.", "no-transactionlist": "Unfortunately, there was an error. No transactions have been sent from the server.", - "session-expired": "The session was closed for security reasons." + "session-expired": "The session was closed for security reasons.", + "unknown-error": "Unknown error: ", + "user-already-exists": "A user with this data already exists." }, "footer": { "app_version": "App version {version}", @@ -213,6 +215,9 @@ "new_wallet": "Create new account", "signin": "Sign in" }, + "register": { + "message-button-text": "Okay" + }, "signup": { "agree": "I agree to the privacy policy.", "dont_match": "Passwords don't match.", diff --git a/frontend/src/pages/ForgotPassword.vue b/frontend/src/pages/ForgotPassword.vue index bdb57ac7b..630974c52 100644 --- a/frontend/src/pages/ForgotPassword.vue +++ b/frontend/src/pages/ForgotPassword.vue @@ -69,7 +69,6 @@ export default { }, data() { return { - // Wolle disable: 'disabled', form: { email: '', }, diff --git a/frontend/src/pages/Register.vue b/frontend/src/pages/Register.vue index 94441c636..5ee513aaf 100755 --- a/frontend/src/pages/Register.vue +++ b/frontend/src/pages/Register.vue @@ -15,7 +15,7 @@ - + @@ -177,6 +177,23 @@ + + + + + + Date: Wed, 27 Apr 2022 09:51:53 +0200 Subject: [PATCH 026/162] Add NVM config files --- admin/.nvmrc | 1 + backend/.nvmrc | 1 + database/.nvmrc | 1 + frontend/.nvmrc | 1 + 4 files changed, 4 insertions(+) create mode 100644 admin/.nvmrc create mode 100644 backend/.nvmrc create mode 100644 database/.nvmrc create mode 100644 frontend/.nvmrc diff --git a/admin/.nvmrc b/admin/.nvmrc new file mode 100644 index 000000000..ce4572cce --- /dev/null +++ b/admin/.nvmrc @@ -0,0 +1 @@ +v17.9.0 \ No newline at end of file diff --git a/backend/.nvmrc b/backend/.nvmrc new file mode 100644 index 000000000..ce4572cce --- /dev/null +++ b/backend/.nvmrc @@ -0,0 +1 @@ +v17.9.0 \ No newline at end of file diff --git a/database/.nvmrc b/database/.nvmrc new file mode 100644 index 000000000..ce4572cce --- /dev/null +++ b/database/.nvmrc @@ -0,0 +1 @@ +v17.9.0 \ No newline at end of file diff --git a/frontend/.nvmrc b/frontend/.nvmrc new file mode 100644 index 000000000..ce4572cce --- /dev/null +++ b/frontend/.nvmrc @@ -0,0 +1 @@ +v17.9.0 \ No newline at end of file From 5713b9ad3d787120ef931de57865157c709ffb94 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 09:57:11 +0200 Subject: [PATCH 027/162] user factory returns created user entity, add delete user mutation --- backend/src/seeds/factory/user.ts | 10 ++++++---- backend/src/seeds/graphql/mutations.ts | 6 ++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/backend/src/seeds/factory/user.ts b/backend/src/seeds/factory/user.ts index 4b5913d48..d94f94b3c 100644 --- a/backend/src/seeds/factory/user.ts +++ b/backend/src/seeds/factory/user.ts @@ -7,7 +7,7 @@ import { ApolloServerTestClient } from 'apollo-server-testing' export const userFactory = async ( client: ApolloServerTestClient, user: UserInterface, -): Promise => { +): Promise => { const { mutate } = client const { @@ -24,13 +24,15 @@ export const userFactory = async ( }) } - if (user.createdAt || user.deletedAt || user.isAdmin) { - // get user from database - const dbUser = await User.findOneOrFail({ id }) + // get user from database + const dbUser = await User.findOneOrFail({ id }) + if (user.createdAt || user.deletedAt || user.isAdmin) { if (user.createdAt) dbUser.createdAt = user.createdAt if (user.deletedAt) dbUser.deletedAt = user.deletedAt if (user.isAdmin) dbUser.isAdmin = new Date() await dbUser.save() } + + return dbUser } diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 601b1fbbf..30c453eea 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -106,3 +106,9 @@ export const confirmPendingCreation = gql` confirmPendingCreation(id: $id) } ` + +export const deleteUser = gql` + mutation ($userId: Int!) { + deleteUser(userId: $userId) + } +` From 06639d53d9a9623ec801655e5a584dd59f71b691 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 09:57:39 +0200 Subject: [PATCH 028/162] test delete user mutation --- .../graphql/resolver/AdminResolver.test.ts | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 backend/src/graphql/resolver/AdminResolver.test.ts diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts new file mode 100644 index 000000000..4460030fe --- /dev/null +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -0,0 +1,150 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ + +import { testEnvironment, resetToken, cleanDB } from '@test/helpers' +import { userFactory } from '@/seeds/factory/user' +import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' +import { peterLustig } from '@/seeds/users/peter-lustig' +import { deleteUser } from '@/seeds/graphql/mutations' +import { GraphQLError } from 'graphql' +import { User } from '@entity/User' +/* eslint-disable-next-line @typescript-eslint/no-unused-vars */ +import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail' +import { login } from '@/seeds/graphql/queries' + +// mock account activation email to avoid console spam +jest.mock('@/mailer/sendAccountActivationEmail', () => { + return { + __esModule: true, + sendAccountActivationEmail: jest.fn(), + } +}) + +let mutate: any, query: any, con: any +let testEnv: any + +beforeAll(async () => { + testEnv = await testEnvironment() + mutate = testEnv.mutate + query = testEnv.query + con = testEnv.con + await cleanDB() +}) + +afterAll(async () => { + await cleanDB() + await con.close() +}) + +let admin: User +let user: User + +describe('AdminResolver', () => { + describe('delete user', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + await expect(mutate({ mutation: deleteUser, variables: { userId: 1 } })).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('authenticated', () => { + describe('with user rights', () => { + beforeAll(async () => { + user = await userFactory(testEnv, bibiBloxberg) + await query({ + query: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + it('returns an error', async () => { + await expect( + mutate({ mutation: deleteUser, variables: { userId: user.id + 1 } }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('with admin rights', () => { + beforeAll(async () => { + admin = await userFactory(testEnv, peterLustig) + await query({ + query: login, + variables: { email: 'peter@lustig.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + describe('user to delete user does not exist', () => { + it('throws an error', async () => { + await expect( + mutate({ mutation: deleteUser, variables: { userId: admin.id + 1 } }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError(`Could not find user with userId: ${admin.id + 1}`)], + }), + ) + }) + }) + + describe('delete self', () => { + it('throws an error', async () => { + await expect( + mutate({ mutation: deleteUser, variables: { userId: admin.id } }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Moderator can not delete his own account!')], + }), + ) + }) + }) + + describe('delete with success', () => { + beforeAll(async () => { + user = await userFactory(testEnv, bibiBloxberg) + }) + + it('returns date string', async () => { + const result = await mutate({ mutation: deleteUser, variables: { userId: user.id } }) + expect(result).toEqual( + expect.objectContaining({ + data: { + deleteUser: expect.any(String), + }, + }), + ) + expect(new Date(result.data.deleteUser)).toEqual(expect.any(Date)) + }) + + describe('delete deleted user', () => { + it('throws an error', async () => { + await expect( + mutate({ mutation: deleteUser, variables: { userId: user.id } }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError(`Could not find user with userId: ${user.id}`)], + }), + ) + }) + }) + }) + }) + }) + }) +}) From 2836d63f2f8536fa206e21b5ca236f5e5221b15b Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 09:59:21 +0200 Subject: [PATCH 029/162] add unDelete User mutation --- backend/src/seeds/graphql/mutations.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 30c453eea..6ee1bafd0 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -112,3 +112,9 @@ export const deleteUser = gql` deleteUser(userId: $userId) } ` + +export const unDeleteUser = gql` + mutation ($userId: Int!) { + unDeleteUser(userId: $userId) + } +` From ad8de559aa66698bb6ac4b1d0631780480c20086 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 10:11:14 +0200 Subject: [PATCH 030/162] test unDelete User mutation --- .../graphql/resolver/AdminResolver.test.ts | 100 +++++++++++++++++- backend/src/graphql/resolver/AdminResolver.ts | 5 +- 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 4460030fe..91a9db770 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -5,7 +5,7 @@ import { testEnvironment, resetToken, cleanDB } from '@test/helpers' import { userFactory } from '@/seeds/factory/user' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' -import { deleteUser } from '@/seeds/graphql/mutations' +import { deleteUser, unDeleteUser } from '@/seeds/graphql/mutations' import { GraphQLError } from 'graphql' import { User } from '@entity/User' /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ @@ -147,4 +147,102 @@ describe('AdminResolver', () => { }) }) }) + + describe('unDelete user', () => { + describe('unauthenticated', () => { + it('returns an error', async () => { + await expect(mutate({ mutation: unDeleteUser, variables: { userId: 1 } })).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('authenticated', () => { + describe('with user rights', () => { + beforeAll(async () => { + user = await userFactory(testEnv, bibiBloxberg) + await query({ + query: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + it('returns an error', async () => { + await expect( + mutate({ mutation: unDeleteUser, variables: { userId: user.id + 1 } }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('with admin rights', () => { + beforeAll(async () => { + admin = await userFactory(testEnv, peterLustig) + await query({ + query: login, + variables: { email: 'peter@lustig.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + describe('user to undelete user does not exist', () => { + it('throws an error', async () => { + await expect( + mutate({ mutation: unDeleteUser, variables: { userId: admin.id + 1 } }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError(`Could not find user with userId: ${admin.id + 1}`)], + }), + ) + }) + }) + + describe('user to undelete is not deleted', () => { + beforeAll(async () => { + user = await userFactory(testEnv, bibiBloxberg) + }) + + it('throws an error', async () => { + await expect( + mutate({ mutation: unDeleteUser, variables: { userId: user.id } }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('User already deleted')], + }), + ) + }) + + describe('undelete deleted user', () => { + beforeAll(async () => { + await mutate({ mutation: deleteUser, variables: { userId: user.id } }) + }) + + it('returns null', async () => { + await expect( + mutate({ mutation: unDeleteUser, variables: { userId: user.id } }), + ).resolves.toEqual( + expect.objectContaining({ + data: { unDeleteUser: null }, + }), + ) + }) + }) + }) + }) + }) + }) }) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 2009af3b0..757b6d6dd 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -157,11 +157,12 @@ export class AdminResolver { @Mutation(() => Date, { nullable: true }) async unDeleteUser(@Arg('userId', () => Int) userId: number): Promise { const user = await dbUser.findOne({ id: userId }, { withDeleted: true }) - // user exists ? if (!user) { throw new Error(`Could not find user with userId: ${userId}`) } - // recover user account + if (!user.deletedAt) { + throw new Error('User already deleted') + } await user.recover() return null } From 2aa7772d20844431207f7f03e61961b91aa6bbcd Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 11:03:34 +0200 Subject: [PATCH 031/162] remove moderator ID form create pending creation mutation args --- admin/src/components/CreationFormular.spec.js | 9 --------- admin/src/components/CreationFormular.vue | 2 -- admin/src/graphql/createPendingCreation.js | 16 ++-------------- 3 files changed, 2 insertions(+), 25 deletions(-) diff --git a/admin/src/components/CreationFormular.spec.js b/admin/src/components/CreationFormular.spec.js index 083b7ca67..08ec71bdc 100644 --- a/admin/src/components/CreationFormular.spec.js +++ b/admin/src/components/CreationFormular.spec.js @@ -24,12 +24,6 @@ const mocks = { }, $store: { commit: stateCommitMock, - state: { - moderator: { - id: 0, - name: 'test moderator', - }, - }, }, } @@ -122,7 +116,6 @@ describe('CreationFormular', () => { creationDate: getCreationDate(2), amount: 90, memo: 'Test create coins', - moderator: 0, }, }), ) @@ -370,14 +363,12 @@ describe('CreationFormular', () => { creationDate: getCreationDate(1), amount: 200, memo: 'Test mass create coins', - moderator: 0, }, { email: 'bibi@bloxberg.de', creationDate: getCreationDate(1), amount: 200, memo: 'Test mass create coins', - moderator: 0, }, ], }, diff --git a/admin/src/components/CreationFormular.vue b/admin/src/components/CreationFormular.vue index cd4de5fd6..cdcd6ef1d 100644 --- a/admin/src/components/CreationFormular.vue +++ b/admin/src/components/CreationFormular.vue @@ -154,7 +154,6 @@ export default { creationDate: this.selected.date, amount: Number(this.value), memo: this.text, - moderator: Number(this.$store.state.moderator.id), }) }) this.$apollo @@ -188,7 +187,6 @@ export default { creationDate: this.selected.date, amount: Number(this.value), memo: this.text, - moderator: Number(this.$store.state.moderator.id), } this.$apollo .mutate({ diff --git a/admin/src/graphql/createPendingCreation.js b/admin/src/graphql/createPendingCreation.js index 05402ed9f..9301ea489 100644 --- a/admin/src/graphql/createPendingCreation.js +++ b/admin/src/graphql/createPendingCreation.js @@ -1,19 +1,7 @@ import gql from 'graphql-tag' export const createPendingCreation = gql` - mutation ( - $email: String! - $amount: Decimal! - $memo: String! - $creationDate: String! - $moderator: Int! - ) { - createPendingCreation( - email: $email - amount: $amount - memo: $memo - creationDate: $creationDate - moderator: $moderator - ) + mutation ($email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) { + createPendingCreation(email: $email, amount: $amount, memo: $memo, creationDate: $creationDate) } ` From e9eaa756b010169ac805d277cceecde531993b61 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 11:10:21 +0200 Subject: [PATCH 032/162] remove moderator from create pending creation mutation args --- backend/src/seeds/factory/creation.ts | 9 ++------- backend/src/seeds/graphql/mutations.ts | 16 ++-------------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/backend/src/seeds/factory/creation.ts b/backend/src/seeds/factory/creation.ts index 64f693360..88a681ef7 100644 --- a/backend/src/seeds/factory/creation.ts +++ b/backend/src/seeds/factory/creation.ts @@ -20,14 +20,9 @@ export const creationFactory = async ( ): Promise => { const { mutate, query } = client - // login as Peter Lustig (admin) and get his user ID - const { - data: { - login: { id }, - }, - } = await query({ query: login, variables: { email: 'peter@lustig.de', password: 'Aa12345_' } }) + await query({ query: login, variables: { email: 'peter@lustig.de', password: 'Aa12345_' } }) - await mutate({ mutation: createPendingCreation, variables: { ...creation, moderator: id } }) + await mutate({ mutation: createPendingCreation, variables: { ...creation } }) // get User const user = await User.findOneOrFail({ where: { email: creation.email } }) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 6ee1bafd0..f6022998e 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -84,20 +84,8 @@ export const createTransactionLink = gql` // from admin interface export const createPendingCreation = gql` - mutation ( - $email: String! - $amount: Decimal! - $memo: String! - $creationDate: String! - $moderator: Int! - ) { - createPendingCreation( - email: $email - amount: $amount - memo: $memo - creationDate: $creationDate - moderator: $moderator - ) + mutation ($email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) { + createPendingCreation(email: $email, amount: $amount, memo: $memo, creationDate: $creationDate) } ` From 64454b6fa2069bda298d340f77887e95a8030b64 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 11:11:30 +0200 Subject: [PATCH 033/162] remove moderator from create pending creation mutation args, use context instead to get moderator ID --- backend/src/graphql/arg/CreatePendingCreationArgs.ts | 5 +---- backend/src/graphql/resolver/AdminResolver.ts | 9 ++++++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/src/graphql/arg/CreatePendingCreationArgs.ts b/backend/src/graphql/arg/CreatePendingCreationArgs.ts index 0cadf5e62..11c345465 100644 --- a/backend/src/graphql/arg/CreatePendingCreationArgs.ts +++ b/backend/src/graphql/arg/CreatePendingCreationArgs.ts @@ -1,4 +1,4 @@ -import { ArgsType, Field, InputType, Int } from 'type-graphql' +import { ArgsType, Field, InputType } from 'type-graphql' import Decimal from 'decimal.js-light' @InputType() @@ -15,7 +15,4 @@ export default class CreatePendingCreationArgs { @Field(() => String) creationDate: string - - @Field(() => Int) - moderator: number } diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 757b6d6dd..779d81c99 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -170,7 +170,8 @@ export class AdminResolver { @Authorized([RIGHTS.CREATE_PENDING_CREATION]) @Mutation(() => [Number]) async createPendingCreation( - @Args() { email, amount, memo, creationDate, moderator }: CreatePendingCreationArgs, + @Args() { email, amount, memo, creationDate }: CreatePendingCreationArgs, + @Ctx() context: Context, ): Promise { const user = await dbUser.findOne({ email }, { withDeleted: true }) if (!user) { @@ -182,6 +183,7 @@ export class AdminResolver { if (!user.emailChecked) { throw new Error('Creation could not be saved, Email is not activated') } + const moderator = getUser(context) const creations = await getUserCreation(user.id) const creationDateObj = new Date(creationDate) if (isCreationValid(creations, amount, creationDateObj)) { @@ -191,7 +193,7 @@ export class AdminResolver { adminPendingCreation.created = new Date() adminPendingCreation.date = creationDateObj adminPendingCreation.memo = memo - adminPendingCreation.moderator = moderator + adminPendingCreation.moderator = moderator.id await AdminPendingCreation.save(adminPendingCreation) } @@ -203,12 +205,13 @@ export class AdminResolver { async createPendingCreations( @Arg('pendingCreations', () => [CreatePendingCreationArgs]) pendingCreations: CreatePendingCreationArgs[], + @Ctx() context: Context, ): Promise { let success = false const successfulCreation: string[] = [] const failedCreation: string[] = [] for (const pendingCreation of pendingCreations) { - await this.createPendingCreation(pendingCreation) + await this.createPendingCreation(pendingCreation, context) .then(() => { successfulCreation.push(pendingCreation.email) success = true From 2343279e7be9c73e6c2d2cd40abf26c6f37a344c Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 11:35:18 +0200 Subject: [PATCH 034/162] add createPendingCreations mutation --- backend/src/seeds/graphql/mutations.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index f6022998e..33b863768 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -106,3 +106,13 @@ export const unDeleteUser = gql` unDeleteUser(userId: $userId) } ` + +export const createPendingCreations = gql` + mutation ($pendingCreations: [CreatePendingCreationArgs!]!) { + createPendingCreations(pendingCreations: $pendingCreations) { + success + successfulCreation + failedCreation + } + } +` From 2e82f007e65d93cceccf7cc4e1ae89e1078256b2 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 11:53:50 +0200 Subject: [PATCH 035/162] test createPendingCreations --- .../graphql/resolver/AdminResolver.test.ts | 296 +++++++++++++++++- 1 file changed, 295 insertions(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 91a9db770..d43941e45 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -5,12 +5,20 @@ import { testEnvironment, resetToken, cleanDB } from '@test/helpers' import { userFactory } from '@/seeds/factory/user' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' -import { deleteUser, unDeleteUser } from '@/seeds/graphql/mutations' +import { stephenHawking } from '@/seeds/users/stephen-hawking' +import { garrickOllivander } from '@/seeds/users/garrick-ollivander' +import { + deleteUser, + unDeleteUser, + createPendingCreation, + createPendingCreations, +} from '@/seeds/graphql/mutations' import { GraphQLError } from 'graphql' import { User } from '@entity/User' /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail' import { login } from '@/seeds/graphql/queries' +import Decimal from 'decimal.js-light' // mock account activation email to avoid console spam jest.mock('@/mailer/sendAccountActivationEmail', () => { @@ -245,4 +253,290 @@ describe('AdminResolver', () => { }) }) }) + + describe('creations', () => { + const variables = { + email: 'bibi@bloxberg.de', + amount: new Decimal(2000), + memo: 'Vielen Dank für den Zaubertrank!', + creationDate: 'not-valid', + } + + describe('unauthenticated', () => { + describe('createPendingCreation', () => { + it('returns an error', async () => { + await expect(mutate({ mutation: createPendingCreation, variables })).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('createPendingCreations', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: createPendingCreations, + variables: { pendingCreations: [variables] }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + }) + + describe('authenticated', () => { + describe('with user rights', () => { + beforeAll(async () => { + user = await userFactory(testEnv, bibiBloxberg) + await query({ + query: login, + variables: { email: 'bibi@bloxberg.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + describe('createPendingCreation', () => { + it('returns an error', async () => { + await expect(mutate({ mutation: createPendingCreation, variables })).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('createPendingCreations', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: createPendingCreations, + variables: { pendingCreations: [variables] }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + }) + + describe('with admin rights', () => { + beforeAll(async () => { + admin = await userFactory(testEnv, peterLustig) + await query({ + query: login, + variables: { email: 'peter@lustig.de', password: 'Aa12345_' }, + }) + }) + + afterAll(async () => { + await cleanDB() + resetToken() + }) + + describe('createPendingCreation', () => { + describe('user to create for does not exist', () => { + it('throws an error', async () => { + await expect(mutate({ mutation: createPendingCreation, variables })).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Could not find user with email: bibi@bloxberg.de')], + }), + ) + }) + }) + + describe('user to create for is deleted', () => { + beforeAll(async () => { + user = await userFactory(testEnv, stephenHawking) + variables.email = 'stephen@hawking.uk' + }) + + it('throws an error', async () => { + await expect(mutate({ mutation: createPendingCreation, variables })).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('This user was deleted. Cannot make a creation.')], + }), + ) + }) + }) + + describe('user to create for has email not confirmed', () => { + beforeAll(async () => { + user = await userFactory(testEnv, garrickOllivander) + variables.email = 'garrick@ollivander.com' + }) + + it('throws an error', async () => { + await expect(mutate({ mutation: createPendingCreation, variables })).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Creation could not be saved, Email is not activated')], + }), + ) + }) + }) + + describe('valid user to create for', () => { + beforeAll(async () => { + user = await userFactory(testEnv, bibiBloxberg) + variables.email = 'bibi@bloxberg.de' + }) + + describe('date of creation is not a date string', () => { + it('throws an error', async () => { + await expect( + mutate({ mutation: createPendingCreation, variables }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('No Creation found!')], + }), + ) + }) + }) + + describe('date of creation is four months ago', () => { + it('throws an error', async () => { + const now = new Date() + variables.creationDate = new Date( + now.getFullYear(), + now.getMonth() - 4, + 1, + ).toString() + await expect( + mutate({ mutation: createPendingCreation, variables }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('No Creation found!')], + }), + ) + }) + }) + + describe('date of creation is in the future', () => { + it('throws an error', async () => { + const now = new Date() + variables.creationDate = new Date( + now.getFullYear(), + now.getMonth() + 4, + 1, + ).toString() + await expect( + mutate({ mutation: createPendingCreation, variables }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('No Creation found!')], + }), + ) + }) + }) + + describe('amount of creation is too high', () => { + it('throws an error', async () => { + variables.creationDate = new Date().toString() + await expect( + mutate({ mutation: createPendingCreation, variables }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [ + new GraphQLError( + 'The amount (2000 GDD) to be created exceeds the available amount (1000 GDD) for this month.', + ), + ], + }), + ) + }) + }) + + describe('creation is valid', () => { + it('returns an array of the open creations for the last three months', async () => { + variables.amount = new Decimal(200) + await expect( + mutate({ mutation: createPendingCreation, variables }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + createPendingCreation: [1000, 1000, 800], + }, + }), + ) + }) + }) + + describe('second creation surpasses the available amount ', () => { + it('returns an array of the open creations for the last three months', async () => { + variables.amount = new Decimal(1000) + await expect( + mutate({ mutation: createPendingCreation, variables }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [ + new GraphQLError( + 'The amount (1000 GDD) to be created exceeds the available amount (800 GDD) for this month.', + ), + ], + }), + ) + }) + }) + }) + + describe('createPendingCreations', () => { + // at this point we have this data in DB: + // bibi@bloxberg.de: [1000, 1000, 800] + // peter@lustig.de: [1000, 1000, 1000] + // stephen@hawking.uk: [1000, 1000, 1000] - deleted + // garrick@ollivander.com: [1000, 1000, 1000] - not activated + + const massCreationVariables = [ + 'bibi@bloxberg.de', + 'peter@lustig.de', + 'stephen@hawking.uk', + 'garrick@ollivander.com', + 'bob@baumeister.de', + ].map((email) => { + return { + email, + amount: new Decimal(1000), + memo: 'Grundeinkommen', + creationDate: new Date().toString(), + } + }) + + it('returns success, one successful creation and four failed creations', async () => { + await expect( + mutate({ + mutation: createPendingCreations, + variables: { pendingCreations: massCreationVariables }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + createPendingCreations: { + success: true, + successfulCreation: ['peter@lustig.de'], + failedCreation: [ + 'bibi@bloxberg.de', + 'stephen@hawking.uk', + 'garrick@ollivander.com', + 'bob@baumeister.de', + ], + }, + }, + }), + ) + }) + }) + }) + }) + }) + }) }) From d14d4c56400351b27a23cc5009a441533d26708b Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 11:57:41 +0200 Subject: [PATCH 036/162] remove moderator from update pending creation mutation args --- admin/src/components/EditCreationFormular.spec.js | 9 --------- admin/src/components/EditCreationFormular.vue | 2 -- admin/src/graphql/updatePendingCreation.js | 11 +---------- 3 files changed, 1 insertion(+), 21 deletions(-) diff --git a/admin/src/components/EditCreationFormular.spec.js b/admin/src/components/EditCreationFormular.spec.js index f5c7fb0fe..f39edad52 100644 --- a/admin/src/components/EditCreationFormular.spec.js +++ b/admin/src/components/EditCreationFormular.spec.js @@ -11,7 +11,6 @@ const apolloMutateMock = jest.fn().mockResolvedValue({ amount: 500, date: new Date(), memo: 'Test Schöpfung 2', - moderator: 0, }, }, }) @@ -28,12 +27,6 @@ const mocks = { mutate: apolloMutateMock, }, $store: { - state: { - moderator: { - id: 0, - name: 'test moderator', - }, - }, commit: stateCommitMock, }, } @@ -104,7 +97,6 @@ describe('EditCreationFormular', () => { creationDate: getCreationDate(0), amount: 500, memo: 'Test Schöpfung 2', - moderator: 0, }, }), ) @@ -129,7 +121,6 @@ describe('EditCreationFormular', () => { amount: 500, date: expect.any(Date), memo: 'Test Schöpfung 2', - moderator: 0, row: expect.any(Object), }, ], diff --git a/admin/src/components/EditCreationFormular.vue b/admin/src/components/EditCreationFormular.vue index 82b444154..fb30f2b77 100644 --- a/admin/src/components/EditCreationFormular.vue +++ b/admin/src/components/EditCreationFormular.vue @@ -120,7 +120,6 @@ export default { creationDate: this.selected.date, amount: Number(this.value), memo: this.text, - moderator: Number(this.$store.state.moderator.id), }, }) .then((result) => { @@ -129,7 +128,6 @@ export default { amount: Number(result.data.updatePendingCreation.amount), date: result.data.updatePendingCreation.date, memo: result.data.updatePendingCreation.memo, - moderator: Number(result.data.updatePendingCreation.moderator), row: this.row, }) this.toastSuccess( diff --git a/admin/src/graphql/updatePendingCreation.js b/admin/src/graphql/updatePendingCreation.js index cd0ae6c8e..f0775e68b 100644 --- a/admin/src/graphql/updatePendingCreation.js +++ b/admin/src/graphql/updatePendingCreation.js @@ -1,27 +1,18 @@ import gql from 'graphql-tag' export const updatePendingCreation = gql` - mutation ( - $id: Int! - $email: String! - $amount: Decimal! - $memo: String! - $creationDate: String! - $moderator: Int! - ) { + mutation ($id: Int!, $email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) { updatePendingCreation( id: $id email: $email amount: $amount memo: $memo creationDate: $creationDate - moderator: $moderator ) { amount date memo creation - moderator } } ` From a0e29e2524de3c464b4a60042f8eb108c5dbb18e Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 12:06:01 +0200 Subject: [PATCH 037/162] remove moderator from update pending creation mutation args --- .../graphql/arg/UpdatePendingCreationArgs.ts | 3 --- .../src/graphql/model/UpdatePendingCreation.ts | 3 --- backend/src/graphql/resolver/AdminResolver.ts | 8 +++++--- backend/src/seeds/graphql/mutations.ts | 17 +++++++++++++++++ 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/backend/src/graphql/arg/UpdatePendingCreationArgs.ts b/backend/src/graphql/arg/UpdatePendingCreationArgs.ts index 3cd85e84b..691d73154 100644 --- a/backend/src/graphql/arg/UpdatePendingCreationArgs.ts +++ b/backend/src/graphql/arg/UpdatePendingCreationArgs.ts @@ -17,7 +17,4 @@ export default class UpdatePendingCreationArgs { @Field(() => String) creationDate: string - - @Field(() => Int) - moderator: number } diff --git a/backend/src/graphql/model/UpdatePendingCreation.ts b/backend/src/graphql/model/UpdatePendingCreation.ts index 85d3af2cc..e19e1e064 100644 --- a/backend/src/graphql/model/UpdatePendingCreation.ts +++ b/backend/src/graphql/model/UpdatePendingCreation.ts @@ -12,9 +12,6 @@ export class UpdatePendingCreation { @Field(() => Decimal) amount: Decimal - @Field(() => Number) - moderator: number - @Field(() => [Decimal]) creation: Decimal[] } diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 779d81c99..fe3861cfa 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -230,7 +230,8 @@ export class AdminResolver { @Authorized([RIGHTS.UPDATE_PENDING_CREATION]) @Mutation(() => UpdatePendingCreation) async updatePendingCreation( - @Args() { id, email, amount, memo, creationDate, moderator }: UpdatePendingCreationArgs, + @Args() { id, email, amount, memo, creationDate }: UpdatePendingCreationArgs, + @Ctx() context: Context, ): Promise { const user = await dbUser.findOne({ email }, { withDeleted: true }) if (!user) { @@ -240,6 +241,8 @@ export class AdminResolver { throw new Error(`User was deleted (${email})`) } + const moderator = getUser(context) + const pendingCreationToUpdate = await AdminPendingCreation.findOneOrFail({ id }) if (pendingCreationToUpdate.userId !== user.id) { @@ -258,14 +261,13 @@ export class AdminResolver { pendingCreationToUpdate.amount = amount pendingCreationToUpdate.memo = memo pendingCreationToUpdate.date = new Date(creationDate) - pendingCreationToUpdate.moderator = moderator + pendingCreationToUpdate.moderator = moderator.id await AdminPendingCreation.save(pendingCreationToUpdate) const result = new UpdatePendingCreation() result.amount = amount result.memo = pendingCreationToUpdate.memo result.date = pendingCreationToUpdate.date - result.moderator = pendingCreationToUpdate.moderator result.creation = await getUserCreation(user.id) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index 33b863768..e68ba13d0 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -116,3 +116,20 @@ export const createPendingCreations = gql` } } ` + +export const updatePendingCreation = gql` + mutation ($id: Int!, $email: String!, $amount: Decimal!, $memo: String!, $creationDate: String!) { + updatePendingCreation( + id: $id + email: $email + amount: $amount + memo: $memo + creationDate: $creationDate + ) { + amount + date + memo + creation + } + } +` From 61f3da38fa3d1f0610fae7f424ab5bc64f47e20f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 12:13:57 +0200 Subject: [PATCH 038/162] creation factory returns unconfirmed creation object --- backend/src/seeds/factory/creation.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/backend/src/seeds/factory/creation.ts b/backend/src/seeds/factory/creation.ts index 88a681ef7..3c319fb9f 100644 --- a/backend/src/seeds/factory/creation.ts +++ b/backend/src/seeds/factory/creation.ts @@ -17,7 +17,7 @@ export const nMonthsBefore = (date: Date, months = 1): string => { export const creationFactory = async ( client: ApolloServerTestClient, creation: CreationInterface, -): Promise => { +): Promise => { const { mutate, query } = client await query({ query: login, variables: { email: 'peter@lustig.de', password: 'Aa12345_' } }) @@ -27,12 +27,12 @@ export const creationFactory = async ( // get User const user = await User.findOneOrFail({ where: { email: creation.email } }) - if (creation.confirmed) { - const pendingCreation = await AdminPendingCreation.findOneOrFail({ - where: { userId: user.id }, - order: { created: 'DESC' }, - }) + const pendingCreation = await AdminPendingCreation.findOneOrFail({ + where: { userId: user.id }, + order: { created: 'DESC' }, + }) + if (creation.confirmed) { await mutate({ mutation: confirmPendingCreation, variables: { id: pendingCreation.id } }) if (creation.moveCreationDate) { @@ -50,5 +50,7 @@ export const creationFactory = async ( await transaction.save() } } + } else { + return pendingCreation } } From baac1d8dde18f3cb91b6d323094822bc9b6641f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 27 Apr 2022 13:04:51 +0200 Subject: [PATCH 039/162] Fix error with undefined this.callback --- frontend/src/components/Message/Message.vue | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Message/Message.vue b/frontend/src/components/Message/Message.vue index 769bd99bf..bf83d7344 100644 --- a/frontend/src/components/Message/Message.vue +++ b/frontend/src/components/Message/Message.vue @@ -13,7 +13,7 @@ v-if="buttonText && (linkTo || callback)" class="test-message-button" :to="linkTo ? linkTo + (code ? `/${code}` : '') : null" - @click="callback()" + @click="optionalCallback()" > {{ buttonText }} @@ -36,5 +36,12 @@ export default { callback: { type: Function, required: false, default: null }, code: { type: String, required: false, default: null }, // Wolle: to be removed by adding it directly to the "linkTo" }, + methods: { + optionalCallback() { + if (this.callback) { + this.callback() + } + }, + }, } From 5c89fe545d37f4abd334a49e7bad23bd8947e06b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 27 Apr 2022 13:05:37 +0200 Subject: [PATCH 040/162] Change Login page to more general page message --- frontend/src/pages/Login.spec.js | 6 ++++-- frontend/src/pages/Login.vue | 30 +++++++++++++++++------------- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/frontend/src/pages/Login.spec.js b/frontend/src/pages/Login.spec.js index c31b4d77d..5b7ccfefe 100644 --- a/frontend/src/pages/Login.spec.js +++ b/frontend/src/pages/Login.spec.js @@ -211,7 +211,7 @@ describe('Login', () => { await wrapper.find('input[placeholder="form.password"]').setValue('1234') await flushPromises() apolloQueryMock.mockRejectedValue({ - message: '..No user with this credentials', + message: '...No user with this credentials', }) await wrapper.find('form').trigger('submit') await flushPromises() @@ -222,7 +222,9 @@ describe('Login', () => { }) it('toasts an error message', () => { - expect(toastErrorSpy).toBeCalledWith('error.no-account') + expect(toastErrorSpy).toBeCalledWith( + 'error.unknown-error...No user with this credentials', + ) }) describe('login fails with "User email not validated"', () => { diff --git a/frontend/src/pages/Login.vue b/frontend/src/pages/Login.vue index c4f324f1f..935ed9eed 100755 --- a/frontend/src/pages/Login.vue +++ b/frontend/src/pages/Login.vue @@ -60,18 +60,10 @@ - @@ -101,6 +93,8 @@ export default { passwordVisible: false, showPageMessage: false, errorReason: null, + errorSubtitle: '', + errorLinkTo: '', CONFIG, } }, @@ -132,13 +126,23 @@ export default { } }) .catch((error) => { - this.toastError(this.$t('error.no-account')) if (error.message.includes('User email not validated')) { + this.toastError(this.$t('error.no-account')) this.showPageMessage = true - this.errorReason = 'email-unvalidated' + this.errorSubtitle = this.$t('site.thx.activateEmail') + this.errorLinkTo = '/forgot-password' } else if (error.message.includes('User has no password set yet')) { + this.toastError(this.$t('error.no-account')) this.showPageMessage = true - this.errorReason = 'password-unset' + this.errorSubtitle = this.$t('site.thx.unsetPassword') + this.errorLinkTo = '/reset-password/login' + } else { + // appeared errors: 'GraphQL error: No user with this credentials' + const errorMessage = this.$t('error.unknown-error') + error.message + this.toastError(errorMessage) + this.showPageMessage = true + this.errorSubtitle = errorMessage + this.errorLinkTo = '/forgot-password' } loader.hide() }) From 4bf2871ba164744a79d135f9ca8cf18fe09b3409 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 13:38:40 +0200 Subject: [PATCH 041/162] test update pending creation mutation --- .../graphql/resolver/AdminResolver.test.ts | 300 ++++++++++++++++-- backend/src/graphql/resolver/AdminResolver.ts | 13 +- 2 files changed, 274 insertions(+), 39 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index d43941e45..0f606429c 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -3,6 +3,7 @@ import { testEnvironment, resetToken, cleanDB } from '@test/helpers' import { userFactory } from '@/seeds/factory/user' +import { creationFactory } from '@/seeds/factory/creation' import { bibiBloxberg } from '@/seeds/users/bibi-bloxberg' import { peterLustig } from '@/seeds/users/peter-lustig' import { stephenHawking } from '@/seeds/users/stephen-hawking' @@ -12,6 +13,7 @@ import { unDeleteUser, createPendingCreation, createPendingCreations, + updatePendingCreation, } from '@/seeds/graphql/mutations' import { GraphQLError } from 'graphql' import { User } from '@entity/User' @@ -19,6 +21,7 @@ import { User } from '@entity/User' import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail' import { login } from '@/seeds/graphql/queries' import Decimal from 'decimal.js-light' +import { AdminPendingCreation } from '@entity/AdminPendingCreation' // mock account activation email to avoid console spam jest.mock('@/mailer/sendAccountActivationEmail', () => { @@ -40,12 +43,13 @@ beforeAll(async () => { }) afterAll(async () => { - await cleanDB() + // await cleanDB() await con.close() }) let admin: User let user: User +let creation: AdminPendingCreation | void describe('AdminResolver', () => { describe('delete user', () => { @@ -287,6 +291,27 @@ describe('AdminResolver', () => { ) }) }) + + describe('updatePendingCreation', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: 1, + email: 'bibi@bloxberg.de', + amount: new Decimal(300), + memo: 'Danke Bibi!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) }) describe('authenticated', () => { @@ -328,6 +353,27 @@ describe('AdminResolver', () => { ) }) }) + + describe('updatePendingCreation', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: 1, + email: 'bibi@bloxberg.de', + amount: new Decimal(300), + memo: 'Danke Bibi!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) }) describe('with admin rights', () => { @@ -340,11 +386,21 @@ describe('AdminResolver', () => { }) afterAll(async () => { - await cleanDB() + // await cleanDB() resetToken() }) describe('createPendingCreation', () => { + beforeAll(async () => { + const now = new Date() + creation = await creationFactory(testEnv, { + email: 'peter@lustig.de', + amount: 400, + memo: 'Herzlich Willkommen bei Gradido!', + creationDate: new Date(now.getFullYear(), now.getMonth() - 1, 1).toISOString(), + }) + }) + describe('user to create for does not exist', () => { it('throws an error', async () => { await expect(mutate({ mutation: createPendingCreation, variables })).resolves.toEqual( @@ -488,47 +544,223 @@ describe('AdminResolver', () => { }) }) }) + }) - describe('createPendingCreations', () => { - // at this point we have this data in DB: - // bibi@bloxberg.de: [1000, 1000, 800] - // peter@lustig.de: [1000, 1000, 1000] - // stephen@hawking.uk: [1000, 1000, 1000] - deleted - // garrick@ollivander.com: [1000, 1000, 1000] - not activated + describe('createPendingCreations', () => { + // at this point we have this data in DB: + // bibi@bloxberg.de: [1000, 1000, 800] + // peter@lustig.de: [1000, 600, 1000] + // stephen@hawking.uk: [1000, 1000, 1000] - deleted + // garrick@ollivander.com: [1000, 1000, 1000] - not activated - const massCreationVariables = [ - 'bibi@bloxberg.de', - 'peter@lustig.de', - 'stephen@hawking.uk', - 'garrick@ollivander.com', - 'bob@baumeister.de', - ].map((email) => { - return { - email, - amount: new Decimal(1000), - memo: 'Grundeinkommen', - creationDate: new Date().toString(), - } - }) + const massCreationVariables = [ + 'bibi@bloxberg.de', + 'peter@lustig.de', + 'stephen@hawking.uk', + 'garrick@ollivander.com', + 'bob@baumeister.de', + ].map((email) => { + return { + email, + amount: new Decimal(500), + memo: 'Grundeinkommen', + creationDate: new Date().toString(), + } + }) - it('returns success, one successful creation and four failed creations', async () => { + it('returns success, two successful creation and three failed creations', async () => { + await expect( + mutate({ + mutation: createPendingCreations, + variables: { pendingCreations: massCreationVariables }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + createPendingCreations: { + success: true, + successfulCreation: ['bibi@bloxberg.de', 'peter@lustig.de'], + failedCreation: [ + 'stephen@hawking.uk', + 'garrick@ollivander.com', + 'bob@baumeister.de', + ], + }, + }, + }), + ) + }) + }) + + describe('updatePendingCreation', () => { + // at this I expect to have this data in DB: + // bibi@bloxberg.de: [1000, 1000, 300] + // peter@lustig.de: [1000, 600, 500] + // stephen@hawking.uk: [1000, 1000, 1000] - deleted + // garrick@ollivander.com: [1000, 1000, 1000] - not activated + + describe('user for creation to update does not exist', () => { + it('throws an error', async () => { await expect( mutate({ - mutation: createPendingCreations, - variables: { pendingCreations: massCreationVariables }, + mutation: updatePendingCreation, + variables: { + id: 1, + email: 'bob@baumeister.de', + amount: new Decimal(300), + memo: 'Danke Bibi!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Could not find user with email: bob@baumeister.de')], + }), + ) + }) + }) + + describe('user for creation to update is deleted', () => { + it('throws an error', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: 1, + email: 'stephen@hawking.uk', + amount: new Decimal(300), + memo: 'Danke Bibi!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('User was deleted (stephen@hawking.uk)')], + }), + ) + }) + }) + + describe('creation does not exist', () => { + it('throws an error', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: -1, + email: 'bibi@bloxberg.de', + amount: new Decimal(300), + memo: 'Danke Bibi!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('No creation found to given id.')], + }), + ) + }) + }) + + describe('user email does not match creation user', () => { + it('throws an error', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: creation ? creation.id : -1, + email: 'bibi@bloxberg.de', + amount: new Decimal(300), + memo: 'Danke Bibi!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [ + new GraphQLError( + 'user of the pending creation and send user does not correspond', + ), + ], + }), + ) + }) + }) + + describe('creation update is not valid', () => { + it('throws an error', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: creation ? creation.id : -1, + email: 'peter@lustig.de', + amount: new Decimal(1900), + memo: 'Danke Peter!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [ + new GraphQLError( + 'The amount (1900 GDD) to be created exceeds the available amount (500 GDD) for this month.', + ), + ], + }), + ) + }) + }) + + describe('creation update is successful changing month', () => { + it('returns update creation object', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: creation ? creation.id : -1, + email: 'peter@lustig.de', + amount: new Decimal(300), + memo: 'Danke Peter!', + creationDate: new Date().toString(), + }, }), ).resolves.toEqual( expect.objectContaining({ data: { - createPendingCreations: { - success: true, - successfulCreation: ['peter@lustig.de'], - failedCreation: [ - 'bibi@bloxberg.de', - 'stephen@hawking.uk', - 'garrick@ollivander.com', - 'bob@baumeister.de', - ], + updatePendingCreation: { + date: expect.any(String), + memo: 'Danke Peter!', + amount: '300', + creation: ['1000', '1000', '200'], + }, + }, + }), + ) + }) + }) + + describe('creation update is successful without changing month', () => { + it('returns update creation object', async () => { + await expect( + mutate({ + mutation: updatePendingCreation, + variables: { + id: creation ? creation.id : -1, + email: 'peter@lustig.de', + amount: new Decimal(200), + memo: 'Das war leider zu Viel!', + creationDate: new Date().toString(), + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + updatePendingCreation: { + date: expect.any(String), + memo: 'Das war leider zu Viel!', + amount: '200', + creation: ['1000', '1000', '300'], }, }, }), diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index fe3861cfa..96ad44ccc 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -243,7 +243,11 @@ export class AdminResolver { const moderator = getUser(context) - const pendingCreationToUpdate = await AdminPendingCreation.findOneOrFail({ id }) + const pendingCreationToUpdate = await AdminPendingCreation.findOne({ id }) + + if (!pendingCreationToUpdate) { + throw new Error('No creation found to given id.') + } if (pendingCreationToUpdate.userId !== user.id) { throw new Error('user of the pending creation and send user does not correspond') @@ -255,9 +259,8 @@ export class AdminResolver { creations = updateCreations(creations, pendingCreationToUpdate) } - if (!isCreationValid(creations, amount, creationDateObj)) { - throw new Error('Creation is not valid') - } + // all possible cases not to be true are thrown in this function + isCreationValid(creations, amount, creationDateObj) pendingCreationToUpdate.amount = amount pendingCreationToUpdate.memo = memo pendingCreationToUpdate.date = new Date(creationDate) @@ -510,7 +513,7 @@ function updateCreations(creations: Decimal[], pendingCreation: AdminPendingCrea if (index < 0) { throw new Error('You cannot create GDD for a month older than the last three months.') } - creations[index] = creations[index].plus(pendingCreation.amount) + creations[index] = creations[index].plus(pendingCreation.amount.toString()) return creations } From e4776fcfd5f08762a204bed7e47934a805b21ebe Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 14:08:56 +0200 Subject: [PATCH 042/162] test get pending creations query --- .../graphql/resolver/AdminResolver.test.ts | 95 ++++++++++++++++++- backend/src/seeds/graphql/queries.ts | 18 ++++ 2 files changed, 110 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 0f606429c..c0962cbe8 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -15,11 +15,11 @@ import { createPendingCreations, updatePendingCreation, } from '@/seeds/graphql/mutations' +import { getPendingCreations, login } from '@/seeds/graphql/queries' import { GraphQLError } from 'graphql' import { User } from '@entity/User' /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail' -import { login } from '@/seeds/graphql/queries' import Decimal from 'decimal.js-light' import { AdminPendingCreation } from '@entity/AdminPendingCreation' @@ -43,7 +43,7 @@ beforeAll(async () => { }) afterAll(async () => { - // await cleanDB() + await cleanDB() await con.close() }) @@ -312,6 +312,20 @@ describe('AdminResolver', () => { ) }) }) + + describe('getPendingCreations', () => { + it('returns an error', async () => { + await expect( + query({ + query: getPendingCreations, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) }) describe('authenticated', () => { @@ -374,6 +388,20 @@ describe('AdminResolver', () => { ) }) }) + + describe('getPendingCreations', () => { + it('returns an error', async () => { + await expect( + query({ + query: getPendingCreations, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) }) describe('with admin rights', () => { @@ -386,7 +414,7 @@ describe('AdminResolver', () => { }) afterAll(async () => { - // await cleanDB() + await cleanDB() resetToken() }) @@ -768,6 +796,67 @@ describe('AdminResolver', () => { }) }) }) + + describe('getPendingCreations', () => { + it('returns four pending creations', async () => { + await expect( + query({ + query: getPendingCreations, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { + getPendingCreations: expect.arrayContaining([ + { + id: expect.any(Number), + firstName: 'Peter', + lastName: 'Lustig', + email: 'peter@lustig.de', + date: expect.any(String), + memo: 'Das war leider zu Viel!', + amount: '200', + moderator: admin.id, + creation: ['1000', '1000', '300'], + }, + { + id: expect.any(Number), + firstName: 'Peter', + lastName: 'Lustig', + email: 'peter@lustig.de', + date: expect.any(String), + memo: 'Grundeinkommen', + amount: '500', + moderator: admin.id, + creation: ['1000', '1000', '300'], + }, + { + id: expect.any(Number), + firstName: 'Bibi', + lastName: 'Bloxberg', + email: 'bibi@bloxberg.de', + date: expect.any(String), + memo: 'Grundeinkommen', + amount: '500', + moderator: admin.id, + creation: ['1000', '1000', '300'], + }, + { + id: expect.any(Number), + firstName: 'Bibi', + lastName: 'Bloxberg', + email: 'bibi@bloxberg.de', + date: expect.any(String), + memo: 'Vielen Dank für den Zaubertrank!', + amount: '200', + moderator: admin.id, + creation: ['1000', '1000', '300'], + }, + ]), + }, + }), + ) + }) + }) }) }) }) diff --git a/backend/src/seeds/graphql/queries.ts b/backend/src/seeds/graphql/queries.ts index 76a386953..82067c968 100644 --- a/backend/src/seeds/graphql/queries.ts +++ b/backend/src/seeds/graphql/queries.ts @@ -148,3 +148,21 @@ export const queryTransactionLink = gql` } } ` + +// from admin interface + +export const getPendingCreations = gql` + query { + getPendingCreations { + id + firstName + lastName + email + amount + memo + date + moderator + creation + } + } +` From 6f0c3c11a5aa6b0094173cfe6b5fdd3bcd9ac75e Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 17:51:26 +0200 Subject: [PATCH 043/162] improve matching of created pending creation, see TODO --- backend/src/seeds/factory/creation.ts | 4 ++-- backend/src/seeds/graphql/mutations.ts | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/backend/src/seeds/factory/creation.ts b/backend/src/seeds/factory/creation.ts index 3c319fb9f..e49be3758 100644 --- a/backend/src/seeds/factory/creation.ts +++ b/backend/src/seeds/factory/creation.ts @@ -22,13 +22,13 @@ export const creationFactory = async ( await query({ query: login, variables: { email: 'peter@lustig.de', password: 'Aa12345_' } }) + // TODO it would be nice to have this mutation return the id await mutate({ mutation: createPendingCreation, variables: { ...creation } }) - // get User const user = await User.findOneOrFail({ where: { email: creation.email } }) const pendingCreation = await AdminPendingCreation.findOneOrFail({ - where: { userId: user.id }, + where: { userId: user.id, amount: creation.amount }, order: { created: 'DESC' }, }) diff --git a/backend/src/seeds/graphql/mutations.ts b/backend/src/seeds/graphql/mutations.ts index e68ba13d0..d3026dbdd 100644 --- a/backend/src/seeds/graphql/mutations.ts +++ b/backend/src/seeds/graphql/mutations.ts @@ -133,3 +133,9 @@ export const updatePendingCreation = gql` } } ` + +export const deletePendingCreation = gql` + mutation ($id: Int!) { + deletePendingCreation(id: $id) + } +` From 76b1763bc04ce208a044efddcf6959a8a428e6e5 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 17:52:00 +0200 Subject: [PATCH 044/162] test deletePendingCreation and confirmPendingCreation mutations --- .../graphql/resolver/AdminResolver.test.ts | 191 ++++++++++++++++++ backend/src/graphql/resolver/AdminResolver.ts | 15 +- 2 files changed, 201 insertions(+), 5 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index c0962cbe8..4102cb382 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -14,6 +14,8 @@ import { createPendingCreation, createPendingCreations, updatePendingCreation, + deletePendingCreation, + confirmPendingCreation, } from '@/seeds/graphql/mutations' import { getPendingCreations, login } from '@/seeds/graphql/queries' import { GraphQLError } from 'graphql' @@ -22,6 +24,7 @@ import { User } from '@entity/User' import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail' import Decimal from 'decimal.js-light' import { AdminPendingCreation } from '@entity/AdminPendingCreation' +import { Transaction as DbTransaction } from '@entity/Transaction' // mock account activation email to avoid console spam jest.mock('@/mailer/sendAccountActivationEmail', () => { @@ -326,6 +329,40 @@ describe('AdminResolver', () => { ) }) }) + + describe('deletePendingCreation', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: deletePendingCreation, + variables: { + id: 1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('confirmPendingCreation', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: confirmPendingCreation, + variables: { + id: 1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) }) describe('authenticated', () => { @@ -402,6 +439,40 @@ describe('AdminResolver', () => { ) }) }) + + describe('deletePendingCreation', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: deletePendingCreation, + variables: { + id: 1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) + + describe('confirmPendingCreation', () => { + it('returns an error', async () => { + await expect( + mutate({ + mutation: confirmPendingCreation, + variables: { + id: 1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('401 Unauthorized')], + }), + ) + }) + }) }) describe('with admin rights', () => { @@ -857,6 +928,126 @@ describe('AdminResolver', () => { ) }) }) + + describe('deletePendingCreation', () => { + describe('creation id does not exist', () => { + it('throws an error', async () => { + await expect( + mutate({ + mutation: deletePendingCreation, + variables: { + id: -1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Creation not found to given id.')], + }), + ) + }) + }) + + describe('creation id does exist', () => { + it('returns true', async () => { + await expect( + mutate({ + mutation: deletePendingCreation, + variables: { + id: creation ? creation.id : -1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { deletePendingCreation: true }, + }), + ) + }) + }) + }) + + describe('confirmPendingCreation', () => { + describe('creation does not exits', () => { + it('throws an error', async () => { + await expect( + mutate({ + mutation: confirmPendingCreation, + variables: { + id: -1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Creation not found to given id.')], + }), + ) + }) + }) + + describe('confirm own creation', () => { + beforeAll(async () => { + const now = new Date() + creation = await creationFactory(testEnv, { + email: 'peter@lustig.de', + amount: 400, + memo: 'Herzlich Willkommen bei Gradido!', + creationDate: new Date(now.getFullYear(), now.getMonth() - 1, 1).toISOString(), + }) + }) + + it('thows an error', async () => { + await expect( + mutate({ + mutation: confirmPendingCreation, + variables: { + id: creation ? creation.id : -1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + errors: [new GraphQLError('Moderator can not confirm own pending creation')], + }), + ) + }) + }) + + describe('creation of other user', () => { + beforeAll(async () => { + const now = new Date() + creation = await creationFactory(testEnv, { + email: 'bibi@bloxberg.de', + amount: 450, + memo: 'Herzlich Willkommen bei Gradido liebe Bibi!', + creationDate: new Date(now.getFullYear(), now.getMonth() - 2, 1).toISOString(), + }) + }) + + it('returns true', async () => { + await expect( + mutate({ + mutation: confirmPendingCreation, + variables: { + id: creation ? creation.id : -1, + }, + }), + ).resolves.toEqual( + expect.objectContaining({ + data: { confirmPendingCreation: true }, + }), + ) + }) + + it('creates a transaction', async () => { + const transaction = await DbTransaction.find() + expect(transaction[0].amount.toString()).toBe('450') + expect(transaction[0].memo).toBe('Herzlich Willkommen bei Gradido liebe Bibi!') + expect(transaction[0].linkedTransactionId).toEqual(null) + expect(transaction[0].transactionLinkId).toEqual(null) + expect(transaction[0].previous).toEqual(null) + expect(transaction[0].linkedUserId).toEqual(null) + expect(transaction[0].typeId).toEqual(1) + }) + }) + }) }) }) }) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 96ad44ccc..ba703a554 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -307,8 +307,11 @@ export class AdminResolver { @Authorized([RIGHTS.DELETE_PENDING_CREATION]) @Mutation(() => Boolean) async deletePendingCreation(@Arg('id', () => Int) id: number): Promise { - const entity = await AdminPendingCreation.findOneOrFail(id) - const res = await AdminPendingCreation.delete(entity) + const pendingCreation = await AdminPendingCreation.findOne(id) + if (!pendingCreation) { + throw new Error('Creation not found to given id.') + } + const res = await AdminPendingCreation.delete(pendingCreation) return !!res } @@ -318,7 +321,10 @@ export class AdminResolver { @Arg('id', () => Int) id: number, @Ctx() context: Context, ): Promise { - const pendingCreation = await AdminPendingCreation.findOneOrFail(id) + const pendingCreation = await AdminPendingCreation.findOne(id) + if (!pendingCreation) { + throw new Error('Creation not found to given id.') + } const moderatorUser = getUser(context) if (moderatorUser.id === pendingCreation.userId) throw new Error('Moderator can not confirm own pending creation') @@ -349,8 +355,7 @@ export class AdminResolver { transaction.memo = pendingCreation.memo transaction.userId = pendingCreation.userId transaction.previous = lastTransaction ? lastTransaction.id : null - // TODO pending creations decimal - transaction.amount = new Decimal(Number(pendingCreation.amount)) + transaction.amount = pendingCreation.amount transaction.creationDate = pendingCreation.date transaction.balance = newBalance transaction.balanceDate = receivedCallDate From 372b9d16d04f41b5eb4f0d6e2b62e0ffce585821 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 17:52:52 +0200 Subject: [PATCH 045/162] test coverage backend to 65% --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3d046fcda..999863dd9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -528,7 +528,7 @@ jobs: report_name: Coverage Backend type: lcov result_path: ./backend/coverage/lcov.info - min_coverage: 58 + min_coverage: 65 token: ${{ github.token }} ########################################################################## From 9ee43d8b3eaac988276ee35efad80beb556f7bc6 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 27 Apr 2022 18:10:49 +0200 Subject: [PATCH 046/162] devops: Disable send email on Seeding --- backend/src/seeds/index.ts | 3 +++ deployment/bare_metal/.env.dist | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/src/seeds/index.ts b/backend/src/seeds/index.ts index 37c9992a7..2133c2663 100644 --- a/backend/src/seeds/index.ts +++ b/backend/src/seeds/index.ts @@ -13,6 +13,9 @@ import { userFactory } from './factory/user' import { creationFactory } from './factory/creation' import { transactionLinkFactory } from './factory/transactionLink' import { entities } from '@entity/index' +import CONFIG from '@/config' + +CONFIG.EMAIL = false const context = { token: '', diff --git a/deployment/bare_metal/.env.dist b/deployment/bare_metal/.env.dist index a7e266bdf..a1751a859 100644 --- a/deployment/bare_metal/.env.dist +++ b/deployment/bare_metal/.env.dist @@ -38,7 +38,7 @@ KLICKTIPP_PASSWORD= KLICKTIPP_APIKEY_DE= KLICKTIPP_APIKEY_EN= -EMAIL=false +EMAIL=true EMAIL_USERNAME=peter@lustig.de EMAIL_SENDER=peter@lustig.de EMAIL_PASSWORD=1234 From fe4e87f5760bf2e708008bfffed8c2469df18d86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 28 Apr 2022 08:41:17 +0200 Subject: [PATCH 047/162] Add NVM config file as well for the main folder --- .nvmrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .nvmrc diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 000000000..ce4572cce --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +v17.9.0 \ No newline at end of file From 778c9568e6ef43e6ebfe00e3a1cf12ecb388ad59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 28 Apr 2022 10:48:50 +0200 Subject: [PATCH 048/162] Resolved Ulf's error detection --- backend/src/graphql/resolver/AdminResolver.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index bac58bbb4..84f7519f5 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -64,11 +64,11 @@ export class AdminResolver { const filterCriteria: ObjectLiteral[] = [] if (filterByActivated !== null) { - filterCriteria.push({ filterByActivated: filterByActivated }) + filterCriteria.push({ emailChecked: filterByActivated }) } if (filterByDeleted !== null) { - filterCriteria.push({ filterByDeleted: filterByDeleted ? Not(IsNull()) : IsNull() }) + filterCriteria.push({ deletedAt: filterByDeleted ? Not(IsNull()) : IsNull() }) } const userFields = ['id', 'firstName', 'lastName', 'email', 'emailChecked', 'deletedAt'] From 549aa1c3aab7aec7077a5c995f5499321818e766 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:18:50 +0200 Subject: [PATCH 049/162] Update backend/src/graphql/resolver/AdminResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/AdminResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 4102cb382..25c026ea7 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -106,7 +106,7 @@ describe('AdminResolver', () => { resetToken() }) - describe('user to delete user does not exist', () => { + describe('user to be delete does not exist', () => { it('throws an error', async () => { await expect( mutate({ mutation: deleteUser, variables: { userId: admin.id + 1 } }), From f448daf83473a2e731153892ee899525a4cc00d2 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:18:59 +0200 Subject: [PATCH 050/162] Update backend/src/graphql/resolver/AdminResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/AdminResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 25c026ea7..b36ae5b4c 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -67,7 +67,7 @@ describe('AdminResolver', () => { }) describe('authenticated', () => { - describe('with user rights', () => { + describe('without admin rights', () => { beforeAll(async () => { user = await userFactory(testEnv, bibiBloxberg) await query({ From 4c6660a7a57942f958d62e0ee71012499a0ab819 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:19:34 +0200 Subject: [PATCH 051/162] Update backend/src/graphql/resolver/AdminResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/AdminResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index b36ae5b4c..2895cac88 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -175,7 +175,7 @@ describe('AdminResolver', () => { }) describe('authenticated', () => { - describe('with user rights', () => { + describe('without admin rights', () => { beforeAll(async () => { user = await userFactory(testEnv, bibiBloxberg) await query({ From 51f8dfb89f4ff7b2a1747a8d981be47d68685e86 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:19:51 +0200 Subject: [PATCH 052/162] Update backend/src/graphql/resolver/AdminResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/AdminResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 2895cac88..bc650ed57 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -214,7 +214,7 @@ describe('AdminResolver', () => { resetToken() }) - describe('user to undelete user does not exist', () => { + describe('user to be undelete does not exist', () => { it('throws an error', async () => { await expect( mutate({ mutation: unDeleteUser, variables: { userId: admin.id + 1 } }), From 77ae24d54d96468cdcb8b2f3d201a1b1ee1a43b0 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:20:44 +0200 Subject: [PATCH 053/162] Update backend/src/graphql/resolver/AdminResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/AdminResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index bc650ed57..e0dc6b54c 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -366,7 +366,7 @@ describe('AdminResolver', () => { }) describe('authenticated', () => { - describe('with user rights', () => { + describe('without admin rights', () => { beforeAll(async () => { user = await userFactory(testEnv, bibiBloxberg) await query({ From 6251ad54d2f5a7147d8184622995d1859d3b232d Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:22:11 +0200 Subject: [PATCH 054/162] Update backend/src/graphql/resolver/AdminResolver.test.ts Co-authored-by: Ulf Gebhardt --- backend/src/graphql/resolver/AdminResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index e0dc6b54c..5872a5092 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -1010,7 +1010,7 @@ describe('AdminResolver', () => { }) }) - describe('creation of other user', () => { + describe('confirm creation for other user', () => { beforeAll(async () => { const now = new Date() creation = await creationFactory(testEnv, { From 48826feaa64fa2c35d5bdc9bd49b0bf3a965253f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:53:24 +0200 Subject: [PATCH 055/162] improve error messages --- .../graphql/resolver/AdminResolver.test.ts | 20 +++++++++---------- backend/src/graphql/resolver/AdminResolver.ts | 8 ++++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index 5872a5092..c2a9256fd 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -236,7 +236,7 @@ describe('AdminResolver', () => { mutate({ mutation: unDeleteUser, variables: { userId: user.id } }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('User already deleted')], + errors: [new GraphQLError('User is not deleted')], }), ) }) @@ -265,7 +265,7 @@ describe('AdminResolver', () => { const variables = { email: 'bibi@bloxberg.de', amount: new Decimal(2000), - memo: 'Vielen Dank für den Zaubertrank!', + memo: 'Aktives Grundeinkommen', creationDate: 'not-valid', } @@ -552,7 +552,7 @@ describe('AdminResolver', () => { mutate({ mutation: createPendingCreation, variables }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('No Creation found!')], + errors: [new GraphQLError('No information for available creations for the given date')], }), ) }) @@ -570,7 +570,7 @@ describe('AdminResolver', () => { mutate({ mutation: createPendingCreation, variables }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('No Creation found!')], + errors: [new GraphQLError('No information for available creations for the given date')], }), ) }) @@ -588,7 +588,7 @@ describe('AdminResolver', () => { mutate({ mutation: createPendingCreation, variables }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('No Creation found!')], + errors: [new GraphQLError('No information for available creations for the given date')], }), ) }) @@ -603,7 +603,7 @@ describe('AdminResolver', () => { expect.objectContaining({ errors: [ new GraphQLError( - 'The amount (2000 GDD) to be created exceeds the available amount (1000 GDD) for this month.', + 'The amount (2000 GDD) to be created exceeds the amount (1000 GDD) still available for this month.', ), ], }), @@ -635,7 +635,7 @@ describe('AdminResolver', () => { expect.objectContaining({ errors: [ new GraphQLError( - 'The amount (1000 GDD) to be created exceeds the available amount (800 GDD) for this month.', + 'The amount (1000 GDD) to be created exceeds the amount (800 GDD) still available for this month.', ), ], }), @@ -803,7 +803,7 @@ describe('AdminResolver', () => { expect.objectContaining({ errors: [ new GraphQLError( - 'The amount (1900 GDD) to be created exceeds the available amount (500 GDD) for this month.', + 'The amount (1900 GDD) to be created exceeds the amount (500 GDD) still available for this month.', ), ], }), @@ -917,7 +917,7 @@ describe('AdminResolver', () => { lastName: 'Bloxberg', email: 'bibi@bloxberg.de', date: expect.any(String), - memo: 'Vielen Dank für den Zaubertrank!', + memo: 'Aktives Grundeinkommen', amount: '200', moderator: admin.id, creation: ['1000', '1000', '300'], @@ -941,7 +941,7 @@ describe('AdminResolver', () => { }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('Creation not found to given id.')], + errors: [new GraphQLError('Creation not found for given id.')], }), ) }) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index ba703a554..94734d239 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -161,7 +161,7 @@ export class AdminResolver { throw new Error(`Could not find user with userId: ${userId}`) } if (!user.deletedAt) { - throw new Error('User already deleted') + throw new Error('User is not deleted') } await user.recover() return null @@ -309,7 +309,7 @@ export class AdminResolver { async deletePendingCreation(@Arg('id', () => Int) id: number): Promise { const pendingCreation = await AdminPendingCreation.findOne(id) if (!pendingCreation) { - throw new Error('Creation not found to given id.') + throw new Error('Creation not found for given id.') } const res = await AdminPendingCreation.delete(pendingCreation) return !!res @@ -526,12 +526,12 @@ function isCreationValid(creations: Decimal[], amount: Decimal, creationDate: Da const index = getCreationIndex(creationDate.getMonth()) if (index < 0) { - throw new Error(`No Creation found!`) + throw new Error('No information for available creations for the given date') } if (amount.greaterThan(creations[index].toString())) { throw new Error( - `The amount (${amount} GDD) to be created exceeds the available amount (${creations[index]} GDD) for this month.`, + `The amount (${amount} GDD) to be created exceeds the amount (${creations[index]} GDD) still available for this month.`, ) } From eec79000c9003e415daf6bed901a968a4b976140 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 11:59:52 +0200 Subject: [PATCH 056/162] linting --- backend/src/graphql/resolver/AdminResolver.test.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.test.ts b/backend/src/graphql/resolver/AdminResolver.test.ts index c2a9256fd..cf51b9e25 100644 --- a/backend/src/graphql/resolver/AdminResolver.test.ts +++ b/backend/src/graphql/resolver/AdminResolver.test.ts @@ -552,7 +552,9 @@ describe('AdminResolver', () => { mutate({ mutation: createPendingCreation, variables }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('No information for available creations for the given date')], + errors: [ + new GraphQLError('No information for available creations for the given date'), + ], }), ) }) @@ -570,7 +572,9 @@ describe('AdminResolver', () => { mutate({ mutation: createPendingCreation, variables }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('No information for available creations for the given date')], + errors: [ + new GraphQLError('No information for available creations for the given date'), + ], }), ) }) @@ -588,7 +592,9 @@ describe('AdminResolver', () => { mutate({ mutation: createPendingCreation, variables }), ).resolves.toEqual( expect.objectContaining({ - errors: [new GraphQLError('No information for available creations for the given date')], + errors: [ + new GraphQLError('No information for available creations for the given date'), + ], }), ) }) From 5496ab5a970d06a39fc7a4ed857aa02179373538 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 28 Apr 2022 15:42:14 +0200 Subject: [PATCH 057/162] Ignore .nvmrc files in sub directories --- .gitignore | 1 + admin/.gitignore | 3 ++- backend/.gitignore | 3 ++- database/.gitignore | 3 ++- frontend/.gitignore | 3 ++- 5 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index b02b9d6ec..f771e49f4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ package-lock.json /deployment/bare_metal/nginx/update-page/updating.html /deployment/bare_metal/log /deployment/bare_metal/backup +/.nvmrc diff --git a/admin/.gitignore b/admin/.gitignore index 6bb62f667..d78b066c1 100644 --- a/admin/.gitignore +++ b/admin/.gitignore @@ -9,4 +9,5 @@ dist/ coverage/ # emacs -*~ \ No newline at end of file +*~ +/.nvmrc diff --git a/backend/.gitignore b/backend/.gitignore index 147e82849..2381e9abc 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -5,4 +5,5 @@ package-json.lock coverage # emacs -*~ \ No newline at end of file +*~ +/.nvmrc diff --git a/database/.gitignore b/database/.gitignore index bce5da58f..d1bd69ed3 100644 --- a/database/.gitignore +++ b/database/.gitignore @@ -24,4 +24,5 @@ package-lock.json coverage/ -*~ \ No newline at end of file +*~ +/.nvmrc diff --git a/frontend/.gitignore b/frontend/.gitignore index b19667d17..2054a5cd5 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -23,4 +23,5 @@ package-lock.json coverage/ -*~ \ No newline at end of file +*~ +/.nvmrc From 2041951e4245ce1fdbfb7c309933b475dd8a6b89 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 28 Apr 2022 15:49:08 +0200 Subject: [PATCH 058/162] devops: Disable DB reset on stage 1 --- deployment/bare_metal/start.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index 95b89241f..8d75e11b8 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -105,7 +105,8 @@ yarn install yarn build if [ "$DEPLOY_SEED_DATA" = "true" ]; then yarn dev_up - yarn dev_reset +# As de_reset is not running properly (0019-replace_login_user_id_with_state_user_id) +# yarn dev_reset else yarn up fi From 01d0aba0d72d8afaf6ddfda75c8379bb192311f6 Mon Sep 17 00:00:00 2001 From: ogerly Date: Thu, 28 Apr 2022 15:51:51 +0200 Subject: [PATCH 059/162] add package clipboard-polyfill --- frontend/package.json | 1 + frontend/yarn.lock | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/frontend/package.json b/frontend/package.json index 18021e705..bae95e938 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,6 +25,7 @@ "babel-preset-vue": "^2.0.2", "bootstrap": "^4.5.3", "bootstrap-vue": "^2.21.2", + "clipboard-polyfill": "^4.0.0-rc1", "es6-promise": "^4.1.1", "eslint": "^7.25.0", "eslint-config-prettier": "^8.1.0", diff --git a/frontend/yarn.lock b/frontend/yarn.lock index b7648c9c8..0c4186d87 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -4856,6 +4856,11 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +clipboard-polyfill@^4.0.0-rc1: + version "4.0.0-rc1" + resolved "https://registry.yarnpkg.com/clipboard-polyfill/-/clipboard-polyfill-4.0.0-rc1.tgz#a000ab25b1f582bca03667dc572854f1c8d92b04" + integrity sha512-Cel03Es9ZgP6pYA2JT9cZ2VgvOH2/EHgB7jji84FpINBJWqfMEwiI1Y3LstVL+E43cm3CnCrLL2vwb9DMbr28A== + clipboardy@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-2.3.0.tgz#3c2903650c68e46a91b388985bc2774287dba290" From 09c25090f9c9099553c3f78b26298b7eb8f7623c Mon Sep 17 00:00:00 2001 From: ogerly Date: Thu, 28 Apr 2022 15:56:01 +0200 Subject: [PATCH 060/162] import clipboard-polyfill --- frontend/src/components/ClipboardCopy.vue | 2 ++ frontend/src/components/TransactionLinks/TransactionLink.vue | 1 + 2 files changed, 3 insertions(+) diff --git a/frontend/src/components/ClipboardCopy.vue b/frontend/src/components/ClipboardCopy.vue index 7a6cf0ec1..8590dfdef 100644 --- a/frontend/src/components/ClipboardCopy.vue +++ b/frontend/src/components/ClipboardCopy.vue @@ -18,6 +18,8 @@ diff --git a/frontend/src/pages/ForgotPassword.spec.js b/frontend/src/pages/ForgotPassword.spec.js index c6c798e22..cb22c77be 100644 --- a/frontend/src/pages/ForgotPassword.spec.js +++ b/frontend/src/pages/ForgotPassword.spec.js @@ -47,7 +47,7 @@ describe('ForgotPassword', () => { }) it('renders the component', () => { - expect(wrapper.find('div.forgot-password').exists()).toBeTruthy() + expect(wrapper.find('div.forgot-password').exists()).toBe(true) }) it('has a title', () => { @@ -84,7 +84,7 @@ describe('ForgotPassword', () => { }) it('has a submit button', () => { - expect(form.find('button[type="submit"]').exists()).toBeTruthy() + expect(form.find('button[type="submit"]').exists()).toBe(true) }) describe('invalid Email', () => { @@ -118,7 +118,7 @@ describe('ForgotPassword', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('error.email-already-sent') expect(wrapper.find('.test-message-button').text()).toBe('login') @@ -153,7 +153,7 @@ describe('ForgotPassword', () => { }) it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.title') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.email') expect(wrapper.find('.test-message-button').text()).toBe('login') diff --git a/frontend/src/pages/Login.spec.js b/frontend/src/pages/Login.spec.js index 891c656d0..db11a036e 100644 --- a/frontend/src/pages/Login.spec.js +++ b/frontend/src/pages/Login.spec.js @@ -59,7 +59,7 @@ describe('Login', () => { }) it('renders the Login form', () => { - expect(wrapper.find('div.login-form').exists()).toBeTruthy() + expect(wrapper.find('div.login-form').exists()).toBe(true) }) describe('Login header', () => { @@ -102,19 +102,19 @@ describe('Login', () => { describe('Login form', () => { it('has a login form', () => { - expect(wrapper.find('form').exists()).toBeTruthy() + expect(wrapper.find('form').exists()).toBe(true) }) it('has an Email input field', () => { - expect(wrapper.find('input[placeholder="Email"]').exists()).toBeTruthy() + expect(wrapper.find('input[placeholder="Email"]').exists()).toBe(true) }) it('has an Password input field', () => { - expect(wrapper.find('input[placeholder="form.password"]').exists()).toBeTruthy() + expect(wrapper.find('input[placeholder="form.password"]').exists()).toBe(true) }) it('has a Submit button', () => { - expect(wrapper.find('button[type="submit"]').exists()).toBeTruthy() + expect(wrapper.find('button[type="submit"]').exists()).toBe(true) }) }) @@ -227,7 +227,7 @@ describe('Login', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.activateEmail') expect(wrapper.find('.test-message-button').text()).toBe('settings.password.reset') @@ -255,7 +255,7 @@ describe('Login', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.unsetPassword') expect(wrapper.find('.test-message-button').text()).toBe('settings.password.reset') @@ -282,7 +282,7 @@ describe('Login', () => { }) it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe( 'error.unknown-error – Unknow error', diff --git a/frontend/src/pages/Register.spec.js b/frontend/src/pages/Register.spec.js index ca419069c..e889f0ca7 100644 --- a/frontend/src/pages/Register.spec.js +++ b/frontend/src/pages/Register.spec.js @@ -50,7 +50,7 @@ describe('Register', () => { }) it('renders the Register form', () => { - expect(wrapper.find('div#registerform').exists()).toBeTruthy() + expect(wrapper.find('div#registerform').exists()).toBe(true) }) describe('Register header', () => { @@ -94,22 +94,22 @@ describe('Register', () => { describe('Register form', () => { it('has a register form', () => { - expect(wrapper.find('form').exists()).toBeTruthy() + expect(wrapper.find('form').exists()).toBe(true) }) it('has firstname input fields', () => { - expect(wrapper.find('#registerFirstname').exists()).toBeTruthy() + expect(wrapper.find('#registerFirstname').exists()).toBe(true) }) it('has lastname input fields', () => { - expect(wrapper.find('#registerLastname').exists()).toBeTruthy() + expect(wrapper.find('#registerLastname').exists()).toBe(true) }) it('has email input fields', () => { - expect(wrapper.find('#Email-input-field').exists()).toBeTruthy() + expect(wrapper.find('#Email-input-field').exists()).toBe(true) }) it('has Language selected field', () => { - expect(wrapper.find('.selectedLanguage').exists()).toBeTruthy() + expect(wrapper.find('.selectedLanguage').exists()).toBe(true) }) it('selects Language value en', async () => { @@ -118,7 +118,7 @@ describe('Register', () => { }) it('has 1 checkbox input fields', () => { - expect(wrapper.find('#registerCheckbox').exists()).toBeTruthy() + expect(wrapper.find('#registerCheckbox').exists()).toBe(true) }) it('has PublisherId input fields', () => { @@ -235,7 +235,7 @@ describe('Register', () => { }) it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe('error.user-already-exists') expect(wrapper.find('.test-message-button').text()).toBe( @@ -250,7 +250,7 @@ describe('Register', () => { it('click calls "solveError"', async () => { wrapper.find('.test-message-button').trigger('click') await wrapper.vm.$nextTick() - expect(wrapper.vm.showPageMessage).not.toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(false) }) }) @@ -260,7 +260,7 @@ describe('Register', () => { }) it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') expect(wrapper.find('.test-message-subtitle').text()).toBe( 'error.unknown-error – Unknown error.', @@ -277,7 +277,7 @@ describe('Register', () => { it('click calls "solveError"', async () => { wrapper.find('.test-message-button').trigger('click') await wrapper.vm.$nextTick() - expect(wrapper.vm.showPageMessage).not.toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(false) }) }) }) @@ -308,13 +308,13 @@ describe('Register', () => { }) it('shows success title, subtitle', () => { - expect(wrapper.vm.showPageMessage).toBeTruthy() + expect(wrapper.vm.showPageMessage).toBe(true) expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.title') expect(wrapper.find('.test-message-subtitle').text()).toBe('site.thx.register') }) it('button is not present', () => { - expect(wrapper.find('.test-message-button')).toBeTruthy() + expect(wrapper.find('.test-message-button').exists()).toBe(false) }) }) }) From 5fd1a86af1f5efa514b01784750830380fd53c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Tue, 3 May 2022 09:28:57 +0200 Subject: [PATCH 082/162] Replace some withDeleted by filterByDeleted --- backend/src/graphql/arg/TransactionLinkFilters.ts | 2 +- backend/src/graphql/resolver/AdminResolver.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/arg/TransactionLinkFilters.ts b/backend/src/graphql/arg/TransactionLinkFilters.ts index e2f752d3f..4d02a18cc 100644 --- a/backend/src/graphql/arg/TransactionLinkFilters.ts +++ b/backend/src/graphql/arg/TransactionLinkFilters.ts @@ -3,7 +3,7 @@ import { ArgsType, Field } from 'type-graphql' @ArgsType() export default class TransactionLinkFilters { @Field(() => Boolean, { nullable: true, defaultValue: true }) - withDeleted?: boolean + filterByDeleted?: boolean @Field(() => Boolean, { nullable: true, defaultValue: true }) withExpired?: boolean diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 78cbf3fc8..20eab662f 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -149,7 +149,7 @@ export class AdminResolver { } // soft-delete user await user.softRemove() - const newUser = await dbUser.findOne({ id: userId }, { withDeleted: true }) + const newUser = await dbUser.findOne({ id: userId }, { filterByDeleted: true }) return newUser ? newUser.deletedAt : null } @@ -444,7 +444,7 @@ export class AdminResolver { if (!filters.withExpired) where.validUntil = MoreThan(new Date()) const [transactionLinks, count] = await dbTransactionLink.findAndCount({ where, - withDeleted: filters.withDeleted, + withDeleted: filters.filterByDeleted, order: { createdAt: order, }, From 114177b0d867ec1388a82184bd0915c8454691ed Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 3 May 2022 10:13:51 +0200 Subject: [PATCH 083/162] further tests --- backend/src/server/plugins.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts index 130045ea4..44ad829f7 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -19,9 +19,15 @@ const setHeadersPlugin = { }, } +// const requestDidStartLog = (requestContext: any): void => { + + + +// } + const logPlugin = { requestDidStart(requestContext: any) { - const logger = requestContext.logger + const { logger } = requestContext logger.debug(requestContext.request.query) logger.debug(JSON.stringify(requestContext.request.variables, null, 2)) // logger.log('debug', JSON.stringify(requestContext.request, null, 2)) @@ -30,6 +36,7 @@ const logPlugin = { // console.log(requestContext) logger.debug(JSON.stringify(requestContext.response.errors, null, 2)) logger.debug(JSON.stringify(requestContext.response.data, null, 2)) + logger.debug(JSON.stringify(requestContext.context, null, 2)) return requestContext }, } From b10f9245b638b7c7359473f7f132c10c000e58b2 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 3 May 2022 10:41:04 +0200 Subject: [PATCH 084/162] linting --- backend/src/graphql/resolver/UserResolver.ts | 13 ++++++------- backend/src/server/createServer.ts | 1 - backend/src/server/plugins.ts | 6 ++---- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index e56158a6e..b578b15ae 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -26,7 +26,6 @@ import { hasElopageBuys } from '@/util/hasElopageBuys' log4js.configure(CONFIG.LOG4JS_CONFIG) const logger = log4js.getLogger('graphql.resolver.UserResolver') - // eslint-disable-next-line @typescript-eslint/no-var-requires const sodium = require('sodium-native') // eslint-disable-next-line @typescript-eslint/no-var-requires @@ -223,31 +222,31 @@ export class UserResolver { ): Promise { email = email.trim().toLowerCase() const dbUser = await DbUser.findOneOrFail({ email }, { withDeleted: true }).catch(() => { - logger.error('User does not exists with this email=' + email) + logger.error('User does not exists with this email=' + email) throw new Error('No user with this credentials') }) if (dbUser.deletedAt) { - logger.error('The User was permanently deleted in database. email=' + email) + logger.error('The User was permanently deleted in database. email=' + email) throw new Error('This user was permanently deleted. Contact support for questions.') } if (!dbUser.emailChecked) { - logger.error('The Users email is not validate yet. email=' + email) + logger.error('The Users email is not validate yet. email=' + email) throw new Error('User email not validated') } if (dbUser.password === BigInt(0)) { - logger.error('The User has not set a password yet. email=' + email) + logger.error('The User has not set a password yet. email=' + email) // TODO we want to catch this on the frontend and ask the user to check his emails or resend code throw new Error('User has no password set yet') } if (!dbUser.pubKey || !dbUser.privKey) { - logger.error('The User has no private or publicKey. email=' + email) + logger.error('The User has no private or publicKey. email=' + email) // TODO we want to catch this on the frontend and ask the user to check his emails or resend code throw new Error('User has no private or publicKey') } const passwordHash = SecretKeyCryptographyCreateKey(email, password) // return short and long hash const loginUserPassword = BigInt(dbUser.password.toString()) if (loginUserPassword !== passwordHash[0].readBigUInt64LE()) { - logger.error('The User has no valid credentials. email=' + email) + logger.error('The User has no valid credentials. email=' + email) throw new Error('No user with this credentials') } diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index ff5722ff0..d517865c9 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -38,7 +38,6 @@ logger.error('This little thing had roast beef') logger.fatal('This little thing had none') logger.trace('and this little thing went wee, wee, wee, all the way home.') - // eslint-disable-next-line @typescript-eslint/no-explicit-any const createServer = async (context: any = serverContext): Promise => { // open mysql connection diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts index a58fe5609..d55f0e132 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -21,8 +21,6 @@ const setHeadersPlugin = { // const requestDidStartLog = (requestContext: any): void => { - - // } const logPlugin = { @@ -33,8 +31,8 @@ const logPlugin = { return { willSendResponse(requestContext: any) { // console.log(requestContext) - logger.trace('Response-Data:' + JSON.stringify(requestContext.response.errors, null, 2)) - logger.trace('Response-Errors:' + JSON.stringify(requestContext.response.data, null, 2)) + logger.trace('Response-Data:' + JSON.stringify(requestContext.response.errors, null, 2)) + logger.trace('Response-Errors:' + JSON.stringify(requestContext.response.data, null, 2)) return requestContext }, } From e1985aca71f6e8d11085c178b339e025fe3bb5e9 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 3 May 2022 11:00:53 +0200 Subject: [PATCH 085/162] output a bit prettier --- backend/src/server/plugins.ts | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts index d55f0e132..f3d289391 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -1,6 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +import clonedeep from 'lodash.clonedeep' + const setHeadersPlugin = { requestDidStart() { return { @@ -19,20 +21,27 @@ const setHeadersPlugin = { }, } -// const requestDidStartLog = (requestContext: any): void => { - -// } +const filterVariables = (variables: any) => { + const vars = clonedeep(variables) + if (vars.password) vars.password = '***' + if (vars.passwordNew) vars.passwordNew = '***' + return vars +} const logPlugin = { requestDidStart(requestContext: any) { - const logger = requestContext.logger - logger.trace('Request:' + JSON.stringify(requestContext.request.variables, null, 2)) - // logger.log('debug', JSON.stringify(requestContext.request, null, 2)) + const { logger } = requestContext + const { query, mutation, variables } = requestContext.request + logger.trace(`Request: +${mutation || query}variables: ${JSON.stringify(filterVariables(variables), null, 2)}`) return { willSendResponse(requestContext: any) { - // console.log(requestContext) - logger.trace('Response-Data:' + JSON.stringify(requestContext.response.errors, null, 2)) - logger.trace('Response-Errors:' + JSON.stringify(requestContext.response.data, null, 2)) + if (requestContext.response.data) + logger.trace(`Response-Data: +${JSON.stringify(requestContext.response.data, null, 2)}`) + if (requestContext.response.errors) + logger.trace(`Response-Errors: +${JSON.stringify(requestContext.response.errors, null, 2)}`) return requestContext }, } From 3a5ba17b6e1df82d423f5845d6f667cf1e299bf9 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 3 May 2022 14:00:54 +0200 Subject: [PATCH 086/162] fix: Up Migrations --- .../0026-combine_transaction_tables2.ts | 4 ++- .../0027-clean_transaction_table.ts | 16 ++++++------ .../0029-clean_transaction_table.ts | 26 +++++++++++-------- .../0035-admin_pending_creations_decimal.ts | 4 ++- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/database/migrations/0026-combine_transaction_tables2.ts b/database/migrations/0026-combine_transaction_tables2.ts index 3abf77354..6896eb27f 100644 --- a/database/migrations/0026-combine_transaction_tables2.ts +++ b/database/migrations/0026-combine_transaction_tables2.ts @@ -28,7 +28,9 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis */ // rename `state_user_id` to `user_id` - await queryFn('ALTER TABLE `state_user_transactions` RENAME COLUMN state_user_id TO user_id;') + await queryFn( + 'ALTER TABLE `state_user_transactions` CHANGE COLUMN state_user_id user_id int(10);', + ) // Create new `amount` column, with a temporary default of null await queryFn( 'ALTER TABLE `state_user_transactions` ADD COLUMN `amount` bigint(20) DEFAULT NULL AFTER `transaction_type_id`;', diff --git a/database/migrations/0027-clean_transaction_table.ts b/database/migrations/0027-clean_transaction_table.ts index b5a0e0e2e..b1e25abd2 100644 --- a/database/migrations/0027-clean_transaction_table.ts +++ b/database/migrations/0027-clean_transaction_table.ts @@ -11,23 +11,23 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { // drop column `transaction_id`, it is not needed - await queryFn('ALTER TABLE `transactions` DROP COLUMN `transaction_id`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `transaction_id`;') // drop column `received`, it is a duplicate of balance_date - await queryFn('ALTER TABLE `transactions` DROP COLUMN `received`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `received`;') // drop column `tx_hash`, it is not needed - await queryFn('ALTER TABLE `transactions` DROP COLUMN `tx_hash`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `tx_hash`;') // drop column `signature`, it is not needed - await queryFn('ALTER TABLE `transactions` DROP COLUMN `signature`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `signature`;') // drop column `pubkey`, it is not needed - await queryFn('ALTER TABLE `transactions` DROP COLUMN `pubkey`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `pubkey`;') // drop column `creation_ident_hash`, it is not needed - await queryFn('ALTER TABLE `transactions` DROP COLUMN `creation_ident_hash`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `creation_ident_hash`;') // rename `transaction_type_id` to `type_id` - await queryFn('ALTER TABLE `transactions` RENAME COLUMN transaction_type_id TO type_id;') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN transaction_type_id type_id int(10);') // rename `linked_state_user_transaction_id` to `linked_transaction_id` await queryFn( - 'ALTER TABLE `transactions` RENAME COLUMN linked_state_user_transaction_id TO linked_transaction_id;', + 'ALTER TABLE `transactions` CHANGE COLUMN linked_state_user_transaction_id linked_transaction_id int(10);', ) } diff --git a/database/migrations/0029-clean_transaction_table.ts b/database/migrations/0029-clean_transaction_table.ts index 0b9e2cc0d..eccec56ea 100644 --- a/database/migrations/0029-clean_transaction_table.ts +++ b/database/migrations/0029-clean_transaction_table.ts @@ -13,35 +13,39 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis // Delete columns // delete column `amount` - await queryFn('ALTER TABLE `transactions` DROP COLUMN `amount`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `amount`;') // delete column `send_sender_final_balance` - await queryFn('ALTER TABLE `transactions` DROP COLUMN `send_sender_final_balance`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `send_sender_final_balance`;') // delete column `balance` - await queryFn('ALTER TABLE `transactions` DROP COLUMN `balance`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `balance`;') // delete column `temp_dec_send_sender_final_balance` - await queryFn('ALTER TABLE `transactions` DROP COLUMN `temp_dec_send_sender_final_balance`;') + await queryFn( + 'ALTER TABLE `transactions` DROP COLUMN IF EXISTS `temp_dec_send_sender_final_balance`;', + ) // delete column `temp_dec_diff_send_sender_final_balance` - await queryFn('ALTER TABLE `transactions` DROP COLUMN `temp_dec_diff_send_sender_final_balance`;') + await queryFn( + 'ALTER TABLE `transactions` DROP COLUMN IF EXISTS `temp_dec_diff_send_sender_final_balance`;', + ) // delete column `temp_dec_old_balance` - await queryFn('ALTER TABLE `transactions` DROP COLUMN `temp_dec_old_balance`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `temp_dec_old_balance`;') // delete column `temp_dec_diff_balance` - await queryFn('ALTER TABLE `transactions` DROP COLUMN `temp_dec_diff_balance`;') + await queryFn('ALTER TABLE `transactions` DROP COLUMN IF EXISTS `temp_dec_diff_balance`;') // Rename columns // rename column `dec_amount` to `amount` - await queryFn('ALTER TABLE `transactions` RENAME COLUMN `dec_amount` to `amount`;') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN `dec_amount` `amount` DECIMAL(40,20);') // rename column `dec_balance` to `balance` - await queryFn('ALTER TABLE `transactions` RENAME COLUMN `dec_balance` to `balance`;') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN `dec_balance` `balance` DECIMAL(40,20);') // rename column `dec_decay` to `decay` - await queryFn('ALTER TABLE `transactions` RENAME COLUMN `dec_decay` to `decay`;') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN `dec_decay` `decay` DECIMAL(40,20);') // Drop tables // drop `state_balances` - await queryFn('DROP TABLE `state_balances`;') + await queryFn('DROP TABLE IF EXISTS `state_balances`;') } export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { diff --git a/database/migrations/0035-admin_pending_creations_decimal.ts b/database/migrations/0035-admin_pending_creations_decimal.ts index d3648f376..60194e8c0 100644 --- a/database/migrations/0035-admin_pending_creations_decimal.ts +++ b/database/migrations/0035-admin_pending_creations_decimal.ts @@ -8,7 +8,9 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { // rename `amount` to `amount_bigint` - await queryFn('ALTER TABLE `admin_pending_creations` RENAME COLUMN `amount` TO `amount_bigint`;') + await queryFn( + 'ALTER TABLE `admin_pending_creations` CHANGE COLUMN `amount` `amount_bigint` bigint(20);', + ) // add `amount` (decimal) await queryFn( 'ALTER TABLE `admin_pending_creations` ADD COLUMN `amount` DECIMAL(40,20) DEFAULT NULL AFTER `amount_bigint`;', From 83b5b37c2bac3ce9a7b360aeb3c2a27b816a7282 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 3 May 2022 14:15:31 +0200 Subject: [PATCH 087/162] fix 0035 down migration --- database/migrations/0035-admin_pending_creations_decimal.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/database/migrations/0035-admin_pending_creations_decimal.ts b/database/migrations/0035-admin_pending_creations_decimal.ts index 60194e8c0..f76db7c97 100644 --- a/database/migrations/0035-admin_pending_creations_decimal.ts +++ b/database/migrations/0035-admin_pending_creations_decimal.ts @@ -39,6 +39,8 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom await queryFn( 'ALTER TABLE `admin_pending_creations` MODIFY COLUMN `amount_bigint` bigint(20) NOT NULL;', ) - await queryFn('ALTER TABLE `admin_pending_creations` DROP COLUMN `amount`;') - await queryFn('ALTER TABLE `admin_pending_creations` RENAME COLUMN `amount_bigint` TO `amount`;') + await queryFn('ALTER TABLE `admin_pending_creations` DROP COLUMN IF EXISTS `amount`;') + await queryFn( + 'ALTER TABLE `admin_pending_creations` CHANGE COLUMN `amount_bigint` `amount` bigint(20);', + ) } From 208d4dc4d31200ea13070f8b537d4e9a0546854b Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 3 May 2022 15:51:28 +0200 Subject: [PATCH 088/162] fix 0029 down --- database/migrations/0029-clean_transaction_table.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database/migrations/0029-clean_transaction_table.ts b/database/migrations/0029-clean_transaction_table.ts index eccec56ea..c47524b8e 100644 --- a/database/migrations/0029-clean_transaction_table.ts +++ b/database/migrations/0029-clean_transaction_table.ts @@ -70,9 +70,9 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom LEFT JOIN transactions ON t.uid = transactions.user_id AND t.date = transactions.balance_date; `) - await queryFn('ALTER TABLE `transactions` RENAME COLUMN `decay` to `dec_decay`;') - await queryFn('ALTER TABLE `transactions` RENAME COLUMN `balance` to `dec_balance`;') - await queryFn('ALTER TABLE `transactions` RENAME COLUMN `amount` to `dec_amount`;') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN `decay` `dec_decay` DECIMAL(40,20);') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN `balance` `dec_balance` DECIMAL(40,20);') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN `amount` `dec_amount` DECIMAL(40,20);') await queryFn( 'ALTER TABLE `transactions` ADD COLUMN `temp_dec_diff_balance` decimal(40,20) DEFAULT NULL AFTER linked_transaction_id;', From 0449dc59e8b19efca3bcd753e1f9504b8df8f100 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Wed, 4 May 2022 02:23:33 +0200 Subject: [PATCH 089/162] try to log UserResolver, is not working, no output --- backend/log4js-config.json | 7 +-- backend/src/graphql/resolver/UserResolver.ts | 46 +++++++++++++++++--- backend/src/server/createServer.ts | 15 ++++--- 3 files changed, 50 insertions(+), 18 deletions(-) diff --git a/backend/log4js-config.json b/backend/log4js-config.json index 3578c126c..05dbd969a 100644 --- a/backend/log4js-config.json +++ b/backend/log4js-config.json @@ -6,7 +6,6 @@ "type": "dateFile", "filename": "../logs/backend/access.log", "pattern": "%d %p %c %f:%l %m%n", - "compress" : true, "keepFileExt" : true, "fileNameSep" : "_" }, @@ -15,18 +14,16 @@ "type": "dateFile", "filename": "../logs/backend/apollo.log", "pattern": "%d %p %c %f:%l %m%n", - "compress" : true, "keepFileExt" : true, - "fileNameSep" : "_" + "fileNameSep" : "_" }, "errorFile": { "type": "dateFile", "filename": "../logs/backend/errors.log", "pattern": "%d %p %c %f:%l %m%n", - "compress" : true, "keepFileExt" : true, - "fileNameSep" : "_" + "fileNameSep" : "_" }, "errors": { diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index b578b15ae..f8c3770ae 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -1,5 +1,6 @@ import fs from 'fs' -import log4js from 'log4js' +// import log4js from 'log4js' + import { Context, getUser } from '@/server/context' import { Resolver, Query, Args, Arg, Authorized, Ctx, UseMiddleware, Mutation } from 'type-graphql' @@ -23,14 +24,16 @@ import { klicktippSignIn } from '@/apis/KlicktippController' import { RIGHTS } from '@/auth/RIGHTS' import { hasElopageBuys } from '@/util/hasElopageBuys' -log4js.configure(CONFIG.LOG4JS_CONFIG) -const logger = log4js.getLogger('graphql.resolver.UserResolver') // eslint-disable-next-line @typescript-eslint/no-var-requires const sodium = require('sodium-native') // eslint-disable-next-line @typescript-eslint/no-var-requires const random = require('random-bigint') +const log4js = require("log4js"); +log4js.configure(CONFIG.LOG4JS_CONFIG) +const logger = log4js.getLogger('graphql.UserResolver') + // We will reuse this for changePassword const isPassword = (password: string): boolean => { return !!password.match(/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[^a-zA-Z0-9 \\t\\n\\r]).{8,}$/) @@ -48,6 +51,7 @@ const WORDS = fs .toString() .split(',') const PassphraseGenerate = (): string[] => { + logger.trace('PassphraseGenerate...') const result = [] for (let i = 0; i < PHRASE_WORD_COUNT; i++) { result.push(WORDS[sodium.randombytes_random() % 2048]) @@ -56,6 +60,7 @@ const PassphraseGenerate = (): string[] => { } const KeyPairEd25519Create = (passphrase: string[]): Buffer[] => { + logger.trace('KeyPairEd25519Create...') if (!passphrase.length || passphrase.length < PHRASE_WORD_COUNT) { throw new Error('passphrase empty or to short') } @@ -89,6 +94,7 @@ const KeyPairEd25519Create = (passphrase: string[]): Buffer[] => { } const SecretKeyCryptographyCreateKey = (salt: string, password: string): Buffer[] => { + logger.trace('SecretKeyCryptographyCreateKey...') const configLoginAppSecret = Buffer.from(CONFIG.LOGIN_APP_SECRET, 'hex') const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') if (configLoginServerKey.length !== sodium.crypto_shorthash_KEYBYTES) { @@ -124,12 +130,14 @@ const SecretKeyCryptographyCreateKey = (salt: string, password: string): Buffer[ } const getEmailHash = (email: string): Buffer => { + logger.trace('getEmailHash...') const emailHash = Buffer.alloc(sodium.crypto_generichash_BYTES) sodium.crypto_generichash(emailHash, Buffer.from(email)) return emailHash } const SecretKeyCryptographyEncrypt = (message: Buffer, encryptionKey: Buffer): Buffer => { + logger.trace('SecretKeyCryptographyEncrypt...') const encrypted = Buffer.alloc(message.length + sodium.crypto_secretbox_MACBYTES) const nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES) nonce.fill(31) // static nonce @@ -139,6 +147,7 @@ const SecretKeyCryptographyEncrypt = (message: Buffer, encryptionKey: Buffer): B } const SecretKeyCryptographyDecrypt = (encryptedMessage: Buffer, encryptionKey: Buffer): Buffer => { + logger.trace('SecretKeyCryptographyDecrypt...') const message = Buffer.alloc(encryptedMessage.length - sodium.crypto_secretbox_MACBYTES) const nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES) nonce.fill(31) // static nonce @@ -149,6 +158,7 @@ const SecretKeyCryptographyDecrypt = (encryptedMessage: Buffer, encryptionKey: B } const newEmailOptIn = (userId: number): LoginEmailOptIn => { + logger.trace('newEmailOptIn...') const emailOptIn = new LoginEmailOptIn() emailOptIn.verificationCode = random(64) emailOptIn.userId = userId @@ -164,6 +174,7 @@ export const checkOptInCode = async ( userId: number, optInType: OptInType = OptInType.EMAIL_OPT_IN_REGISTER, ): Promise => { + logger.trace('checkOptInCode...') if (optInCode) { if (!canResendOptIn(optInCode)) { throw new Error( @@ -185,6 +196,7 @@ export const checkOptInCode = async ( } export const activationLink = (optInCode: LoginEmailOptIn): string => { + logger.trace('activationLink...') return CONFIG.EMAIL_LINK_SETPASSWORD.replace(/{optin}/g, optInCode.verificationCode.toString()) } @@ -194,6 +206,8 @@ export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) async verifyLogin(@Ctx() context: Context): Promise { + const logger = log4js.getLogger('graphql.UserResolver') + logger.trace('verifyLogin...') // TODO refactor and do not have duplicate code with login(see below) const userEntity = getUser(context) const user = new User(userEntity) @@ -220,6 +234,8 @@ export class UserResolver { @Args() { email, password, publisherId }: UnsecureLoginArgs, @Ctx() context: Context, ): Promise { + const logger = log4js.getLogger('graphql.UserResolver') + logger.trace('Login(' + email + ', ***, ' + publisherId) email = email.trim().toLowerCase() const dbUser = await DbUser.findOneOrFail({ email }, { withDeleted: true }).catch(() => { logger.error('User does not exists with this email=' + email) @@ -249,11 +265,14 @@ export class UserResolver { logger.error('The User has no valid credentials. email=' + email) throw new Error('No user with this credentials') } + logger.info('successfull login with ' + email + ', ***, ' + publisherId) const user = new User(dbUser) - + logger.debug('user=' + user) + // Elopage Status & Stored PublisherId user.hasElopage = await this.hasElopage({ ...context, user: dbUser }) + logger.info('user.hasElopage=' + user.hasElopage) if (!user.hasElopage && publisherId) { user.publisherId = publisherId dbUser.publisherId = publisherId @@ -273,7 +292,7 @@ export class UserResolver { key: 'token', value: encode(dbUser.pubKey), }) - + logger.info('successful Login:' + user) return user } @@ -285,6 +304,7 @@ export class UserResolver { // The functionality is fully client side - the client just needs to delete his token with the current implementation. // we could try to force this by sending `token: null` or `token: ''` with this call. But since it bares no real security // we should just return true for now. + logger.info('Logout...') return true } @@ -294,6 +314,13 @@ export class UserResolver { @Args() { email, firstName, lastName, language, publisherId, redeemCode = null }: CreateUserArgs, ): Promise { + const logger = log4js.getLogger('graphql.resolver.UserResolver') + logger.trace('createUser(email=' + email + + ', firstName=' + firstName + + ', lastName=' + lastName + + ', language=' + language + + ', publisherId=' + publisherId + + ', redeemCode =' + redeemCode) // TODO: wrong default value (should be null), how does graphql work here? Is it an required field? // default int publisher_id = 0; @@ -306,7 +333,9 @@ export class UserResolver { email = email.trim().toLowerCase() // TODO we cannot use repository.count(), since it does not allow to specify if you want to include the soft deletes const userFound = await DbUser.findOne({ email }, { withDeleted: true }) + logger.info('DbUser.findOne(email=' + email + ') = ' + userFound) if (userFound) { + logger.error('User already exists with this email=' + email) // TODO: this is unsecure, but the current implementation of the login server. This way it can be queried if the user with given EMail is existent. throw new Error(`User already exists.`) } @@ -325,8 +354,10 @@ export class UserResolver { dbUser.language = language dbUser.publisherId = publisherId dbUser.passphrase = passphrase.join(' ') + logger.info('new dbUser=' + dbUser) if (redeemCode) { const transactionLink = await dbTransactionLink.findOne({ code: redeemCode }) + logger.info('redeemCode found transactionLink='+ transactionLink) if (transactionLink) { dbUser.referrerId = transactionLink.userId } @@ -345,6 +376,7 @@ export class UserResolver { await queryRunner.manager.save(dbUser).catch((error) => { // eslint-disable-next-line no-console console.log('Error while saving dbUser', error) + logger.error('Error while saving dbUser', error) throw new Error('error saving user') }) @@ -352,6 +384,7 @@ export class UserResolver { await queryRunner.manager.save(emailOptIn).catch((error) => { // eslint-disable-next-line no-console console.log('Error while saving emailOptIn', error) + logger.error('Error while saving emailOptIn', error) throw new Error('error saving email opt in') }) @@ -368,7 +401,7 @@ export class UserResolver { email, duration: printTimeDuration(CONFIG.EMAIL_CODE_VALID_TIME), }) - + logger.info('sendAccountActivationEmail=' + emailSent) /* uncomment this, when you need the activation link on the console // In case EMails are disabled log the activation link for the user if (!emailSent) { @@ -384,6 +417,7 @@ export class UserResolver { } finally { await queryRunner.release() } + logger.info('successful createUser()=' + dbUser) return new User(dbUser) } diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index d517865c9..deec7e9a9 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -31,15 +31,16 @@ type ServerDef = { apollo: ApolloServer; app: Express; con: Connection } log4js.configure(CONFIG.LOG4JS_CONFIG) -const logger = log4js.getLogger('backend') -logger.debug('This little thing went to market') -logger.info('This little thing stayed at home') -logger.error('This little thing had roast beef') -logger.fatal('This little thing had none') -logger.trace('and this little thing went wee, wee, wee, all the way home.') - // eslint-disable-next-line @typescript-eslint/no-explicit-any const createServer = async (context: any = serverContext): Promise => { + + const logger = log4js.getLogger('server.createServer') + logger.debug('This little thing went to market') + logger.info('This little thing stayed at home') + logger.error('This little thing had roast beef') + logger.fatal('This little thing had none') + logger.trace('and this little thing went wee, wee, wee, all the way home.') + // open mysql connection const con = await connection() if (!con || !con.isConnected) { From 945e0a3fd9d3d5d4d69e36175466ddff404278d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Wed, 4 May 2022 10:09:26 +0200 Subject: [PATCH 090/162] Fix that pagination on gdd-transactions-list not hides if ther's only one page --- frontend/src/components/GddTransactionList.vue | 17 +++++++++++------ frontend/src/pages/Transactions.vue | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/GddTransactionList.vue b/frontend/src/components/GddTransactionList.vue index 34f7c24ab..bbb822ad9 100644 --- a/frontend/src/components/GddTransactionList.vue +++ b/frontend/src/components/GddTransactionList.vue @@ -61,7 +61,7 @@ [] }, pageSize: { type: Number, default: 25 }, @@ -110,6 +105,11 @@ export default { showPagination: { type: Boolean, default: false }, pending: { type: Boolean }, }, + data() { + return { + currentPage: 1, + } + }, methods: { updateTransactions() { this.$emit('update-transactions', { @@ -123,6 +123,11 @@ export default { return '0' }, }, + computed: { + isPaginationVisible() { + return this.showPagination && this.pageSize < this.transactions.length + }, + }, watch: { currentPage() { this.updateTransactions() diff --git a/frontend/src/pages/Transactions.vue b/frontend/src/pages/Transactions.vue index 568f80df2..109e3f19c 100644 --- a/frontend/src/pages/Transactions.vue +++ b/frontend/src/pages/Transactions.vue @@ -9,7 +9,7 @@ :transactionCount="transactionCount" :transactionLinkCount="transactionLinkCount" :transactions="transactions" - :show-pagination="true" + :showPagination="true" @update-transactions="updateTransactions" v-on="$listeners" /> From bee388c07c047f4c9646b5d73c4a0509ddfe7d08 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 10:46:23 +0200 Subject: [PATCH 091/162] fix: Reload Transaction Link List Always on Page 1 --- .../src/components/Transactions/TransactionLinkSummary.vue | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Transactions/TransactionLinkSummary.vue b/frontend/src/components/Transactions/TransactionLinkSummary.vue index c24410924..cbce57029 100644 --- a/frontend/src/components/Transactions/TransactionLinkSummary.vue +++ b/frontend/src/components/Transactions/TransactionLinkSummary.vue @@ -84,7 +84,11 @@ export default { this.visible = false } else { this.transactionLinks = [] - this.updateListTransactionLinks() + if (this.currentPage === 1) { + this.updateListTransactionLinks() + } else { + this.currentPage = 1 + } this.visible = true } }, From 0e6ed809e25b06e16f2ff925b55fd6c67ccd66c7 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 10:55:11 +0200 Subject: [PATCH 092/162] test reopening after loading more links --- .../TransactionLinkSummary.spec.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/frontend/src/components/Transactions/TransactionLinkSummary.spec.js b/frontend/src/components/Transactions/TransactionLinkSummary.spec.js index b60cc60f8..370233c42 100644 --- a/frontend/src/components/Transactions/TransactionLinkSummary.spec.js +++ b/frontend/src/components/Transactions/TransactionLinkSummary.spec.js @@ -227,6 +227,36 @@ describe('TransactionLinkSummary', () => { fetchPolicy: 'network-only', }) }) + + describe('close transaction link list', () => { + beforeEach(async () => { + wrapper.find('div.transaction-link-details').trigger('click') + }) + describe('reopen transaction link list', () => { + beforeEach(async () => { + jest.clearAllMocks() + wrapper.find('div.transaction-link-details').trigger('click') + }) + + it('calls the API once', () => { + expect(apolloQueryMock).toBeCalledTimes(1) + }) + + it('calls the API with curren page one', () => { + expect(apolloQueryMock).toBeCalledWith({ + query: listTransactionLinks, + variables: { + currentPage: 1, + }, + fetchPolicy: 'network-only', + }) + }) + + it('has four transactionLinks', () => { + expect(wrapper.vm.transactionLinks).toHaveLength(4) + }) + }) + }) }) }) From 837f644e255acffe84397e298ccd885ceec107ed Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 10:58:24 +0200 Subject: [PATCH 093/162] fix typo --- .../src/components/Transactions/TransactionLinkSummary.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/Transactions/TransactionLinkSummary.spec.js b/frontend/src/components/Transactions/TransactionLinkSummary.spec.js index 370233c42..ba07f7aff 100644 --- a/frontend/src/components/Transactions/TransactionLinkSummary.spec.js +++ b/frontend/src/components/Transactions/TransactionLinkSummary.spec.js @@ -242,7 +242,7 @@ describe('TransactionLinkSummary', () => { expect(apolloQueryMock).toBeCalledTimes(1) }) - it('calls the API with curren page one', () => { + it('calls the API with current page one', () => { expect(apolloQueryMock).toBeCalledWith({ query: listTransactionLinks, variables: { From d9bd562a7c3eb41811aa7d405cfd283da23c2ada Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 11:06:11 +0200 Subject: [PATCH 094/162] update deployment docu --- deployment/bare_metal/setup.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/deployment/bare_metal/setup.md b/deployment/bare_metal/setup.md index f39228879..0cb6951d9 100644 --- a/deployment/bare_metal/setup.md +++ b/deployment/bare_metal/setup.md @@ -2,6 +2,9 @@ # This assums you have root access via ssh to your cleanly setup server # Furthermore this assumes you have debian (11 64bit) running +# Check your (Sub-)Domain with your Provider. +# In this document gddhost.tld refers to your chosen domain + > ssh root@gddhost.tld # change root default shell @@ -92,4 +95,5 @@ > nano .env >> Adjust values accordingly # TODO the install.sh is not yet ready to run directly - consider to use it as pattern to do it manually -> ./install.sh \ No newline at end of file +# The Github Secret is Created on Github in Settimgs -> Webhooks +> ./install.sh From e3fd388f920fec72aeec36801fd02469eccfcd2e Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 11:09:11 +0200 Subject: [PATCH 095/162] change text order --- deployment/bare_metal/setup.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deployment/bare_metal/setup.md b/deployment/bare_metal/setup.md index 0cb6951d9..f43a3d655 100644 --- a/deployment/bare_metal/setup.md +++ b/deployment/bare_metal/setup.md @@ -90,10 +90,10 @@ # Adjust .env # NOTE ';' can not be part of any value +# The Github Secret is Created on Github in Settimgs -> Webhooks > cd gradido/deployment/bare_metal > cp .env.dist .env > nano .env >> Adjust values accordingly # TODO the install.sh is not yet ready to run directly - consider to use it as pattern to do it manually -# The Github Secret is Created on Github in Settimgs -> Webhooks > ./install.sh From 8d4e691f3d7544ae0f56ffc6aefdea1fa07972a8 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 12:55:38 +0200 Subject: [PATCH 096/162] change rename column to change column --- database/migrations/0026-combine_transaction_tables2.ts | 4 +++- database/migrations/0027-clean_transaction_table.ts | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/database/migrations/0026-combine_transaction_tables2.ts b/database/migrations/0026-combine_transaction_tables2.ts index 6896eb27f..b83c5e267 100644 --- a/database/migrations/0026-combine_transaction_tables2.ts +++ b/database/migrations/0026-combine_transaction_tables2.ts @@ -216,5 +216,7 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom await queryFn('ALTER TABLE `state_user_transactions` DROP COLUMN `memo`;') await queryFn('ALTER TABLE `state_user_transactions` DROP COLUMN `send_sender_final_balance`;') await queryFn('ALTER TABLE `state_user_transactions` DROP COLUMN `amount`;') - await queryFn('ALTER TABLE `state_user_transactions` RENAME COLUMN user_id TO state_user_id;') + await queryFn( + 'ALTER TABLE `state_user_transactions` CHANGE COLUMN user_id state_user_id int(10);', + ) } diff --git a/database/migrations/0027-clean_transaction_table.ts b/database/migrations/0027-clean_transaction_table.ts index b1e25abd2..4a427e693 100644 --- a/database/migrations/0027-clean_transaction_table.ts +++ b/database/migrations/0027-clean_transaction_table.ts @@ -41,9 +41,9 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom // - creation_ident_hash (null) await queryFn( - 'ALTER TABLE `transactions` RENAME COLUMN linked_transaction_id TO linked_state_user_transaction_id;', + 'ALTER TABLE `transactions` CHANGE COLUMN linked_transaction_id linked_state_user_transaction_id int(10);', ) - await queryFn('ALTER TABLE `transactions` RENAME COLUMN type_id TO transaction_type_id;') + await queryFn('ALTER TABLE `transactions` CHANGE COLUMN type_id transaction_type_id int(10);') await queryFn( 'ALTER TABLE `transactions` ADD COLUMN `creation_ident_hash` binary(32) DEFAULT NULL AFTER `linked_state_user_transaction_id`;', ) From 9d1a35cf94cef619a9e82a4dce114b577839cf5c Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 13:10:53 +0200 Subject: [PATCH 097/162] run dev_reset on stage1 again --- deployment/bare_metal/start.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deployment/bare_metal/start.sh b/deployment/bare_metal/start.sh index b608952c0..95b89241f 100755 --- a/deployment/bare_metal/start.sh +++ b/deployment/bare_metal/start.sh @@ -105,8 +105,7 @@ yarn install yarn build if [ "$DEPLOY_SEED_DATA" = "true" ]; then yarn dev_up -# As dev_reset is not running properly (0019-replace_login_user_id_with_state_user_id) -# yarn dev_reset + yarn dev_reset else yarn up fi From befa965a44ec71aa910905bd54caf947d478573b Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 4 May 2022 13:58:45 +0200 Subject: [PATCH 098/162] configure logger only once. Log Context User ID if present on response --- backend/src/apis/HttpRequest.ts | 4 +-- backend/src/graphql/resolver/UserResolver.ts | 30 +++++++++++--------- backend/src/server/createServer.ts | 6 +--- backend/src/server/logger.ts | 6 ++++ backend/src/server/plugins.ts | 1 + 5 files changed, 26 insertions(+), 21 deletions(-) create mode 100644 backend/src/server/logger.ts diff --git a/backend/src/apis/HttpRequest.ts b/backend/src/apis/HttpRequest.ts index 75b7ea66a..ea25da5ca 100644 --- a/backend/src/apis/HttpRequest.ts +++ b/backend/src/apis/HttpRequest.ts @@ -1,8 +1,6 @@ import axios from 'axios' -import log4js from 'log4js' -import CONFIG from '@/config' +import log4js from '@/server/logger' -log4js.configure(CONFIG.LOG4JS_CONFIG) const logger = log4js.getLogger('http') // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index f8c3770ae..96a39caf7 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -1,6 +1,5 @@ import fs from 'fs' -// import log4js from 'log4js' - +import log4js from '@/server/logger' import { Context, getUser } from '@/server/context' import { Resolver, Query, Args, Arg, Authorized, Ctx, UseMiddleware, Mutation } from 'type-graphql' @@ -24,14 +23,11 @@ import { klicktippSignIn } from '@/apis/KlicktippController' import { RIGHTS } from '@/auth/RIGHTS' import { hasElopageBuys } from '@/util/hasElopageBuys' - // eslint-disable-next-line @typescript-eslint/no-var-requires const sodium = require('sodium-native') // eslint-disable-next-line @typescript-eslint/no-var-requires const random = require('random-bigint') -const log4js = require("log4js"); -log4js.configure(CONFIG.LOG4JS_CONFIG) const logger = log4js.getLogger('graphql.UserResolver') // We will reuse this for changePassword @@ -269,7 +265,7 @@ export class UserResolver { const user = new User(dbUser) logger.debug('user=' + user) - + // Elopage Status & Stored PublisherId user.hasElopage = await this.hasElopage({ ...context, user: dbUser }) logger.info('user.hasElopage=' + user.hasElopage) @@ -315,12 +311,20 @@ export class UserResolver { { email, firstName, lastName, language, publisherId, redeemCode = null }: CreateUserArgs, ): Promise { const logger = log4js.getLogger('graphql.resolver.UserResolver') - logger.trace('createUser(email=' + email + - ', firstName=' + firstName + - ', lastName=' + lastName + - ', language=' + language + - ', publisherId=' + publisherId + - ', redeemCode =' + redeemCode) + logger.trace( + 'createUser(email=' + + email + + ', firstName=' + + firstName + + ', lastName=' + + lastName + + ', language=' + + language + + ', publisherId=' + + publisherId + + ', redeemCode =' + + redeemCode, + ) // TODO: wrong default value (should be null), how does graphql work here? Is it an required field? // default int publisher_id = 0; @@ -357,7 +361,7 @@ export class UserResolver { logger.info('new dbUser=' + dbUser) if (redeemCode) { const transactionLink = await dbTransactionLink.findOne({ code: redeemCode }) - logger.info('redeemCode found transactionLink='+ transactionLink) + logger.info('redeemCode found transactionLink=' + transactionLink) if (transactionLink) { dbUser.referrerId = transactionLink.userId } diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index deec7e9a9..8d1397f7d 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -1,7 +1,5 @@ import 'reflect-metadata' -import log4js from 'log4js' - import { ApolloServer } from 'apollo-server-express' import express, { Express } from 'express' @@ -24,16 +22,14 @@ import schema from '@/graphql/schema' import { elopageWebhook } from '@/webhook/elopage' import { Connection } from '@dbTools/typeorm' +import log4js from './logger' // TODO implement // import queryComplexity, { simpleEstimator, fieldConfigEstimator } from "graphql-query-complexity"; type ServerDef = { apollo: ApolloServer; app: Express; con: Connection } -log4js.configure(CONFIG.LOG4JS_CONFIG) - // eslint-disable-next-line @typescript-eslint/no-explicit-any const createServer = async (context: any = serverContext): Promise => { - const logger = log4js.getLogger('server.createServer') logger.debug('This little thing went to market') logger.info('This little thing stayed at home') diff --git a/backend/src/server/logger.ts b/backend/src/server/logger.ts new file mode 100644 index 000000000..057c55307 --- /dev/null +++ b/backend/src/server/logger.ts @@ -0,0 +1,6 @@ +import log4js from 'log4js' +import CONFIG from '@/config' + +log4js.configure(CONFIG.LOG4JS_CONFIG) + +export default log4js diff --git a/backend/src/server/plugins.ts b/backend/src/server/plugins.ts index f3d289391..f3067d44a 100644 --- a/backend/src/server/plugins.ts +++ b/backend/src/server/plugins.ts @@ -36,6 +36,7 @@ const logPlugin = { ${mutation || query}variables: ${JSON.stringify(filterVariables(variables), null, 2)}`) return { willSendResponse(requestContext: any) { + if (requestContext.context.user) logger.trace(`User ID: ${requestContext.context.user.id}`) if (requestContext.response.data) logger.trace(`Response-Data: ${JSON.stringify(requestContext.response.data, null, 2)}`) From 541e7231d34c0f124d3731f2a607ea8044148412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Thu, 5 May 2022 00:32:23 +0200 Subject: [PATCH 099/162] prettifier --- backend/log4js-config.json | 114 ++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/backend/log4js-config.json b/backend/log4js-config.json index 05dbd969a..fb7c59301 100644 --- a/backend/log4js-config.json +++ b/backend/log4js-config.json @@ -1,61 +1,61 @@ { - "appenders": - { - "access": - { - "type": "dateFile", - "filename": "../logs/backend/access.log", - "pattern": "%d %p %c %f:%l %m%n", - "keepFileExt" : true, - "fileNameSep" : "_" - }, - "apollo": - { - "type": "dateFile", - "filename": "../logs/backend/apollo.log", - "pattern": "%d %p %c %f:%l %m%n", - "keepFileExt" : true, + "appenders": + { + "access": + { + "type": "dateFile", + "filename": "../logs/backend/access.log", + "pattern": "%d %p %c %f:%l %m%n", + "keepFileExt" : true, "fileNameSep" : "_" - }, - "errorFile": - { - "type": "dateFile", - "filename": "../logs/backend/errors.log", - "pattern": "%d %p %c %f:%l %m%n", - "keepFileExt" : true, + }, + "apollo": + { + "type": "dateFile", + "filename": "../logs/backend/apollo.log", + "pattern": "%d %p %c %f:%l %m%n", + "keepFileExt" : true, "fileNameSep" : "_" - }, - "errors": - { - "type": "logLevelFilter", - "level": "error", - "appender": "errorFile" - }, - "out": - { - "type": "stdout" - } - }, - "categories": - { - "default": - { - "appenders": - [ - "out", - "apollo", - "errors" - ], - "level": "all", - "enableCallStack": true - }, - "http": - { - "appenders": - [ - "access" - ], - "level": "info" - } - } + }, + "errorFile": + { + "type": "dateFile", + "filename": "../logs/backend/errors.log", + "pattern": "%d %p %c %f:%l %m%n", + "keepFileExt" : true, + "fileNameSep" : "_" + }, + "errors": + { + "type": "logLevelFilter", + "level": "error", + "appender": "errorFile" + }, + "out": + { + "type": "stdout" + } + }, + "categories": + { + "default": + { + "appenders": + [ + "out", + "apollo", + "errors" + ], + "level": "all", + "enableCallStack": true + }, + "http": + { + "appenders": + [ + "access" + ], + "level": "info" + } + } } From 4afffea797da34e0896cf894098e13887daedff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus-Peter=20H=C3=BCbner?= Date: Thu, 5 May 2022 01:01:06 +0200 Subject: [PATCH 100/162] additional logg-statements --- backend/src/graphql/resolver/UserResolver.ts | 37 ++++++++++++++------ backend/src/server/createServer.ts | 10 +++--- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 96a39caf7..fdf8948ac 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -28,7 +28,7 @@ const sodium = require('sodium-native') // eslint-disable-next-line @typescript-eslint/no-var-requires const random = require('random-bigint') -const logger = log4js.getLogger('graphql.UserResolver') +const logger = log4js.getLogger('graphql.UserResolver'); // We will reuse this for changePassword const isPassword = (password: string): boolean => { @@ -47,7 +47,7 @@ const WORDS = fs .toString() .split(',') const PassphraseGenerate = (): string[] => { - logger.trace('PassphraseGenerate...') + logger.trace("PassphraseGenerate..."); const result = [] for (let i = 0; i < PHRASE_WORD_COUNT; i++) { result.push(WORDS[sodium.randombytes_random() % 2048]) @@ -56,8 +56,9 @@ const PassphraseGenerate = (): string[] => { } const KeyPairEd25519Create = (passphrase: string[]): Buffer[] => { - logger.trace('KeyPairEd25519Create...') + logger.trace("KeyPairEd25519Create..."); if (!passphrase.length || passphrase.length < PHRASE_WORD_COUNT) { + logger.error("passphrase empty or to short"); throw new Error('passphrase empty or to short') } @@ -85,15 +86,17 @@ const KeyPairEd25519Create = (passphrase: string[]): Buffer[] => { privKey, outputHashBuffer.slice(0, sodium.crypto_sign_SEEDBYTES), ) + logger.trace("KeyPair creation ready. pubKey=" + pubKey); return [pubKey, privKey] } const SecretKeyCryptographyCreateKey = (salt: string, password: string): Buffer[] => { - logger.trace('SecretKeyCryptographyCreateKey...') + logger.trace("SecretKeyCryptographyCreateKey..."); const configLoginAppSecret = Buffer.from(CONFIG.LOGIN_APP_SECRET, 'hex') const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') if (configLoginServerKey.length !== sodium.crypto_shorthash_KEYBYTES) { + logger.error("ServerKey has an invalid size. The size must be ${sodium.crypto_shorthash_KEYBYTES} bytes."); throw new Error( `ServerKey has an invalid size. The size must be ${sodium.crypto_shorthash_KEYBYTES} bytes.`, ) @@ -122,6 +125,9 @@ const SecretKeyCryptographyCreateKey = (salt: string, password: string): Buffer[ const encryptionKeyHash = Buffer.alloc(sodium.crypto_shorthash_BYTES) sodium.crypto_shorthash(encryptionKeyHash, encryptionKey, configLoginServerKey) + logger.trace("SecretKeyCryptographyCreateKey...successful"); + logger.trace("encryptionKeyHash= " + ${encryptionKeyHash}); + logger.trace("encryptionKey=" + ${encryptionKey}); return [encryptionKeyHash, encryptionKey] } @@ -129,36 +135,40 @@ const getEmailHash = (email: string): Buffer => { logger.trace('getEmailHash...') const emailHash = Buffer.alloc(sodium.crypto_generichash_BYTES) sodium.crypto_generichash(emailHash, Buffer.from(email)) + logger.trace("getEmailHash...successful: " + emailHash); return emailHash } const SecretKeyCryptographyEncrypt = (message: Buffer, encryptionKey: Buffer): Buffer => { - logger.trace('SecretKeyCryptographyEncrypt...') + logger.trace("SecretKeyCryptographyEncrypt..."); const encrypted = Buffer.alloc(message.length + sodium.crypto_secretbox_MACBYTES) const nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES) nonce.fill(31) // static nonce sodium.crypto_secretbox_easy(encrypted, message, nonce, encryptionKey) + logger.trace("SecretKeyCryptographyEncrypt...successful: " + encrypted); return encrypted } const SecretKeyCryptographyDecrypt = (encryptedMessage: Buffer, encryptionKey: Buffer): Buffer => { - logger.trace('SecretKeyCryptographyDecrypt...') + logger.trace("SecretKeyCryptographyDecrypt..."); const message = Buffer.alloc(encryptedMessage.length - sodium.crypto_secretbox_MACBYTES) const nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES) nonce.fill(31) // static nonce sodium.crypto_secretbox_open_easy(message, encryptedMessage, nonce, encryptionKey) + logger.trace("SecretKeyCryptographyDecrypt...successful: "+ message); return message } const newEmailOptIn = (userId: number): LoginEmailOptIn => { - logger.trace('newEmailOptIn...') + logger.trace("newEmailOptIn..."); const emailOptIn = new LoginEmailOptIn() emailOptIn.verificationCode = random(64) emailOptIn.userId = userId emailOptIn.emailOptInTypeId = OptInType.EMAIL_OPT_IN_REGISTER + logger.trace("newEmailOptIn...successful: " + emailOptIn); return emailOptIn } @@ -170,9 +180,11 @@ export const checkOptInCode = async ( userId: number, optInType: OptInType = OptInType.EMAIL_OPT_IN_REGISTER, ): Promise => { - logger.trace('checkOptInCode...') + logger.trace("checkOptInCode..." + optInCode); if (optInCode) { if (!canResendOptIn(optInCode)) { + logger.error(`email already sent less than ${printTimeDuration( + CONFIG.EMAIL_CODE_REQUEST_TIME,)} minutes ago`); throw new Error( `email already sent less than ${printTimeDuration( CONFIG.EMAIL_CODE_REQUEST_TIME, @@ -182,17 +194,20 @@ export const checkOptInCode = async ( optInCode.updatedAt = new Date() optInCode.resendCount++ } else { + logger.trace("create new OptIn for userId=" + userId); optInCode = newEmailOptIn(userId) } optInCode.emailOptInTypeId = optInType await LoginEmailOptIn.save(optInCode).catch(() => { + logger.error("Unable to save optin code= " + optInCode); throw new Error('Unable to save optin code.') }) + logger.trace("checkOptInCode...successful: " + optInCode); return optInCode } export const activationLink = (optInCode: LoginEmailOptIn): string => { - logger.trace('activationLink...') + logger.trace("activationLink..."); return CONFIG.EMAIL_LINK_SETPASSWORD.replace(/{optin}/g, optInCode.verificationCode.toString()) } @@ -202,8 +217,7 @@ export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) async verifyLogin(@Ctx() context: Context): Promise { - const logger = log4js.getLogger('graphql.UserResolver') - logger.trace('verifyLogin...') + logger.trace("verifyLogin..."); // TODO refactor and do not have duplicate code with login(see below) const userEntity = getUser(context) const user = new User(userEntity) @@ -216,6 +230,7 @@ export class UserResolver { const coinanimation = await userSettingRepository .readBoolean(userEntity.id, Setting.COIN_ANIMATION) .catch((error) => { + logger.error("error:", error); throw new Error(error) }) user.coinanimation = coinanimation diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index 8d1397f7d..15d11e977 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -31,21 +31,20 @@ type ServerDef = { apollo: ApolloServer; app: Express; con: Connection } // eslint-disable-next-line @typescript-eslint/no-explicit-any const createServer = async (context: any = serverContext): Promise => { const logger = log4js.getLogger('server.createServer') - logger.debug('This little thing went to market') - logger.info('This little thing stayed at home') - logger.error('This little thing had roast beef') - logger.fatal('This little thing had none') - logger.trace('and this little thing went wee, wee, wee, all the way home.') + logger.trace('createServer...') // open mysql connection const con = await connection() if (!con || !con.isConnected) { + logger.fatal(`Couldn't open connection to database!`) throw new Error(`Fatal: Couldn't open connection to database`) } // check for correct database version const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) if (!dbVersion) { + logger.fatal('Missmatching Database Versions! configured=' + + CONFIG.DB_VERSION + ', dbVersion=' + dbVersion ) throw new Error('Fatal: Database Version incorrect') } @@ -73,6 +72,7 @@ const createServer = async (context: any = serverContext): Promise => logger, }) apollo.applyMiddleware({ app, path: '/' }) + logger.trace('createServer...successful') return { apollo, app, con } } From 264904e74109dd3798280ded2e6c8aa0fe30fa6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 5 May 2022 10:49:16 +0200 Subject: [PATCH 101/162] Avoid negation by changing showPageMessage into enterData after Alex suggestion --- frontend/src/pages/ForgotPassword.vue | 15 ++++++++++----- frontend/src/pages/Login.vue | 8 +++++++- frontend/src/pages/Register.vue | 5 ++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/ForgotPassword.vue b/frontend/src/pages/ForgotPassword.vue index eea54427a..182df5bc3 100644 --- a/frontend/src/pages/ForgotPassword.vue +++ b/frontend/src/pages/ForgotPassword.vue @@ -13,7 +13,7 @@ - + @@ -75,6 +75,11 @@ export default { success: null, } }, + created() { + if (this.$route.params.comingFrom) { + this.subtitle = 'settings.password.resend_subtitle' + } + }, methods: { async onSubmit() { this.$apollo @@ -95,10 +100,10 @@ export default { }) }, }, - created() { - if (this.$route.params.comingFrom) { - this.subtitle = 'settings.password.resend_subtitle' - } + computed: { + enterData() { + return !this.showPageMessage + }, }, } diff --git a/frontend/src/pages/Login.vue b/frontend/src/pages/Login.vue index 4cfd62e69..bda36a0d2 100755 --- a/frontend/src/pages/Login.vue +++ b/frontend/src/pages/Login.vue @@ -13,7 +13,7 @@ - + @@ -136,6 +136,7 @@ export default { this.toastError(this.$t('error.no-account')) } else { // appeared errors: 'GraphQL error: No user with this credentials' + // Wolle: avoid this error message! may be avoid in general? const errorMessage = this.$t('error.unknown-error') + error.message this.showPageMessage = true this.errorSubtitle = errorMessage @@ -146,5 +147,10 @@ export default { }) }, }, + computed: { + enterData() { + return !this.showPageMessage + }, + }, } diff --git a/frontend/src/pages/Register.vue b/frontend/src/pages/Register.vue index a41952030..d6b5f9dba 100755 --- a/frontend/src/pages/Register.vue +++ b/frontend/src/pages/Register.vue @@ -15,7 +15,7 @@ - + @@ -286,6 +286,9 @@ export default { disabled() { return !(this.namesFilled && this.emailFilled && this.form.agree && !!this.language) }, + enterData() { + return !this.showPageMessage + }, }, } From 6a1b8f0fd9d6638f7921dd0ae3e687a596da0d54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 5 May 2022 11:33:07 +0200 Subject: [PATCH 102/162] Avoid on page error message on Login - Have a translation for 'No user with this credentials'. --- frontend/src/locales/de.json | 1 + frontend/src/locales/en.json | 1 + frontend/src/pages/Login.spec.js | 41 +++++++++++++++++++------------- frontend/src/pages/Login.vue | 10 +++----- 4 files changed, 29 insertions(+), 24 deletions(-) diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index ea288819f..6066ce04a 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -35,6 +35,7 @@ "error": "Fehler!", "no-account": "Leider konnten wir keinen (aktivierten) Account mit diesen Daten finden.", "no-transactionlist": "Es gab leider einen Fehler. Es wurden keine Transaktionen vom Server übermittelt.", + "no-user": "Kein Benutzer mit diesen Anmeldedaten.", "session-expired": "Die Sitzung wurde aus Sicherheitsgründen beendet.", "unknown-error": "Unbekanter Fehler: ", "user-already-exists": "Ein Benutzer mit diesen Daten existiert bereits." diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index f5e412086..5a0602098 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -35,6 +35,7 @@ "error": "Error!", "no-account": "Unfortunately we could not find an (activated) account to the given data.", "no-transactionlist": "Unfortunately, there was an error. No transactions have been sent from the server.", + "no-user": "No user with this credentials.", "session-expired": "The session was closed for security reasons.", "unknown-error": "Unknown error: ", "user-already-exists": "A user with this data already exists." diff --git a/frontend/src/pages/Login.spec.js b/frontend/src/pages/Login.spec.js index db11a036e..478266676 100644 --- a/frontend/src/pages/Login.spec.js +++ b/frontend/src/pages/Login.spec.js @@ -219,7 +219,7 @@ describe('Login', () => { describe('login fails with "User email not validated"', () => { beforeEach(async () => { - await createError('GraphQL error: User email not validated') + await createError('GraphQL error: User email not validated.') }) it('hides the spinner', () => { @@ -251,7 +251,7 @@ describe('Login', () => { describe('login fails with "User has no password set yet"', () => { beforeEach(async () => { - await createError('GraphQL error: User has no password set yet') + await createError('GraphQL error: User has no password set yet.') }) it('shows error title, subtitle, login button', () => { @@ -276,26 +276,33 @@ describe('Login', () => { }) }) + describe('login fails with "No user with this credentials"', () => { + beforeEach(async () => { + await createError('GraphQL error: No user with this credentials.') + }) + + it('shows no error message on the page', () => { + expect(wrapper.vm.showPageMessage).toBe(false) + expect(wrapper.find('.test-message-headline').exists()).toBe(false) + expect(wrapper.find('.test-message-subtitle').exists()).toBe(false) + expect(wrapper.find('.test-message-button').exists()).toBe(false) + }) + + it('toasts the error message', () => { + expect(toastErrorSpy).toBeCalledWith('error.no-user') + }) + }) + describe('login fails with an unknow error', () => { beforeEach(async () => { await createError(' – Unknow error') }) - it('shows error title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBe(true) - expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') - expect(wrapper.find('.test-message-subtitle').text()).toBe( - 'error.unknown-error – Unknow error', - ) - expect(wrapper.find('.test-message-button').text()).toBe('settings.password.reset') - }) - - it('button link directs to "/forgot-password"', () => { - expect(wrapper.find('.test-message-button').attributes('href')).toBe('/forgot-password') - }) - - it.skip('click redirects to "/forgot-password"', () => { - // expect(mockRouterPush).toBeCalledWith('/forgot-password') + it('shows no error message on the page', () => { + expect(wrapper.vm.showPageMessage).toBe(false) + expect(wrapper.find('.test-message-headline').exists()).toBe(false) + expect(wrapper.find('.test-message-subtitle').exists()).toBe(false) + expect(wrapper.find('.test-message-button').exists()).toBe(false) }) it('toasts the error message', () => { diff --git a/frontend/src/pages/Login.vue b/frontend/src/pages/Login.vue index bda36a0d2..7544bdcf7 100755 --- a/frontend/src/pages/Login.vue +++ b/frontend/src/pages/Login.vue @@ -134,14 +134,10 @@ export default { this.errorSubtitle = this.$t('site.thx.unsetPassword') this.errorLinkTo = '/reset-password/login' this.toastError(this.$t('error.no-account')) + } else if (error.message.includes('No user with this credentials')) { + this.toastError(this.$t('error.no-user')) } else { - // appeared errors: 'GraphQL error: No user with this credentials' - // Wolle: avoid this error message! may be avoid in general? - const errorMessage = this.$t('error.unknown-error') + error.message - this.showPageMessage = true - this.errorSubtitle = errorMessage - this.errorLinkTo = '/forgot-password' - this.toastError(errorMessage) + this.toastError(this.$t('error.unknown-error') + error.message) } loader.hide() }) From 0610737a978e3b292cdf8e7ccc009f6a20433885 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 5 May 2022 11:46:08 +0200 Subject: [PATCH 103/162] fix syntax errors --- backend/src/graphql/resolver/UserResolver.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index fdf8948ac..8fce3bdc5 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -125,9 +125,9 @@ const SecretKeyCryptographyCreateKey = (salt: string, password: string): Buffer[ const encryptionKeyHash = Buffer.alloc(sodium.crypto_shorthash_BYTES) sodium.crypto_shorthash(encryptionKeyHash, encryptionKey, configLoginServerKey) - logger.trace("SecretKeyCryptographyCreateKey...successful"); - logger.trace("encryptionKeyHash= " + ${encryptionKeyHash}); - logger.trace("encryptionKey=" + ${encryptionKey}); + logger.trace("SecretKeyCryptographyCreateKey...successful") + logger.trace(`encryptionKeyHash= ${encryptionKeyHash}`) + logger.trace(`encryptionKey= ${encryptionKey}`) return [encryptionKeyHash, encryptionKey] } From b0de4bea7d16aa7946cec2f5ee815775b588dc72 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 5 May 2022 11:48:26 +0200 Subject: [PATCH 104/162] linting --- backend/src/graphql/resolver/UserResolver.ts | 53 +++++++++++--------- backend/src/server/createServer.ts | 8 ++- 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 8fce3bdc5..74b9b01dd 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -28,7 +28,7 @@ const sodium = require('sodium-native') // eslint-disable-next-line @typescript-eslint/no-var-requires const random = require('random-bigint') -const logger = log4js.getLogger('graphql.UserResolver'); +const logger = log4js.getLogger('graphql.UserResolver') // We will reuse this for changePassword const isPassword = (password: string): boolean => { @@ -47,7 +47,7 @@ const WORDS = fs .toString() .split(',') const PassphraseGenerate = (): string[] => { - logger.trace("PassphraseGenerate..."); + logger.trace('PassphraseGenerate...') const result = [] for (let i = 0; i < PHRASE_WORD_COUNT; i++) { result.push(WORDS[sodium.randombytes_random() % 2048]) @@ -56,9 +56,9 @@ const PassphraseGenerate = (): string[] => { } const KeyPairEd25519Create = (passphrase: string[]): Buffer[] => { - logger.trace("KeyPairEd25519Create..."); + logger.trace('KeyPairEd25519Create...') if (!passphrase.length || passphrase.length < PHRASE_WORD_COUNT) { - logger.error("passphrase empty or to short"); + logger.error('passphrase empty or to short') throw new Error('passphrase empty or to short') } @@ -86,17 +86,19 @@ const KeyPairEd25519Create = (passphrase: string[]): Buffer[] => { privKey, outputHashBuffer.slice(0, sodium.crypto_sign_SEEDBYTES), ) - logger.trace("KeyPair creation ready. pubKey=" + pubKey); + logger.trace('KeyPair creation ready. pubKey=' + pubKey) return [pubKey, privKey] } const SecretKeyCryptographyCreateKey = (salt: string, password: string): Buffer[] => { - logger.trace("SecretKeyCryptographyCreateKey..."); + logger.trace('SecretKeyCryptographyCreateKey...') const configLoginAppSecret = Buffer.from(CONFIG.LOGIN_APP_SECRET, 'hex') const configLoginServerKey = Buffer.from(CONFIG.LOGIN_SERVER_KEY, 'hex') if (configLoginServerKey.length !== sodium.crypto_shorthash_KEYBYTES) { - logger.error("ServerKey has an invalid size. The size must be ${sodium.crypto_shorthash_KEYBYTES} bytes."); + logger.error( + `ServerKey has an invalid size. The size must be ${sodium.crypto_shorthash_KEYBYTES} bytes.`, + ) throw new Error( `ServerKey has an invalid size. The size must be ${sodium.crypto_shorthash_KEYBYTES} bytes.`, ) @@ -125,7 +127,7 @@ const SecretKeyCryptographyCreateKey = (salt: string, password: string): Buffer[ const encryptionKeyHash = Buffer.alloc(sodium.crypto_shorthash_BYTES) sodium.crypto_shorthash(encryptionKeyHash, encryptionKey, configLoginServerKey) - logger.trace("SecretKeyCryptographyCreateKey...successful") + logger.trace('SecretKeyCryptographyCreateKey...successful') logger.trace(`encryptionKeyHash= ${encryptionKeyHash}`) logger.trace(`encryptionKey= ${encryptionKey}`) return [encryptionKeyHash, encryptionKey] @@ -135,40 +137,40 @@ const getEmailHash = (email: string): Buffer => { logger.trace('getEmailHash...') const emailHash = Buffer.alloc(sodium.crypto_generichash_BYTES) sodium.crypto_generichash(emailHash, Buffer.from(email)) - logger.trace("getEmailHash...successful: " + emailHash); + logger.trace('getEmailHash...successful: ' + emailHash) return emailHash } const SecretKeyCryptographyEncrypt = (message: Buffer, encryptionKey: Buffer): Buffer => { - logger.trace("SecretKeyCryptographyEncrypt..."); + logger.trace('SecretKeyCryptographyEncrypt...') const encrypted = Buffer.alloc(message.length + sodium.crypto_secretbox_MACBYTES) const nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES) nonce.fill(31) // static nonce sodium.crypto_secretbox_easy(encrypted, message, nonce, encryptionKey) - logger.trace("SecretKeyCryptographyEncrypt...successful: " + encrypted); + logger.trace('SecretKeyCryptographyEncrypt...successful: ' + encrypted) return encrypted } const SecretKeyCryptographyDecrypt = (encryptedMessage: Buffer, encryptionKey: Buffer): Buffer => { - logger.trace("SecretKeyCryptographyDecrypt..."); + logger.trace('SecretKeyCryptographyDecrypt...') const message = Buffer.alloc(encryptedMessage.length - sodium.crypto_secretbox_MACBYTES) const nonce = Buffer.alloc(sodium.crypto_secretbox_NONCEBYTES) nonce.fill(31) // static nonce sodium.crypto_secretbox_open_easy(message, encryptedMessage, nonce, encryptionKey) - logger.trace("SecretKeyCryptographyDecrypt...successful: "+ message); + logger.trace('SecretKeyCryptographyDecrypt...successful: ' + message) return message } const newEmailOptIn = (userId: number): LoginEmailOptIn => { - logger.trace("newEmailOptIn..."); + logger.trace('newEmailOptIn...') const emailOptIn = new LoginEmailOptIn() emailOptIn.verificationCode = random(64) emailOptIn.userId = userId emailOptIn.emailOptInTypeId = OptInType.EMAIL_OPT_IN_REGISTER - logger.trace("newEmailOptIn...successful: " + emailOptIn); + logger.trace('newEmailOptIn...successful: ' + emailOptIn) return emailOptIn } @@ -180,11 +182,14 @@ export const checkOptInCode = async ( userId: number, optInType: OptInType = OptInType.EMAIL_OPT_IN_REGISTER, ): Promise => { - logger.trace("checkOptInCode..." + optInCode); + logger.trace('checkOptInCode...' + optInCode) if (optInCode) { if (!canResendOptIn(optInCode)) { - logger.error(`email already sent less than ${printTimeDuration( - CONFIG.EMAIL_CODE_REQUEST_TIME,)} minutes ago`); + logger.error( + `email already sent less than ${printTimeDuration( + CONFIG.EMAIL_CODE_REQUEST_TIME, + )} minutes ago`, + ) throw new Error( `email already sent less than ${printTimeDuration( CONFIG.EMAIL_CODE_REQUEST_TIME, @@ -194,20 +199,20 @@ export const checkOptInCode = async ( optInCode.updatedAt = new Date() optInCode.resendCount++ } else { - logger.trace("create new OptIn for userId=" + userId); + logger.trace('create new OptIn for userId=' + userId) optInCode = newEmailOptIn(userId) } optInCode.emailOptInTypeId = optInType await LoginEmailOptIn.save(optInCode).catch(() => { - logger.error("Unable to save optin code= " + optInCode); + logger.error('Unable to save optin code= ' + optInCode) throw new Error('Unable to save optin code.') }) - logger.trace("checkOptInCode...successful: " + optInCode); + logger.trace('checkOptInCode...successful: ' + optInCode) return optInCode } export const activationLink = (optInCode: LoginEmailOptIn): string => { - logger.trace("activationLink..."); + logger.trace('activationLink...') return CONFIG.EMAIL_LINK_SETPASSWORD.replace(/{optin}/g, optInCode.verificationCode.toString()) } @@ -217,7 +222,7 @@ export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) async verifyLogin(@Ctx() context: Context): Promise { - logger.trace("verifyLogin..."); + logger.trace('verifyLogin...') // TODO refactor and do not have duplicate code with login(see below) const userEntity = getUser(context) const user = new User(userEntity) @@ -230,7 +235,7 @@ export class UserResolver { const coinanimation = await userSettingRepository .readBoolean(userEntity.id, Setting.COIN_ANIMATION) .catch((error) => { - logger.error("error:", error); + logger.error('error:', error) throw new Error(error) }) user.coinanimation = coinanimation diff --git a/backend/src/server/createServer.ts b/backend/src/server/createServer.ts index 15d11e977..c9c4b710c 100644 --- a/backend/src/server/createServer.ts +++ b/backend/src/server/createServer.ts @@ -43,8 +43,12 @@ const createServer = async (context: any = serverContext): Promise => // check for correct database version const dbVersion = await checkDBVersion(CONFIG.DB_VERSION) if (!dbVersion) { - logger.fatal('Missmatching Database Versions! configured=' + - CONFIG.DB_VERSION + ', dbVersion=' + dbVersion ) + logger.fatal( + 'Missmatching Database Versions! configured=' + + CONFIG.DB_VERSION + + ', dbVersion=' + + dbVersion, + ) throw new Error('Fatal: Database Version incorrect') } From 4a64d1aa2013eb561a4e0c01778367bb3fa31ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wolfgang=20Hu=C3=9F?= Date: Thu, 5 May 2022 12:05:04 +0200 Subject: [PATCH 105/162] Avoid any error messages on the Register page, because of boots --- frontend/src/locales/de.json | 3 --- frontend/src/locales/en.json | 3 --- frontend/src/pages/Login.spec.js | 2 ++ frontend/src/pages/Login.vue | 2 ++ frontend/src/pages/Register.spec.js | 40 +++++++++-------------------- frontend/src/pages/Register.vue | 33 +++++------------------- 6 files changed, 22 insertions(+), 61 deletions(-) diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 6066ce04a..0d496bc3f 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -216,9 +216,6 @@ "new_wallet": "Neues Konto erstellen", "signin": "Anmelden" }, - "register": { - "message-button-text": "Alles klar" - }, "signup": { "agree": "Ich stimme der Datenschutzerklärung zu.", "dont_match": "Die Passwörter stimmen nicht überein.", diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 5a0602098..f5009e04f 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -216,9 +216,6 @@ "new_wallet": "Create new account", "signin": "Sign in" }, - "register": { - "message-button-text": "Okay" - }, "signup": { "agree": "I agree to the privacy policy.", "dont_match": "Passwords don't match.", diff --git a/frontend/src/pages/Login.spec.js b/frontend/src/pages/Login.spec.js index 478266676..80177ab2b 100644 --- a/frontend/src/pages/Login.spec.js +++ b/frontend/src/pages/Login.spec.js @@ -282,6 +282,7 @@ describe('Login', () => { }) it('shows no error message on the page', () => { + // don't show any error on the page! against boots expect(wrapper.vm.showPageMessage).toBe(false) expect(wrapper.find('.test-message-headline').exists()).toBe(false) expect(wrapper.find('.test-message-subtitle').exists()).toBe(false) @@ -299,6 +300,7 @@ describe('Login', () => { }) it('shows no error message on the page', () => { + // don't show any error on the page! against boots expect(wrapper.vm.showPageMessage).toBe(false) expect(wrapper.find('.test-message-headline').exists()).toBe(false) expect(wrapper.find('.test-message-subtitle').exists()).toBe(false) diff --git a/frontend/src/pages/Login.vue b/frontend/src/pages/Login.vue index 7544bdcf7..10fcca649 100755 --- a/frontend/src/pages/Login.vue +++ b/frontend/src/pages/Login.vue @@ -135,8 +135,10 @@ export default { this.errorLinkTo = '/reset-password/login' this.toastError(this.$t('error.no-account')) } else if (error.message.includes('No user with this credentials')) { + // don't show any error on the page! against boots this.toastError(this.$t('error.no-user')) } else { + // don't show any error on the page! against boots this.toastError(this.$t('error.unknown-error') + error.message) } loader.hide() diff --git a/frontend/src/pages/Register.spec.js b/frontend/src/pages/Register.spec.js index e889f0ca7..f7a6c0ac8 100644 --- a/frontend/src/pages/Register.spec.js +++ b/frontend/src/pages/Register.spec.js @@ -234,24 +234,17 @@ describe('Register', () => { await createError('GraphQL error: User already exists.') }) - it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBe(true) - expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') - expect(wrapper.find('.test-message-subtitle').text()).toBe('error.user-already-exists') - expect(wrapper.find('.test-message-button').text()).toBe( - 'site.register.message-button-text', - ) + it('shows no error message on the page', () => { + // don't show any error on the page! against boots + expect(wrapper.vm.showPageMessage).toBe(false) + expect(wrapper.find('.test-message-headline').exists()).toBe(false) + expect(wrapper.find('.test-message-subtitle').exists()).toBe(false) + expect(wrapper.find('.test-message-button').exists()).toBe(false) }) it('toasts the error message', () => { expect(toastErrorSpy).toBeCalledWith('error.user-already-exists') }) - - it('click calls "solveError"', async () => { - wrapper.find('.test-message-button').trigger('click') - await wrapper.vm.$nextTick() - expect(wrapper.vm.showPageMessage).toBe(false) - }) }) describe('server sends back error "Unknown error"', () => { @@ -259,26 +252,17 @@ describe('Register', () => { await createError(' – Unknown error.') }) - it('shows success title, subtitle, login button', () => { - expect(wrapper.vm.showPageMessage).toBe(true) - expect(wrapper.find('.test-message-headline').text()).toBe('site.thx.errorTitle') - expect(wrapper.find('.test-message-subtitle').text()).toBe( - 'error.unknown-error – Unknown error.', - ) - expect(wrapper.find('.test-message-button').text()).toBe( - 'site.register.message-button-text', - ) + it('shows no error message on the page', () => { + // don't show any error on the page! against boots + expect(wrapper.vm.showPageMessage).toBe(false) + expect(wrapper.find('.test-message-headline').exists()).toBe(false) + expect(wrapper.find('.test-message-subtitle').exists()).toBe(false) + expect(wrapper.find('.test-message-button').exists()).toBe(false) }) it('toasts the error message', () => { expect(toastErrorSpy).toBeCalledWith('error.unknown-error – Unknown error.') }) - - it('click calls "solveError"', async () => { - wrapper.find('.test-message-button').trigger('click') - await wrapper.vm.$nextTick() - expect(wrapper.vm.showPageMessage).toBe(false) - }) }) }) diff --git a/frontend/src/pages/Register.vue b/frontend/src/pages/Register.vue index d6b5f9dba..39230cb1e 100755 --- a/frontend/src/pages/Register.vue +++ b/frontend/src/pages/Register.vue @@ -165,18 +165,7 @@ - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docu/Style/Images/Checkbox_deaktiv.svg b/docu/Style/Images/Checkbox_deaktiv.svg new file mode 100644 index 000000000..4770d4b33 --- /dev/null +++ b/docu/Style/Images/Checkbox_deaktiv.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + From 99f03dac9f8af285715dcd4b31a9e16ae891d126 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Fri, 13 May 2022 11:39:18 +0200 Subject: [PATCH 142/162] Release 1.8.3 --- CHANGELOG.md | 8 ++++++++ admin/package.json | 2 +- backend/package.json | 2 +- database/package.json | 2 +- frontend/package.json | 2 +- package.json | 2 +- 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c9a87058..48eeff9a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,16 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [1.8.3](https://github.com/gradido/gradido/compare/1.8.2...1.8.3) + +- Checkbox [`#1894`](https://github.com/gradido/gradido/pull/1894) +- fix: Count Deprecated Links as Well [`#1892`](https://github.com/gradido/gradido/pull/1892) + #### [1.8.2](https://github.com/gradido/gradido/compare/1.8.1...1.8.2) +> 12 May 2022 + +- Release 1.8.2 [`#1890`](https://github.com/gradido/gradido/pull/1890) - Update README.md [`#1878`](https://github.com/gradido/gradido/pull/1878) - fix: Unique Previous Column in Transactions Table [`#1879`](https://github.com/gradido/gradido/pull/1879) - fix: Up and Down Migrations for Older SQL Versions [`#1861`](https://github.com/gradido/gradido/pull/1861) diff --git a/admin/package.json b/admin/package.json index 0bd41314b..57711b8be 100644 --- a/admin/package.json +++ b/admin/package.json @@ -3,7 +3,7 @@ "description": "Administraion Interface for Gradido", "main": "index.js", "author": "Moriz Wahl", - "version": "1.8.2", + "version": "1.8.3", "license": "MIT", "private": false, "scripts": { diff --git a/backend/package.json b/backend/package.json index 330bb284c..a9febe918 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "gradido-backend", - "version": "1.8.2", + "version": "1.8.3", "description": "Gradido unified backend providing an API-Service for Gradido Transactions", "main": "src/index.ts", "repository": "https://github.com/gradido/gradido/backend", diff --git a/database/package.json b/database/package.json index 77f52b559..f5a16fd31 100644 --- a/database/package.json +++ b/database/package.json @@ -1,6 +1,6 @@ { "name": "gradido-database", - "version": "1.8.2", + "version": "1.8.3", "description": "Gradido Database Tool to execute database migrations", "main": "src/index.ts", "repository": "https://github.com/gradido/gradido/database", diff --git a/frontend/package.json b/frontend/package.json index 4f3d027a0..9d70ace58 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "bootstrap-vue-gradido-wallet", - "version": "1.8.2", + "version": "1.8.3", "private": true, "scripts": { "start": "node run/server.js", diff --git a/package.json b/package.json index 80da79a94..20ab8dd35 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gradido", - "version": "1.8.2", + "version": "1.8.3", "description": "Gradido", "main": "index.js", "repository": "git@github.com:gradido/gradido.git", From 480ee546a9e585b41e9d177ac4079baee990f3b7 Mon Sep 17 00:00:00 2001 From: ogerly Date: Fri, 13 May 2022 11:47:12 +0200 Subject: [PATCH 143/162] add images, svg for new styling --- frontend/public/img/brand/gradido_coin●.png | Bin 0 -> 661041 bytes frontend/public/img/svg/type.svg | 3 +++ frontend/public/img/template/Blaetter.png | Bin 0 -> 19171 bytes frontend/public/img/template/Foto_01.jpg | Bin 0 -> 83113 bytes frontend/public/img/template/gold_03.png | Bin 0 -> 1048620 bytes .../template/gradido_background_header.png | Bin 0 -> 1683 bytes frontend/public/img/template/logo-header.png | Bin 0 -> 52885 bytes 7 files changed, 3 insertions(+) create mode 100644 frontend/public/img/brand/gradido_coin●.png create mode 100644 frontend/public/img/svg/type.svg create mode 100644 frontend/public/img/template/Blaetter.png create mode 100644 frontend/public/img/template/Foto_01.jpg create mode 100644 frontend/public/img/template/gold_03.png create mode 100644 frontend/public/img/template/gradido_background_header.png create mode 100644 frontend/public/img/template/logo-header.png diff --git a/frontend/public/img/brand/gradido_coin●.png b/frontend/public/img/brand/gradido_coin●.png new file mode 100644 index 0000000000000000000000000000000000000000..15a5182da3a81dc3a840818574001b522595bae6 GIT binary patch literal 661041 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

dd40&b(>kio**wEX7*8#w{*8m*@nP$lGnA> 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�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 e^mCfu;UtK(fjv-hvB(MI$dS&T2 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%0Dp~>@tG>IwF8AUdyNGB9EB*}t!{D64;fEtHR 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