diff --git a/.github/ISSUE_TEMPLATE/release.md b/.github/ISSUE_TEMPLATE/release.md index 2bec90e90..c9f4b787d 100644 --- a/.github/ISSUE_TEMPLATE/release.md +++ b/.github/ISSUE_TEMPLATE/release.md @@ -1,13 +1,13 @@ --- -name: 🏅 Release +name: 🎂 Release about: Define a Release labels: release -title: 🏅 [RELEASE] +title: 🎂 [RELEASE] --- -## 🏅 RELEASE +## 🎂 RELEASE diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 96c6e4df3..b6fd6c31d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -344,7 +344,7 @@ jobs: report_name: Coverage Frontend type: lcov result_path: ./coverage/lcov.info - min_coverage: 76 + min_coverage: 82 token: ${{ github.token }} ############################################################################## diff --git a/CHANGELOG.md b/CHANGELOG.md index 74119cb33..2d207d309 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,153 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [1.3.1](https://github.com/gradido/gradido/compare/1.2.1...1.3.1) +#### [1.5.1](https://github.com/gradido/gradido/compare/1.5.0...1.5.1) +> 15 October 2021 + +- fix isExitInDb [`#994`](https://github.com/gradido/gradido/pull/994) +- fix [`80228ef`](https://github.com/gradido/gradido/commit/80228ef842d4087ea4b80934b15b8112611e3e33) + +#### [1.5.0](https://github.com/gradido/gradido/compare/1.4.0...1.5.0) + +> 15 October 2021 + +- v1.5.0 [`#986`](https://github.com/gradido/gradido/pull/986) +- default value for empty field [`#993`](https://github.com/gradido/gradido/pull/993) +- fix language registriert [`#992`](https://github.com/gradido/gradido/pull/992) +- Change the publisherId to nullable. [`#991`](https://github.com/gradido/gradido/pull/991) +- Revert "deliver a decay block every time" [`#990`](https://github.com/gradido/gradido/pull/990) +- update first name, last name and username in community server db on c… [`#989`](https://github.com/gradido/gradido/pull/989) +- deliver a decay block every time [`#988`](https://github.com/gradido/gradido/pull/988) +- refactor: Activate Registration [`#978`](https://github.com/gradido/gradido/pull/978) +- fix: summe-gdd-schoepfun [`#980`](https://github.com/gradido/gradido/pull/980) +- fix: Use TransactionId as Collapse Identifier [`#985`](https://github.com/gradido/gradido/pull/985) +- icon in one row - fix [`#979`](https://github.com/gradido/gradido/pull/979) +- error rounding in transactions list fixed [`#974`](https://github.com/gradido/gradido/pull/974) +- fix publisherId config [`#973`](https://github.com/gradido/gradido/pull/973) +- refactor: In Production only Show one Community [`#968`](https://github.com/gradido/gradido/pull/968) +- 804 elopage registration [`#959`](https://github.com/gradido/gradido/pull/959) +- Add autocorrect keys [`#960`](https://github.com/gradido/gradido/pull/960) +- check for elopage account [`#949`](https://github.com/gradido/gradido/pull/949) +- check pid on gdt server [`#958`](https://github.com/gradido/gradido/pull/958) +- add check for empty user list [`#957`](https://github.com/gradido/gradido/pull/957) +- feat: Improve Test of Navigation Guard of Vue Router [`#950`](https://github.com/gradido/gradido/pull/950) +- refactor: Clean Up Frontend Links, Tests and Logic [`#952`](https://github.com/gradido/gradido/pull/952) +- feat: Global Catch of Publisher ID to Store [`#943`](https://github.com/gradido/gradido/pull/943) +- Add User on createUser to community server db [`#915`](https://github.com/gradido/gradido/pull/915) +- Frontend tests & coinanimation fixes [`#936`](https://github.com/gradido/gradido/pull/936) +- 803 community selection page of registration process 2 [`#918`](https://github.com/gradido/gradido/pull/918) +- feat: Test Vue Router [`#940`](https://github.com/gradido/gradido/pull/940) +- Frontend style documentation wallet-app [`#938`](https://github.com/gradido/gradido/pull/938) +- Clean graphql structure [`#935`](https://github.com/gradido/gradido/pull/935) +- silence webpack, it was very noisy [`#934`](https://github.com/gradido/gradido/pull/934) +- Community test database fix [`#932`](https://github.com/gradido/gradido/pull/932) +- 585 coin animation on and off switchable [`#813`](https://github.com/gradido/gradido/pull/813) +- Bug fixes recent changes [`#931`](https://github.com/gradido/gradido/pull/931) +- fix migrations to use only the entity model [`#928`](https://github.com/gradido/gradido/pull/928) +- Refactor graphql [`#929`](https://github.com/gradido/gradido/pull/929) +- Clean models2 [`#927`](https://github.com/gradido/gradido/pull/927) +- Docu graphics mocks [`#930`](https://github.com/gradido/gradido/pull/930) +- feat: Setup Unit Tests for Backend [`#920`](https://github.com/gradido/gradido/pull/920) +- refactor: Provide pubKey in Resolver Context to Avoid API Calls [`#906`](https://github.com/gradido/gradido/pull/906) +- fix: Double Redirect After Logout with Expired JWT [`#914`](https://github.com/gradido/gradido/pull/914) +- fix: Whitespace in Password Shows Validation Error [`#907`](https://github.com/gradido/gradido/pull/907) +- feat: Test Change Language in User Profile [`#904`](https://github.com/gradido/gradido/pull/904) +- Apollo list transactions [`#893`](https://github.com/gradido/gradido/pull/893) +- Remove api endpoints from frontend config [`#912`](https://github.com/gradido/gradido/pull/912) +- register process simplified [`#908`](https://github.com/gradido/gradido/pull/908) +- Cleaned up locales for settings and adjusted texts in files [`#905`](https://github.com/gradido/gradido/pull/905) +- fix: Warnings in Gdd Transaction List Spec [`#903`](https://github.com/gradido/gradido/pull/903) +- docu release plan [`#868`](https://github.com/gradido/gradido/pull/868) +- update password check, allow every special char [`#890`](https://github.com/gradido/gradido/pull/890) +- fix error with apollo, typeorm and build [`#897`](https://github.com/gradido/gradido/pull/897) +- Db check with typeorm [`#894`](https://github.com/gradido/gradido/pull/894) +- fix bug col to cols on <b-col> [`#895`](https://github.com/gradido/gradido/pull/895) +- bug fix givenType 2,3,5,6 change to givenType 1 [`#896`](https://github.com/gradido/gradido/pull/896) +- Apollo list gdt transactions [`#891`](https://github.com/gradido/gradido/pull/891) +- 826 different design of gdd and gdt lists [`#886`](https://github.com/gradido/gradido/pull/886) +- decay calculation is calculated [`#815`](https://github.com/gradido/gradido/pull/815) +- round corners removed from profile settings page [`#887`](https://github.com/gradido/gradido/pull/887) +- Implement getBalance in Apollo [`#831`](https://github.com/gradido/gradido/pull/831) +- feat: Redirect to Login when JWT has expired [`#889`](https://github.com/gradido/gradido/pull/889) +- refactor: Queries to Mutations [`#863`](https://github.com/gradido/gradido/pull/863) +- Community-Server Test with new db migration [`#881`](https://github.com/gradido/gradido/pull/881) +- fix database not reading config [`#871`](https://github.com/gradido/gradido/pull/871) +- 733 language switch toast success [`#880`](https://github.com/gradido/gradido/pull/880) +- UserProfil Language switch has an error & UserProfil Language switch don't show right language text [`#879`](https://github.com/gradido/gradido/pull/879) +- docker skeema: mount sql files folder dynamic [`#864`](https://github.com/gradido/gradido/pull/864) +- disable auto-resend of not finished transactions on login-server restart [`#865`](https://github.com/gradido/gradido/pull/865) +- add commit hash with link to github into frontend [`#794`](https://github.com/gradido/gradido/pull/794) +- mock_choose_community [`#844`](https://github.com/gradido/gradido/pull/844) +- Remove discord link for issue templates [`#845`](https://github.com/gradido/gradido/pull/845) +- update docker files [`#830`](https://github.com/gradido/gradido/pull/830) +- added publisher_id field to user [`#245`](https://github.com/gradido/gradido/pull/245) +- webpack update [`#811`](https://github.com/gradido/gradido/pull/811) +- resolvers [`562ad9a`](https://github.com/gradido/gradido/commit/562ad9ae31d97f90a371452bed1ffe10ebf2d3a5) +- deleted inputs (now args) [`8ab542a`](https://github.com/gradido/gradido/commit/8ab542a28acf6b78d7a9e7fe7757363d225f7b4f) +- fix UserCard_CoinAnimation to properly use the store, have 100% coverage and other minor fixes & simplifications [`ce826de`](https://github.com/gradido/gradido/commit/ce826deb1d6d92caba514713539dca2da3f74de7) + +#### [1.4.0](https://github.com/gradido/gradido/compare/1.3.1...1.4.0) + +> 16 September 2021 + +- feat: Release 1.4.0 [`#814`](https://github.com/gradido/gradido/pull/814) +- Integration of the KlicktippAPI to the User management [`#753`](https://github.com/gradido/gradido/pull/753) +- feat: Locale Management [`#809`](https://github.com/gradido/gradido/pull/809) +- feat: Increase Coverage Test Frontend [`#812`](https://github.com/gradido/gradido/pull/812) +- My thoughts to jwt [`#800`](https://github.com/gradido/gradido/pull/800) +- Remove discord link [`#808`](https://github.com/gradido/gradido/pull/808) +- refactor: Pagination Buttons [`#806`](https://github.com/gradido/gradido/pull/806) +- add new components selectLanguage and Usercard_Language [`#798`](https://github.com/gradido/gradido/pull/798) +- gdt transaction with arrays and without slots [`#793`](https://github.com/gradido/gradido/pull/793) +- feat: New JWT in Every Authenticated Response [`#797`](https://github.com/gradido/gradido/pull/797) +- fix euro after comma gdt view [`#799`](https://github.com/gradido/gradido/pull/799) +- different path for checkEmail and resetPassword [`#796`](https://github.com/gradido/gradido/pull/796) +- fix old frontend wrong display of event gdt [`#795`](https://github.com/gradido/gradido/pull/795) +- update scripts and doc for login-server setup without docker [`#783`](https://github.com/gradido/gradido/pull/783) +- fix: Flaky Test for Logout [`#792`](https://github.com/gradido/gradido/pull/792) +- Analyse Iota Colored Coins [`#779`](https://github.com/gradido/gradido/pull/779) +- Fix Bug in displaying GDT in Old frontend [`#788`](https://github.com/gradido/gradido/pull/788) +- feat: JSON Web Token for Authentification [`#777`](https://github.com/gradido/gradido/pull/777) +- select language during registration [`#778`](https://github.com/gradido/gradido/pull/778) +- Fix missing gdt id [`#782`](https://github.com/gradido/gradido/pull/782) +- Remove Migrations from community server [`#776`](https://github.com/gradido/gradido/pull/776) +- fix_database_migrations [`#775`](https://github.com/gradido/gradido/pull/775) +- decay with the value 0 is no longer displayed [`#773`](https://github.com/gradido/gradido/pull/773) +- database_migrations [`#770`](https://github.com/gradido/gradido/pull/770) +- backend_version [`#756`](https://github.com/gradido/gradido/pull/756) +- issue_type_release [`#769`](https://github.com/gradido/gradido/pull/769) +- some_docu [`#771`](https://github.com/gradido/gradido/pull/771) +- database_reachable_in_testmode [`#768`](https://github.com/gradido/gradido/pull/768) +- logo changed, old logos and icons deleted [`#734`](https://github.com/gradido/gradido/pull/734) +- change default value of communty url [`#755`](https://github.com/gradido/gradido/pull/755) +- feat: Testing Tabs of TransactionLists [`#737`](https://github.com/gradido/gradido/pull/737) +- Added a fetchPolicy: 'no-cache' to the login vall. [`#736`](https://github.com/gradido/gradido/pull/736) +- Docu fragen community [`#731`](https://github.com/gradido/gradido/pull/731) +- feat: Vue Apollo Client [`#701`](https://github.com/gradido/gradido/pull/701) +- change text from Geld to Gradidos [`#711`](https://github.com/gradido/gradido/pull/711) +- fix fix [`#728`](https://github.com/gradido/gradido/pull/728) +- sort locales [`ec12a28`](https://github.com/gradido/gradido/commit/ec12a28f81577d530f58b42b7f8c2c7d20dffd64) +- feat: Unify and Sort Locales [`aba4f4d`](https://github.com/gradido/gradido/commit/aba4f4d20e0a13016e3528a1c5c30c111eb3a9f1) +- feat: Increase Coverage [`3c061bc`](https://github.com/gradido/gradido/commit/3c061bcb8d1a3a47442ed6a351e1428e15b314aa) + +#### [1.3.1](https://github.com/gradido/gradido/compare/1.3.0...1.3.1) + +> 12 August 2021 + +- fix: Translations and Formula Display [`#727`](https://github.com/gradido/gradido/pull/727) +- 612 docu structure [`#688`](https://github.com/gradido/gradido/pull/688) +- Community update for gdt list GDT transaction format [`#726`](https://github.com/gradido/gradido/pull/726) +- [#612] new directory structure in /docu/Concepts [`10bf3b0`](https://github.com/gradido/gradido/commit/10bf3b0cdfa6c44f879be0155e93f636601a051b) +- #612 additional documents [`ac0ed4f`](https://github.com/gradido/gradido/commit/ac0ed4fee81caff26d09b5de47dd130f12abdb45) +- #612 docu restructuring [`e67e1c4`](https://github.com/gradido/gradido/commit/e67e1c41e78264698e6fae4cf1d29751de7e7b29) + +#### [1.3.0](https://github.com/gradido/gradido/compare/1.2.1...1.3.0) + +> 12 August 2021 + +- Update README.md [`#719`](https://github.com/gradido/gradido/pull/719) +- fixed bugs, step 1 [`#718`](https://github.com/gradido/gradido/pull/718) - update code for correct transactions listening [`#725`](https://github.com/gradido/gradido/pull/725) - bugfix: change to new frontend passwort reset [`#724`](https://github.com/gradido/gradido/pull/724) - feat: Add Pagination Buttons to GDT Transaction List [`#716`](https://github.com/gradido/gradido/pull/716) diff --git a/backend/CHANGELOG.md b/backend/CHANGELOG.md deleted file mode 100644 index baa1547c9..000000000 --- a/backend/CHANGELOG.md +++ /dev/null @@ -1,418 +0,0 @@ -### Changelog - -All notable changes to this project will be documented in this file. Dates are displayed in UTC. - -Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - -#### [1.4.0](https://github.com/gradido/gradido/compare/1.3.1...1.4.0) - -- Integration of the KlicktippAPI to the User management [`#753`](https://github.com/gradido/gradido/pull/753) -- feat: Locale Management [`#809`](https://github.com/gradido/gradido/pull/809) -- feat: Increase Coverage Test Frontend [`#812`](https://github.com/gradido/gradido/pull/812) -- My thoughts to jwt [`#800`](https://github.com/gradido/gradido/pull/800) -- Remove discord link [`#808`](https://github.com/gradido/gradido/pull/808) -- refactor: Pagination Buttons [`#806`](https://github.com/gradido/gradido/pull/806) -- add new components selectLanguage and Usercard_Language [`#798`](https://github.com/gradido/gradido/pull/798) -- gdt transaction with arrays and without slots [`#793`](https://github.com/gradido/gradido/pull/793) -- feat: New JWT in Every Authenticated Response [`#797`](https://github.com/gradido/gradido/pull/797) -- fix euro after comma gdt view [`#799`](https://github.com/gradido/gradido/pull/799) -- different path for checkEmail and resetPassword [`#796`](https://github.com/gradido/gradido/pull/796) -- fix old frontend wrong display of event gdt [`#795`](https://github.com/gradido/gradido/pull/795) -- update scripts and doc for login-server setup without docker [`#783`](https://github.com/gradido/gradido/pull/783) -- fix: Flaky Test for Logout [`#792`](https://github.com/gradido/gradido/pull/792) -- Analyse Iota Colored Coins [`#779`](https://github.com/gradido/gradido/pull/779) -- Fix Bug in displaying GDT in Old frontend [`#788`](https://github.com/gradido/gradido/pull/788) -- feat: JSON Web Token for Authentification [`#777`](https://github.com/gradido/gradido/pull/777) -- select language during registration [`#778`](https://github.com/gradido/gradido/pull/778) -- Fix missing gdt id [`#782`](https://github.com/gradido/gradido/pull/782) -- Remove Migrations from community server [`#776`](https://github.com/gradido/gradido/pull/776) -- fix_database_migrations [`#775`](https://github.com/gradido/gradido/pull/775) -- decay with the value 0 is no longer displayed [`#773`](https://github.com/gradido/gradido/pull/773) -- database_migrations [`#770`](https://github.com/gradido/gradido/pull/770) -- backend_version [`#756`](https://github.com/gradido/gradido/pull/756) -- issue_type_release [`#769`](https://github.com/gradido/gradido/pull/769) -- some_docu [`#771`](https://github.com/gradido/gradido/pull/771) -- database_reachable_in_testmode [`#768`](https://github.com/gradido/gradido/pull/768) -- logo changed, old logos and icons deleted [`#734`](https://github.com/gradido/gradido/pull/734) -- change default value of communty url [`#755`](https://github.com/gradido/gradido/pull/755) -- feat: Testing Tabs of TransactionLists [`#737`](https://github.com/gradido/gradido/pull/737) -- Added a fetchPolicy: 'no-cache' to the login vall. [`#736`](https://github.com/gradido/gradido/pull/736) -- Docu fragen community [`#731`](https://github.com/gradido/gradido/pull/731) -- feat: Vue Apollo Client [`#701`](https://github.com/gradido/gradido/pull/701) -- change text from Geld to Gradidos [`#711`](https://github.com/gradido/gradido/pull/711) -- fix fix [`#728`](https://github.com/gradido/gradido/pull/728) -- sort locales [`ec12a28`](https://github.com/gradido/gradido/commit/ec12a28f81577d530f58b42b7f8c2c7d20dffd64) -- feat: Unify and Sort Locales [`aba4f4d`](https://github.com/gradido/gradido/commit/aba4f4d20e0a13016e3528a1c5c30c111eb3a9f1) -- feat: Increase Coverage [`3c061bc`](https://github.com/gradido/gradido/commit/3c061bcb8d1a3a47442ed6a351e1428e15b314aa) - -#### [1.3.1](https://github.com/gradido/gradido/compare/1.3.0...1.3.1) - -> 12 August 2021 - -- fix: Translations and Formula Display [`#727`](https://github.com/gradido/gradido/pull/727) -- 612 docu structure [`#688`](https://github.com/gradido/gradido/pull/688) -- Community update for gdt list GDT transaction format [`#726`](https://github.com/gradido/gradido/pull/726) -- [#612] new directory structure in /docu/Concepts [`10bf3b0`](https://github.com/gradido/gradido/commit/10bf3b0cdfa6c44f879be0155e93f636601a051b) -- #612 additional documents [`ac0ed4f`](https://github.com/gradido/gradido/commit/ac0ed4fee81caff26d09b5de47dd130f12abdb45) -- #612 docu restructuring [`e67e1c4`](https://github.com/gradido/gradido/commit/e67e1c41e78264698e6fae4cf1d29751de7e7b29) - -#### [1.3.0](https://github.com/gradido/gradido/compare/1.2.1...1.3.0) - -> 12 August 2021 - -- Update README.md [`#719`](https://github.com/gradido/gradido/pull/719) -- fixed bugs, step 1 [`#718`](https://github.com/gradido/gradido/pull/718) -- update code for correct transactions listening [`#725`](https://github.com/gradido/gradido/pull/725) -- bugfix: change to new frontend passwort reset [`#724`](https://github.com/gradido/gradido/pull/724) -- feat: Add Pagination Buttons to GDT Transaction List [`#716`](https://github.com/gradido/gradido/pull/716) -- fix bug, change statment from transaction infbox [`#712`](https://github.com/gradido/gradido/pull/712) -- 650-display of the gdt transactions [`#687`](https://github.com/gradido/gradido/pull/687) -- Login-Server bug fix, allow names with 2 characters also [`#714`](https://github.com/gradido/gradido/pull/714) -- Apollo sendCoins via Login-Server [`#699`](https://github.com/gradido/gradido/pull/699) -- increase coverage to 34% [`#700`](https://github.com/gradido/gradido/pull/700) -- mobile friendly, add text, change text [`#683`](https://github.com/gradido/gradido/pull/683) -- Css color input error [`#646`](https://github.com/gradido/gradido/pull/646) -- Apollo gdt [`#686`](https://github.com/gradido/gradido/pull/686) -- Backend Setup [`#584`](https://github.com/gradido/gradido/pull/584) -- text-size in textarea and font-variante if focus [`#677`](https://github.com/gradido/gradido/pull/677) -- 680 app large maximum width [`#681`](https://github.com/gradido/gradido/pull/681) -- linting, server is working [`34b30b2`](https://github.com/gradido/gradido/commit/34b30b216b6fafcb5b686d4b023b05f2e9766bdf) -- server stack seems to work. Graphql does not load properly yet [`43f7cf8`](https://github.com/gradido/gradido/commit/43f7cf87679713d436a64d569d6af1594a12ee33) -- initial commit, base packages [`fdf0979`](https://github.com/gradido/gradido/commit/fdf0979830fece04208a6b3bb06bb5323a3c149b) - -#### [1.2.1](https://github.com/gradido/gradido/compare/1.2.0...1.2.1) - -> 22 July 2021 - -- release 1.2.1 [`#670`](https://github.com/gradido/gradido/pull/670) -- exchange positions of decay in transaction in old frontend [`#662`](https://github.com/gradido/gradido/pull/662) -- fix unneccessary migration run on fresh (docker) setup [`#654`](https://github.com/gradido/gradido/pull/654) -- move back decay as standalone transaction in old frontend [`#656`](https://github.com/gradido/gradido/pull/656) -- fix display error with creation [`#652`](https://github.com/gradido/gradido/pull/652) -- release [`a0b8056`](https://github.com/gradido/gradido/commit/a0b8056c17b22570a1b1dbb6fa6ce71e561b04af) -- update content for frontend [`d37ce09`](https://github.com/gradido/gradido/commit/d37ce0949ef97d2a6c6ffaf0be31db9f6d92e743) -- exchange positions [`bc000ef`](https://github.com/gradido/gradido/commit/bc000efd87c9701480c4aeaa7b819ab49bfe8f01) - -#### [1.2.0](https://github.com/gradido/gradido/compare/1.1.1...1.2.0) - -> 20 July 2021 - -- feat: Release v1.2.0 [`#648`](https://github.com/gradido/gradido/pull/648) -- 630 frontend text improvemets [`#645`](https://github.com/gradido/gradido/pull/645) -- #435 Visual Feedback on not sending GDD [`#647`](https://github.com/gradido/gradido/pull/647) -- Make E-Mail Text 100% German [`#643`](https://github.com/gradido/gradido/pull/643) -- Login fix crash [`#641`](https://github.com/gradido/gradido/pull/641) -- check for null date [`#640`](https://github.com/gradido/gradido/pull/640) -- Login fix wrong check email link [`#642`](https://github.com/gradido/gradido/pull/642) -- Change timeout for email resend to 10 Minutes [`#635`](https://github.com/gradido/gradido/pull/635) -- fix last Transaction are not shown in new frontend [`#633`](https://github.com/gradido/gradido/pull/633) -- fix bug with user roles and pending transactions [`#627`](https://github.com/gradido/gradido/pull/627) -- fix type not found error in listTransaction Call [`#628`](https://github.com/gradido/gradido/pull/628) -- refactor: Use Vue-Toasted to Toast Messages [`#619`](https://github.com/gradido/gradido/pull/619) -- feat: Test UserProfileTransactionList [`#624`](https://github.com/gradido/gradido/pull/624) -- fix: QRCode Error after Logout [`#623`](https://github.com/gradido/gradido/pull/623) -- fix: Fix Infinite Loop in Transaction List [`#622`](https://github.com/gradido/gradido/pull/622) -- feat: Transaction Details [`#607`](https://github.com/gradido/gradido/pull/607) -- fix: Test for ScrollTo in Transaction List [`#621`](https://github.com/gradido/gradido/pull/621) -- Allow empty description [`#618`](https://github.com/gradido/gradido/pull/618) -- fix: Do Not Pass Userdata Description to Server [`#617`](https://github.com/gradido/gradido/pull/617) -- fix: Transaction Pagination Scroll Top [`#615`](https://github.com/gradido/gradido/pull/615) -- fix: Mobile Pagination [`#614`](https://github.com/gradido/gradido/pull/614) -- feat: Test AccountOverview [`#611`](https://github.com/gradido/gradido/pull/611) -- feat: Test Validation Rules [`#610`](https://github.com/gradido/gradido/pull/610) -- refactor: Reset Password Page [`#606`](https://github.com/gradido/gradido/pull/606) -- refactor: Change Password [`#603`](https://github.com/gradido/gradido/pull/603) -- refactor: Forgot Password Form [`#602`](https://github.com/gradido/gradido/pull/602) -- refactor: Update Store Tests [`#601`](https://github.com/gradido/gradido/pull/601) -- Community fix [`#598`](https://github.com/gradido/gradido/pull/598) -- refactor: Password Component [`#564`](https://github.com/gradido/gradido/pull/564) -- Fix crashing Problem with Login-Server [`#600`](https://github.com/gradido/gradido/pull/600) -- Update Password Reset E-Mail Subject Encoding [`#579`](https://github.com/gradido/gradido/pull/579) -- move decay between transactions into the transactions [`#483`](https://github.com/gradido/gradido/pull/483) -- fix #591 [`#591`](https://github.com/gradido/gradido/issues/591) -- fix style decay startblick [`cc7778b`](https://github.com/gradido/gradido/commit/cc7778b55d1baaa7be2d9440480e0fb27bb9a930) -- Remove dynamic cast because it lead to errors again and agin (Poco::AutoPtr don't work correct with that) [`0db5912`](https://github.com/gradido/gradido/commit/0db5912a67158be8f313c01f06350f8339cb0e28) -- Remove dynamic cast because it lead to errors again and agin (Poco::AutoPtr don't work correct with that) [`cee7d7a`](https://github.com/gradido/gradido/commit/cee7d7ac3c4c8c1f481cc3a87fb15422c858413b) - -#### [1.1.1](https://github.com/gradido/gradido/compare/1.1.0...1.1.1) - -> 22 June 2021 - -- release [`#581`](https://github.com/gradido/gradido/pull/581) -- Auto deploy [`#580`](https://github.com/gradido/gradido/pull/580) -- update transfer email text [`#574`](https://github.com/gradido/gradido/pull/574) -- update mysql because tuple has changed [`#576`](https://github.com/gradido/gradido/pull/576) -- Login fix pending transactions [`#578`](https://github.com/gradido/gradido/pull/578) -- add test to prevent bug in future [`630d667`](https://github.com/gradido/gradido/commit/630d667e996870a1bf9aa9586b0467d58419e525) -- use standard path. add nginx example [`ac249b4`](https://github.com/gradido/gradido/commit/ac249b46830a8039aec52d30b48084b50a264b6f) -- add autodeploy bash scripts [`f49cf4d`](https://github.com/gradido/gradido/commit/f49cf4d7f8054d87efa1e12055a7ef0c6d3b9872) - -#### [1.1.0](https://github.com/gradido/gradido/compare/1.0.2...1.1.0) - -> 17 June 2021 - -- add first error additional as msg [`#573`](https://github.com/gradido/gradido/pull/573) -- fix: Remove Grouping for Max Error [`#572`](https://github.com/gradido/gradido/pull/572) -- fix: API Call for Reset Password [`#571`](https://github.com/gradido/gradido/pull/571) -- Login reset password [`#570`](https://github.com/gradido/gradido/pull/570) -- Hide unuse components in profil [`#566`](https://github.com/gradido/gradido/pull/566) -- fix: Thousend Dividers on GDD Send Amount Field [`#567`](https://github.com/gradido/gradido/pull/567) -- reorganisiere Dockerfiles [`#550`](https://github.com/gradido/gradido/pull/550) -- hot fixes shown by test [`#551`](https://github.com/gradido/gradido/pull/551) -- fix to big text ths [`#565`](https://github.com/gradido/gradido/pull/565) -- feat: Trim Email on Blur [`#556`](https://github.com/gradido/gradido/pull/556) -- Mobile UI send gdd form [`#562`](https://github.com/gradido/gradido/pull/562) -- fix: Change Password Form [`#561`](https://github.com/gradido/gradido/pull/561) -- change userdata button disable rules [`#548`](https://github.com/gradido/gradido/pull/548) -- Change password require old password [`#519`](https://github.com/gradido/gradido/pull/519) -- feat: Test Forget Password [`#546`](https://github.com/gradido/gradido/pull/546) -- feat: Validate Change Username [`#545`](https://github.com/gradido/gradido/pull/545) -- Remove base input example login vue [`#524`](https://github.com/gradido/gradido/pull/524) -- Feature: Change Username [`#490`](https://github.com/gradido/gradido/pull/490) -- feat: Toaster to Display Messages [`#512`](https://github.com/gradido/gradido/pull/512) -- fix: Validation of GDD Send Amount Field [`#525`](https://github.com/gradido/gradido/pull/525) -- Community coverage [`#496`](https://github.com/gradido/gradido/pull/496) -- compare with last transaction sended [`#523`](https://github.com/gradido/gradido/pull/523) -- remove check decays for being at least 100 GDD cent [`#526`](https://github.com/gradido/gradido/pull/526) -- fix: Remove Target Date in Send Coins Request [`#518`](https://github.com/gradido/gradido/pull/518) -- Feature profile page bugs [`#511`](https://github.com/gradido/gradido/pull/511) -- fix: GDD Send Amount Input Field [`#491`](https://github.com/gradido/gradido/pull/491) -- change transfer confirmation email [`#485`](https://github.com/gradido/gradido/pull/485) -- Login wait on passwords with missing chars [`#487`](https://github.com/gradido/gradido/pull/487) -- fix problem with create User [`#486`](https://github.com/gradido/gradido/pull/486) -- Feature: Profile Page + Update API [`#474`](https://github.com/gradido/gradido/pull/474) -- add new API Call checkUsername [`#482`](https://github.com/gradido/gradido/pull/482) -- feat: Pagination Buttons for Transaction List [`#473`](https://github.com/gradido/gradido/pull/473) -- Login-Server & Community-Server Coverage [`#472`](https://github.com/gradido/gradido/pull/472) -- login without hedera [`#478`](https://github.com/gradido/gradido/pull/478) -- fix: Show Correct Version Number in Footer [`#475`](https://github.com/gradido/gradido/pull/475) -- refactor: Remove Element-UI [`#476`](https://github.com/gradido/gradido/pull/476) -- remove components Charts, Notification, SearchUser, ButtonCheckbox, Button RadioGroup, Breadcrumb [`159bff7`](https://github.com/gradido/gradido/commit/159bff71df20a5c48f93389b2f990f7fe54e53b9) -- fix bug, update dockerfiles to use dependencies without grpc [`dedcebd`](https://github.com/gradido/gradido/commit/dedcebdb95ee0f3dfd2ad62074d4181af38476a2) -- add warning to able to forward warnings from community server to client [`2fc3fe9`](https://github.com/gradido/gradido/commit/2fc3fe94a09bae199bf2f34f9df90e8fc3879c2b) - -#### [1.0.2](https://github.com/gradido/gradido/compare/1.0.1...1.0.2) - -> 27 May 2021 - -- feat: Test Transaction List [`#470`](https://github.com/gradido/gradido/pull/470) -- fixed problem with finding cpsp parse binary under windows with conan [`#471`](https://github.com/gradido/gradido/pull/471) -- fix: GDD Amount is Always Displayed with Two Digits [`#468`](https://github.com/gradido/gradido/pull/468) -- fix: Date Time Formats [`#469`](https://github.com/gradido/gradido/pull/469) -- Community ipv6 localhost [`#466`](https://github.com/gradido/gradido/pull/466) -- Login html pages autoparse [`#464`](https://github.com/gradido/gradido/pull/464) -- everything I find and fix crash related in login server this week (kw 20) [`#448`](https://github.com/gradido/gradido/pull/448) -- 437 bug mobile transaction list is not easy to read [`#462`](https://github.com/gradido/gradido/pull/462) -- Require memo in send [`#455`](https://github.com/gradido/gradido/pull/455) -- bug: Thx Page Shows Content Dependent of Route From [`#459`](https://github.com/gradido/gradido/pull/459) -- bug: responsive display error on pads fixed [`#461`](https://github.com/gradido/gradido/pull/461) -- [Bug] German "Dir" is written with capital D in send validation bug [`#460`](https://github.com/gradido/gradido/pull/460) -- feat: Save Locale in Database [`#450`](https://github.com/gradido/gradido/pull/450) -- attention! notice in send area removed [`#458`](https://github.com/gradido/gradido/pull/458) -- Remove Error Message encoding [`#456`](https://github.com/gradido/gradido/pull/456) -- bug fix:mobile menu closes on logout, probs value problem on logout f… [`#454`](https://github.com/gradido/gradido/pull/454) -- bug-login password change show hide inserted [`#453`](https://github.com/gradido/gradido/pull/453) -- fix sorting and use total count [`#451`](https://github.com/gradido/gradido/pull/451) -- add dynamic error email if transaction failed [`#452`](https://github.com/gradido/gradido/pull/452) -- ceil the last decay [`#449`](https://github.com/gradido/gradido/pull/449) -- feat: Raise Coverage of Frontend Unit Tets to 18% [`#447`](https://github.com/gradido/gradido/pull/447) -- parse cpsp files automatic in build [`a4a12bb`](https://github.com/gradido/gradido/commit/a4a12bb62b4000e035ff15e17c5a5f5861653ff6) -- translate german html encoded error messages to english and use gettext for automatic translation [`d339627`](https://github.com/gradido/gradido/commit/d33962736d94c1cb7a12ff775bc2c8d7505d646e) -- 100% coverage of GddTransactionList [`96fb245`](https://github.com/gradido/gradido/commit/96fb245821c69f4d321204a663247d5eee60d92f) - -#### [1.0.1](https://github.com/gradido/gradido/compare/1.0.0...1.0.1) - -> 14 May 2021 - -- Login crash fix [`#444`](https://github.com/gradido/gradido/pull/444) -- add try catch blocks to prevent login-server from crashing [`22ff220`](https://github.com/gradido/gradido/commit/22ff22072956f8b843037c75c5b16b7ff5d6a2a3) -- fix [`14a4243`](https://github.com/gradido/gradido/commit/14a424347817b1fe6912a113bffd70e55d688112) - -### [1.0.0](https://github.com/gradido/gradido/compare/0.9.4...1.0.0) - -> 14 May 2021 - -- Login build alpine [`#423`](https://github.com/gradido/gradido/pull/423) -- Release fix [`#428`](https://github.com/gradido/gradido/pull/428) -- Send button only click [`#427`](https://github.com/gradido/gradido/pull/427) -- use new function for balance overview in old frontend, update balance… [`#422`](https://github.com/gradido/gradido/pull/422) -- thx.vue coloured background removed. design adapted to app [`#426`](https://github.com/gradido/gradido/pull/426) -- translation password rules in Register.vue and ResetPasswort.vue fixed [`#424`](https://github.com/gradido/gradido/pull/424) -- 06x style [`#419`](https://github.com/gradido/gradido/pull/419) -- feat: Dash is Shown When Balance is Loading [`#396`](https://github.com/gradido/gradido/pull/396) -- refactor: Split GddSend into Components [`#415`](https://github.com/gradido/gradido/pull/415) -- fix: Set Maximum Transactions Loaded to 1000 [`#395`](https://github.com/gradido/gradido/pull/395) -- BUG : preRELEASE : thx transaction false [`#394`](https://github.com/gradido/gradido/pull/394) -- feat: Validation of Input Fields of GddSend [`#386`](https://github.com/gradido/gradido/pull/386) -- add validation, check if user has tried to send themself gradidos [`#277`](https://github.com/gradido/gradido/pull/277) -- fix link generation [`#347`](https://github.com/gradido/gradido/pull/347) -- Community start decay [`#387`](https://github.com/gradido/gradido/pull/387) -- transaction error message, translations [`#388`](https://github.com/gradido/gradido/pull/388) -- docu: locales schöpfen-mysql befehl [`#392`](https://github.com/gradido/gradido/pull/392) -- Fix: QR Scanner Hide [`#380`](https://github.com/gradido/gradido/pull/380) -- change design- dark-blue of text-ligth [`#381`](https://github.com/gradido/gradido/pull/381) -- spelling & translation [`#385`](https://github.com/gradido/gradido/pull/385) -- 350 6 login [`#383`](https://github.com/gradido/gradido/pull/383) -- fix: breakout error [`#375`](https://github.com/gradido/gradido/pull/375) -- 233-Support-Button fix, and col error fix [`#343`](https://github.com/gradido/gradido/pull/343) -- fix: membersarea open in a new tap [`#370`](https://github.com/gradido/gradido/pull/370) -- 00x table footer componente [`#345`](https://github.com/gradido/gradido/pull/345) -- clickevent from icon to button [`#364`](https://github.com/gradido/gradido/pull/364) -- 404 link to login page fix [`#366`](https://github.com/gradido/gradido/pull/366) -- bug: session_id vs sessionId [`#365`](https://github.com/gradido/gradido/pull/365) -- eslint rule standard [`#344`](https://github.com/gradido/gradido/pull/344) -- don't show decays smaller than 0,01 GDD [`#329`](https://github.com/gradido/gradido/pull/329) -- 338 - mt-5 margin top 5 eingebunden [`#341`](https://github.com/gradido/gradido/pull/341) -- feat: Update Transactions When GddTable Is Rendered [`#339`](https://github.com/gradido/gradido/pull/339) -- my profile auskommentiert [`#337`](https://github.com/gradido/gradido/pull/337) -- give balance as float value in GDD (not longer GDD cent) [`#273`](https://github.com/gradido/gradido/pull/273) -- fix error with password reset email [`#276`](https://github.com/gradido/gradido/pull/276) -- transaction.show_all in en.json hinzugefügt [`#335`](https://github.com/gradido/gradido/pull/335) -- refactor: Add Paramerts to ListTransactions API Call [`#332`](https://github.com/gradido/gradido/pull/332) -- css abstände vom rand in mobilen style [`#272`](https://github.com/gradido/gradido/pull/272) -- error messages are displayed [`#304`](https://github.com/gradido/gradido/pull/304) -- cancel to reset, form rest event added [`#334`](https://github.com/gradido/gradido/pull/334) -- remove from error messages because its no longer exist [`#330`](https://github.com/gradido/gradido/pull/330) -- xx deleted [`#333`](https://github.com/gradido/gradido/pull/333) -- fix bug on Login group add host [`#274`](https://github.com/gradido/gradido/pull/274) -- transactionslist load and icon [`#324`](https://github.com/gradido/gradido/pull/324) -- THX changed to Thank you [`#305`](https://github.com/gradido/gradido/pull/305) -- fix_bug_template [`#284`](https://github.com/gradido/gradido/pull/284) -- feat: Restructure Overview [`#271`](https://github.com/gradido/gradido/pull/271) -- fix: Dynamic Balance in User Profile [`#278`](https://github.com/gradido/gradido/pull/278) -- refactor: Test and Clean Up Store [`#270`](https://github.com/gradido/gradido/pull/270) -- remove links to not work [`#267`](https://github.com/gradido/gradido/pull/267) -- change order of session_id [`#269`](https://github.com/gradido/gradido/pull/269) -- bug: Dynamic Balance [`#260`](https://github.com/gradido/gradido/pull/260) -- Fix problems with transactions in docker environment [`#261`](https://github.com/gradido/gradido/pull/261) -- update skeema call to allow also for unsafe db updates [`#250`](https://github.com/gradido/gradido/pull/250) -- turn registration on and off [`#266`](https://github.com/gradido/gradido/pull/266) -- 243 vue loader component - varante 2 [`#257`](https://github.com/gradido/gradido/pull/257) -- fix_issue_templates [`#262`](https://github.com/gradido/gradido/pull/262) -- fix_nginx_docker [`#253`](https://github.com/gradido/gradido/pull/253) -- 13_coverage [`#255`](https://github.com/gradido/gradido/pull/255) -- add language as fields which will be returned with user-object [`#244`](https://github.com/gradido/gradido/pull/244) -- add short description for target date in creation transaction [`#252`](https://github.com/gradido/gradido/pull/252) -- fix error "Integrity constraint violation: 1052 Column 'id' in where … [`#251`](https://github.com/gradido/gradido/pull/251) -- Clicks on button [`#246`](https://github.com/gradido/gradido/pull/246) -- Change css [`#231`](https://github.com/gradido/gradido/pull/231) -- feat: Reset Password [`#212`](https://github.com/gradido/gradido/pull/212) -- fix bug #221 [`#228`](https://github.com/gradido/gradido/pull/228) -- fix empty reply by empty group_id [`#227`](https://github.com/gradido/gradido/pull/227) -- Bugfix 22 04 21 [`#226`](https://github.com/gradido/gradido/pull/226) -- Rollback use prebuild dependencies [`#225`](https://github.com/gradido/gradido/pull/225) -- Docu [`#199`](https://github.com/gradido/gradido/pull/199) -- update login-server build [`#222`](https://github.com/gradido/gradido/pull/222) -- Login add language [`#220`](https://github.com/gradido/gradido/pull/220) -- User Object on Json Login [`#219`](https://github.com/gradido/gradido/pull/219) -- refactor: Remove loginAPI Call from Store [`#215`](https://github.com/gradido/gradido/pull/215) -- fix: Remove Rules for Password on Login [`#214`](https://github.com/gradido/gradido/pull/214) -- Community 15 04 2021 [`#198`](https://github.com/gradido/gradido/pull/198) -- refactor: Remove Right Menu [`#204`](https://github.com/gradido/gradido/pull/204) -- feat: Raise Frontend Test Coverage to 12% [`#206`](https://github.com/gradido/gradido/pull/206) -- refactor: Remove Cookies [`#202`](https://github.com/gradido/gradido/pull/202) -- fix_docker_compose [`#205`](https://github.com/gradido/gradido/pull/205) -- 62 pwd reset [`#203`](https://github.com/gradido/gradido/pull/203) -- workflows_refactor [`#200`](https://github.com/gradido/gradido/pull/200) -- feat: Link to Whitepaper in Content-Footer [`#196`](https://github.com/gradido/gradido/pull/196) -- update code which produce error which last fix (._.); [`#197`](https://github.com/gradido/gradido/pull/197) -- refactor: Redirects and Misuse of Children in Router [`#194`](https://github.com/gradido/gradido/pull/194) -- fix: Gradido-Akademie in Footer Links to gradido.net [`#170`](https://github.com/gradido/gradido/pull/170) -- fix register [`#160`](https://github.com/gradido/gradido/pull/160) -- Login 14.04.21 [`#175`](https://github.com/gradido/gradido/pull/175) -- coverage_no_report [`#176`](https://github.com/gradido/gradido/pull/176) -- Community 14.04.21 [`#174`](https://github.com/gradido/gradido/pull/174) -- feat: Add Coverage Check To GitHub Workflow [`#158`](https://github.com/gradido/gradido/pull/158) -- Stage2 [`#49`](https://github.com/gradido/gradido/pull/49) -- feat: Unit Test for KontoOverview [`#169`](https://github.com/gradido/gradido/pull/169) -- fix: Remove Hashtag From Route [`#167`](https://github.com/gradido/gradido/pull/167) -- documentation for reset password [`#166`](https://github.com/gradido/gradido/pull/166) -- 90 show release version in frontend [`#153`](https://github.com/gradido/gradido/pull/153) -- docu frontend menu page structur [`#159`](https://github.com/gradido/gradido/pull/159) -- userstorry_button.txt example [`#157`](https://github.com/gradido/gradido/pull/157) -- fix getBalance API call [`#147`](https://github.com/gradido/gradido/pull/147) -- Locale clear list merge master [`#119`](https://github.com/gradido/gradido/pull/119) -- fix-125-link-to-community [`#152`](https://github.com/gradido/gradido/pull/152) -- feat: Test Dashboard Layout [`#154`](https://github.com/gradido/gradido/pull/154) -- feat: Activate Coverage Report For Unit Tests In Frontend [`#156`](https://github.com/gradido/gradido/pull/156) -- Docu [`#120`](https://github.com/gradido/gradido/pull/120) -- Fix compose bug [`#138`](https://github.com/gradido/gradido/pull/138) -- feat: Test Login Form [`#113`](https://github.com/gradido/gradido/pull/113) -- at last, fix email-bug [`#134`](https://github.com/gradido/gradido/pull/134) -- Api password reset [`#82`](https://github.com/gradido/gradido/pull/82) -- Optimize login server build [`#101`](https://github.com/gradido/gradido/pull/101) -- markdown of login server api [`#111`](https://github.com/gradido/gradido/pull/111) -- Fix lineendings [`#112`](https://github.com/gradido/gradido/pull/112) -- Background color change [`#117`](https://github.com/gradido/gradido/pull/117) -- Delete unused files [`#116`](https://github.com/gradido/gradido/pull/116) -- store aufräumen teil 1 [`#115`](https://github.com/gradido/gradido/pull/115) -- add migrations table for automatic table data migration [`40a9a8c`](https://github.com/gradido/gradido/commit/40a9a8c2b587f5bef0fcc54136ed7bd13dd91b2b) -- update yarn.lock after running yarn install [`7f38c80`](https://github.com/gradido/gradido/commit/7f38c801213ad886e9d34a8d43b00ae423f5f2a0) -- use new function for balance overview in old frontend, update balance in session on every php-request [`97c570c`](https://github.com/gradido/gradido/commit/97c570c08cc51ed17a69eb8be8d987f95f3c2ce0) - -#### [0.9.4](https://github.com/gradido/gradido/compare/0.9.3...0.9.4) - -> 30 March 2021 - -- Vue with nginx [`#84`](https://github.com/gradido/gradido/pull/84) -- Build on run [`#103`](https://github.com/gradido/gradido/pull/103) -- update debug docker to use dependencies container pushed to docker hub [`1f002f4`](https://github.com/gradido/gradido/commit/1f002f4ed0b12d4b2bf63efceabe546d0c5b58ea) -- removed email tasks complete [`8a143be`](https://github.com/gradido/gradido/commit/8a143be8423d7bd894d4f512848895df8b9694b0) -- build login-server on docker-compose up in a docker volume so it rebuild only neccessary parts if some c++ files have changed [`0da5279`](https://github.com/gradido/gradido/commit/0da527917523530186e6effe63dc001fc99bd3e3) - -#### [0.9.3](https://github.com/gradido/gradido/compare/0.9.2...0.9.3) - -> 30 March 2021 - -- new version 0.9.3 [`#110`](https://github.com/gradido/gradido/pull/110) -- feat: Frontend tests for Content Footer [`#102`](https://github.com/gradido/gradido/pull/102) -- add check session state json function and doc [`#96`](https://github.com/gradido/gradido/pull/96) -- activity page stap 2 [`#86`](https://github.com/gradido/gradido/pull/86) -- qrcode scanner fixed, datum in activitäten fixed, sprache not null fixed [`#88`](https://github.com/gradido/gradido/pull/88) -- add additional docker container which is running skeema on startup to… [`#83`](https://github.com/gradido/gradido/pull/83) -- New fix up frontend for presentation [`#85`](https://github.com/gradido/gradido/pull/85) -- feat: Tougher eslint rules [`#77`](https://github.com/gradido/gradido/pull/77) -- feat: improve translations [`#81`](https://github.com/gradido/gradido/pull/81) -- use_correct_send_api [`#80`](https://github.com/gradido/gradido/pull/80) -- fix bug with access rights [`#78`](https://github.com/gradido/gradido/pull/78) -- make response.html better accessible [`#75`](https://github.com/gradido/gradido/pull/75) -- feat: Lokalize Validation Messages [`#67`](https://github.com/gradido/gradido/pull/67) -- feat: Localize links to gradito.net [`#74`](https://github.com/gradido/gradido/pull/74) -- fix-padding [`#73`](https://github.com/gradido/gradido/pull/73) -- Correctly use transactions API in frontend [`#69`](https://github.com/gradido/gradido/pull/69) -- Qr code scanner [`#72`](https://github.com/gradido/gradido/pull/72) -- Login fail message [`#71`](https://github.com/gradido/gradido/pull/71) -- Setup unit tests for frontend [`#55`](https://github.com/gradido/gradido/pull/55) -- Update doc [`#63`](https://github.com/gradido/gradido/pull/63) -- Add Feature in user search old frontend because Support has requested the feature long ago [`#56`](https://github.com/gradido/gradido/pull/56) -- sprache angepasst, for login, pwd, sigin [`#54`](https://github.com/gradido/gradido/pull/54) -- Improve workflows [`#53`](https://github.com/gradido/gradido/pull/53) -- setup eslint with tougher rules [`1f13507`](https://github.com/gradido/gradido/commit/1f13507eacfd93c2248fb841de5f481c9eb1e6bd) -- semicolon rule implemented [`6762a02`](https://github.com/gradido/gradido/commit/6762a028f2a3e4f2713b26bed81029defe686ad7) -- dev meeting, bernd [`a99de7f`](https://github.com/gradido/gradido/commit/a99de7f5d1f7557c0877eae565aa4263d65aaaf3) - -#### [0.9.2](https://github.com/gradido/gradido/compare/0.9.1...0.9.2) - -> 18 March 2021 - -- v0.9.2 [`#51`](https://github.com/gradido/gradido/pull/51) -- Reload after login fixed [`#50`](https://github.com/gradido/gradido/pull/50) -- Monorepo login server [`#48`](https://github.com/gradido/gradido/pull/48) -- Stage0 [`#3`](https://github.com/gradido/gradido/pull/3) -- Add auto-sign Transaction functionality [`5592275`](https://github.com/gradido/gradido/commit/55922753a7ffd9552be132501d744da491c409b5) -- read in login the real client ip X-Real-IP from nginx forwarded not from community server [`512d307`](https://github.com/gradido/gradido/commit/512d307a19b955bb6e26ae8b274def354829b50f) -- move check if all passwords allow direct into pwdValidation so it will work with every code which ask for password [`e2c38c1`](https://github.com/gradido/gradido/commit/e2c38c1a0fc25a4a2bc922c4bbc44d86b6d00d8b) - -#### 0.9.1 - -> 13 March 2021 - -- Login gbb [`#12`](https://github.com/gradido/gradido/pull/12) -- Admin prework axios json [`#10`](https://github.com/gradido/gradido/pull/10) -- Merge pull request #1 from gradido/master [`#8`](https://github.com/gradido/gradido/pull/8) -- [WIP] 2 create a dockerfile for the frontend application [`#6`](https://github.com/gradido/gradido/pull/6) -- Master - first step [`#1`](https://github.com/gradido/gradido/pull/1) -- Add docker compose [`#7`](https://github.com/gradido/gradido/pull/7) -- style 404 side :) [`c7bdf89`](https://github.com/gradido/gradido/commit/c7bdf8978594b932615e48f9bb1c19d3c3bf3fcf) -- publish workflow test [`df6f66f`](https://github.com/gradido/gradido/commit/df6f66ffe70baa9ed3f70b460a6c0c14011bb944) -- many translations. translation structure [`bf68547`](https://github.com/gradido/gradido/commit/bf685479767d19c246c4d6abe3577dc3cb666346) diff --git a/backend/package.json b/backend/package.json index e930bb0e8..889143ac3 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "gradido-backend", - "version": "1.4.0", + "version": "1.5.1", "description": "Gradido unified backend providing an API-Service for Gradido Transactions", "main": "src/index.ts", "repository": "https://github.com/gradido/gradido/backend", diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 76ba597ad..7de498f85 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.NODE_ENV === 'production' || false, } const database = { 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 9e9cde0d9..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 { @@ -7,4 +7,7 @@ export default class UnsecureLoginArgs { @Field(() => String) password: string + + @Field(() => Int, { nullable: true }) + publisherId: number } diff --git a/backend/src/graphql/model/User.ts b/backend/src/graphql/model/User.ts index 21bf1b464..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,12 +66,15 @@ export class User { groupId: number */ // what is publisherId? - @Field(() => Number) - publisherId: number + @Field(() => Int, { nullable: true }) + publisherId?: number @Field(() => Boolean) coinanimation: boolean @Field(() => KlickTipp) klickTipp: KlickTipp + + @Field(() => Boolean, { nullable: true }) + hasElopage?: boolean } 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 + ] } } diff --git a/backend/src/graphql/resolver/GdtResolver.ts b/backend/src/graphql/resolver/GdtResolver.ts index 9ca9421f6..b4f9a512b 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 existPid(@Arg('pid') pid: number): Promise { + // load user + const resultPID = await apiGet(`${CONFIG.GDT_API_URL}/publishers/checkPidApi/${pid}`) + if (!resultPID.success) { + throw new Error(resultPID.data) + } + return resultPID.data.pid + } } diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index d2191c155..515295f87 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -71,24 +71,27 @@ async function calculateAndAddDecayTransactions( finalTransaction.date = transaction.received.toISOString() finalTransaction.memo = transaction.memo finalTransaction.totalBalance = roundFloorFrom4(userTransaction.balance) - const prev = i > 0 ? userTransactions[i - 1] : null + const previousTransaction = i > 0 ? userTransactions[i - 1] : null - if (prev && prev.balance > 0) { - const current = userTransaction + if (previousTransaction) { + const currentTransaction = userTransaction const decay = await calculateDecayWithInterval( - prev.balance, - prev.balanceDate, - current.balanceDate, + previousTransaction.balance, + previousTransaction.balanceDate, + currentTransaction.balanceDate, ) - const balance = prev.balance - decay.balance + const balance = previousTransaction.balance - decay.balance - if (balance) { + if ( + decayStartTransaction && + decayStartTransaction.received < currentTransaction.balanceDate + ) { finalTransaction.decay = decay finalTransaction.decay.balance = roundFloorFrom4(balance) if ( decayStartTransaction && - prev.transactionId < decayStartTransaction.id && - current.transactionId > decayStartTransaction.id + previousTransaction.transactionId < decayStartTransaction.id && + currentTransaction.transactionId > decayStartTransaction.id ) { finalTransaction.decay.decayStartBlock = ( decayStartTransaction.received.getTime() / 1000 @@ -144,15 +147,14 @@ async function calculateAndAddDecayTransactions( now.getTime(), ) const balance = userTransaction.balance - decay.balance - if (balance) { - const decayTransaction = new Transaction() - decayTransaction.type = 'decay' - decayTransaction.balance = roundFloorFrom4(balance) - decayTransaction.decayDuration = decay.decayDuration - decayTransaction.decayStart = decay.decayStart - decayTransaction.decayEnd = decay.decayEnd - finalTransactions.push(decayTransaction) - } + + const decayTransaction = new Transaction() + decayTransaction.type = 'decay' + decayTransaction.balance = roundFloorFrom4(balance) + decayTransaction.decayDuration = decay.decayDuration + decayTransaction.decayStart = decay.decayStart + decayTransaction.decayEnd = decay.decayEnd + finalTransactions.push(decayTransaction) } } diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index ab66a78df..33949197c 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 }) @@ -45,9 +48,38 @@ export class UserResolver { value: encode(result.data.session_id, result.data.user.public_hex), }) const user = new User(result.data.user) + // Hack: Database Field is not validated properly and not nullable + if (user.publisherId === 0) { + user.publisherId = undefined + } + user.hasElopage = result.data.hasElopage // read additional settings from settings table const userRepository = getCustomRepository(UserRepository) - const userEntity = await userRepository.findByPubkeyHex(user.pubkey) + 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') + } + + // Save publisherId if Elopage is not yet registered + if (!user.hasElopage && publisherId) { + 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 @@ -87,7 +119,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, @@ -97,7 +129,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) { @@ -183,6 +215,8 @@ export class UserResolver { }, } let response: UpdateUserInfosResponse | undefined + const userRepository = getCustomRepository(UserRepository) + if ( firstName || lastName || @@ -196,11 +230,32 @@ export class UserResolver { const result = await apiPost(CONFIG.LOGIN_API_URL + 'updateUserInfos', payload) if (!result.success) throw new Error(result.data) response = new UpdateUserInfosResponse(result.data) + + const userEntity = await userRepository.findByPubkeyHex(context.pubKey) + let userEntityChanged = false + if (firstName) { + userEntity.firstName = firstName + userEntityChanged = true + } + if (lastName) { + userEntity.lastName = lastName + userEntityChanged = true + } + if (username) { + userEntity.username = username + userEntityChanged = true + } + if (userEntityChanged) { + userEntity.save().catch((error) => { + throw new Error(error) + }) + } } if (coinanimation !== undefined) { // load user and balance - const userRepository = getCustomRepository(UserRepository) + const userEntity = await userRepository.findByPubkeyHex(context.pubKey) + const userSettingRepository = getCustomRepository(UserSettingRepository) userSettingRepository .setOrUpdate(userEntity.id, Setting.COIN_ANIMATION, coinanimation.toString()) @@ -242,4 +297,13 @@ 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 + } } diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts index ab3a9bd4c..e81087097 100644 --- a/backend/src/middleware/klicktippMiddleware.ts +++ b/backend/src/middleware/klicktippMiddleware.ts @@ -24,10 +24,12 @@ 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) {} } result.klickTipp = klickTipp return result diff --git a/backend/src/typeorm/repository/User.ts b/backend/src/typeorm/repository/User.ts index f84d45363..441c1b2c8 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 }) diff --git a/docu/login_server.api.md b/docu/login_server.api.md index 20317c66f..aeac22549 100644 --- a/docu/login_server.api.md +++ b/docu/login_server.api.md @@ -67,6 +67,7 @@ In case of success returns: "username": "" }, "session_id": -127182, + "hasElopage": true, "clientIP":"123.123.123.123" } ``` @@ -86,6 +87,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 @@ -593,3 +595,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" +} +``` + diff --git a/frontend/.env.dist b/frontend/.env.dist index a7d67f970..8d4025a5d 100644 --- a/frontend/.env.dist +++ b/frontend/.env.dist @@ -1,3 +1,3 @@ -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/CHANGELOG.md b/frontend/CHANGELOG.md deleted file mode 100755 index 5d720d3d4..000000000 --- a/frontend/CHANGELOG.md +++ /dev/null @@ -1,2 +0,0 @@ -## [1.0.0] - 2020-07-27 -### Initial Release diff --git a/frontend/package.json b/frontend/package.json index 5827baa5e..b5c7868b7 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,11 +1,12 @@ { "name": "bootstrap-vue-gradido-wallet", - "version": "1.4.0", + "version": "1.5.1", "private": true, "scripts": { "start": "node run/server.js", "serve": "vue-cli-service serve --open", "build": "vue-cli-service build", + "analyse-bundle": "yarn build && webpack-bundle-analyzer dist/webpack.stats.json", "lint": "eslint --ext .js,.vue .", "dev": "yarn run serve", "i18n:report": "vue-cli-service i18n:report --src './src/**/*.?(js|vue)' --locales './src/locales/**/*.json'", @@ -54,7 +55,6 @@ "nouislider": "^12.1.0", "particles-bg-vue": "1.2.3", "perfect-scrollbar": "^1.3.0", - "portal-vue": "^2.1.7", "prettier": "^2.2.1", "qrcode": "^1.4.4", "quill": "^1.3.6", @@ -93,7 +93,9 @@ "dotenv-webpack": "^7.0.3", "node-sass": "^6.0.1", "sass-loader": "^10", - "vue-template-compiler": "^2.6.11" + "stats-webpack-plugin": "^0.7.0", + "vue-template-compiler": "^2.6.11", + "webpack-bundle-analyzer": "^4.5.0" }, "postcss": { "plugins": { diff --git a/frontend/src/components/DecayInformation.vue b/frontend/src/components/DecayInformation.vue index 04a850040..0b7f3d863 100644 --- a/frontend/src/components/DecayInformation.vue +++ b/frontend/src/components/DecayInformation.vue @@ -2,7 +2,7 @@
- {{ decay ? ' -' + decay.balance + ' ' + decayStartBlockTextShort : '' }} + {{ decay ? ' -' + $n(decay.balance, 'decimal') + ' ' + decayStartBlockTextShort : '' }} {{ $t('decay.noDecay') }} @@ -65,7 +65,7 @@
{{ $t('decay.decay') }}
-
- {{ decay.balance }}
+
- {{ $n(decay.balance, 'decimal') }}

@@ -81,8 +81,8 @@
{{ $t('decay.received') }}
-
- {{ balance }}
-
+ {{ balance }}
+
- {{ $n(balance, 'decimal') }}
+
+ {{ $n(balance, 'decimal') }}
@@ -91,7 +91,7 @@
{{ $t('decay.decay') }}
-
- {{ decay.balance }}
+
- {{ $n(decay.balance, 'decimal') }}
@@ -101,10 +101,13 @@
- - {{ parseInt(balance) + decay.balance }} + - {{ $n(balance + decay.balance, 'decimal') }}
- {{ parseInt(balance) - decay.balance }} + {{ $n(balance - decay.balance, 'decimal') }} +
+
+ - {{ $n(balance - decay.balance, 'decimal') }}
diff --git a/frontend/src/components/SidebarPlugin/SideBar.spec.js b/frontend/src/components/SidebarPlugin/SideBar.spec.js index 9f182ca93..e42369e50 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(), }, @@ -78,14 +82,18 @@ 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()).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("member's area with publisher ID", () => { + 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 519a4f0b1..c33c132b0 100755 --- a/frontend/src/components/SidebarPlugin/SideBar.vue +++ b/frontend/src/components/SidebarPlugin/SideBar.vue @@ -47,12 +47,9 @@
@@ -71,6 +68,7 @@ diff --git a/frontend/src/config/index.js b/frontend/src/config/index.js index 96f7795ce..1f1819c62 100644 --- a/frontend/src/config/index.js +++ b/frontend/src/config/index.js @@ -15,15 +15,14 @@ const environment = { NODE_ENV: process.env.NODE_ENV, DEBUG: process.env.NODE_ENV !== 'production' || false, PRODUCTION: process.env.NODE_ENV === 'production' || false, + DEFAULT_PUBLISHER_ID: process.env.DEFAULT_PUBLISHER_ID || 2896, } const server = { GRAPHQL_URI: process.env.GRAPHQL_URI || 'http://localhost:4000/graphql', } -const options = { - ALLOW_REGISTER: process.env.ALLOW_REGISTER !== 'false', -} +const options = {} const CONFIG = { ...version, diff --git a/frontend/src/graphql/mutations.js b/frontend/src/graphql/mutations.js index d5e9c4228..a20367aa8 100644 --- a/frontend/src/graphql/mutations.js +++ b/frontend/src/graphql/mutations.js @@ -51,6 +51,7 @@ export const registerUser = gql` $email: String! $password: String! $language: String! + $publisherId: Int ) { createUser( email: $email @@ -58,6 +59,7 @@ export const registerUser = gql` lastName: $lastName password: $password language: $language + publisherId: $publisherId ) } ` diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index 3499a3fa1..2ee381dd8 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -1,8 +1,8 @@ import gql from 'graphql-tag' export const login = gql` - query($email: String!, $password: String!) { - login(email: $email, password: $password) { + query($email: String!, $password: String!, $publisherId: Int) { + login(email: $email, password: $password, publisherId: $publisherId) { email username firstName @@ -13,6 +13,8 @@ export const login = gql` klickTipp { newsletterState } + hasElopage + publisherId } } ` diff --git a/frontend/src/locales/de.json b/frontend/src/locales/de.json index 4801d5e4b..ca5b20f82 100644 --- a/frontend/src/locales/de.json +++ b/frontend/src/locales/de.json @@ -180,7 +180,7 @@ "thx": { "checkEmail": "Deine Email würde erfolgreich verifiziert.", "email": "Wir haben dir eine eMail gesendet.", - "register": "Du bist jetzt regisriert.", + "register": "Du bist jetzt registriert.", "reset": "Dein Passwort wurde geändert.", "title": "Danke!" } diff --git a/frontend/src/plugins/dashboard-plugin.js b/frontend/src/plugins/dashboard-plugin.js index 448675d20..892a2d93c 100755 --- a/frontend/src/plugins/dashboard-plugin.js +++ b/frontend/src/plugins/dashboard-plugin.js @@ -1,10 +1,7 @@ -import '@/polyfills' import GlobalComponents from './globalComponents' import GlobalDirectives from './globalDirectives' import SideBar from '@/components/SidebarPlugin' -import PortalVue from 'portal-vue' - import Toasted from 'vue-toasted' // vue-bootstrap @@ -32,7 +29,6 @@ export default { Vue.use(GlobalComponents) Vue.use(GlobalDirectives) Vue.use(SideBar) - Vue.use(PortalVue) Vue.use(BootstrapVue) Vue.use(IconsPlugin) Vue.use(VueMoment) diff --git a/frontend/src/polyfills.js b/frontend/src/polyfills.js deleted file mode 100644 index a743ee3e3..000000000 --- a/frontend/src/polyfills.js +++ /dev/null @@ -1,96 +0,0 @@ -/* eslint-disable */ -import 'es6-promise/auto' - -export default (function initPollyFills () { - if (!Array.prototype.find) { - Object.defineProperty(Array.prototype, 'find', { - value: function (predicate) { - // 1. Let O be ? ToObject(this value). - if (this == null) { - throw new TypeError('"this" is null or not defined'); - } - - var o = Object(this); - - // 2. Let len be ? ToLength(? Get(O, "length")). - var len = o.length >>> 0; - - // 3. If IsCallable(predicate) is false, throw a TypeError exception. - if (typeof predicate !== 'function') { - throw new TypeError('predicate must be a function'); - } - - // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. - var thisArg = arguments[1]; - - // 5. Let k be 0. - var k = 0; - - // 6. Repeat, while k < len - while (k < len) { - // a. Let Pk be ! ToString(k). - // b. Let kValue be ? Get(O, Pk). - // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). - // d. If testResult is true, return kValue. - var kValue = o[k]; - if (predicate.call(thisArg, kValue, k, o)) { - return kValue; - } - // e. Increase k by 1. - k++; - } - - // 7. Return undefined. - return undefined; - } - }); - } - if (typeof Object.assign !== 'function') { - // Must be writable: true, enumerable: false, configurable: true - Object.defineProperty(Object, "assign", { - value: function assign (target, varArgs) { // .length of function is 2 - 'use strict'; - if (target == null) { // TypeError if undefined or null - throw new TypeError('Cannot convert undefined or null to object'); - } - - var to = Object(target); - - for (var index = 1; index < arguments.length; index++) { - var nextSource = arguments[index]; - - if (nextSource != null) { // Skip over if undefined or null - for (var nextKey in nextSource) { - // Avoid bugs when hasOwnProperty is shadowed - if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { - to[nextKey] = nextSource[nextKey]; - } - } - } - } - return to; - }, - writable: true, - configurable: true - }); - } - if (!String.prototype.startsWith) { - String.prototype.startsWith = function(search, pos) { - return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; - }; - } - if (!String.prototype.includes) { - String.prototype.includes = function(search, start) { - 'use strict'; - if (typeof start !== 'number') { - start = 0; - } - - if (start + search.length > this.length) { - return false; - } else { - return this.indexOf(search, start) !== -1; - } - }; - } -}()) 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() }) }) }) diff --git a/frontend/src/routes/router.js b/frontend/src/routes/router.js index f32c15fc1..b44c8ab7e 100644 --- a/frontend/src/routes/router.js +++ b/frontend/src/routes/router.js @@ -1,7 +1,6 @@ import Vue from 'vue' import VueRouter from 'vue-router' import routes from './routes' -import CONFIG from '../config' Vue.use(VueRouter) @@ -21,11 +20,4 @@ const router = new VueRouter({ }, }) -if (CONFIG.ALLOW_REGISTER) { - router.addRoute({ - path: '/register', - component: () => import('../views/Pages/Register.vue'), - }) -} - export default router diff --git a/frontend/src/routes/router.test.js b/frontend/src/routes/router.test.js index 5e2e16005..23d2e71b6 100644 --- a/frontend/src/routes/router.test.js +++ b/frontend/src/routes/router.test.js @@ -44,19 +44,13 @@ describe('router', () => { }) }) - describe('register page', () => { - it('is not present', () => { - expect(routes.find((r) => r.path === '/register')).toBe(undefined) - }) - }) - describe('routes', () => { it('has "/login" as default', () => { expect(routes.find((r) => r.path === '/').redirect()).toEqual({ path: '/login' }) }) it('has twelve routes defined', () => { - expect(routes).toHaveLength(12) + expect(routes).toHaveLength(13) }) describe('overview', () => { @@ -99,6 +93,13 @@ describe('router', () => { }) }) + describe('register', () => { + it('loads the "register" component', async () => { + const component = await routes.find((r) => r.path === '/register').component() + expect(component.default.name).toBe('register') + }) + }) + describe('thx', () => { const thx = routes.find((r) => r.path === '/thx/:comingFrom') diff --git a/frontend/src/routes/routes.js b/frontend/src/routes/routes.js index 71315da9e..8cc4d313d 100755 --- a/frontend/src/routes/routes.js +++ b/frontend/src/routes/routes.js @@ -32,6 +32,10 @@ const routes = [ path: '/login', component: () => import('../views/Pages/Login.vue'), }, + { + path: '/register', + component: () => import('../views/Pages/Register.vue'), + }, { path: '/thx/:comingFrom', component: () => import('../views/Pages/thx.vue'), diff --git a/frontend/src/store/store.js b/frontend/src/store/store.js index 03e1915ca..9f87f0398 100644 --- a/frontend/src/store/store.js +++ b/frontend/src/store/store.js @@ -30,7 +30,9 @@ export const mutations = { state.newsletterState = newsletterState }, publisherId: (state, publisherId) => { - state.publisherId = publisherId + let pubId = parseInt(publisherId) + if (isNaN(pubId)) pubId = null + state.publisherId = pubId }, community: (state, community) => { state.community = community @@ -38,6 +40,9 @@ export const mutations = { coinanimation: (state, coinanimation) => { state.coinanimation = coinanimation }, + hasElopage: (state, hasElopage) => { + state.hasElopage = hasElopage + }, } export const actions = { @@ -50,6 +55,8 @@ export const actions = { commit('description', data.description) commit('coinanimation', data.coinanimation) commit('newsletterState', data.klickTipp.newsletterState) + commit('hasElopage', data.hasElopage) + commit('publisherId', data.publisherId) }, logout: ({ commit, state }) => { commit('token', null) @@ -60,6 +67,8 @@ export const actions = { commit('description', '') commit('coinanimation', true) commit('newsletterState', null) + commit('hasElopage', false) + commit('publisherId', null) localStorage.clear() }, } @@ -81,6 +90,8 @@ export const store = new Vuex.Store({ coinanimation: true, newsletterState: null, community: null, + hasElopage: false, + publisherId: null, }, getters: {}, // Syncronous mutation of the state diff --git a/frontend/src/store/store.test.js b/frontend/src/store/store.test.js index 19937eed4..bdb98d03b 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 @@ -95,6 +96,12 @@ describe('Vuex store', () => { publisherId(state, 42) expect(state.publisherId).toEqual(42) }) + + it('sets publisherId to null with NaN', () => { + const state = {} + publisherId(state, 'abc') + expect(state.publisherId).toEqual(null) + }) }) describe('community', () => { @@ -114,6 +121,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 +146,13 @@ describe('Vuex store', () => { klickTipp: { newsletterState: true, }, + hasElopage: false, + publisherId: 1234, } - it('calls eight commits', () => { + it('calls ten commits', () => { login({ commit, state }, commitedData) - expect(commit).toHaveBeenCalledTimes(8) + expect(commit).toHaveBeenCalledTimes(10) }) it('commits email', () => { @@ -177,15 +194,25 @@ 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) + }) + + it('commits publisherId', () => { + login({ commit, state }, commitedData) + expect(commit).toHaveBeenNthCalledWith(10, 'publisherId', 1234) + }) }) describe('logout', () => { const commit = jest.fn() const state = {} - it('calls eight commits', () => { + it('calls ten commits', () => { logout({ commit, state }) - expect(commit).toHaveBeenCalledTimes(8) + expect(commit).toHaveBeenCalledTimes(10) }) it('commits token', () => { @@ -228,6 +255,16 @@ describe('Vuex store', () => { expect(commit).toHaveBeenNthCalledWith(8, 'newsletterState', null) }) + it('commits hasElopage', () => { + logout({ commit, state }) + expect(commit).toHaveBeenNthCalledWith(9, 'hasElopage', false) + }) + + it('commits publisherId', () => { + logout({ commit, state }) + expect(commit).toHaveBeenNthCalledWith(10, 'publisherId', null) + }) + // how to get this working? it.skip('calls localStorage.clear()', () => { const clearStorageMock = jest.fn() diff --git a/frontend/src/util/throttle.js b/frontend/src/util/throttle.js deleted file mode 100644 index d035cb748..000000000 --- a/frontend/src/util/throttle.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Simple throttle function that executes a passed function only once in the specified timeout - * @param handlerFunc - * @param [timeout] the throttle interval - */ -export function throttle(handlerFunc, timeout = 66) { - let resizeTimeout - if (!resizeTimeout) { - resizeTimeout = setTimeout(() => { - resizeTimeout = null - handlerFunc() - // The actualResizeHandler will execute at a rate of 15fps - }, timeout) - } -} diff --git a/frontend/src/views/Layout/AuthLayout_gdd.spec.js b/frontend/src/views/Layout/AuthLayout_gdd.spec.js new file mode 100644 index 000000000..aa05b772a --- /dev/null +++ b/frontend/src/views/Layout/AuthLayout_gdd.spec.js @@ -0,0 +1,51 @@ +import { mount } from '@vue/test-utils' +import AuthLayoutGdd from './AuthLayout_gdd' + +const localVue = global.localVue + +describe('AuthLayoutGdd', () => { + let wrapper + + const mocks = { + $i18n: { + locale: 'en', + }, + $t: jest.fn((t) => t), + $route: { + meta: { + hideFooter: false, + }, + }, + $store: { + state: {}, + commit: jest.fn(), + }, + } + + const stubs = { + // RouterLink: RouterLinkStub, + RouterView: true, + } + + const Wrapper = () => { + return mount(AuthLayoutGdd, { localVue, mocks, stubs }) + } + + describe('mount', () => { + beforeEach(() => { + wrapper = Wrapper() + }) + + it('has no sidebar', () => { + expect(wrapper.find('nav#sidenav-main').exists()).not.toBeTruthy() + }) + + it('has a main content div', () => { + expect(wrapper.find('div.main-content').exists()).toBeTruthy() + }) + + it('has a footer inside the main content', () => { + expect(wrapper.find('div.main-content').find('footer.footer').exists()).toBeTruthy() + }) + }) +}) 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', ) }) diff --git a/frontend/src/views/NotFoundPage.spec.js b/frontend/src/views/NotFoundPage.spec.js new file mode 100644 index 000000000..709b24807 --- /dev/null +++ b/frontend/src/views/NotFoundPage.spec.js @@ -0,0 +1,22 @@ +import { mount } from '@vue/test-utils' +import NotFoundPage from './NotFoundPage' + +const localVue = global.localVue + +describe('NotFoundPage', () => { + let wrapper + + const Wrapper = () => { + return mount(NotFoundPage, { localVue }) + } + + describe('mount', () => { + beforeEach(() => { + wrapper = Wrapper() + }) + + it('has a svg', () => { + expect(wrapper.find('svg').exists()).toBeTruthy() + }) + }) +}) diff --git a/frontend/src/views/Pages/AccountOverview/GddTransactionList.vue b/frontend/src/views/Pages/AccountOverview/GddTransactionList.vue index 3b0104068..fa0cc7357 100644 --- a/frontend/src/views/Pages/AccountOverview/GddTransactionList.vue +++ b/frontend/src/views/Pages/AccountOverview/GddTransactionList.vue @@ -6,7 +6,10 @@ :key="transactionId" :style="type === 'decay' ? 'background-color:#f1e0ae3d' : ''" > -
+
- -
- -
+ + + +
+ +
+
-
- - -
- - {{ getProperties(type).operator }} - - {{ $n(balance, 'decimal') }} -
-
- {{ type !== 'decay' ? name : $t('decay.decay_since_last_transaction') }} -
-
+ + + + +
+ + {{ getProperties(type).operator }} + + + {{ $n(balance, 'decimal') }} + +
+
+ +
+ {{ type !== 'decay' ? name : $t('decay.decay_since_last_transaction') }} +
+
+
- - -
{{ $t('form.memo') }}
-
{{ memo }}
-
+ + + +
{{ $t('form.memo') }}
+
+ +
{{ memo }}
+
+
- - -
{{ $t('form.date') }}
-
- {{ $d($moment(date), 'long') }} {{ $i18n.locale === 'de' ? 'Uhr' : '' }} -
-
+ + + +
{{ $t('form.date') }}
+
+ +
+ {{ $d($moment(date), 'long') }} {{ $i18n.locale === 'de' ? 'Uhr' : '' }} +
+
+
- - -
- -
-
- -
-
- -
- -
-
- {{ $t('decay.Starting_block_decay') }} -
-
-
+ + + +
+ +
+
+ +
+ +
+
+
+ + +
+ +
+
+ +
+ {{ $t('decay.Starting_block_decay') }} +
+
+
+ +
- +
{ registerUrl: 'http://localhost/vue/register', description: 'Die lokale Entwicklungsumgebung von Gradido.', }, + publisherId: 12345, }, }, $loading: { @@ -135,9 +136,7 @@ describe('Login', () => { }) it('links to /register when clicking "Create new account"', () => { - expect(wrapper.findAllComponents(RouterLinkStub).at(1).props().to).toBe( - '/register-community', - ) + expect(wrapper.findAllComponents(RouterLinkStub).at(1).props().to).toBe('/register') }) }) @@ -199,6 +198,7 @@ describe('Login', () => { variables: { email: 'user@example.org', password: '1234', + publisherId: 12345, }, }), ) diff --git a/frontend/src/views/Pages/Login.vue b/frontend/src/views/Pages/Login.vue index db8789002..0cdbeb942 100755 --- a/frontend/src/views/Pages/Login.vue +++ b/frontend/src/views/Pages/Login.vue @@ -48,12 +48,8 @@ {{ $t('settings.password.forgot_pwd') }} - - + + {{ $t('site.login.new_wallet') }} @@ -64,7 +60,6 @@