From cc8a4fcd5b1e76c6a9b840488b61ec37f9dd2ae5 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 7 Oct 2021 16:08:14 +0200 Subject: [PATCH 001/158] add api call to check is user has an elopage account to login-server and to apollo-server --- backend/src/graphql/resolver/UserResolver.ts | 14 +++++++++++++- .../src/cpp/JSONInterface/JsonHasElopage.cpp | 16 ++++++++++++++++ .../src/cpp/JSONInterface/JsonHasElopage.h | 15 +++++++++++++++ .../JSONInterface/JsonRequestHandlerFactory.cpp | 4 ++++ login_server/src/cpp/model/table/ModelBase.h | 2 +- 5 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 login_server/src/cpp/JSONInterface/JsonHasElopage.cpp create mode 100644 login_server/src/cpp/JSONInterface/JsonHasElopage.h diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 820e493c6..a48b44f48 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -242,4 +242,16 @@ export class UserResolver { } return new CheckEmailResponse(result.data) } -} + + @Query(() => Boolean) + async hasElopage(@Ctx() context: any): Promise { + const result = await apiGet( + CONFIG.LOGIN_API_URL + 'hasElopage?session_id=' + context.sessionId, + ) + if (!result.success) { + throw new Error(result.data) + } + return result.data.hasElopage + } + +} \ No newline at end of file diff --git a/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp b/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp new file mode 100644 index 000000000..e040b436f --- /dev/null +++ b/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp @@ -0,0 +1,16 @@ +#include "JsonHasElopage.h" +#include "../model/table/ElopageBuy.h" + +Poco::JSON::Object* JsonHasElopage::handle(Poco::Dynamic::Var params) +{ + auto result = checkAndLoadSession(params); + if (result) { + return result; + } + auto elopage_buy = Poco::AutoPtr(); + + result = stateSuccess(); + result->set("hasElopage", elopage_buy->isExistInDB("email", mSession->getNewUser()->getModel()->getEmail())); + + return result; +} \ No newline at end of file diff --git a/login_server/src/cpp/JSONInterface/JsonHasElopage.h b/login_server/src/cpp/JSONInterface/JsonHasElopage.h new file mode 100644 index 000000000..4fc291d5b --- /dev/null +++ b/login_server/src/cpp/JSONInterface/JsonHasElopage.h @@ -0,0 +1,15 @@ +#ifndef __JSON_INTERFACE_JSON_HAS_ELOPAGE_ +#define __JSON_INTERFACE_JSON_HAS_ELOPAGE_ + +#include "JsonRequestHandler.h" + +class JsonHasElopage : public JsonRequestHandler +{ +public: + Poco::JSON::Object* handle(Poco::Dynamic::Var params); + +protected: + +}; + +#endif // __JSON_INTERFACE_JSON_HAS_ELOPAGE_ \ No newline at end of file diff --git a/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp b/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp index 744ac710e..e1998ddd0 100644 --- a/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp +++ b/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp @@ -16,6 +16,7 @@ #include "JsonUnknown.h" #include "JsonGetRunningUserTasks.h" #include "JsonGetUsers.h" +#include "JsonHasElopage.h" #include "JsonLoginViaEmailVerificationCode.h" #include "JsonLogout.h" #include "JsonNetworkInfos.h" @@ -140,6 +141,9 @@ Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(c else if (url_first_part == "/logout") { return new JsonLogout(client_host); } + else if (url_first_part == "/hasElopage") { + return new JsonHasElopage; + } return new JsonUnknown; } diff --git a/login_server/src/cpp/model/table/ModelBase.h b/login_server/src/cpp/model/table/ModelBase.h index 95856087f..98b640178 100644 --- a/login_server/src/cpp/model/table/ModelBase.h +++ b/login_server/src/cpp/model/table/ModelBase.h @@ -171,7 +171,7 @@ namespace model { << " WHERE " << fieldName << " = ?" , Poco::Data::Keywords::into(id), Poco::Data::Keywords::useRef(fieldValue); try { - if (select.execute() == 1) { + if (select.execute() >= 1) { return true; } } From 348ece411a020047f1d9bbdb61ce86c4aa927df1 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 7 Oct 2021 16:11:18 +0200 Subject: [PATCH 002/158] update doc --- docu/login_server.api.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docu/login_server.api.md b/docu/login_server.api.md index 20317c66f..60ed74f02 100644 --- a/docu/login_server.api.md +++ b/docu/login_server.api.md @@ -593,3 +593,29 @@ or: "msg": "session not found" } ``` + +## Check if User has an Elopage Account +Check if logged in user has already an elopage account + +### Request +`GET http://localhost/login_api/hasElopage?session_id=-127182` + +### Response +In case of success returns: + +```json +{ + "state":"success", + "hasElopage": true +} +``` + +or: + +```json +{ + "state":"not found", + "msg": "session not found" +} +``` + From 8ddd47f15342ad0454dbe5118ab75e5e3cc845f1 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 7 Oct 2021 16:16:32 +0200 Subject: [PATCH 003/158] feat: Improve Test of Navigation Guard of Vue Router --- frontend/src/routes/guards.test.js | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/frontend/src/routes/guards.test.js b/frontend/src/routes/guards.test.js index a016ca111..cf366eac8 100644 --- a/frontend/src/routes/guards.test.js +++ b/frontend/src/routes/guards.test.js @@ -18,21 +18,30 @@ describe('navigation guards', () => { }) describe('publisher ID', () => { - it('commits the pid to the store when present', () => { - router.push({ path: 'login', query: { pid: 42 } }) + it('commits the pid to the store when present', async () => { + await router.push({ path: 'register', query: { pid: 42 } }) expect(storeCommitMock).toBeCalledWith('publisherId', '42') }) - it('does not commit the pid when not present', () => { - router.push({ path: 'register' }) + it('does not commit the pid when not present', async () => { + await router.push({ path: 'password' }) expect(storeCommitMock).not.toBeCalled() }) }) describe('authorization', () => { - it.skip('redirects to login when not authorized', async () => { - router.push({ path: 'overview' }) - expect(router.history.current.path).toBe('/login') + const navGuard = router.beforeHooks[0] + const next = jest.fn() + + it('redirects to login when not authorized', () => { + navGuard({ meta: { requiresAuth: true }, query: {} }, {}, next) + expect(next).toBeCalledWith({ path: '/login' }) + }) + + it('does not redirect to login when authorized', () => { + store.state.token = 'valid token' + navGuard({ meta: { requiresAuth: true }, query: {} }, {}, next) + expect(next).toBeCalledWith() }) }) }) From b3b603b59e78bd4fd64149d442150d1ec959c4b8 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 7 Oct 2021 16:29:28 +0200 Subject: [PATCH 004/158] bring alive --- login_server/src/cpp/JSONInterface/JsonHasElopage.cpp | 2 +- login_server/src/cpp/model/table/ElopageBuy.cpp | 5 +++++ login_server/src/cpp/model/table/ElopageBuy.h | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp b/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp index e040b436f..ee66255be 100644 --- a/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp +++ b/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp @@ -7,7 +7,7 @@ Poco::JSON::Object* JsonHasElopage::handle(Poco::Dynamic::Var params) if (result) { return result; } - auto elopage_buy = Poco::AutoPtr(); + auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); result = stateSuccess(); result->set("hasElopage", elopage_buy->isExistInDB("email", mSession->getNewUser()->getModel()->getEmail())); diff --git a/login_server/src/cpp/model/table/ElopageBuy.cpp b/login_server/src/cpp/model/table/ElopageBuy.cpp index 05e799a4a..c056ecdc9 100644 --- a/login_server/src/cpp/model/table/ElopageBuy.cpp +++ b/login_server/src/cpp/model/table/ElopageBuy.cpp @@ -9,6 +9,11 @@ namespace model { "product[affiliate_program_id]", "publisher[id]", "order_id", "product_id", "product[price]", "payer[email]", "publisher[email]", "payment_state", "success_date", "event" }; + ElopageBuy::ElopageBuy() + { + + } + ElopageBuy::ElopageBuy(const Poco::Net::NameValueCollection& elopage_webhook_requestData) : mPayed(false) { diff --git a/login_server/src/cpp/model/table/ElopageBuy.h b/login_server/src/cpp/model/table/ElopageBuy.h index dec4727a3..83b2b477b 100644 --- a/login_server/src/cpp/model/table/ElopageBuy.h +++ b/login_server/src/cpp/model/table/ElopageBuy.h @@ -31,6 +31,7 @@ namespace model { { public: ElopageBuy(const Poco::Net::NameValueCollection& elopage_webhook_requestData); + ElopageBuy(); // generic db operations const char* getTableName() const { return "elopage_buys"; } From e6c8fbed59f360155f560fdd77f0c00a27683821 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Thu, 7 Oct 2021 16:32:17 +0200 Subject: [PATCH 005/158] fix linting --- backend/src/graphql/resolver/UserResolver.ts | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index a48b44f48..bbb609d40 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -244,14 +244,11 @@ export class UserResolver { } @Query(() => Boolean) - async hasElopage(@Ctx() context: any): Promise { - const result = await apiGet( - CONFIG.LOGIN_API_URL + 'hasElopage?session_id=' + context.sessionId, - ) + async hasElopage(@Ctx() context: any): Promise { + const result = await apiGet(CONFIG.LOGIN_API_URL + 'hasElopage?session_id=' + context.sessionId) if (!result.success) { throw new Error(result.data) } return result.data.hasElopage } - -} \ No newline at end of file +} From 93532004d501d22d8e0bc0026174014cd7eb19d1 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Fri, 8 Oct 2021 10:26:09 +0200 Subject: [PATCH 006/158] add option in login call to check also for elopage account --- backend/src/graphql/arg/UnsecureLoginArgs.ts | 3 +++ backend/src/graphql/model/User.ts | 4 ++++ backend/src/graphql/resolver/UserResolver.ts | 11 +++++++++-- docu/login_server.api.md | 4 ++++ .../src/cpp/JSONInterface/JsonUnsecureLogin.cpp | 12 ++++++++++++ 5 files changed, 32 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/arg/UnsecureLoginArgs.ts b/backend/src/graphql/arg/UnsecureLoginArgs.ts index 9e9cde0d9..925cde8a4 100644 --- a/backend/src/graphql/arg/UnsecureLoginArgs.ts +++ b/backend/src/graphql/arg/UnsecureLoginArgs.ts @@ -7,4 +7,7 @@ export default class UnsecureLoginArgs { @Field(() => String) password: string + + @Field(() => Boolean) + hasElopage?: boolean } diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 21bf1b464..ebdf0aad2 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -19,6 +19,7 @@ export class User { this.pubkey = json.public_hex this.language = json.language this.publisherId = json.publisher_id + if (json.hasElopage) this.hasElopage = json.hasElopage } @Field(() => String) @@ -74,4 +75,7 @@ export class User { @Field(() => KlickTipp) klickTipp: KlickTipp + + @Field(() => Boolean) + hasElopage?: boolean } diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index bbb609d40..a6b7ae724 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -31,9 +31,16 @@ import { UserRepository } from '../../typeorm/repository/User' export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) - async login(@Args() { email, password }: UnsecureLoginArgs, @Ctx() context: any): Promise { + async login( + @Args() { email, password, hasElopage }: UnsecureLoginArgs, + @Ctx() context: any, + ): Promise { email = email.trim().toLowerCase() - const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { email, password }) + const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { + email, + password, + hasElopage, + }) // if there is no user, throw an authentication error if (!result.success) { diff --git a/docu/login_server.api.md b/docu/login_server.api.md index 60ed74f02..90bdedf3d 100644 --- a/docu/login_server.api.md +++ b/docu/login_server.api.md @@ -40,10 +40,12 @@ with: "email": "max.musterman@gmail.de", "username": "Maxilein", "password": "123abcDE&" + "hasElopage": true } ``` `username` or `email` must be present! If booth present, `email` will be used. +`hasElopage`: optional, if set to true login will also check if user has an elopage account ### Response In case of success returns: @@ -67,6 +69,7 @@ In case of success returns: "username": "" }, "session_id": -127182, + "hasElopage": tr "clientIP":"123.123.123.123" } ``` @@ -86,6 +89,7 @@ In case of success returns: - `role`: role of user currently only "none" or "admin" - `username`: not used yet - `clientIP`: should be the same as where the js-client is running, else maybe a man-in-the-middle attacks is happening or +- `hasElopage`: only present if hasElopage was set to true in request, true if user has an elopage account nginx was wrong configured. - `session_id`: can be also negative diff --git a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp index 5d337df41..9cd6e2d1a 100644 --- a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp +++ b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp @@ -8,6 +8,8 @@ #include "../lib/DataTypeConverter.h" +#include "../model/table/ElopageBuy.h" + Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) { @@ -23,6 +25,7 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) std::string email; std::string username; std::string password; + bool hasElopage = false; // if is json object if (params.type() == typeid(Poco::JSON::Object::Ptr)) { @@ -38,6 +41,11 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) auto email_obj = paramJsonObject->get("email"); auto username_obj = paramJsonObject->get("username"); + auto hasElopage_obj = paramJsonObject->get("hasElopage"); + if (!hasElopage_obj.isEmpty()) { + hasElopage_obj.convert(hasElopage); + } + if (!email_obj.isEmpty()) { email_obj.convert(email); } @@ -141,6 +149,10 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) if(infos.size() > 0) { result->set("info", infos); } + if (hasElopage) { + auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); + result->set("hasElopage", elopage_buy->isExistInDB("email", mSession->getNewUser()->getModel()->getEmail())); + } return result; default: result->set("state", "error"); From e226a10b4b511a581ac32539af6a00047981396e Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Fri, 8 Oct 2021 10:27:25 +0200 Subject: [PATCH 007/158] fix typo in docu --- docu/login_server.api.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docu/login_server.api.md b/docu/login_server.api.md index 90bdedf3d..b56852010 100644 --- a/docu/login_server.api.md +++ b/docu/login_server.api.md @@ -69,7 +69,7 @@ In case of success returns: "username": "" }, "session_id": -127182, - "hasElopage": tr + "hasElopage": true, "clientIP":"123.123.123.123" } ``` From 17907b23ade870a07a7e8918f9a348711acf4203 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Fri, 8 Oct 2021 10:28:46 +0200 Subject: [PATCH 008/158] fix bug --- login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp index 9cd6e2d1a..7950fb441 100644 --- a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp +++ b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp @@ -151,7 +151,7 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) } if (hasElopage) { auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); - result->set("hasElopage", elopage_buy->isExistInDB("email", mSession->getNewUser()->getModel()->getEmail())); + result->set("hasElopage", elopage_buy->isExistInDB("email", user_model->getEmail())); } return result; default: From 1639d6305c1ffebb08f4ae5f77be78f0c2b57c60 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:20:50 +0200 Subject: [PATCH 009/158] 0001-init_db entities --- .../entity/0001-init_db}/Balance.ts | 0 .../entity/0001-init_db}/Migration.ts | 0 .../entity/0001-init_db}/Transaction.ts | 0 .../0001-init_db}/TransactionCreation.ts | 0 .../0001-init_db}/TransactionSendCoin.ts | 0 database/entity/0001-init_db/User.ts | 26 +++++++++++++++++++ .../entity/0001-init_db}/UserTransaction.ts | 0 7 files changed, 26 insertions(+) rename {backend/src/typeorm/entity => database/entity/0001-init_db}/Balance.ts (100%) rename {backend/src/typeorm/entity => database/entity/0001-init_db}/Migration.ts (100%) rename {backend/src/typeorm/entity => database/entity/0001-init_db}/Transaction.ts (100%) rename {backend/src/typeorm/entity => database/entity/0001-init_db}/TransactionCreation.ts (100%) rename {backend/src/typeorm/entity => database/entity/0001-init_db}/TransactionSendCoin.ts (100%) create mode 100644 database/entity/0001-init_db/User.ts rename {backend/src/typeorm/entity => database/entity/0001-init_db}/UserTransaction.ts (100%) diff --git a/backend/src/typeorm/entity/Balance.ts b/database/entity/0001-init_db/Balance.ts similarity index 100% rename from backend/src/typeorm/entity/Balance.ts rename to database/entity/0001-init_db/Balance.ts diff --git a/backend/src/typeorm/entity/Migration.ts b/database/entity/0001-init_db/Migration.ts similarity index 100% rename from backend/src/typeorm/entity/Migration.ts rename to database/entity/0001-init_db/Migration.ts diff --git a/backend/src/typeorm/entity/Transaction.ts b/database/entity/0001-init_db/Transaction.ts similarity index 100% rename from backend/src/typeorm/entity/Transaction.ts rename to database/entity/0001-init_db/Transaction.ts diff --git a/backend/src/typeorm/entity/TransactionCreation.ts b/database/entity/0001-init_db/TransactionCreation.ts similarity index 100% rename from backend/src/typeorm/entity/TransactionCreation.ts rename to database/entity/0001-init_db/TransactionCreation.ts diff --git a/backend/src/typeorm/entity/TransactionSendCoin.ts b/database/entity/0001-init_db/TransactionSendCoin.ts similarity index 100% rename from backend/src/typeorm/entity/TransactionSendCoin.ts rename to database/entity/0001-init_db/TransactionSendCoin.ts diff --git a/database/entity/0001-init_db/User.ts b/database/entity/0001-init_db/User.ts new file mode 100644 index 000000000..d76711eb1 --- /dev/null +++ b/database/entity/0001-init_db/User.ts @@ -0,0 +1,26 @@ +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm' + +// Moriz: I do not like the idea of having two user tables +@Entity('state_users') +export class User extends BaseEntity { + @PrimaryGeneratedColumn() + id: number + + @Column({ type: 'binary', length: 32, name: 'public_key' }) + pubkey: Buffer + + @Column() + email: string + + @Column({ name: 'first_name' }) + firstName: string + + @Column({ name: 'last_name' }) + lastName: string + + @Column() + username: string + + @Column() + disabled: boolean +} diff --git a/backend/src/typeorm/entity/UserTransaction.ts b/database/entity/0001-init_db/UserTransaction.ts similarity index 100% rename from backend/src/typeorm/entity/UserTransaction.ts rename to database/entity/0001-init_db/UserTransaction.ts From cf5b054c89cc12bdd52bad6a1ebf3666e2e82b7b Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:21:07 +0200 Subject: [PATCH 010/158] 0002-add_settings entities --- .../entity => database/entity/0002-add_settings}/User.ts | 3 --- .../entity/0002-add_settings}/UserSetting.ts | 0 2 files changed, 3 deletions(-) rename {backend/src/typeorm/entity => database/entity/0002-add_settings}/User.ts (89%) rename {backend/src/typeorm/entity => database/entity/0002-add_settings}/UserSetting.ts (100%) diff --git a/backend/src/typeorm/entity/User.ts b/database/entity/0002-add_settings/User.ts similarity index 89% rename from backend/src/typeorm/entity/User.ts rename to database/entity/0002-add_settings/User.ts index e30fee725..51bbef164 100644 --- a/backend/src/typeorm/entity/User.ts +++ b/database/entity/0002-add_settings/User.ts @@ -7,9 +7,6 @@ export class User extends BaseEntity { @PrimaryGeneratedColumn() id: number - // @ManyToOne(type => Group, group => group.users) - // group: Group; - @Column({ type: 'binary', length: 32, name: 'public_key' }) pubkey: Buffer diff --git a/backend/src/typeorm/entity/UserSetting.ts b/database/entity/0002-add_settings/UserSetting.ts similarity index 100% rename from backend/src/typeorm/entity/UserSetting.ts rename to database/entity/0002-add_settings/UserSetting.ts From db72ec0982e1a4facf32c77a329e48e85d0bf09a Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:21:24 +0200 Subject: [PATCH 011/158] entity references --- database/entity/Balance.ts | 1 + database/entity/Migration.ts | 1 + database/entity/Transaction.ts | 1 + database/entity/TransactionCreation.ts | 1 + database/entity/TransactionSendCoin.ts | 1 + database/entity/User.ts | 1 + database/entity/UserSetting.ts | 1 + database/entity/UserTransaction.ts | 1 + 8 files changed, 8 insertions(+) create mode 100644 database/entity/Balance.ts create mode 100644 database/entity/Migration.ts create mode 100644 database/entity/Transaction.ts create mode 100644 database/entity/TransactionCreation.ts create mode 100644 database/entity/TransactionSendCoin.ts create mode 100644 database/entity/User.ts create mode 100644 database/entity/UserSetting.ts create mode 100644 database/entity/UserTransaction.ts diff --git a/database/entity/Balance.ts b/database/entity/Balance.ts new file mode 100644 index 000000000..c4fde6334 --- /dev/null +++ b/database/entity/Balance.ts @@ -0,0 +1 @@ +export { Balance } from './0001-init_db/Balance' diff --git a/database/entity/Migration.ts b/database/entity/Migration.ts new file mode 100644 index 000000000..9f1e743d0 --- /dev/null +++ b/database/entity/Migration.ts @@ -0,0 +1 @@ +export { Migration } from './0001-init_db/Migration' diff --git a/database/entity/Transaction.ts b/database/entity/Transaction.ts new file mode 100644 index 000000000..d3915c05d --- /dev/null +++ b/database/entity/Transaction.ts @@ -0,0 +1 @@ +export { Transaction } from './0001-init_db/Transaction' diff --git a/database/entity/TransactionCreation.ts b/database/entity/TransactionCreation.ts new file mode 100644 index 000000000..100e948a1 --- /dev/null +++ b/database/entity/TransactionCreation.ts @@ -0,0 +1 @@ +export { TransactionCreation } from './0001-init_db/TransactionCreation' diff --git a/database/entity/TransactionSendCoin.ts b/database/entity/TransactionSendCoin.ts new file mode 100644 index 000000000..5c47d3961 --- /dev/null +++ b/database/entity/TransactionSendCoin.ts @@ -0,0 +1 @@ +export { TransactionSendCoin } from './0001-init_db/TransactionSendCoin' diff --git a/database/entity/User.ts b/database/entity/User.ts new file mode 100644 index 000000000..b20e934f1 --- /dev/null +++ b/database/entity/User.ts @@ -0,0 +1 @@ +export { User } from './0002-add_settings/User' diff --git a/database/entity/UserSetting.ts b/database/entity/UserSetting.ts new file mode 100644 index 000000000..38da380f9 --- /dev/null +++ b/database/entity/UserSetting.ts @@ -0,0 +1 @@ +export { UserSetting } from './0002-add_settings/UserSetting' diff --git a/database/entity/UserTransaction.ts b/database/entity/UserTransaction.ts new file mode 100644 index 000000000..bcbe6a65a --- /dev/null +++ b/database/entity/UserTransaction.ts @@ -0,0 +1 @@ +export { UserTransaction } from './0001-init_db/UserTransaction' From b00a2a08d409b95f3a64a2eb52b9f2dca1726879 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:22:12 +0200 Subject: [PATCH 012/158] make typeorm available in the database project using our entities --- database/package.json | 6 +- database/src/index.ts | 10 +- database/src/typeorm/connection.ts | 24 ++ database/yarn.lock | 352 ++++++++++++++++++++++++++++- 4 files changed, 385 insertions(+), 7 deletions(-) create mode 100644 database/src/typeorm/connection.ts diff --git a/database/package.json b/database/package.json index 4656dab43..c01c75f2b 100644 --- a/database/package.json +++ b/database/package.json @@ -19,7 +19,7 @@ "lint": "eslint . --ext .js,.ts" }, "devDependencies": { - "@types/node": "^16.7.1", + "@types/node": "^16.10.3", "@typescript-eslint/eslint-plugin": "^4.29.2", "@typescript-eslint/parser": "^4.29.2", "eslint": "^7.32.0", @@ -37,6 +37,8 @@ "dependencies": { "dotenv": "^10.0.0", "mysql2": "^2.3.0", - "ts-mysql-migrate": "^1.0.2" + "reflect-metadata": "^0.1.13", + "ts-mysql-migrate": "^1.0.2", + "typeorm": "^0.2.38" } } diff --git a/database/src/index.ts b/database/src/index.ts index eec6712f6..6427a30a0 100644 --- a/database/src/index.ts +++ b/database/src/index.ts @@ -1,13 +1,15 @@ +import 'reflect-metadata' import { createPool, PoolConfig } from 'mysql' import { Migration } from 'ts-mysql-migrate' import CONFIG from './config' import prepare from './prepare' +import connection from './typeorm/connection' const run = async (command: string) => { // Database actions not supported by our migration library await prepare() - // Database connection + // Database connection for Migrations const poolConfig: PoolConfig = { host: CONFIG.DB_HOST, port: CONFIG.DB_PORT, @@ -26,6 +28,12 @@ const run = async (command: string) => { dir: CONFIG.MIGRATIONS_DIRECTORY, }) + // Database connection for TypeORM + const con = await connection() + if (!con || !con.isConnected) { + throw new Error(`Couldn't open connection to database`) + } + await migration.initialize() // Execute command diff --git a/database/src/typeorm/connection.ts b/database/src/typeorm/connection.ts new file mode 100644 index 000000000..26aafc102 --- /dev/null +++ b/database/src/typeorm/connection.ts @@ -0,0 +1,24 @@ +import { createConnection, Connection } from 'typeorm' +import CONFIG from '../config' +import path from 'path' + +const connection = async (): Promise => { + let con = null + try { + con = await createConnection({ + name: 'default', + type: 'mysql', + host: CONFIG.DB_HOST, + port: CONFIG.DB_PORT, + username: CONFIG.DB_USER, + password: CONFIG.DB_PASSWORD, + database: CONFIG.DB_DATABASE, + entities: [path.join(__dirname, '..', '..', 'entity', '*.{ts,js}')], + synchronize: false, + }) + } catch (error) {} + + return con +} + +export default connection diff --git a/database/yarn.lock b/database/yarn.lock index eab1a9844..1afbc7f09 100644 --- a/database/yarn.lock +++ b/database/yarn.lock @@ -90,6 +90,11 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sqltools/formatter@^1.2.2": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20" + integrity sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg== + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -129,11 +134,21 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^16.7.1": +"@types/node@*": version "16.7.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-16.7.1.tgz#c6b9198178da504dfca1fd0be9b2e1002f1586f0" integrity sha512-ncRdc45SoYJ2H4eWU9ReDfp3vtFqDYhjOsKlFFUDEn8V1Bgr2RjYal8YT5byfadWIRluhPFU6JiDOl0H6Sl87A== +"@types/node@^16.10.3": + version "16.10.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.10.3.tgz#7a8f2838603ea314d1d22bb3171d899e15c57bd5" + integrity sha512-ho3Ruq+fFnBrZhUYI46n/bV2GjwzSkwuT4dTf0GkuNFmnb8nq4ny2z9JEVemFi6bdEJanHLlYfy9c6FN9B9McQ== + +"@types/zen-observable@0.8.3": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.3.tgz#781d360c282436494b32fe7d9f7f8e64b3118aa3" + integrity sha512-fbF6oTd4sGGy0xjHPKAt+eS2CrxJ3+6gQ3FGcBoIJR2TLAyCkCyI8JqZNy+FeON0AhVgNJoUumVoZQjBFUqHkw== + "@typescript-eslint/eslint-plugin@^4.29.2": version "4.29.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.2.tgz#f54dc0a32b8f61c6024ab8755da05363b733838d" @@ -260,6 +275,11 @@ ansi-colors@^4.1.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -270,6 +290,11 @@ ansi-regex@^5.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -284,6 +309,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@~3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -292,6 +322,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -304,6 +339,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + array-includes@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.3.tgz#c7f619b382ad2afaf5326cddfdc0afc61af7690a" @@ -339,6 +379,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + bignumber.js@9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" @@ -378,6 +423,14 @@ braces@^3.0.1, braces@~3.0.2: dependencies: fill-range "^7.0.1" +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -409,6 +462,17 @@ camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -426,7 +490,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -459,6 +523,27 @@ cli-boxes@^2.2.0: resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== +cli-highlight@^2.1.11: + version "2.1.11" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.11.tgz#49736fa452f0aaf4fae580e30acb26828d2dc1bf" + integrity sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg== + dependencies: + chalk "^4.0.0" + highlight.js "^10.7.1" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^16.0.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -624,6 +709,11 @@ dotenv@^10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^8.2.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" @@ -692,12 +782,17 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-goat@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== -escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= @@ -945,6 +1040,11 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +figlet@^1.1.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.2.tgz#dda34ff233c9a48e36fcff6741aeb5bafe49b634" + integrity sha512-WOn21V8AhyE1QqVfPIVxe3tupJacq1xGkPTB4iagT6o+P2cAgEOOwIxMftr4+ZCTI6d551ij9j61DFr0nsP2uQ== + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1006,6 +1106,11 @@ generate-function@^2.3.1: dependencies: is-property "^1.0.2" +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -1048,6 +1153,18 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.6: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^2.0.1: version "2.1.0" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" @@ -1096,6 +1213,13 @@ graceful-fs@^4.1.2: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + has-bigints@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" @@ -1135,6 +1259,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +highlight.js@^10.7.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + hosted-git-info@^2.1.4: version "2.8.9" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" @@ -1152,6 +1281,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" @@ -1193,7 +1327,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1392,6 +1526,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -1551,6 +1692,11 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1590,6 +1736,15 @@ mysql@^2.18.1: safe-buffer "5.1.2" sqlstring "2.3.1" +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + named-placeholders@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.2.tgz#ceb1fbff50b6b33492b5cf214ccf5e39cef3d0e8" @@ -1645,6 +1800,11 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + object-inspect@^1.11.0, object-inspect@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" @@ -1734,6 +1894,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parent-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" + integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc= + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -1742,6 +1907,23 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" + integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== + +parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -1912,6 +2094,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regexpp@^3.0.0, regexpp@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" @@ -1931,6 +2118,11 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" @@ -1980,11 +2172,21 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@>=0.6.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + semver-diff@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" @@ -2014,6 +2216,14 @@ seq-queue@^0.0.5: resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" integrity sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4= +sha.js@^2.4.11: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -2136,6 +2346,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + strip-ansi@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -2165,6 +2382,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2201,6 +2423,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" @@ -2260,6 +2496,11 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -2291,6 +2532,29 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typeorm@^0.2.38: + version "0.2.38" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.38.tgz#2af08079919f6ab04cd17017f9faa2c8d5cd566f" + integrity sha512-M6Y3KQcAREQcphOVJciywf4mv6+A0I/SeR+lWNjKsjnQ+a3XcMwGYMGL0Jonsx3H0Cqlf/3yYqVki1jIXSK/xg== + dependencies: + "@sqltools/formatter" "^1.2.2" + app-root-path "^3.0.0" + buffer "^6.0.3" + chalk "^4.1.0" + cli-highlight "^2.1.11" + debug "^4.3.1" + dotenv "^8.2.0" + glob "^7.1.6" + js-yaml "^4.0.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^2.1.0" + xml2js "^0.4.23" + yargonaut "^1.1.4" + yargs "^17.0.1" + zen-observable-ts "^1.0.0" + typescript@^4.3.5: version "4.3.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" @@ -2401,6 +2665,15 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -2421,6 +2694,24 @@ xdg-basedir@^4.0.0: resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xml2js@^0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -2431,7 +2722,60 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yargonaut@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" + integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== + dependencies: + chalk "^1.1.1" + figlet "^1.1.1" + parent-require "^1.0.0" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^16.0.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.0.1: + version "17.2.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.2.1.tgz#e2c95b9796a0e1f7f3bf4427863b42e0418191ea" + integrity sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +zen-observable-ts@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83" + integrity sha512-1h4zlLSqI2cRLPJUHJFL8bCWHhkpuXkF+dbGkRaWjgDIG26DmzyshUMrdV/rL3UnR+mhaX4fRq8LPouq0MYYIA== + dependencies: + "@types/zen-observable" "0.8.3" + zen-observable "0.8.15" + +zen-observable@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.15.tgz#96415c512d8e3ffd920afd3889604e30b9eaac15" + integrity sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ== From f6d994b6233e63c7deb3a8d1ca2805cf705c0093 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:22:25 +0200 Subject: [PATCH 013/158] define entity alias --- backend/tsconfig.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 432297d60..7e36dfe5d 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -46,7 +46,9 @@ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + "@entity/*": ["../database/entity/*"] + }, // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ From 304ba9e23d375ca774c39a440ce3892232c2088d Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:22:35 +0200 Subject: [PATCH 014/158] corrected all entity imports --- backend/src/graphql/resolver/TransactionResolver.ts | 6 +++--- backend/src/graphql/resolver/UserResolver.ts | 2 +- backend/src/typeorm/getDBVersion.ts | 2 +- backend/src/typeorm/repository/Balance.ts | 2 +- backend/src/typeorm/repository/Transaction.ts | 2 +- backend/src/typeorm/repository/User.ts | 2 +- backend/src/typeorm/repository/UserSettingRepository.ts | 2 +- backend/src/typeorm/repository/UserTransaction.ts | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index ec52bef8b..d2191c155 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -19,9 +19,9 @@ import { UserRepository } from '../../typeorm/repository/User' import { UserTransactionRepository } from '../../typeorm/repository/UserTransaction' import { TransactionRepository } from '../../typeorm/repository/Transaction' -import { User as dbUser } from '../../typeorm/entity/User' -import { UserTransaction as dbUserTransaction } from '../../typeorm/entity/UserTransaction' -import { Transaction as dbTransaction } from '../../typeorm/entity/Transaction' +import { User as dbUser } from '@entity/User' +import { UserTransaction as dbUserTransaction } from '@entity/UserTransaction' +import { Transaction as dbTransaction } from '@entity/Transaction' import { apiPost } from '../../apis/HttpRequest' import { roundFloorFrom4 } from '../../util/round' diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 820e493c6..ab66a78df 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -9,7 +9,7 @@ import { LoginViaVerificationCode } from '../model/LoginViaVerificationCode' import { SendPasswordResetEmailResponse } from '../model/SendPasswordResetEmailResponse' import { UpdateUserInfosResponse } from '../model/UpdateUserInfosResponse' import { User } from '../model/User' -import { User as DbUser } from '../../typeorm/entity/User' +import { User as DbUser } from '@entity/User' import encode from '../../jwt/encode' import ChangePasswordArgs from '../arg/ChangePasswordArgs' import CheckUsernameArgs from '../arg/CheckUsernameArgs' diff --git a/backend/src/typeorm/getDBVersion.ts b/backend/src/typeorm/getDBVersion.ts index 32f0ab90d..502109fde 100644 --- a/backend/src/typeorm/getDBVersion.ts +++ b/backend/src/typeorm/getDBVersion.ts @@ -1,4 +1,4 @@ -import { Migration } from './entity/Migration' +import { Migration } from "@entity/Migration" const getDBVersion = async (): Promise => { try { diff --git a/backend/src/typeorm/repository/Balance.ts b/backend/src/typeorm/repository/Balance.ts index 0938191e0..b7c20650f 100644 --- a/backend/src/typeorm/repository/Balance.ts +++ b/backend/src/typeorm/repository/Balance.ts @@ -1,5 +1,5 @@ import { EntityRepository, Repository } from 'typeorm' -import { Balance } from '../entity/Balance' +import { Balance } from '@entity/Balance' @EntityRepository(Balance) export class BalanceRepository extends Repository { diff --git a/backend/src/typeorm/repository/Transaction.ts b/backend/src/typeorm/repository/Transaction.ts index 2c26fe7b5..ab4e301c7 100644 --- a/backend/src/typeorm/repository/Transaction.ts +++ b/backend/src/typeorm/repository/Transaction.ts @@ -1,5 +1,5 @@ import { EntityRepository, Repository } from 'typeorm' -import { Transaction } from '../entity/Transaction' +import { Transaction } from '@entity/Transaction' @EntityRepository(Transaction) export class TransactionRepository extends Repository { diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts index 2a2299a4c..f84d45363 100644 --- a/backend/src/typeorm/repository/User.ts +++ b/backend/src/typeorm/repository/User.ts @@ -1,5 +1,5 @@ import { EntityRepository, Repository } from 'typeorm' -import { User } from '../entity/User' +import { User } from '@entity/User' @EntityRepository(User) export class UserRepository extends Repository { diff --git a/backend/src/typeorm/repository/UserSettingRepository.ts b/backend/src/typeorm/repository/UserSettingRepository.ts index 81dde702a..80c44802b 100644 --- a/backend/src/typeorm/repository/UserSettingRepository.ts +++ b/backend/src/typeorm/repository/UserSettingRepository.ts @@ -1,5 +1,5 @@ import { EntityRepository, Repository } from 'typeorm' -import { UserSetting } from '../entity/UserSetting' +import { UserSetting } from '@entity/UserSetting' import { Setting } from '../../graphql/enum/Setting' import { isStringBoolean } from '../../util/validate' diff --git a/backend/src/typeorm/repository/UserTransaction.ts b/backend/src/typeorm/repository/UserTransaction.ts index 58fe8d3e7..95362c0c6 100644 --- a/backend/src/typeorm/repository/UserTransaction.ts +++ b/backend/src/typeorm/repository/UserTransaction.ts @@ -1,6 +1,6 @@ import { EntityRepository, Repository } from 'typeorm' import { Order } from '../../graphql/enum/Order' -import { UserTransaction } from '../entity/UserTransaction' +import { UserTransaction } from '@entity/UserTransaction' @EntityRepository(UserTransaction) export class UserTransactionRepository extends Repository { From d348706f1611aab11c17c1aa9ab4e22f846cd054 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:33:13 +0200 Subject: [PATCH 015/158] include the entity models in the docker build --- backend/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/Dockerfile b/backend/Dockerfile index fc853eb63..02f772db6 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -62,6 +62,8 @@ FROM base as build # Copy everything COPY . . +# Also copy external enities from database +COPY ../database/entity/ ../database/entity/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive # npm build From a35d0dfff401656f6b53f3db2166163d522dfeb5 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:44:37 +0200 Subject: [PATCH 016/158] reshape build context to fix out of context error when copying database entities --- backend/Dockerfile | 4 ++-- docker-compose.yml | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 02f772db6..a8554fbb5 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -61,9 +61,9 @@ CMD /bin/sh -c "yarn install && yarn run dev" FROM base as build # Copy everything -COPY . . +COPY ./backend ./ # Also copy external enities from database -COPY ../database/entity/ ../database/entity/ +COPY ./database/entity/ ../database/entity/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive # npm build diff --git a/docker-compose.yml b/docker-compose.yml index 15a47111c..b85d155fe 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -54,7 +54,10 @@ services: backend: image: gradido/backend:latest build: - context: ./backend + # since we have to include the entities from ./database we cannot define the context as ./backend + # this might blow build image size to the moon ?! + context: ./ + dockerfile: ./backend/Dockerfile target: production networks: - internal-net From 5616c307f8975dc17a1399a5270d108b7b00ceb2 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:46:58 +0200 Subject: [PATCH 017/158] docker: make backend a folder not a file(?) --- backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index a8554fbb5..ef84d0ba9 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -61,7 +61,7 @@ CMD /bin/sh -c "yarn install && yarn run dev" FROM base as build # Copy everything -COPY ./backend ./ +COPY ./backend/ ./ # Also copy external enities from database COPY ./database/entity/ ../database/entity/ # npm install From f76e056ac1bc983907ab5c58ab8bf462b1bee5b7 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 13:51:40 +0200 Subject: [PATCH 018/158] corrected workflows to use the root folder context --- .github/workflows/publish.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ee710c57a..55e28db4b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -72,7 +72,7 @@ jobs: ########################################################################## - name: Backend | Build `production` image run: | - docker build --target production -t "gradido/backend:latest" -t "gradido/backend:production" -t "gradido/backend:${VERSION}" -t "gradido/backend:${BUILD_VERSION}" backend/ + docker build -f ./backend/Dockerfile --target production -t "gradido/backend:latest" -t "gradido/backend:production" -t "gradido/backend:${VERSION}" -t "gradido/backend:${BUILD_VERSION}" . docker save "gradido/backend" > /tmp/backend.tar - name: Upload Artifact uses: actions/upload-artifact@v2 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index de9939101..035b3c470 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,7 +47,7 @@ jobs: ########################################################################## - name: Backend | Build `test` image run: | - docker build --target test -t "gradido/backend:test" backend/ + docker build -f ./backend/Dockerfile --target test -t "gradido/backend:test" . docker save "gradido/backend:test" > /tmp/backend.tar - name: Upload Artifact uses: actions/upload-artifact@v2 From da8d32f01e24498c63f8f73255a1cb10733533ae Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 14:10:32 +0200 Subject: [PATCH 019/158] try to mount the nodemodules --- backend/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/Dockerfile b/backend/Dockerfile index ef84d0ba9..a960e08b7 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -64,6 +64,8 @@ FROM base as build COPY ./backend/ ./ # Also copy external enities from database COPY ./database/entity/ ../database/entity/ +RUN sudo mount -o bind ./node_modules ../node_modules/ + # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive # npm build From 9621b97aebea9238d16535faee7d75f6684ee800 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 14:11:45 +0200 Subject: [PATCH 020/158] remove sudo? --- backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index a960e08b7..468dde675 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -64,7 +64,7 @@ FROM base as build COPY ./backend/ ./ # Also copy external enities from database COPY ./database/entity/ ../database/entity/ -RUN sudo mount -o bind ./node_modules ../node_modules/ +RUN mount -o bind ./node_modules ../node_modules/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive From 88eb079b7bb25bd0127ad2acd12a9d46d898fa5f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 14:16:14 +0200 Subject: [PATCH 021/158] install sudo --- backend/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 468dde675..93e1a70c7 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -31,8 +31,8 @@ LABEL org.label-schema.schema-version="1.0" LABEL maintainer="support@gradido.net" # Install Additional Software -## install: git -#RUN apk --no-cache add git +## install: sudo +RUN apk --no-cache add sudo # Settings ## Expose Container Port @@ -64,7 +64,7 @@ FROM base as build COPY ./backend/ ./ # Also copy external enities from database COPY ./database/entity/ ../database/entity/ -RUN mount -o bind ./node_modules ../node_modules/ +RUN sudo mount -o bind ./node_modules ../node_modules/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive From df43ea4f7989ca6917076050ed53cadf99cf2909 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 14:18:30 +0200 Subject: [PATCH 022/158] also create directory --- backend/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 93e1a70c7..4dfe1c10f 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -63,7 +63,8 @@ FROM base as build # Copy everything COPY ./backend/ ./ # Also copy external enities from database -COPY ./database/entity/ ../database/entity/ +COPY ./database/entity/ ../database/entity/ +RUN mkdir -p ../node_modules/ RUN sudo mount -o bind ./node_modules ../node_modules/ # npm install From f92573d672c1b2c01e6b6cb54fd1ea45801ead70 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 14:23:12 +0200 Subject: [PATCH 023/158] copy modules after install --- backend/Dockerfile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 4dfe1c10f..0a31d13b8 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -64,11 +64,14 @@ FROM base as build COPY ./backend/ ./ # Also copy external enities from database COPY ./database/entity/ ../database/entity/ -RUN mkdir -p ../node_modules/ -RUN sudo mount -o bind ./node_modules ../node_modules/ +# RUN mkdir -p ../node_modules/ +# RUN sudo mount -o bind ./node_modules ../node_modules/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive + +COPY ./backend/node_modules ../node_modules + # npm build RUN yarn run build From 4988a9c2e4f970503a3665255d347d9814109698 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 14:25:19 +0200 Subject: [PATCH 024/158] correct path --- backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 0a31d13b8..6dec1cb37 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -70,7 +70,7 @@ COPY ./database/entity/ ../database/entity/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive -COPY ./backend/node_modules ../node_modules +COPY ./node_modules ../node_modules # npm build RUN yarn run build From 20db890ac7fb86a39c8f14b7bfb18d546625bb42 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Sat, 9 Oct 2021 14:29:17 +0200 Subject: [PATCH 025/158] try to use tsconfig instead --- backend/Dockerfile | 4 ---- database/tsconfig.json | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 6dec1cb37..d13c4bdd7 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -64,14 +64,10 @@ FROM base as build COPY ./backend/ ./ # Also copy external enities from database COPY ./database/entity/ ../database/entity/ -# RUN mkdir -p ../node_modules/ -# RUN sudo mount -o bind ./node_modules ../node_modules/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive -COPY ./node_modules ../node_modules - # npm build RUN yarn run build diff --git a/database/tsconfig.json b/database/tsconfig.json index d48524ba5..250ec5201 100644 --- a/database/tsconfig.json +++ b/database/tsconfig.json @@ -47,7 +47,7 @@ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + "rootDirs": [".", "../database"], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ From 546d371139a05f5574914bb31c549e54460c2d6b Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 10 Oct 2021 15:25:01 +0200 Subject: [PATCH 026/158] check always for hasElopage - put check into async task to let it run at the same time as the password check --- backend/src/graphql/arg/UnsecureLoginArgs.ts | 3 --- backend/src/graphql/resolver/UserResolver.ts | 3 +-- .../cpp/JSONInterface/JsonUnsecureLogin.cpp | 18 +++++++----------- .../src/cpp/model/table/ElopageBuy.cpp | 8 ++++++++ login_server/src/cpp/model/table/ElopageBuy.h | 16 ++++++++++++++++ login_server/src/cpp/tasks/CPUTask.h | 2 ++ 6 files changed, 34 insertions(+), 16 deletions(-) diff --git a/backend/src/graphql/arg/UnsecureLoginArgs.ts b/backend/src/graphql/arg/UnsecureLoginArgs.ts index 925cde8a4..9e9cde0d9 100644 --- a/backend/src/graphql/arg/UnsecureLoginArgs.ts +++ b/backend/src/graphql/arg/UnsecureLoginArgs.ts @@ -7,7 +7,4 @@ export default class UnsecureLoginArgs { @Field(() => String) password: string - - @Field(() => Boolean) - hasElopage?: boolean } diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index a6b7ae724..a7e7e39b5 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -32,14 +32,13 @@ export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) async login( - @Args() { email, password, hasElopage }: UnsecureLoginArgs, + @Args() { email, password }: UnsecureLoginArgs, @Ctx() context: any, ): Promise { email = email.trim().toLowerCase() const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { email, password, - hasElopage, }) // if there is no user, throw an authentication error diff --git a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp index 7950fb441..5c06e27b8 100644 --- a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp +++ b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp @@ -25,7 +25,6 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) std::string email; std::string username; std::string password; - bool hasElopage = false; // if is json object if (params.type() == typeid(Poco::JSON::Object::Ptr)) { @@ -41,11 +40,6 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) auto email_obj = paramJsonObject->get("email"); auto username_obj = paramJsonObject->get("username"); - auto hasElopage_obj = paramJsonObject->get("hasElopage"); - if (!hasElopage_obj.isEmpty()) { - hasElopage_obj.convert(hasElopage); - } - if (!email_obj.isEmpty()) { email_obj.convert(email); } @@ -113,6 +107,10 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) USER_COMPLETE, USER_DISABLED */ + // run query for checking if user has already an account async + Poco::AutoPtr hasElopageTask = new model::table::UserHasElopageTask(email); + hasElopageTask->scheduleTask(hasElopageTask); + auto user_state = session->loadUser(email, password); auto user_model = session->getNewUser()->getModel(); Poco::JSON::Array infos; @@ -148,11 +146,9 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) session->setClientIp(mClientIP); if(infos.size() > 0) { result->set("info", infos); - } - if (hasElopage) { - auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); - result->set("hasElopage", elopage_buy->isExistInDB("email", user_model->getEmail())); - } + } + AWAIT(hasElopageTask) + result->set("hasElopage", hasElopageTask->hasElopage()); return result; default: result->set("state", "error"); diff --git a/login_server/src/cpp/model/table/ElopageBuy.cpp b/login_server/src/cpp/model/table/ElopageBuy.cpp index c056ecdc9..6ee23d2ee 100644 --- a/login_server/src/cpp/model/table/ElopageBuy.cpp +++ b/login_server/src/cpp/model/table/ElopageBuy.cpp @@ -108,6 +108,14 @@ namespace model { return select; } + + // --------------------------- Tasks -------------------------------------------- + int UserHasElopageTask::run() + { + auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); + bool hasElopage = elopage_buy->isExistInDB("email", mEmail); + return 0; + } } } diff --git a/login_server/src/cpp/model/table/ElopageBuy.h b/login_server/src/cpp/model/table/ElopageBuy.h index 83b2b477b..008a11a52 100644 --- a/login_server/src/cpp/model/table/ElopageBuy.h +++ b/login_server/src/cpp/model/table/ElopageBuy.h @@ -52,6 +52,22 @@ namespace model { Poco::DateTime mSuccessDate; std::string mEvent; }; + + + // check for user existing + class UserHasElopageTask : public UniLib::controller::CPUTask + { + public: + UserHasElopageTask(std::string email) : mEmail(email), mHasElopage(false) {} + + int run(); + const char* getResourceType() const { return "UserHasElopageTask"; }; + bool hasElopage() const { return mHasElopage; } + + protected: + std::string mEmail; + bool mHasElopage; + }; } } diff --git a/login_server/src/cpp/tasks/CPUTask.h b/login_server/src/cpp/tasks/CPUTask.h index e1c1d5cc0..f96e5d9ec 100644 --- a/login_server/src/cpp/tasks/CPUTask.h +++ b/login_server/src/cpp/tasks/CPUTask.h @@ -68,5 +68,7 @@ namespace UniLib { } } +#define AWAIT(task) while (!hasElopageTask->isTaskFinished()) { Poco::Thread::sleep(10); } + #endif //__DR_UNIVERSUM_LIB_CONTROLLER_CPU_TASK_H__ \ No newline at end of file From 7699700b933c58bc55c5cc2004dd6163ad551bb3 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 10 Oct 2021 15:29:44 +0200 Subject: [PATCH 027/158] fix lint --- backend/src/graphql/resolver/UserResolver.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index a7e7e39b5..24e2c2c64 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -31,10 +31,7 @@ import { UserRepository } from '../../typeorm/repository/User' export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) - async login( - @Args() { email, password }: UnsecureLoginArgs, - @Ctx() context: any, - ): Promise { + async login(@Args() { email, password }: UnsecureLoginArgs, @Ctx() context: any): Promise { email = email.trim().toLowerCase() const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { email, From 909c7e3a9a79c6eca81e8e7d69cded08b31eba30 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Sun, 10 Oct 2021 15:29:44 +0200 Subject: [PATCH 028/158] fix lint --- backend/src/graphql/resolver/UserResolver.ts | 10 ++-------- docu/login_server.api.md | 2 +- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index a7e7e39b5..bbb609d40 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -31,15 +31,9 @@ import { UserRepository } from '../../typeorm/repository/User' export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) - async login( - @Args() { email, password }: UnsecureLoginArgs, - @Ctx() context: any, - ): Promise { + async login(@Args() { email, password }: UnsecureLoginArgs, @Ctx() context: any): Promise { email = email.trim().toLowerCase() - const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { - email, - password, - }) + const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { email, password }) // if there is no user, throw an authentication error if (!result.success) { diff --git a/docu/login_server.api.md b/docu/login_server.api.md index b56852010..c220dd427 100644 --- a/docu/login_server.api.md +++ b/docu/login_server.api.md @@ -39,7 +39,7 @@ with: { "email": "max.musterman@gmail.de", "username": "Maxilein", - "password": "123abcDE&" + "password": "123abcDE&", "hasElopage": true } ``` From 2c90bbe314d3158ce20ed9973e378c266023df9a Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sun, 10 Oct 2021 16:37:07 +0200 Subject: [PATCH 029/158] add check for empty user list --- backend/src/typeorm/repository/User.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts index 2a2299a4c..86f7119c4 100644 --- a/backend/src/typeorm/repository/User.ts +++ b/backend/src/typeorm/repository/User.ts @@ -10,6 +10,7 @@ export class UserRepository extends Repository { } async getUsersIndiced(userIds: number[]): Promise { + if (!userIds.length) return [] const users = await this.createQueryBuilder('user') .select(['user.id', 'user.firstName', 'user.lastName', 'user.email']) .where('user.id IN (:...users)', { users: userIds }) From 660e1e4b68f040f44fddf494966a0b1fc64e09ca Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Sun, 10 Oct 2021 17:27:42 +0200 Subject: [PATCH 030/158] add call for checkpid on gdt server --- backend/src/graphql/resolver/GdtResolver.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 9ca9421f6..c99c7e6c7 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { Resolver, Query, Args, Ctx, Authorized } from 'type-graphql' +import { Resolver, Query, Args, Ctx, Authorized, Arg } from 'type-graphql' import { getCustomRepository } from 'typeorm' import CONFIG from '../../config' import { GdtEntryList } from '../model/GdtEntryList' @@ -32,4 +32,16 @@ export class GdtResolver { } return new GdtEntryList(resultGDT.data) } + + @Authorized() + @Query(() => Number) + // eslint-disable-next-line @typescript-eslint/no-explicit-any + async checkPid(@Arg('pid') id: number): Promise { + // load user + const resultPID = await apiGet(`${CONFIG.GDT_API_URL}/publishers/checkPidApi/${id}`) + if (!resultPID.success) { + throw new Error(resultPID.data) + } + return resultPID + } } From febd997db37e570ab86648fe0ebe2a5848dbb726 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 12:07:57 +0200 Subject: [PATCH 031/158] this seems to work quite good locally with both node_modules downloaded --- backend/package.json | 4 + backend/src/index.ts | 1 + backend/tsconfig.json | 11 ++- backend/yarn.lock | 5 ++ database.d.ts | 165 +++++++++++++++++++++++++++++++++++++++++ database.d.ts.map | 1 + database.tsbuildinfo | 1 + database/tsconfig.json | 17 +++-- 8 files changed, 195 insertions(+), 10 deletions(-) create mode 100644 database.d.ts create mode 100644 database.d.ts.map create mode 100644 database.tsbuildinfo diff --git a/backend/package.json b/backend/package.json index 4620db4ad..73c0f7513 100644 --- a/backend/package.json +++ b/backend/package.json @@ -27,6 +27,7 @@ "jest": "^27.2.4", "jsonwebtoken": "^8.5.1", "libsodium-wrappers": "^0.7.9", + "module-alias": "^2.2.2", "mysql2": "^2.3.0", "reflect-metadata": "^0.1.13", "ts-jest": "^27.0.5", @@ -50,5 +51,8 @@ "prettier": "^2.3.1", "ts-node": "^10.0.0", "typescript": "^4.3.4" + }, + "_moduleAliases": { + "@entity" : "../database/build/entity" } } diff --git a/backend/src/index.ts b/backend/src/index.ts index 916fe0550..9dd75dce5 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import 'reflect-metadata' +import 'module-alias/register' import express from 'express' import { ApolloServer } from 'apollo-server-express' diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 7e36dfe5d..15eb704ba 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -45,7 +45,7 @@ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ "@entity/*": ["../database/entity/*"] }, @@ -70,5 +70,12 @@ /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } + }, + "references": [ + { + "path": "../database/tsconfig.json", + // add 'prepend' if you want to include the referenced project in your output file + // "prepend": true, + } + ] } diff --git a/backend/yarn.lock b/backend/yarn.lock index 11401ccf0..f884afe18 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -4116,6 +4116,11 @@ mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +module-alias@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.2.tgz#151cdcecc24e25739ff0aa6e51e1c5716974c0e0" + integrity sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q== + ms@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" diff --git a/database.d.ts b/database.d.ts new file mode 100644 index 000000000..3cda5e882 --- /dev/null +++ b/database.d.ts @@ -0,0 +1,165 @@ +/// +declare module "entity/0001-init_db/Balance" { + import { BaseEntity } from 'typeorm'; + export class Balance extends BaseEntity { + id: number; + userId: number; + modified: Date; + recordDate: Date; + amount: number; + } +} +declare module "entity/Balance" { + export { Balance } from "entity/0001-init_db/Balance"; +} +declare module "entity/0001-init_db/Migration" { + import { BaseEntity } from 'typeorm'; + export class Migration extends BaseEntity { + version: number; + fileName: string; + date: Date; + } +} +declare module "entity/Migration" { + export { Migration } from "entity/0001-init_db/Migration"; +} +declare module "entity/0001-init_db/TransactionCreation" { + import { BaseEntity, Timestamp } from 'typeorm'; + import { Transaction } from "entity/0001-init_db/Transaction"; + export class TransactionCreation extends BaseEntity { + id: number; + transactionId: number; + userId: number; + amount: number; + targetDate: Timestamp; + transaction: Transaction; + } +} +declare module "entity/0001-init_db/TransactionSendCoin" { + import { BaseEntity } from 'typeorm'; + import { Transaction } from "entity/0001-init_db/Transaction"; + export class TransactionSendCoin extends BaseEntity { + id: number; + transactionId: number; + senderPublic: Buffer; + userId: number; + recipiantPublic: Buffer; + recipiantUserId: number; + amount: number; + transaction: Transaction; + } +} +declare module "entity/0001-init_db/Transaction" { + import { BaseEntity } from 'typeorm'; + import { TransactionCreation } from "entity/0001-init_db/TransactionCreation"; + import { TransactionSendCoin } from "entity/0001-init_db/TransactionSendCoin"; + export class Transaction extends BaseEntity { + id: number; + transactionTypeId: number; + txHash: Buffer; + memo: string; + received: Date; + blockchainTypeId: number; + transactionSendCoin: TransactionSendCoin; + transactionCreation: TransactionCreation; + } +} +declare module "entity/Transaction" { + export { Transaction } from "entity/0001-init_db/Transaction"; +} +declare module "entity/TransactionCreation" { + export { TransactionCreation } from "entity/0001-init_db/TransactionCreation"; +} +declare module "entity/TransactionSendCoin" { + export { TransactionSendCoin } from "entity/0001-init_db/TransactionSendCoin"; +} +declare module "entity/0002-add_settings/UserSetting" { + import { BaseEntity } from 'typeorm'; + import { User } from "entity/0002-add_settings/User"; + export class UserSetting extends BaseEntity { + id: number; + userId: number; + user: User; + key: string; + value: string; + } +} +declare module "entity/0002-add_settings/User" { + import { BaseEntity } from 'typeorm'; + import { UserSetting } from "entity/0002-add_settings/UserSetting"; + export class User extends BaseEntity { + id: number; + pubkey: Buffer; + email: string; + firstName: string; + lastName: string; + username: string; + disabled: boolean; + settings: UserSetting[]; + } +} +declare module "entity/User" { + export { User } from "entity/0002-add_settings/User"; +} +declare module "entity/UserSetting" { + export { UserSetting } from "entity/0002-add_settings/UserSetting"; +} +declare module "entity/0001-init_db/UserTransaction" { + import { BaseEntity } from 'typeorm'; + export class UserTransaction extends BaseEntity { + id: number; + userId: number; + transactionId: number; + transactionTypeId: number; + balance: number; + balanceDate: Date; + } +} +declare module "entity/UserTransaction" { + export { UserTransaction } from "entity/0001-init_db/UserTransaction"; +} +declare module "entity/0001-init_db/User" { + import { BaseEntity } from 'typeorm'; + export class User extends BaseEntity { + id: number; + pubkey: Buffer; + email: string; + firstName: string; + lastName: string; + username: string; + disabled: boolean; + } +} +declare module "migrations/0001-init_db" { + export function upgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; + export function downgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; +} +declare module "migrations/0002-add_settings" { + export function upgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; + export function downgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; +} +declare module "src/config/index" { + const CONFIG: { + MIGRATIONS_TABLE: string; + MIGRATIONS_DIRECTORY: string; + DB_HOST: string; + DB_PORT: number; + DB_USER: string; + DB_PASSWORD: string; + DB_DATABASE: string; + }; + export default CONFIG; +} +declare module "src/prepare" { + const _default: () => Promise; + export default _default; +} +declare module "src/typeorm/connection" { + import { Connection } from 'typeorm'; + const connection: () => Promise; + export default connection; +} +declare module "src/index" { + import 'reflect-metadata'; +} +//# sourceMappingURL=database.d.ts.map \ No newline at end of file diff --git a/database.d.ts.map b/database.d.ts.map new file mode 100644 index 000000000..b5b67871a --- /dev/null +++ b/database.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["database/entity/0001-init_db/Balance.ts","database/entity/Balance.ts","database/entity/0001-init_db/Migration.ts","database/entity/Migration.ts","database/entity/0001-init_db/TransactionCreation.ts","database/entity/0001-init_db/TransactionSendCoin.ts","database/entity/0001-init_db/Transaction.ts","database/entity/Transaction.ts","database/entity/TransactionCreation.ts","database/entity/TransactionSendCoin.ts","database/entity/0002-add_settings/UserSetting.ts","database/entity/0002-add_settings/User.ts","database/entity/User.ts","database/entity/UserSetting.ts","database/entity/0001-init_db/UserTransaction.ts","database/entity/UserTransaction.ts","database/entity/0001-init_db/User.ts","database/migrations/0001-init_db.ts","database/migrations/0002-add_settings.ts","database/src/config/index.ts","database/src/prepare.ts","database/src/typeorm/connection.ts","database/src/index.ts"],"names":[],"mappings":";;IAAA,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAG5E,MAAM,OAAO,OAAQ,SAAQ,UAAU;QAErC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,QAAQ,EAAE,IAAI,CAAA;QAGd,UAAU,EAAE,IAAI,CAAA;QAGhB,MAAM,EAAE,MAAM,CAAA;KACf;;;IClBD,OAAO,EAAE,OAAO,EAAE,oCAA8B;;;ICAhD,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAG5E,MAAM,OAAO,SAAU,SAAQ,UAAU;QAEvC,OAAO,EAAE,MAAM,CAAA;QAGf,QAAQ,EAAE,MAAM,CAAA;QAGhB,IAAI,EAAE,IAAI,CAAA;KACX;;;ICZD,OAAO,EAAE,SAAS,EAAE,sCAAgC;;;ICApD,OAAO,EACL,UAAU,EAIV,SAAS,EAGV,MAAM,SAAS,CAAA;IAChB,OAAO,EAAE,WAAW,EAAE,wCAAqB;IAG3C,MAAM,OAAO,mBAAoB,SAAQ,UAAU;QAEjD,EAAE,EAAE,MAAM,CAAA;QAGV,aAAa,EAAE,MAAM,CAAA;QAGrB,MAAM,EAAE,MAAM,CAAA;QAGd,MAAM,EAAE,MAAM,CAAA;QAGd,UAAU,EAAE,SAAS,CAAA;QAIrB,WAAW,EAAE,WAAW,CAAA;KACzB;;;IC/BD,OAAO,EAAE,UAAU,EAAgE,MAAM,SAAS,CAAA;IAClG,OAAO,EAAE,WAAW,EAAE,wCAAqB;IAG3C,MAAM,OAAO,mBAAoB,SAAQ,UAAU;QAEjD,EAAE,EAAE,MAAM,CAAA;QAGV,aAAa,EAAE,MAAM,CAAA;QAGrB,YAAY,EAAE,MAAM,CAAA;QAGpB,MAAM,EAAE,MAAM,CAAA;QAGd,eAAe,EAAE,MAAM,CAAA;QAGvB,eAAe,EAAE,MAAM,CAAA;QAGvB,MAAM,EAAE,MAAM,CAAA;QAId,WAAW,EAAE,WAAW,CAAA;KACzB;;;IC7BD,OAAO,EAAE,UAAU,EAAoD,MAAM,SAAS,CAAA;IACtF,OAAO,EAAE,mBAAmB,EAAE,gDAA6B;IAC3D,OAAO,EAAE,mBAAmB,EAAE,gDAA6B;IAG3D,MAAM,OAAO,WAAY,SAAQ,UAAU;QAEzC,EAAE,EAAE,MAAM,CAAA;QAGV,iBAAiB,EAAE,MAAM,CAAA;QAGzB,MAAM,EAAE,MAAM,CAAA;QAGd,IAAI,EAAE,MAAM,CAAA;QAGZ,QAAQ,EAAE,IAAI,CAAA;QAGd,gBAAgB,EAAE,MAAM,CAAA;QAGxB,mBAAmB,EAAE,mBAAmB,CAAA;QAGxC,mBAAmB,EAAE,mBAAmB,CAAA;KACzC;;;IC7BD,OAAO,EAAE,WAAW,EAAE,wCAAkC;;;ICAxD,OAAO,EAAE,mBAAmB,EAAE,gDAA0C;;;ICAxE,OAAO,EAAE,mBAAmB,EAAE,gDAA0C;;;ICAxE,OAAO,EAAE,UAAU,EAAqD,MAAM,SAAS,CAAA;IACvF,OAAO,EAAE,IAAI,EAAE,sCAAc;IAG7B,MAAM,OAAO,WAAY,SAAQ,UAAU;QAEzC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,IAAI,EAAE,IAAI,CAAA;QAGV,GAAG,EAAE,MAAM,CAAA;QAGX,KAAK,EAAE,MAAM,CAAA;KACd;;;ICnBD,OAAO,EAAE,UAAU,EAAqD,MAAM,SAAS,CAAA;IACvF,OAAO,EAAE,WAAW,EAAE,6CAAqB;IAI3C,MAAM,OAAO,IAAK,SAAQ,UAAU;QAElC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,KAAK,EAAE,MAAM,CAAA;QAGb,SAAS,EAAE,MAAM,CAAA;QAGjB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,OAAO,CAAA;QAGjB,QAAQ,EAAE,WAAW,EAAE,CAAA;KACxB;;;IC7BD,OAAO,EAAE,IAAI,EAAE,sCAAgC;;;ICA/C,OAAO,EAAE,WAAW,EAAE,6CAAuC;;;ICA7D,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAG5E,MAAM,OAAO,eAAgB,SAAQ,UAAU;QAE7C,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,aAAa,EAAE,MAAM,CAAA;QAGrB,iBAAiB,EAAE,MAAM,CAAA;QAGzB,OAAO,EAAE,MAAM,CAAA;QAGf,WAAW,EAAE,IAAI,CAAA;KAClB;;;ICrBD,OAAO,EAAE,eAAe,EAAE,4CAAsC;;;ICAhE,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAI5E,MAAM,OAAO,IAAK,SAAQ,UAAU;QAElC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,KAAK,EAAE,MAAM,CAAA;QAGb,SAAS,EAAE,MAAM,CAAA;QAGjB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,OAAO,CAAA;KAClB;;;ICdD,gBAAsB,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBA2S5F;IAED,gBAAsB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBA6B9F;;;IC1UD,gBAAsB,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBAS5F;IAED,gBAAsB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBAG9F;;;ICPD,MAAM,MAAM;;;;;;;;KAAiC,CAAA;IAE7C,eAAe,MAAM,CAAA;;;0BCTI,QAAQ,IAAI,CAAC;IAAtC,wBA8BC;;;ICzCD,OAAO,EAAoB,UAAU,EAAE,MAAM,SAAS,CAAA;IAItD,MAAM,UAAU,QAAa,QAAQ,UAAU,GAAG,IAAI,CAiBrD,CAAA;IAED,eAAe,UAAU,CAAA;;;ICvBzB,OAAO,kBAAkB,CAAA"} \ No newline at end of file diff --git a/database.tsbuildinfo b/database.tsbuildinfo new file mode 100644 index 000000000..e6bed655d --- /dev/null +++ b/database.tsbuildinfo @@ -0,0 +1 @@ +{"bundle":{"commonSourceDirectory":"./database","sourceFiles":["./database/entity/0001-init_db/Balance.ts","./database/entity/Balance.ts","./database/entity/0001-init_db/Migration.ts","./database/entity/Migration.ts","./database/entity/0001-init_db/TransactionCreation.ts","./database/entity/0001-init_db/TransactionSendCoin.ts","./database/entity/0001-init_db/Transaction.ts","./database/entity/Transaction.ts","./database/entity/TransactionCreation.ts","./database/entity/TransactionSendCoin.ts","./database/entity/0002-add_settings/UserSetting.ts","./database/entity/0002-add_settings/User.ts","./database/entity/User.ts","./database/entity/UserSetting.ts","./database/entity/0001-init_db/UserTransaction.ts","./database/entity/UserTransaction.ts","./database/entity/0001-init_db/User.ts","./database/migrations/0001-init_db.ts","./database/migrations/0002-add_settings.ts","./database/src/config/index.ts","./database/src/prepare.ts","./database/src/typeorm/connection.ts","./database/src/index.ts"],"js":{"sections":[{"pos":0,"end":762,"kind":"emitHelpers","data":"typescript:extends"},{"pos":763,"end":1334,"kind":"emitHelpers","data":"typescript:decorate"},{"pos":1335,"end":1511,"kind":"emitHelpers","data":"typescript:metadata"},{"pos":1512,"end":2192,"kind":"emitHelpers","data":"typescript:awaiter"},{"pos":2193,"end":3983,"kind":"emitHelpers","data":"typescript:generator"},{"pos":3984,"end":4366,"kind":"emitHelpers","data":"typescript:assign"},{"pos":4367,"end":65553,"kind":"text"}],"sources":{"helpers":["typescript:extends","typescript:decorate","typescript:metadata","typescript:awaiter","typescript:generator","typescript:assign"]}},"dts":{"sections":[{"pos":0,"end":30,"kind":"type","data":"node"},{"pos":31,"end":5388,"kind":"text"}]}},"version":"4.3.4"} \ No newline at end of file diff --git a/database/tsconfig.json b/database/tsconfig.json index 250ec5201..102d9112f 100644 --- a/database/tsconfig.json +++ b/database/tsconfig.json @@ -4,19 +4,19 @@ /* Basic Options */ // "incremental": true, /* Enable incremental compilation */ - "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */ + "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */ "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ // "lib": [], /* Specify library files to be included in the compilation. */ // "allowJs": true, /* Allow javascript files to be compiled. */ // "checkJs": true, /* Report errors in .js files. */ // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outFile": "./build/outfile.js", /* Concatenate and emit output to single file. */ "outDir": "./build", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ + "composite": true, /* Enable project compilation */ // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ @@ -44,10 +44,10 @@ // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - "rootDirs": [".", "../database"], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "rootDirs": [".", "../database"], /* List of root folders whose combined content represents the structure of the project at runtime. */ // "typeRoots": [], /* List of folders to include type definitions from. */ // "types": [], /* Type declaration files to be included in compilation. */ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ @@ -68,5 +68,6 @@ /* Advanced Options */ "skipLibCheck": true, /* Skip type checking of declaration files. */ "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ - } + }, + "references": [] /* Any project that is referenced must itself have a `references` array (which may be empty). */ } From 2799a87b3b43ab77e3fbc7869721d9229f9a4ed1 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 12:09:06 +0200 Subject: [PATCH 032/158] Update backend/src/typeorm/getDBVersion.ts Co-authored-by: einhornimmond --- backend/src/typeorm/getDBVersion.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/typeorm/getDBVersion.ts b/backend/src/typeorm/getDBVersion.ts index 502109fde..104ac124c 100644 --- a/backend/src/typeorm/getDBVersion.ts +++ b/backend/src/typeorm/getDBVersion.ts @@ -1,4 +1,4 @@ -import { Migration } from "@entity/Migration" +import { Migration } from '@entity/Migration' const getDBVersion = async (): Promise => { try { From 78b0068362825ea701ebff5def1b0c82707ad3e3 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 12:33:31 +0200 Subject: [PATCH 033/158] copy also database project as a whole into docker image --- backend/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index d13c4bdd7..9686cf88c 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -60,10 +60,10 @@ CMD /bin/sh -c "yarn install && yarn run dev" ################################################################################## FROM base as build -# Copy everything +# Copy everything from backend COPY ./backend/ ./ -# Also copy external enities from database -COPY ./database/entity/ ../database/entity/ +# Copy everything from database +COPY ./database/ ../database/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive From 119407ec2e1ae0db1be7de0ccdecd68cc756ef7e Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 12:36:44 +0200 Subject: [PATCH 034/158] also install database packages --- backend/Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/Dockerfile b/backend/Dockerfile index 9686cf88c..431380e4e 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -68,6 +68,9 @@ COPY ./database/ ../database/ # npm install RUN yarn install --production=false --frozen-lockfile --non-interactive +# npm install database +RUN cd ../database && yarn install --production=false --frozen-lockfile --non-interactive + # npm build RUN yarn run build From 3a5aa25fec6108608aeb4fb645a37cd5559761b4 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Mon, 11 Oct 2021 13:11:50 +0200 Subject: [PATCH 035/158] update variable names --- backend/src/graphql/resolver/GdtResolver.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index c99c7e6c7..7ffc47e95 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -36,12 +36,12 @@ export class GdtResolver { @Authorized() @Query(() => Number) // eslint-disable-next-line @typescript-eslint/no-explicit-any - async checkPid(@Arg('pid') id: number): Promise { + async checkPid(@Arg('pid') pid: number): Promise { // load user - const resultPID = await apiGet(`${CONFIG.GDT_API_URL}/publishers/checkPidApi/${id}`) + const resultPID = await apiGet(`${CONFIG.GDT_API_URL}/publishers/checkPidApi/${pid}`) if (!resultPID.success) { throw new Error(resultPID.data) } - return resultPID + return resultPID.data.pid } } From cceca9d517462baa5791575efe675d52b159d465 Mon Sep 17 00:00:00 2001 From: Einhornimmond Date: Mon, 11 Oct 2021 13:12:26 +0200 Subject: [PATCH 036/158] change query name --- backend/src/graphql/resolver/GdtResolver.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 7ffc47e95..b4f9a512b 100644 --- a/backend/src/graphql/resolver/GdtResolver.ts +++ b/backend/src/graphql/resolver/GdtResolver.ts @@ -36,7 +36,7 @@ export class GdtResolver { @Authorized() @Query(() => Number) // eslint-disable-next-line @typescript-eslint/no-explicit-any - async checkPid(@Arg('pid') pid: number): Promise { + async existPid(@Arg('pid') pid: number): Promise { // load user const resultPID = await apiGet(`${CONFIG.GDT_API_URL}/publishers/checkPidApi/${pid}`) if (!resultPID.success) { From 2bd8ca252b6e2d2a9dc04feacbaea71914f9cf67 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 13:14:28 +0200 Subject: [PATCH 037/158] fixed test includes --- backend/jest.config.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/jest.config.js b/backend/jest.config.js index 39170c09f..3cee980c5 100644 --- a/backend/jest.config.js +++ b/backend/jest.config.js @@ -4,4 +4,7 @@ module.exports = { preset: 'ts-jest', collectCoverage: true, collectCoverageFrom: ['src/**/*.ts', '!**/node_modules/**'], + moduleNameMapper: { + '@entity/(.*)': '/../database/entity/$1', + }, } From 04fec0f481a7fc1f24786d4cecb48e4f2d675178 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 13:20:24 +0200 Subject: [PATCH 038/158] 1% backend coverage --- .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 035b3c470..96c6e4df3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -386,7 +386,7 @@ jobs: report_name: Coverage Backend type: lcov result_path: ./coverage/lcov.info - min_coverage: 4 + min_coverage: 1 token: ${{ github.token }} ############################################################################## From f25f0fe96fd652f392710b39b14d02cb7d4d7f8c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 15:24:29 +0200 Subject: [PATCH 039/158] remove sudo --- backend/Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 431380e4e..8a0067dae 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -31,8 +31,8 @@ LABEL org.label-schema.schema-version="1.0" LABEL maintainer="support@gradido.net" # Install Additional Software -## install: sudo -RUN apk --no-cache add sudo +## install: git +#RUN apk --no-cache add git # Settings ## Expose Container Port From c4a5b963b734a6252f94f96edb316d5a0d6393fb Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 15:25:26 +0200 Subject: [PATCH 040/158] better comments in docker file --- backend/Dockerfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 8a0067dae..2df3ff9e7 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -65,13 +65,13 @@ COPY ./backend/ ./ # Copy everything from database COPY ./database/ ../database/ -# npm install +# yarn install backend RUN yarn install --production=false --frozen-lockfile --non-interactive -# npm install database +# yarn install database RUN cd ../database && yarn install --production=false --frozen-lockfile --non-interactive -# npm build +# yarn build RUN yarn run build ################################################################################## From 189fe6ebfe74b9404f9bd53344aeac498ed38581 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 15:27:29 +0200 Subject: [PATCH 041/158] do not define the default baseUrl explicitly --- backend/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/tsconfig.json b/backend/tsconfig.json index 15eb704ba..73e00a1a0 100644 --- a/backend/tsconfig.json +++ b/backend/tsconfig.json @@ -45,7 +45,7 @@ /* Module Resolution Options */ // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ "paths": { /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ "@entity/*": ["../database/entity/*"] }, From 185e449f8240e4d8bf99a787b9b59813e6edc30c Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 15:29:00 +0200 Subject: [PATCH 042/158] remove database transpile objects --- database.d.ts | 165 ---------------------------------------------- database.d.ts.map | 1 - 2 files changed, 166 deletions(-) delete mode 100644 database.d.ts delete mode 100644 database.d.ts.map diff --git a/database.d.ts b/database.d.ts deleted file mode 100644 index 3cda5e882..000000000 --- a/database.d.ts +++ /dev/null @@ -1,165 +0,0 @@ -/// -declare module "entity/0001-init_db/Balance" { - import { BaseEntity } from 'typeorm'; - export class Balance extends BaseEntity { - id: number; - userId: number; - modified: Date; - recordDate: Date; - amount: number; - } -} -declare module "entity/Balance" { - export { Balance } from "entity/0001-init_db/Balance"; -} -declare module "entity/0001-init_db/Migration" { - import { BaseEntity } from 'typeorm'; - export class Migration extends BaseEntity { - version: number; - fileName: string; - date: Date; - } -} -declare module "entity/Migration" { - export { Migration } from "entity/0001-init_db/Migration"; -} -declare module "entity/0001-init_db/TransactionCreation" { - import { BaseEntity, Timestamp } from 'typeorm'; - import { Transaction } from "entity/0001-init_db/Transaction"; - export class TransactionCreation extends BaseEntity { - id: number; - transactionId: number; - userId: number; - amount: number; - targetDate: Timestamp; - transaction: Transaction; - } -} -declare module "entity/0001-init_db/TransactionSendCoin" { - import { BaseEntity } from 'typeorm'; - import { Transaction } from "entity/0001-init_db/Transaction"; - export class TransactionSendCoin extends BaseEntity { - id: number; - transactionId: number; - senderPublic: Buffer; - userId: number; - recipiantPublic: Buffer; - recipiantUserId: number; - amount: number; - transaction: Transaction; - } -} -declare module "entity/0001-init_db/Transaction" { - import { BaseEntity } from 'typeorm'; - import { TransactionCreation } from "entity/0001-init_db/TransactionCreation"; - import { TransactionSendCoin } from "entity/0001-init_db/TransactionSendCoin"; - export class Transaction extends BaseEntity { - id: number; - transactionTypeId: number; - txHash: Buffer; - memo: string; - received: Date; - blockchainTypeId: number; - transactionSendCoin: TransactionSendCoin; - transactionCreation: TransactionCreation; - } -} -declare module "entity/Transaction" { - export { Transaction } from "entity/0001-init_db/Transaction"; -} -declare module "entity/TransactionCreation" { - export { TransactionCreation } from "entity/0001-init_db/TransactionCreation"; -} -declare module "entity/TransactionSendCoin" { - export { TransactionSendCoin } from "entity/0001-init_db/TransactionSendCoin"; -} -declare module "entity/0002-add_settings/UserSetting" { - import { BaseEntity } from 'typeorm'; - import { User } from "entity/0002-add_settings/User"; - export class UserSetting extends BaseEntity { - id: number; - userId: number; - user: User; - key: string; - value: string; - } -} -declare module "entity/0002-add_settings/User" { - import { BaseEntity } from 'typeorm'; - import { UserSetting } from "entity/0002-add_settings/UserSetting"; - export class User extends BaseEntity { - id: number; - pubkey: Buffer; - email: string; - firstName: string; - lastName: string; - username: string; - disabled: boolean; - settings: UserSetting[]; - } -} -declare module "entity/User" { - export { User } from "entity/0002-add_settings/User"; -} -declare module "entity/UserSetting" { - export { UserSetting } from "entity/0002-add_settings/UserSetting"; -} -declare module "entity/0001-init_db/UserTransaction" { - import { BaseEntity } from 'typeorm'; - export class UserTransaction extends BaseEntity { - id: number; - userId: number; - transactionId: number; - transactionTypeId: number; - balance: number; - balanceDate: Date; - } -} -declare module "entity/UserTransaction" { - export { UserTransaction } from "entity/0001-init_db/UserTransaction"; -} -declare module "entity/0001-init_db/User" { - import { BaseEntity } from 'typeorm'; - export class User extends BaseEntity { - id: number; - pubkey: Buffer; - email: string; - firstName: string; - lastName: string; - username: string; - disabled: boolean; - } -} -declare module "migrations/0001-init_db" { - export function upgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; - export function downgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; -} -declare module "migrations/0002-add_settings" { - export function upgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; - export function downgrade(queryFn: (query: string, values?: any[]) => Promise>): Promise; -} -declare module "src/config/index" { - const CONFIG: { - MIGRATIONS_TABLE: string; - MIGRATIONS_DIRECTORY: string; - DB_HOST: string; - DB_PORT: number; - DB_USER: string; - DB_PASSWORD: string; - DB_DATABASE: string; - }; - export default CONFIG; -} -declare module "src/prepare" { - const _default: () => Promise; - export default _default; -} -declare module "src/typeorm/connection" { - import { Connection } from 'typeorm'; - const connection: () => Promise; - export default connection; -} -declare module "src/index" { - import 'reflect-metadata'; -} -//# sourceMappingURL=database.d.ts.map \ No newline at end of file diff --git a/database.d.ts.map b/database.d.ts.map deleted file mode 100644 index b5b67871a..000000000 --- a/database.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["database/entity/0001-init_db/Balance.ts","database/entity/Balance.ts","database/entity/0001-init_db/Migration.ts","database/entity/Migration.ts","database/entity/0001-init_db/TransactionCreation.ts","database/entity/0001-init_db/TransactionSendCoin.ts","database/entity/0001-init_db/Transaction.ts","database/entity/Transaction.ts","database/entity/TransactionCreation.ts","database/entity/TransactionSendCoin.ts","database/entity/0002-add_settings/UserSetting.ts","database/entity/0002-add_settings/User.ts","database/entity/User.ts","database/entity/UserSetting.ts","database/entity/0001-init_db/UserTransaction.ts","database/entity/UserTransaction.ts","database/entity/0001-init_db/User.ts","database/migrations/0001-init_db.ts","database/migrations/0002-add_settings.ts","database/src/config/index.ts","database/src/prepare.ts","database/src/typeorm/connection.ts","database/src/index.ts"],"names":[],"mappings":";;IAAA,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAG5E,MAAM,OAAO,OAAQ,SAAQ,UAAU;QAErC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,QAAQ,EAAE,IAAI,CAAA;QAGd,UAAU,EAAE,IAAI,CAAA;QAGhB,MAAM,EAAE,MAAM,CAAA;KACf;;;IClBD,OAAO,EAAE,OAAO,EAAE,oCAA8B;;;ICAhD,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAG5E,MAAM,OAAO,SAAU,SAAQ,UAAU;QAEvC,OAAO,EAAE,MAAM,CAAA;QAGf,QAAQ,EAAE,MAAM,CAAA;QAGhB,IAAI,EAAE,IAAI,CAAA;KACX;;;ICZD,OAAO,EAAE,SAAS,EAAE,sCAAgC;;;ICApD,OAAO,EACL,UAAU,EAIV,SAAS,EAGV,MAAM,SAAS,CAAA;IAChB,OAAO,EAAE,WAAW,EAAE,wCAAqB;IAG3C,MAAM,OAAO,mBAAoB,SAAQ,UAAU;QAEjD,EAAE,EAAE,MAAM,CAAA;QAGV,aAAa,EAAE,MAAM,CAAA;QAGrB,MAAM,EAAE,MAAM,CAAA;QAGd,MAAM,EAAE,MAAM,CAAA;QAGd,UAAU,EAAE,SAAS,CAAA;QAIrB,WAAW,EAAE,WAAW,CAAA;KACzB;;;IC/BD,OAAO,EAAE,UAAU,EAAgE,MAAM,SAAS,CAAA;IAClG,OAAO,EAAE,WAAW,EAAE,wCAAqB;IAG3C,MAAM,OAAO,mBAAoB,SAAQ,UAAU;QAEjD,EAAE,EAAE,MAAM,CAAA;QAGV,aAAa,EAAE,MAAM,CAAA;QAGrB,YAAY,EAAE,MAAM,CAAA;QAGpB,MAAM,EAAE,MAAM,CAAA;QAGd,eAAe,EAAE,MAAM,CAAA;QAGvB,eAAe,EAAE,MAAM,CAAA;QAGvB,MAAM,EAAE,MAAM,CAAA;QAId,WAAW,EAAE,WAAW,CAAA;KACzB;;;IC7BD,OAAO,EAAE,UAAU,EAAoD,MAAM,SAAS,CAAA;IACtF,OAAO,EAAE,mBAAmB,EAAE,gDAA6B;IAC3D,OAAO,EAAE,mBAAmB,EAAE,gDAA6B;IAG3D,MAAM,OAAO,WAAY,SAAQ,UAAU;QAEzC,EAAE,EAAE,MAAM,CAAA;QAGV,iBAAiB,EAAE,MAAM,CAAA;QAGzB,MAAM,EAAE,MAAM,CAAA;QAGd,IAAI,EAAE,MAAM,CAAA;QAGZ,QAAQ,EAAE,IAAI,CAAA;QAGd,gBAAgB,EAAE,MAAM,CAAA;QAGxB,mBAAmB,EAAE,mBAAmB,CAAA;QAGxC,mBAAmB,EAAE,mBAAmB,CAAA;KACzC;;;IC7BD,OAAO,EAAE,WAAW,EAAE,wCAAkC;;;ICAxD,OAAO,EAAE,mBAAmB,EAAE,gDAA0C;;;ICAxE,OAAO,EAAE,mBAAmB,EAAE,gDAA0C;;;ICAxE,OAAO,EAAE,UAAU,EAAqD,MAAM,SAAS,CAAA;IACvF,OAAO,EAAE,IAAI,EAAE,sCAAc;IAG7B,MAAM,OAAO,WAAY,SAAQ,UAAU;QAEzC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,IAAI,EAAE,IAAI,CAAA;QAGV,GAAG,EAAE,MAAM,CAAA;QAGX,KAAK,EAAE,MAAM,CAAA;KACd;;;ICnBD,OAAO,EAAE,UAAU,EAAqD,MAAM,SAAS,CAAA;IACvF,OAAO,EAAE,WAAW,EAAE,6CAAqB;IAI3C,MAAM,OAAO,IAAK,SAAQ,UAAU;QAElC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,KAAK,EAAE,MAAM,CAAA;QAGb,SAAS,EAAE,MAAM,CAAA;QAGjB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,OAAO,CAAA;QAGjB,QAAQ,EAAE,WAAW,EAAE,CAAA;KACxB;;;IC7BD,OAAO,EAAE,IAAI,EAAE,sCAAgC;;;ICA/C,OAAO,EAAE,WAAW,EAAE,6CAAuC;;;ICA7D,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAG5E,MAAM,OAAO,eAAgB,SAAQ,UAAU;QAE7C,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,aAAa,EAAE,MAAM,CAAA;QAGrB,iBAAiB,EAAE,MAAM,CAAA;QAGzB,OAAO,EAAE,MAAM,CAAA;QAGf,WAAW,EAAE,IAAI,CAAA;KAClB;;;ICrBD,OAAO,EAAE,eAAe,EAAE,4CAAsC;;;ICAhE,OAAO,EAAE,UAAU,EAA0C,MAAM,SAAS,CAAA;IAI5E,MAAM,OAAO,IAAK,SAAQ,UAAU;QAElC,EAAE,EAAE,MAAM,CAAA;QAGV,MAAM,EAAE,MAAM,CAAA;QAGd,KAAK,EAAE,MAAM,CAAA;QAGb,SAAS,EAAE,MAAM,CAAA;QAGjB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,MAAM,CAAA;QAGhB,QAAQ,EAAE,OAAO,CAAA;KAClB;;;ICdD,gBAAsB,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBA2S5F;IAED,gBAAsB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBA6B9F;;;IC1UD,gBAAsB,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBAS5F;IAED,gBAAsB,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,iBAG9F;;;ICPD,MAAM,MAAM;;;;;;;;KAAiC,CAAA;IAE7C,eAAe,MAAM,CAAA;;;0BCTI,QAAQ,IAAI,CAAC;IAAtC,wBA8BC;;;ICzCD,OAAO,EAAoB,UAAU,EAAE,MAAM,SAAS,CAAA;IAItD,MAAM,UAAU,QAAa,QAAQ,UAAU,GAAG,IAAI,CAiBrD,CAAA;IAED,eAAe,UAAU,CAAA;;;ICvBzB,OAAO,kBAAkB,CAAA"} \ No newline at end of file From 6caa92bec8c78d10411b4c6e9cbbc4a2659cd7d8 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 15:29:31 +0200 Subject: [PATCH 043/158] removed ts debug build infos aswell --- database.tsbuildinfo | 1 - 1 file changed, 1 deletion(-) delete mode 100644 database.tsbuildinfo diff --git a/database.tsbuildinfo b/database.tsbuildinfo deleted file mode 100644 index e6bed655d..000000000 --- a/database.tsbuildinfo +++ /dev/null @@ -1 +0,0 @@ -{"bundle":{"commonSourceDirectory":"./database","sourceFiles":["./database/entity/0001-init_db/Balance.ts","./database/entity/Balance.ts","./database/entity/0001-init_db/Migration.ts","./database/entity/Migration.ts","./database/entity/0001-init_db/TransactionCreation.ts","./database/entity/0001-init_db/TransactionSendCoin.ts","./database/entity/0001-init_db/Transaction.ts","./database/entity/Transaction.ts","./database/entity/TransactionCreation.ts","./database/entity/TransactionSendCoin.ts","./database/entity/0002-add_settings/UserSetting.ts","./database/entity/0002-add_settings/User.ts","./database/entity/User.ts","./database/entity/UserSetting.ts","./database/entity/0001-init_db/UserTransaction.ts","./database/entity/UserTransaction.ts","./database/entity/0001-init_db/User.ts","./database/migrations/0001-init_db.ts","./database/migrations/0002-add_settings.ts","./database/src/config/index.ts","./database/src/prepare.ts","./database/src/typeorm/connection.ts","./database/src/index.ts"],"js":{"sections":[{"pos":0,"end":762,"kind":"emitHelpers","data":"typescript:extends"},{"pos":763,"end":1334,"kind":"emitHelpers","data":"typescript:decorate"},{"pos":1335,"end":1511,"kind":"emitHelpers","data":"typescript:metadata"},{"pos":1512,"end":2192,"kind":"emitHelpers","data":"typescript:awaiter"},{"pos":2193,"end":3983,"kind":"emitHelpers","data":"typescript:generator"},{"pos":3984,"end":4366,"kind":"emitHelpers","data":"typescript:assign"},{"pos":4367,"end":65553,"kind":"text"}],"sources":{"helpers":["typescript:extends","typescript:decorate","typescript:metadata","typescript:awaiter","typescript:generator","typescript:assign"]}},"dts":{"sections":[{"pos":0,"end":30,"kind":"type","data":"node"},{"pos":31,"end":5388,"kind":"text"}]}},"version":"4.3.4"} \ No newline at end of file From 634733cd59cc75ef243fda4b163898c57fec0f56 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Mon, 11 Oct 2021 18:31:59 +0200 Subject: [PATCH 044/158] removed moduleResolution configuration since it seems not needed --- database/tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/tsconfig.json b/database/tsconfig.json index 102d9112f..445b9d11f 100644 --- a/database/tsconfig.json +++ b/database/tsconfig.json @@ -44,7 +44,7 @@ // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ /* Module Resolution Options */ - "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ // "rootDirs": [".", "../database"], /* List of root folders whose combined content represents the structure of the project at runtime. */ From aa07ef2231c2d2309f62823f7f4b9d565205f589 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 12 Oct 2021 01:26:47 +0200 Subject: [PATCH 045/158] errors on failed connection to help debugging, entities from database project in typeorm connection --- backend/src/typeorm/connection.ts | 9 ++++++--- database/entity/index.ts | 19 +++++++++++++++++++ database/src/typeorm/connection.ts | 4 ++-- 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 database/entity/index.ts diff --git a/backend/src/typeorm/connection.ts b/backend/src/typeorm/connection.ts index 0fcd6aac3..5709c29b6 100644 --- a/backend/src/typeorm/connection.ts +++ b/backend/src/typeorm/connection.ts @@ -1,6 +1,6 @@ import { createConnection, Connection } from 'typeorm' import CONFIG from '../config' -import path from 'path' +import { entities } from '@entity/index' const connection = async (): Promise => { let con = null @@ -13,10 +13,13 @@ const connection = async (): Promise => { username: CONFIG.DB_USER, password: CONFIG.DB_PASSWORD, database: CONFIG.DB_DATABASE, - entities: [path.join(__dirname, 'entity', '*.{ts,js}')], + entities, synchronize: false, }) - } catch (error) {} + } catch (error) { + // eslint-disable-next-line no-console + console.log(error) + } return con } diff --git a/database/entity/index.ts b/database/entity/index.ts new file mode 100644 index 000000000..e18757ab8 --- /dev/null +++ b/database/entity/index.ts @@ -0,0 +1,19 @@ +import { Balance } from './Balance' +import { Migration } from './Migration' +import { Transaction } from './Transaction' +import { TransactionCreation } from './TransactionCreation' +import { TransactionSendCoin } from './TransactionSendCoin' +import { User } from './User' +import { UserSetting } from './UserSetting' +import { UserTransaction } from './UserTransaction' + +export const entities = [ + Balance, + Migration, + Transaction, + TransactionCreation, + TransactionSendCoin, + User, + UserSetting, + UserTransaction, +] diff --git a/database/src/typeorm/connection.ts b/database/src/typeorm/connection.ts index 26aafc102..6e8bd5c09 100644 --- a/database/src/typeorm/connection.ts +++ b/database/src/typeorm/connection.ts @@ -1,6 +1,6 @@ import { createConnection, Connection } from 'typeorm' import CONFIG from '../config' -import path from 'path' +import { entities } from '../../entity/index' const connection = async (): Promise => { let con = null @@ -13,7 +13,7 @@ const connection = async (): Promise => { username: CONFIG.DB_USER, password: CONFIG.DB_PASSWORD, database: CONFIG.DB_DATABASE, - entities: [path.join(__dirname, '..', '..', 'entity', '*.{ts,js}')], + entities, synchronize: false, }) } catch (error) {} From 14e3c33cc5f4c70fccea1ea4a5d81173d07b975f Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 12 Oct 2021 01:27:20 +0200 Subject: [PATCH 046/158] more error logging for debugging purposes --- backend/src/typeorm/getDBVersion.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/backend/src/typeorm/getDBVersion.ts b/backend/src/typeorm/getDBVersion.ts index 104ac124c..a64a6c2b7 100644 --- a/backend/src/typeorm/getDBVersion.ts +++ b/backend/src/typeorm/getDBVersion.ts @@ -1,10 +1,13 @@ +import { getRepository } from 'typeorm' import { Migration } from '@entity/Migration' const getDBVersion = async (): Promise => { try { - const dbVersion = await Migration.findOne({ order: { version: 'DESC' } }) + const dbVersion = await getRepository(Migration).findOne({ order: { version: 'DESC' } }) return dbVersion ? dbVersion.fileName : null } catch (error) { + // eslint-disable-next-line no-console + console.log(error) return null } } From c3b7eefdfdb868f7853943a79b54547cad4a5687 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 12 Oct 2021 01:27:46 +0200 Subject: [PATCH 047/158] aligned typeorm versions of backend and database --- backend/package.json | 2 +- backend/yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/package.json b/backend/package.json index 73c0f7513..e930bb0e8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -32,7 +32,7 @@ "reflect-metadata": "^0.1.13", "ts-jest": "^27.0.5", "type-graphql": "^1.1.1", - "typeorm": "^0.2.37" + "typeorm": "^0.2.38" }, "devDependencies": { "@types/express": "^4.17.12", diff --git a/backend/yarn.lock b/backend/yarn.lock index f884afe18..373f623f0 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -5372,10 +5372,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typeorm@^0.2.37: - version "0.2.37" - resolved "https://registry.npmjs.org/typeorm/-/typeorm-0.2.37.tgz" - integrity sha512-7rkW0yCgFC24I5T0f3S/twmLSuccPh1SQmxET/oDWn2sSDVzbyWdnItSdKy27CdJGTlKHYtUVeOcMYw5LRsXVw== +typeorm@^0.2.38: + version "0.2.38" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.38.tgz#2af08079919f6ab04cd17017f9faa2c8d5cd566f" + integrity sha512-M6Y3KQcAREQcphOVJciywf4mv6+A0I/SeR+lWNjKsjnQ+a3XcMwGYMGL0Jonsx3H0Cqlf/3yYqVki1jIXSK/xg== dependencies: "@sqltools/formatter" "^1.2.2" app-root-path "^3.0.0" From da5775464932d761ef852623deaafb9d0631cdc7 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 12 Oct 2021 01:28:32 +0200 Subject: [PATCH 048/158] properly bind database volumes, make database directories in container and copy required node_modules folders for production --- backend/Dockerfile | 10 +++++++--- docker-compose.override.yml | 3 +++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/Dockerfile b/backend/Dockerfile index 2df3ff9e7..bc8cd38ce 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -42,6 +42,8 @@ EXPOSE ${PORT} RUN mkdir -p ${DOCKER_WORKDIR} WORKDIR ${DOCKER_WORKDIR} +RUN mkdir -p /database + ################################################################################## # DEVELOPMENT (Connected to the local environment, to reload on demand) ########## ################################################################################## @@ -51,9 +53,9 @@ FROM base as development # local filesystem which will need a rebuild anyway # Run command -# (for development we need to execute npm install since the +# (for development we need to execute yarn install since the # node_modules are on another volume and need updating) -CMD /bin/sh -c "yarn install && yarn run dev" +CMD /bin/sh -c "cd /database && yarn install && cd /app && yarn install && yarn run dev" ################################################################################## # BUILD (Does contain all files and is therefore bloated) ######################## @@ -89,8 +91,10 @@ FROM base as production # Copy "binary"-files from build image COPY --from=build ${DOCKER_WORKDIR}/build ./build +COPY --from=build ${DOCKER_WORKDIR}/../database/build ../database/build # We also copy the node_modules express and serve-static for the run script -# COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules +COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules +COPY --from=build ${DOCKER_WORKDIR}/../database/node_modules ../database/node_modules # Copy static files # COPY --from=build ${DOCKER_WORKDIR}/public ./public # Copy package.json for script definitions (lock file should not be needed) diff --git a/docker-compose.override.yml b/docker-compose.override.yml index d14ce50f5..0fc8ff893 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -36,8 +36,10 @@ services: # This makes sure the docker container has its own node modules. # Therefore it is possible to have a different node version on the host machine - backend_node_modules:/app/node_modules + - backend_database_node_modules:/database/node_modules # bind the local folder to the docker to allow live reload - ./backend:/app + - ./database:/database ######################################################## # DATABASE ############################################## @@ -152,6 +154,7 @@ services: volumes: frontend_node_modules: backend_node_modules: + backend_database_node_modules: database_node_modules: database_build: login_build_ubuntu_3.1: \ No newline at end of file From c726ee948380a7c8922a8f66ef809e63af98ed07 Mon Sep 17 00:00:00 2001 From: Ulf Gebhardt Date: Tue, 12 Oct 2021 10:37:43 +0200 Subject: [PATCH 049/158] unify database connection database & backend - also log errors --- database/src/typeorm/connection.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/database/src/typeorm/connection.ts b/database/src/typeorm/connection.ts index 6e8bd5c09..e3434c3aa 100644 --- a/database/src/typeorm/connection.ts +++ b/database/src/typeorm/connection.ts @@ -16,7 +16,10 @@ const connection = async (): Promise => { entities, synchronize: false, }) - } catch (error) {} + } catch (error) { + // eslint-disable-next-line no-console + console.log(error) + } return con } From 67ea9738458274e39b9faa46db718ebfdab32d65 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 11:40:37 +0200 Subject: [PATCH 050/158] Adding a hasEloage flag to the store. --- frontend/src/store/store.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/frontend/src/store/store.js b/frontend/src/store/store.js index 03e1915ca..cb2c7b42a 100644 --- a/frontend/src/store/store.js +++ b/frontend/src/store/store.js @@ -38,6 +38,9 @@ export const mutations = { coinanimation: (state, coinanimation) => { state.coinanimation = coinanimation }, + hasElopage: (state, hasElopage) => { + state.hasElopage = hasElopage + }, } export const actions = { @@ -50,6 +53,7 @@ export const actions = { commit('description', data.description) commit('coinanimation', data.coinanimation) commit('newsletterState', data.klickTipp.newsletterState) + commit('hasElopage', data.hasElopage) }, logout: ({ commit, state }) => { commit('token', null) @@ -60,6 +64,7 @@ export const actions = { commit('description', '') commit('coinanimation', true) commit('newsletterState', null) + commit('hasElopage', false) localStorage.clear() }, } @@ -81,6 +86,7 @@ export const store = new Vuex.Store({ coinanimation: true, newsletterState: null, community: null, + hasElopage: false, }, getters: {}, // Syncronous mutation of the state From fb93b39a194d33562bdcc030811a9a5b3accb33d Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 12:31:37 +0200 Subject: [PATCH 051/158] Changed the logic behind the link to elopage, when user has an account it sends to the login page, else it sends to the registration process of elopage --- frontend/src/components/SidebarPlugin/SideBar.vue | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/SidebarPlugin/SideBar.vue b/frontend/src/components/SidebarPlugin/SideBar.vue index 519a4f0b1..312be6b8a 100755 --- a/frontend/src/components/SidebarPlugin/SideBar.vue +++ b/frontend/src/components/SidebarPlugin/SideBar.vue @@ -47,12 +47,9 @@
@@ -114,6 +111,11 @@ export default { logout() { this.$emit('logout') }, + getElopageLink() { + return this.$store.state.hasElopage + ? `https://elopage.com/s/gradido/sign_in?locale=${this.$i18n.locale}&email=${this.$store.state.email}` + : `https://elopage.com/s/gradido/basic-de/payment?locale=de&prid=111&pid=${this.$store.state.publisherId}&firstName=${this.$store.state.firstName}&lastName=${this.$store.state.lastName}&email=${this.$store.state.email}` + }, }, } From f7d696eaca39be818b853a816e64aa8f9e0c376a Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 12:46:57 +0200 Subject: [PATCH 052/158] Tests that the hasElopage flag is changed. --- frontend/src/store/store.test.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/frontend/src/store/store.test.js b/frontend/src/store/store.test.js index 19937eed4..ecdfb9f11 100644 --- a/frontend/src/store/store.test.js +++ b/frontend/src/store/store.test.js @@ -12,6 +12,7 @@ const { newsletterState, publisherId, community, + hasElopage, } = mutations const { login, logout } = actions @@ -114,6 +115,14 @@ describe('Vuex store', () => { }) }) }) + + describe('hasElopage', () => { + it('sets the state of hasElopage', () => { + const state = { hasElopage: false } + hasElopage(state, true) + expect(state.hasElopage).toBeTruthy() + }) + }) }) describe('actions', () => { @@ -131,11 +140,12 @@ describe('Vuex store', () => { klickTipp: { newsletterState: true, }, + hasElopage: false, } - it('calls eight commits', () => { + it('calls nine commits', () => { login({ commit, state }, commitedData) - expect(commit).toHaveBeenCalledTimes(8) + expect(commit).toHaveBeenCalledTimes(9) }) it('commits email', () => { @@ -177,15 +187,20 @@ describe('Vuex store', () => { login({ commit, state }, commitedData) expect(commit).toHaveBeenNthCalledWith(8, 'newsletterState', true) }) + + it('commits hasElopage', () => { + login({ commit, state }, commitedData) + expect(commit).toHaveBeenNthCalledWith(9, 'hasElopage', false) + }) }) describe('logout', () => { const commit = jest.fn() const state = {} - it('calls eight commits', () => { + it('calls nine commits', () => { logout({ commit, state }) - expect(commit).toHaveBeenCalledTimes(8) + expect(commit).toHaveBeenCalledTimes(9) }) it('commits token', () => { @@ -228,6 +243,11 @@ describe('Vuex store', () => { expect(commit).toHaveBeenNthCalledWith(8, 'newsletterState', null) }) + it('commits hasElopage', () => { + logout({ commit, state }) + expect(commit).toHaveBeenNthCalledWith(9, 'hasElopage', false) + }) + // how to get this working? it.skip('calls localStorage.clear()', () => { const clearStorageMock = jest.fn() From 61896c421fd1c480d89c48af046ee6b3825efb05 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 13:15:35 +0200 Subject: [PATCH 053/158] Tested the new functionality, and fixed the links. --- .../components/SidebarPlugin/SideBar.spec.js | 32 ++++++++++++++++--- .../src/components/SidebarPlugin/SideBar.vue | 4 +-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/SidebarPlugin/SideBar.spec.js b/frontend/src/components/SidebarPlugin/SideBar.spec.js index 9f182ca93..385c2bbef 100644 --- a/frontend/src/components/SidebarPlugin/SideBar.spec.js +++ b/frontend/src/components/SidebarPlugin/SideBar.spec.js @@ -18,6 +18,10 @@ describe('SideBar', () => { $store: { state: { email: 'test@example.org', + publisherId: 123, + firstName: 'test', + lastName: 'example', + hasElopage: false, }, commit: jest.fn(), }, @@ -80,12 +84,16 @@ describe('SideBar', () => { describe('static menu items', () => { describe("member's area", () => { it('has a link to the elopage', () => { - expect(wrapper.findAll('li').at(0).text()).toBe('members_area') + expect(wrapper.findAll('li').at(0).text()).toContain('members_area') }) - it('links to the elopage', () => { + it('has a badge', () => { + expect(wrapper.findAll('li').at(0).text()).toContain('!') + }) + + it('links to the elopage registration', () => { expect(wrapper.findAll('li').at(0).find('a').attributes('href')).toBe( - 'https://elopage.com/s/gradido/sign_in?locale=en', + 'https://elopage.com/s/gradido/basic-de/payment?locale=en&prid=111&pid=123&firstName=test&lastName=example&email=test@example.org', ) }) @@ -94,11 +102,27 @@ describe('SideBar', () => { mocks.$i18n.locale = 'de' }) - it('links to the German elopage when locale is set to de', () => { + it('links to the German elopage registration when locale is set to de', () => { + expect(wrapper.findAll('li').at(0).find('a').attributes('href')).toBe( + 'https://elopage.com/s/gradido/basic-de/payment?locale=de&prid=111&pid=123&firstName=test&lastName=example&email=test@example.org', + ) + }) + }) + + describe('with hasElopage is true', () => { + beforeEach(() => { + mocks.$store.state.hasElopage = true + }) + + it('links to the elopage member area', () => { expect(wrapper.findAll('li').at(0).find('a').attributes('href')).toBe( 'https://elopage.com/s/gradido/sign_in?locale=de', ) }) + + it('has no badge', () => { + expect(wrapper.findAll('li').at(0).text()).not.toContain('!') + }) }) }) diff --git a/frontend/src/components/SidebarPlugin/SideBar.vue b/frontend/src/components/SidebarPlugin/SideBar.vue index 312be6b8a..9dc0a2765 100755 --- a/frontend/src/components/SidebarPlugin/SideBar.vue +++ b/frontend/src/components/SidebarPlugin/SideBar.vue @@ -113,8 +113,8 @@ export default { }, getElopageLink() { return this.$store.state.hasElopage - ? `https://elopage.com/s/gradido/sign_in?locale=${this.$i18n.locale}&email=${this.$store.state.email}` - : `https://elopage.com/s/gradido/basic-de/payment?locale=de&prid=111&pid=${this.$store.state.publisherId}&firstName=${this.$store.state.firstName}&lastName=${this.$store.state.lastName}&email=${this.$store.state.email}` + ? `https://elopage.com/s/gradido/sign_in?locale=${this.$i18n.locale}` + : `https://elopage.com/s/gradido/basic-de/payment?locale=${this.$i18n.locale}&prid=111&pid=${this.$store.state.publisherId}&firstName=${this.$store.state.firstName}&lastName=${this.$store.state.lastName}&email=${this.$store.state.email}` }, }, } From 3247dad58698f440369b8d415c6164cd2f982a4a Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Tue, 12 Oct 2021 14:22:19 +0200 Subject: [PATCH 054/158] update doc --- docu/login_server.api.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docu/login_server.api.md b/docu/login_server.api.md index c220dd427..aeac22549 100644 --- a/docu/login_server.api.md +++ b/docu/login_server.api.md @@ -39,13 +39,11 @@ with: { "email": "max.musterman@gmail.de", "username": "Maxilein", - "password": "123abcDE&", - "hasElopage": true + "password": "123abcDE&" } ``` `username` or `email` must be present! If booth present, `email` will be used. -`hasElopage`: optional, if set to true login will also check if user has an elopage account ### Response In case of success returns: From 1486476571a89915142e316002f0feab09a6da90 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Oct 2021 15:24:14 +0200 Subject: [PATCH 055/158] add auto correct keys to apollo, copy also disabled field of user --- backend/src/graphql/model/User.ts | 3 +-- backend/src/graphql/resolver/UserResolver.ts | 17 ++++++++++++++++- login_server/src/cpp/Crypto/Passphrase.cpp | 1 + .../cpp/JSONInterface/JsonRequestHandler.cpp | 16 ++++++++++++---- .../src/cpp/JSONInterface/JsonUnsecureLogin.cpp | 8 ++++++++ login_server/src/cpp/model/Session.cpp | 2 +- 6 files changed, 39 insertions(+), 8 deletions(-) diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 21bf1b464..03a0908b1 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -19,6 +19,7 @@ export class User { this.pubkey = json.public_hex this.language = json.language this.publisherId = json.publisher_id + this.disabled = json.disabled } @Field(() => String) @@ -56,10 +57,8 @@ export class User { @Field(() => String) language: string - /* @Field(() => Boolean) disabled: boolean - */ /* I suggest to have a group as type here @Field(() => ID) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 820e493c6..f5638692e 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -47,7 +47,21 @@ export class UserResolver { const user = new User(result.data.user) // read additional settings from settings table const userRepository = getCustomRepository(UserRepository) - const userEntity = await userRepository.findByPubkeyHex(user.pubkey) + let userEntity: void | DbUser = await userRepository.findByPubkeyHex(user.pubkey).catch(() => {}) + if(!userEntity) { + // create user if it don't exist with this pubkey + userEntity = new DbUser + userEntity.firstName = user.firstName + userEntity.lastName = user.lastName + userEntity.username = user.username + userEntity.email = user.email + userEntity.pubkey = Buffer.from(fromHex(user.pubkey)) + userEntity.disabled = user.disabled + + userEntity.save().catch(() => { + throw new Error('error by save userEntity') + }) + } const userSettingRepository = getCustomRepository(UserSettingRepository) const coinanimation = await userSettingRepository @@ -111,6 +125,7 @@ export class UserResolver { dbuser.firstName = user.firstName dbuser.lastName = user.lastName dbuser.username = user.username + dbuser.disabled = user.disabled dbuser.save().catch(() => { throw new Error('error saving user') diff --git a/login_server/src/cpp/Crypto/Passphrase.cpp b/login_server/src/cpp/Crypto/Passphrase.cpp index 6b3df0c5d..0b733777d 100644 --- a/login_server/src/cpp/Crypto/Passphrase.cpp +++ b/login_server/src/cpp/Crypto/Passphrase.cpp @@ -328,6 +328,7 @@ const Poco::UInt16* Passphrase::getWordIndices() const bool Passphrase::checkIfValid() { + if (!mWordSource) return false; std::istringstream iss(mPassphraseString); std::vector results(std::istream_iterator{iss}, std::istream_iterator()); diff --git a/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp b/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp index feab7043b..15846913b 100644 --- a/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp +++ b/login_server/src/cpp/JSONInterface/JsonRequestHandler.cpp @@ -81,22 +81,30 @@ void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Po } if (json_result) { + NotificationList errors; if (!json_result->isNull("session_id")) { int session_id = 0; try { json_result->get("session_id").convert(session_id); } catch (Poco::Exception& e) { - NotificationList erros; - erros.addError(new Error("json request", "invalid session_id")); - erros.sendErrorsAsEmail(); + errors.addError(new Error("json request", "invalid session_id")); } if (session_id) { auto session = SessionManager::getInstance()->getSession(session_id); response.addCookie(session->getLoginCookie()); } } - json_result->stringify(responseStream); + try { + json_result->stringify(responseStream); + } + catch (Poco::Exception& e) { + errors.addError(new ParamError("json request", "error on stringify from json result:", e.message())); + errors.addError(new ParamError("json request", "caller url", request.getURI())); + } + if (errors.errorCount()) { + errors.sendErrorsAsEmail(); + } delete json_result; } diff --git a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp index 5d337df41..0335448aa 100644 --- a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp +++ b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp @@ -108,6 +108,14 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) auto user_state = session->loadUser(email, password); auto user_model = session->getNewUser()->getModel(); Poco::JSON::Array infos; + + // AUTOMATIC ERROR CORRECTION + // if something went wrong by initial key generation for user, generate keys again + if (user_state >= USER_LOADED_FROM_DB && !user_model->getPublicKey()) { + if (mSession->generateKeys(true, true)) { + user_state = session->getNewUser()->getUserState(); + } + } switch (user_state) { case USER_EMPTY: diff --git a/login_server/src/cpp/model/Session.cpp b/login_server/src/cpp/model/Session.cpp index cf380929d..2fdd9ff2f 100644 --- a/login_server/src/cpp/model/Session.cpp +++ b/login_server/src/cpp/model/Session.cpp @@ -746,7 +746,7 @@ void Session::detectSessionState() bool cryptedPassphrase = userBackups.size() > 0; for (auto it = userBackups.begin(); it != userBackups.end(); it++) { auto passphrase = (*it)->getModel()->getPassphrase(); - Mnemonic* wordSource = nullptr; + const Mnemonic* wordSource = Passphrase::detectMnemonic(passphrase); auto passphrase_obj = Passphrase::create(passphrase, wordSource); if (!passphrase_obj.isNull() && passphrase_obj->checkIfValid()) { auto key_pair = KeyPairEd25519::create(passphrase_obj); From 86efd0de80cedb571c6fe781df4e1aa60aa723ae Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Oct 2021 15:34:50 +0200 Subject: [PATCH 056/158] fix bug --- login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp index 0335448aa..25cda34ca 100644 --- a/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp +++ b/login_server/src/cpp/JSONInterface/JsonUnsecureLogin.cpp @@ -112,7 +112,7 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params) // AUTOMATIC ERROR CORRECTION // if something went wrong by initial key generation for user, generate keys again if (user_state >= USER_LOADED_FROM_DB && !user_model->getPublicKey()) { - if (mSession->generateKeys(true, true)) { + if (session->generateKeys(true, true)) { user_state = session->getNewUser()->getUserState(); } } From 0640eb24d57b7f5215611731e15f2c9825851f88 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Oct 2021 15:42:48 +0200 Subject: [PATCH 057/158] remove copy user disabled field --- backend/src/graphql/model/User.ts | 3 ++- backend/src/graphql/resolver/UserResolver.ts | 3 +-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 03a0908b1..21bf1b464 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -19,7 +19,6 @@ export class User { this.pubkey = json.public_hex this.language = json.language this.publisherId = json.publisher_id - this.disabled = json.disabled } @Field(() => String) @@ -57,8 +56,10 @@ export class User { @Field(() => String) language: string + /* @Field(() => Boolean) disabled: boolean + */ /* I suggest to have a group as type here @Field(() => ID) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index f5638692e..9be7ba3b3 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -56,7 +56,7 @@ export class UserResolver { userEntity.username = user.username userEntity.email = user.email userEntity.pubkey = Buffer.from(fromHex(user.pubkey)) - userEntity.disabled = user.disabled + userEntity.save().catch(() => { throw new Error('error by save userEntity') @@ -125,7 +125,6 @@ export class UserResolver { dbuser.firstName = user.firstName dbuser.lastName = user.lastName dbuser.username = user.username - dbuser.disabled = user.disabled dbuser.save().catch(() => { throw new Error('error saving user') From 3ecf960ab6231e7c5bbc566d5b71c2a7d6e30f8c Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 12 Oct 2021 15:56:02 +0200 Subject: [PATCH 058/158] fix lint --- backend/src/graphql/resolver/UserResolver.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 9be7ba3b3..8cf059f32 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -47,20 +47,21 @@ export class UserResolver { const user = new User(result.data.user) // read additional settings from settings table const userRepository = getCustomRepository(UserRepository) - let userEntity: void | DbUser = await userRepository.findByPubkeyHex(user.pubkey).catch(() => {}) - if(!userEntity) { - // create user if it don't exist with this pubkey - userEntity = new DbUser + let userEntity: void | DbUser + userEntity = await userRepository.findByPubkeyHex(user.pubkey).catch(() => { + userEntity = new DbUser() userEntity.firstName = user.firstName userEntity.lastName = user.lastName userEntity.username = user.username userEntity.email = user.email userEntity.pubkey = Buffer.from(fromHex(user.pubkey)) - userEntity.save().catch(() => { throw new Error('error by save userEntity') }) + }) + if (!userEntity) { + throw new Error('error with cannot happen') } const userSettingRepository = getCustomRepository(UserSettingRepository) From 3b487ab2cbd358f9d9c4479bdd0a70dff35c4a3a Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Tue, 12 Oct 2021 16:17:19 +0200 Subject: [PATCH 059/158] fix field name --- login_server/src/cpp/model/table/ElopageBuy.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/login_server/src/cpp/model/table/ElopageBuy.cpp b/login_server/src/cpp/model/table/ElopageBuy.cpp index 6ee23d2ee..ff79f6a68 100644 --- a/login_server/src/cpp/model/table/ElopageBuy.cpp +++ b/login_server/src/cpp/model/table/ElopageBuy.cpp @@ -113,7 +113,7 @@ namespace model { int UserHasElopageTask::run() { auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); - bool hasElopage = elopage_buy->isExistInDB("email", mEmail); + bool hasElopage = elopage_buy->isExistInDB("payer_email", mEmail); return 0; } } From 36e6a459a4c525119e2809b95f4b24b6d487f757 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 16:49:14 +0200 Subject: [PATCH 060/158] Fixe small error. --- login_server/src/cpp/JSONInterface/JsonHasElopage.cpp | 2 +- login_server/src/cpp/model/table/ElopageBuy.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp b/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp index ee66255be..202f45fca 100644 --- a/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp +++ b/login_server/src/cpp/JSONInterface/JsonHasElopage.cpp @@ -10,7 +10,7 @@ Poco::JSON::Object* JsonHasElopage::handle(Poco::Dynamic::Var params) auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); result = stateSuccess(); - result->set("hasElopage", elopage_buy->isExistInDB("email", mSession->getNewUser()->getModel()->getEmail())); + result->set("hasElopage", elopage_buy->isExistInDB("payer_email", mSession->getNewUser()->getModel()->getEmail())); return result; } \ No newline at end of file diff --git a/login_server/src/cpp/model/table/ElopageBuy.cpp b/login_server/src/cpp/model/table/ElopageBuy.cpp index ff79f6a68..9aeaf291f 100644 --- a/login_server/src/cpp/model/table/ElopageBuy.cpp +++ b/login_server/src/cpp/model/table/ElopageBuy.cpp @@ -113,7 +113,7 @@ namespace model { int UserHasElopageTask::run() { auto elopage_buy = Poco::AutoPtr(new model::table::ElopageBuy); - bool hasElopage = elopage_buy->isExistInDB("payer_email", mEmail); + mHasElopage = elopage_buy->isExistInDB("payer_email", mEmail); return 0; } } From d3198b037e4038a61ac41162cd199fff335ced18 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 16:50:07 +0200 Subject: [PATCH 061/158] Fixe model for User and adding hasElopage to User Object. --- backend/src/graphql/model/User.ts | 4 ++-- backend/src/graphql/resolver/UserResolver.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index ebdf0aad2..7d2d4af05 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -19,7 +19,7 @@ export class User { this.pubkey = json.public_hex this.language = json.language this.publisherId = json.publisher_id - if (json.hasElopage) this.hasElopage = json.hasElopage + this.hasElopage = json.hasElopage } @Field(() => String) @@ -76,6 +76,6 @@ export class User { @Field(() => KlickTipp) klickTipp: KlickTipp - @Field(() => Boolean) + @Field(() => Boolean, { nullable: true }) hasElopage?: boolean } diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index bbb609d40..fb76daafa 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -45,6 +45,7 @@ export class UserResolver { value: encode(result.data.session_id, result.data.user.public_hex), }) const user = new User(result.data.user) + user.hasElopage = result.data.hasElopage // read additional settings from settings table const userRepository = getCustomRepository(UserRepository) const userEntity = await userRepository.findByPubkeyHex(user.pubkey) From 2d218e86ce194dd288bf21d816b05e0f364d7a76 Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 16:50:26 +0200 Subject: [PATCH 062/158] Asking for hasElopage in login. --- frontend/src/graphql/queries.js | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index 3499a3fa1..40cc359cf 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -13,6 +13,7 @@ export const login = gql` klickTipp { newsletterState } + hasElopage } } ` From 8f2289ebf2c3a5d4822a3b2976df4721895e3e5d Mon Sep 17 00:00:00 2001 From: elweyn Date: Tue, 12 Oct 2021 17:07:27 +0200 Subject: [PATCH 063/158] Changed the test for the members area & it's link. --- frontend/src/views/Layout/DashboardLayout_gdd.spec.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/frontend/src/views/Layout/DashboardLayout_gdd.spec.js b/frontend/src/views/Layout/DashboardLayout_gdd.spec.js index 6555d1dda..107ee7f27 100644 --- a/frontend/src/views/Layout/DashboardLayout_gdd.spec.js +++ b/frontend/src/views/Layout/DashboardLayout_gdd.spec.js @@ -45,6 +45,9 @@ describe('DashboardLayoutGdd', () => { $store: { state: { email: 'user@example.org', + publisherId: 123, + firstName: 'User', + lastName: 'Example', }, dispatch: storeDispatchMock, commit: storeCommitMock, @@ -114,9 +117,10 @@ describe('DashboardLayoutGdd', () => { }) it('has a link to the members area', () => { - expect(wrapper.findAll('ul').at(2).text()).toBe('members_area') + expect(wrapper.findAll('ul').at(2).text()).toContain('members_area') + expect(wrapper.findAll('ul').at(2).text()).toContain('!') expect(wrapper.findAll('ul').at(2).find('a').attributes('href')).toBe( - 'https://elopage.com/s/gradido/sign_in?locale=en', + 'https://elopage.com/s/gradido/basic-de/payment?locale=en&prid=111&pid=123&firstName=User&lastName=Example&email=user@example.org', ) }) From f2ec81e2b242afac35301ed261fcc6700e987cdd Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 12 Oct 2021 21:28:29 +0200 Subject: [PATCH 064/158] feat: In Production only Show one Community --- backend/.env.dist | 1 + backend/src/config/index.ts | 1 + .../src/graphql/resolver/CommunityResolver.ts | 17 ++++++++++++----- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/backend/.env.dist b/backend/.env.dist index 3ac50ac9b..359b41d3c 100644 --- a/backend/.env.dist +++ b/backend/.env.dist @@ -1,3 +1,4 @@ +PRODUCTION= PORT=4000 JWT_SECRET=secret123 JWT_EXPIRES_IN=10m diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 76ba597ad..6142ae3ba 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -11,6 +11,7 @@ const server = { LOGIN_API_URL: process.env.LOGIN_API_URL || 'http://login-server:1201/', COMMUNITY_API_URL: process.env.COMMUNITY_API_URL || 'http://nginx/api/', GDT_API_URL: process.env.GDT_API_URL || 'https://gdt.gradido.net', + PRODUCTION: process.env.PRODUCTION === 'true' || false, } const database = { diff --git a/backend/src/graphql/resolver/CommunityResolver.ts b/backend/src/graphql/resolver/CommunityResolver.ts index 563c73d24..84d252064 100644 --- a/backend/src/graphql/resolver/CommunityResolver.ts +++ b/backend/src/graphql/resolver/CommunityResolver.ts @@ -19,9 +19,17 @@ export class CommunityResolver { @Query(() => [Community]) async communities(): Promise { - const communities: Community[] = [] - - communities.push( + if (CONFIG.PRODUCTION) + return [ + new Community({ + id: 3, + name: 'Gradido-Akademie', + description: 'Freies Institut für Wirtschaftsbionik.', + url: 'https://gradido.net', + registerUrl: 'https://gdd1.gradido.com/vue/register-community', + }), + ] + return [ new Community({ id: 1, name: 'Gradido Entwicklung', @@ -43,7 +51,6 @@ export class CommunityResolver { url: 'https://gradido.net', registerUrl: 'https://gdd1.gradido.com/vue/register-community', }), - ) - return communities + ] } } From efed348a9446a4c5c9aef10a6ba3c65a4efadfa7 Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Wed, 13 Oct 2021 05:34:14 +0200 Subject: [PATCH 065/158] Change the Test name so that we see if their is a publisher ID or not Co-authored-by: Moriz Wahl --- frontend/src/components/SidebarPlugin/SideBar.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/SidebarPlugin/SideBar.spec.js b/frontend/src/components/SidebarPlugin/SideBar.spec.js index 385c2bbef..2792c16b6 100644 --- a/frontend/src/components/SidebarPlugin/SideBar.spec.js +++ b/frontend/src/components/SidebarPlugin/SideBar.spec.js @@ -82,7 +82,7 @@ describe('SideBar', () => { }) describe('static menu items', () => { - describe("member's area", () => { + describe("member's area without publisher ID", () => { it('has a link to the elopage', () => { expect(wrapper.findAll('li').at(0).text()).toContain('members_area') }) From 2506480a52eef1d1046ef2fc46fc5f62f0dc1339 Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Wed, 13 Oct 2021 05:35:06 +0200 Subject: [PATCH 066/158] Update frontend/src/components/SidebarPlugin/SideBar.spec.js Co-authored-by: Moriz Wahl --- frontend/src/components/SidebarPlugin/SideBar.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/SidebarPlugin/SideBar.spec.js b/frontend/src/components/SidebarPlugin/SideBar.spec.js index 2792c16b6..993fdf195 100644 --- a/frontend/src/components/SidebarPlugin/SideBar.spec.js +++ b/frontend/src/components/SidebarPlugin/SideBar.spec.js @@ -109,7 +109,7 @@ describe('SideBar', () => { }) }) - describe('with hasElopage is true', () => { + describe('member's area with publisher ID', () => { beforeEach(() => { mocks.$store.state.hasElopage = true }) From 861fc217662b62a7c5270bf2a4288fc63a4510eb Mon Sep 17 00:00:00 2001 From: Hannes Heine Date: Wed, 13 Oct 2021 05:35:48 +0200 Subject: [PATCH 067/158] Update frontend/src/components/SidebarPlugin/SideBar.vue Co-authored-by: Moriz Wahl --- frontend/src/components/SidebarPlugin/SideBar.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/SidebarPlugin/SideBar.vue b/frontend/src/components/SidebarPlugin/SideBar.vue index 9dc0a2765..5971b7b4e 100755 --- a/frontend/src/components/SidebarPlugin/SideBar.vue +++ b/frontend/src/components/SidebarPlugin/SideBar.vue @@ -114,7 +114,7 @@ export default { getElopageLink() { return this.$store.state.hasElopage ? `https://elopage.com/s/gradido/sign_in?locale=${this.$i18n.locale}` - : `https://elopage.com/s/gradido/basic-de/payment?locale=${this.$i18n.locale}&prid=111&pid=${this.$store.state.publisherId}&firstName=${this.$store.state.firstName}&lastName=${this.$store.state.lastName}&email=${this.$store.state.email}` + : encodeURL(`https://elopage.com/s/gradido/basic-de/payment?locale=${this.$i18n.locale}&prid=111&pid=${this.$store.state.publisherId}&firstName=${this.$store.state.firstName}&lastName=${this.$store.state.lastName}&email=${this.$store.state.email})` }, }, } From a1b54e592e9d213f5ae97fb6e8d6c8319b1d81bd Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 13 Oct 2021 11:32:00 +0200 Subject: [PATCH 068/158] Changed the logic to catch error send by Klicktipp. --- backend/src/middleware/klicktippMiddleware.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts index ab3a9bd4c..856dd9d75 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -24,9 +24,13 @@ export const klicktippNewsletterStateMiddleware: MiddlewareFn = async ( const result = await next() let klickTipp = new KlickTipp({ status: 'Unsubscribed' }) if (CONFIG.KLICKTIPP) { - const klickTippUser = await getKlickTippUser(result.email) - if (klickTippUser) { - klickTipp = new KlickTipp(klickTippUser) + try { + const klickTippUser = await getKlickTippUser(result.email) + if (klickTippUser) { + klickTipp = new KlickTipp(klickTippUser) + } + } catch (err) { + console.log('Something went wrong', err) } } result.klickTipp = klickTipp From 5a14161284c4d4d23cafb6f0ba4e2d7dcd159422 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 13 Oct 2021 12:07:23 +0200 Subject: [PATCH 069/158] Adding the publisherId to the login call and that it stores it to the user profile. --- backend/src/graphql/arg/UnsecureLoginArgs.ts | 3 +++ backend/src/graphql/model/User.ts | 1 - backend/src/graphql/resolver/UserResolver.ts | 14 +++++++++++++- backend/src/middleware/klicktippMiddleware.ts | 4 +--- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/backend/src/graphql/arg/UnsecureLoginArgs.ts b/backend/src/graphql/arg/UnsecureLoginArgs.ts index 9e9cde0d9..42e467eee 100644 --- a/backend/src/graphql/arg/UnsecureLoginArgs.ts +++ b/backend/src/graphql/arg/UnsecureLoginArgs.ts @@ -7,4 +7,7 @@ export default class UnsecureLoginArgs { @Field(() => String) password: string + + @Field(() => Number, { nullable: true }) + publisherId: number } diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 7d2d4af05..890e8bdba 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -19,7 +19,6 @@ export class User { this.pubkey = json.public_hex this.language = json.language this.publisherId = json.publisher_id - this.hasElopage = json.hasElopage } @Field(() => String) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 2f1ee9c21..1f5667e8f 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -31,7 +31,10 @@ import { UserRepository } from '../../typeorm/repository/User' export class UserResolver { @Query(() => User) @UseMiddleware(klicktippNewsletterStateMiddleware) - async login(@Args() { email, password }: UnsecureLoginArgs, @Ctx() context: any): Promise { + async login( + @Args() { email, password, publisherId }: UnsecureLoginArgs, + @Ctx() context: any, + ): Promise { email = email.trim().toLowerCase() const result = await apiPost(CONFIG.LOGIN_API_URL + 'unsecureLogin', { email, password }) @@ -65,6 +68,15 @@ export class UserResolver { throw new Error('error with cannot happen') } + if (publisherId) { + // Save it + user.publisherId = publisherId + await this.updateUserInfos( + { publisherId }, + { sessionId: result.data.session_id, pubKey: result.data.user.public_hex }, + ) + } + const userSettingRepository = getCustomRepository(UserSettingRepository) const coinanimation = await userSettingRepository .readBoolean(userEntity.id, Setting.COIN_ANIMATION) diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts index 856dd9d75..e81087097 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -29,9 +29,7 @@ export const klicktippNewsletterStateMiddleware: MiddlewareFn = async ( if (klickTippUser) { klickTipp = new KlickTipp(klickTippUser) } - } catch (err) { - console.log('Something went wrong', err) - } + } catch (err) {} } result.klickTipp = klickTipp return result From 481bd637941494e0888aa6d89aacfb10522724b5 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 13 Oct 2021 12:08:22 +0200 Subject: [PATCH 070/158] production from NODE_ENV, please test --- backend/.env.dist | 1 - backend/src/config/index.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/backend/.env.dist b/backend/.env.dist index 359b41d3c..3ac50ac9b 100644 --- a/backend/.env.dist +++ b/backend/.env.dist @@ -1,4 +1,3 @@ -PRODUCTION= PORT=4000 JWT_SECRET=secret123 JWT_EXPIRES_IN=10m diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 6142ae3ba..7de498f85 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -11,7 +11,7 @@ const server = { LOGIN_API_URL: process.env.LOGIN_API_URL || 'http://login-server:1201/', COMMUNITY_API_URL: process.env.COMMUNITY_API_URL || 'http://nginx/api/', GDT_API_URL: process.env.GDT_API_URL || 'https://gdt.gradido.net', - PRODUCTION: process.env.PRODUCTION === 'true' || false, + PRODUCTION: process.env.NODE_ENV === 'production' || false, } const database = { From 58182d73c65d7e50e00a38aed15c5ab6543795bc Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 13 Oct 2021 13:26:46 +0200 Subject: [PATCH 071/158] Added the publisherId to the login & createUser calls, adjusted the tests to the new code. --- backend/src/graphql/arg/CreateUserArgs.ts | 5 ++++- backend/src/graphql/arg/UnsecureLoginArgs.ts | 4 ++-- backend/src/graphql/model/User.ts | 6 +++--- backend/src/graphql/resolver/UserResolver.ts | 10 ++++++---- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/backend/src/graphql/arg/CreateUserArgs.ts b/backend/src/graphql/arg/CreateUserArgs.ts index 486cb023b..3d09e56eb 100644 --- a/backend/src/graphql/arg/CreateUserArgs.ts +++ b/backend/src/graphql/arg/CreateUserArgs.ts @@ -1,4 +1,4 @@ -import { ArgsType, Field } from 'type-graphql' +import { ArgsType, Field, Int } from 'type-graphql' @ArgsType() export default class CreateUserArgs { @@ -16,4 +16,7 @@ export default class CreateUserArgs { @Field(() => String) language: string + + @Field(() => Int, { nullable: true }) + publisherId: number } diff --git a/backend/src/graphql/arg/UnsecureLoginArgs.ts b/backend/src/graphql/arg/UnsecureLoginArgs.ts index 42e467eee..ac69e7441 100644 --- a/backend/src/graphql/arg/UnsecureLoginArgs.ts +++ b/backend/src/graphql/arg/UnsecureLoginArgs.ts @@ -1,4 +1,4 @@ -import { ArgsType, Field } from 'type-graphql' +import { ArgsType, Field, Int } from 'type-graphql' @ArgsType() export default class UnsecureLoginArgs { @@ -8,6 +8,6 @@ export default class UnsecureLoginArgs { @Field(() => String) password: string - @Field(() => Number, { nullable: true }) + @Field(() => Int, { nullable: true }) publisherId: number } diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 890e8bdba..08651ae17 100644 --- a/backend/src/graphql/model/User.ts +++ b/backend/src/graphql/model/User.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/explicit-module-boundary-types */ -import { ObjectType, Field } from 'type-graphql' +import { ObjectType, Field, Int } from 'type-graphql' import { KlickTipp } from './KlickTipp' @ObjectType() @@ -66,8 +66,8 @@ export class User { groupId: number */ // what is publisherId? - @Field(() => Number) - publisherId: number + @Field(() => Int, { nullable: true }) + publisherId?: number @Field(() => Boolean) coinanimation: boolean diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 1f5667e8f..2dcffb2d9 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -48,6 +48,9 @@ export class UserResolver { value: encode(result.data.session_id, result.data.user.public_hex), }) const user = new User(result.data.user) + if (user.publisherId === 0) { + user.publisherId = undefined + } user.hasElopage = result.data.hasElopage // read additional settings from settings table const userRepository = getCustomRepository(UserRepository) @@ -68,8 +71,7 @@ export class UserResolver { throw new Error('error with cannot happen') } - if (publisherId) { - // Save it + if (!user.hasElopage && publisherId) { user.publisherId = publisherId await this.updateUserInfos( { publisherId }, @@ -115,7 +117,7 @@ export class UserResolver { @Mutation(() => String) async createUser( - @Args() { email, firstName, lastName, password, language }: CreateUserArgs, + @Args() { email, firstName, lastName, password, language, publisherId }: CreateUserArgs, ): Promise { const payload = { email, @@ -125,7 +127,7 @@ export class UserResolver { emailType: 2, login_after_register: true, language: language, - publisher_id: 0, + publisher_id: publisherId, } const result = await apiPost(CONFIG.LOGIN_API_URL + 'createUser', payload) if (!result.success) { From ad11d482e0f1e5593bbbdef1fa661f9a6964d4b9 Mon Sep 17 00:00:00 2001 From: elweyn Date: Wed, 13 Oct 2021 13:35:58 +0200 Subject: [PATCH 072/158] Missing files.. --- .github/workflows/test.yml | 4 +-- frontend/.env.dist | 1 + .../components/SidebarPlugin/SideBar.spec.js | 2 +- .../src/components/SidebarPlugin/SideBar.vue | 12 ++++++--- frontend/src/config/index.js | 1 + frontend/src/graphql/mutations.js | 2 ++ frontend/src/graphql/queries.js | 5 ++-- frontend/src/store/store.js | 6 ++++- frontend/src/store/store.test.js | 25 ++++++++++++++++--- frontend/src/views/Pages/Login.spec.js | 2 ++ frontend/src/views/Pages/Login.vue | 1 + frontend/src/views/Pages/Register.spec.js | 2 ++ frontend/src/views/Pages/Register.vue | 1 + 13 files changed, 51 insertions(+), 13 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index de9939101..e7578dc11 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -386,7 +386,7 @@ jobs: report_name: Coverage Backend type: lcov result_path: ./coverage/lcov.info - min_coverage: 4 + min_coverage: 3 token: ${{ github.token }} ############################################################################## @@ -541,4 +541,4 @@ jobs: - name: database | up run: docker-compose -f docker-compose.yml run -T database yarn up - name: database | reset - run: docker-compose -f docker-compose.yml run -T database yarn reset \ No newline at end of file + run: docker-compose -f docker-compose.yml run -T database yarn reset diff --git a/frontend/.env.dist b/frontend/.env.dist index a7d67f970..90f968bd0 100644 --- a/frontend/.env.dist +++ b/frontend/.env.dist @@ -1,3 +1,4 @@ ALLOW_REGISTER=true GRAPHQL_URI=http://localhost:4000/graphql +DEFAULT_PUBLISHER_ID=2896 //BUILD_COMMIT=0000000 \ No newline at end of file diff --git a/frontend/src/components/SidebarPlugin/SideBar.spec.js b/frontend/src/components/SidebarPlugin/SideBar.spec.js index 993fdf195..e42369e50 100644 --- a/frontend/src/components/SidebarPlugin/SideBar.spec.js +++ b/frontend/src/components/SidebarPlugin/SideBar.spec.js @@ -109,7 +109,7 @@ describe('SideBar', () => { }) }) - describe('member's area with publisher ID', () => { + describe("member's area with publisher ID", () => { beforeEach(() => { mocks.$store.state.hasElopage = true }) diff --git a/frontend/src/components/SidebarPlugin/SideBar.vue b/frontend/src/components/SidebarPlugin/SideBar.vue index 5971b7b4e..8f153cb11 100755 --- a/frontend/src/components/SidebarPlugin/SideBar.vue +++ b/frontend/src/components/SidebarPlugin/SideBar.vue @@ -68,6 +68,7 @@