diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 08ecc0379..9f34c7f5e 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -106,45 +106,6 @@ jobs:
name: docker-database-production_up
path: /tmp/database_up.tar
- ##############################################################################
- # JOB: DOCKER BUILD PRODUCTION LOGIN SERVER ##################################
- ##############################################################################
- build_production_login_server:
- name: Docker Build Production - Login Server
- runs-on: ubuntu-latest
- #needs: [nothing]
- steps:
- ##########################################################################
- # CHECKOUT CODE ##########################################################
- ##########################################################################
- - name: Checkout code
- uses: actions/checkout@v2
- with:
- submodules: recursive
- ##########################################################################
- # SET ENVS ###############################################################
- ##########################################################################
- - name: ENV - VERSION
- run: echo "VERSION=$(node -p -e "require('./package.json').version")" >> $GITHUB_ENV
- - name: ENV - BUILD_DATE
- run: echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV
- - name: ENV - BUILD_VERSION
- run: echo "BUILD_VERSION=${VERSION}.${GITHUB_RUN_NUMBER}" >> $GITHUB_ENV
- - name: ENV - BUILD_COMMIT
- run: echo "BUILD_COMMIT=${GITHUB_SHA}" >> $GITHUB_ENV
- ##########################################################################
- # LOGIN SERVER ###########################################################
- ##########################################################################
- - name: Login Server | Build `production` image
- run: |
- docker build -t "gradido/login_server:latest" -t "gradido/login_server:production" -t "gradido/login_server:${VERSION}" -t "gradido/login_server:${BUILD_VERSION}" login_server/
- docker save "gradido/login_server" > /tmp/login_server.tar
- - name: Upload Artifact
- uses: actions/upload-artifact@v2
- with:
- name: docker-login-server-production
- path: /tmp/login_server.tar
-
##############################################################################
# JOB: DOCKER BUILD PRODUCTION COMMUNITY SERVER ##############################
##############################################################################
@@ -262,7 +223,7 @@ jobs:
upload_to_dockerhub:
name: Upload to Dockerhub
runs-on: ubuntu-latest
- needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_login_server, build_production_community_server, build_production_mariadb, build_production_nginx]
+ needs: [build_production_frontend, build_production_backend, build_production_database_up, build_production_community_server, build_production_mariadb, build_production_nginx]
env:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -296,13 +257,6 @@ jobs:
path: /tmp
- name: Load Docker Image
run: docker load < /tmp/database_up.tar
- - name: Download Docker Image (Login Server)
- uses: actions/download-artifact@v2
- with:
- name: docker-login-server-production
- path: /tmp
- - name: Load Docker Image
- run: docker load < /tmp/login_server.tar
- name: Download Docker Image (Community Server)
uses: actions/download-artifact@v2
with:
@@ -335,8 +289,6 @@ jobs:
run: docker push --all-tags gradido/backend
- name: Push database
run: docker push --all-tags gradido/database
- - name: Push login_server
- run: docker push --all-tags gradido/login_server
- name: Push community_server
run: docker push --all-tags gradido/community_server
- name: Push MariaDB
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index b21d0d355..9029afb8e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -107,28 +107,6 @@ jobs:
name: docker-database-test_up
path: /tmp/database_up.tar
- ##############################################################################
- # JOB: DOCKER BUILD TEST LOGIN SERVER ########################################
- ##############################################################################
- build_test_login_server:
- name: Docker Build Test - Login Server
- runs-on: ubuntu-latest
- #needs: [nothing]
- steps:
- ##########################################################################
- # CHECKOUT CODE ##########################################################
- ##########################################################################
- - name: Checkout code
- uses: actions/checkout@v2
- with:
- submodules: true
- ##########################################################################
- # BUILD LOGIN SERVER DOCKER IMAGE ########################################
- ##########################################################################
- - name: login server | Build `release` image
- run: |
- docker build -t "gradido/login_server:release" -f ./login_server/Dockerfile login_server/
-
##############################################################################
# JOB: DOCKER BUILD TEST COMMUNITY SERVER ####################################
##############################################################################
@@ -470,7 +448,7 @@ jobs:
report_name: Coverage Admin Interface
type: lcov
result_path: ./coverage/lcov.info
- min_coverage: 78
+ min_coverage: 81
token: ${{ github.token }}
##############################################################################
@@ -531,73 +509,6 @@ jobs:
min_coverage: 38
token: ${{ github.token }}
- ##############################################################################
- # JOB: UNIT TEST LOGIN-SERVER ###############################################
- ##############################################################################
- unit_test_login_server:
- name: Unit tests - Login-Server
- runs-on: ubuntu-latest
- needs: []
- services:
- mariadb:
- image: gradido/mariadb:test
- env:
- MARIADB_ALLOW_EMPTY_PASSWORD: 1
- MARIADB_USER: root
- ports:
- - 3306:3306
- options: --health-cmd="mysqladmin ping"
- --health-interval=6s
- --health-timeout=3s
- --health-retries=4
- steps:
- # - name: Debug service
- # run: echo "$(docker ps)"
- #- name: Debug container choosing script
- # run: echo "$(docker container ls | grep mariadb | awk '{ print $1 }')"
- - name: get mariadb container id
- run: echo "::set-output name=id::$(docker container ls | grep mariadb | awk '{ print $1 }')"
- id: mariadb_container
- - name: get automatic created network
- run: echo "::set-output name=id::$(docker network ls | grep github_network | awk '{ print $1 }')"
- id: network
- ##########################################################################
- # CHECKOUT CODE ##########################################################
- ##########################################################################
- - name: Checkout code
- uses: actions/checkout@v2
- with:
- submodules: true
- # Database migration
- - name: Start database migration
- run: |
- docker build --target production_up -t "gradido/database:production_up" database/
- docker run --network ${{ steps.network.outputs.id }} --name=database --env NODE_ENV=production --env DB_HOST=mariadb --env DB_DATABASE=gradido_community_test -d gradido/database:production_up
- ##########################################################################
- # Build Login-Server Test Docker image ###################################
- ##########################################################################
- - name: login server | Build `test` image
- run: |
- docker build -t "gradido/login_server:test" -f ./login_server/Dockerfiles/ubuntu/Dockerfile.test login_server/
- ##########################################################################
- # UNIT TESTS BACKEND LOGIN-SERVER #######################################
- ##########################################################################
- - name: Login-Server | Unit tests
- run: |
- docker run --network container:$(docker container ls | grep mariadb | awk '{ print $1 }') -v ~/coverage:/code/build_cov/coverage -v $(pwd)/configs/login_server:/etc/grd_login gradido/login_server:test
- cp -r ~/coverage ./coverage
- ##########################################################################
- # COVERAGE CHECK BACKEND LOGIN-SERVER ####################################
- ##########################################################################
- - name: backend login | Coverage check
- uses: webcraftmedia/coverage-check-action@master
- with:
- report_name: Coverage Backend Login
- type: lcov
- result_path: ./coverage/coverage.info
- min_coverage: 34
- token: ${{ github.token }}
-
##############################################################################
# JOB: UNIT TEST COMMUNITY-SERVER ###########################################
##############################################################################
@@ -627,11 +538,6 @@ jobs:
- name: get database migration container id
run: echo "::set-output name=id::$(docker container ls | grep database | awk '{ print $1 }')"
id: database_container
- - name: Start Login-Server
- run: docker run --network ${{ steps.network.outputs.id }} --name=login-server -d gradido/login_server:with-config
- - name: get login-server container id
- run: echo "::set-output name=id::$(docker container ls | grep login_server | awk '{ print $1 }')"
- id: login_server_container
##########################################################################
# CHECKOUT CODE ##########################################################
##########################################################################
@@ -647,9 +553,6 @@ jobs:
path: /tmp
- name: Load Docker Image
run: docker load < /tmp/community_server.tar
- # for debugging login-server
- - name: check login-server
- run: docker logs ${{ steps.login_server_container.outputs.id }}
- name: check mariadb
run: docker logs ${{ steps.mariadb_container.outputs.id }}
- name: check migration
diff --git a/.gitmodules b/.gitmodules
index 22790ccc7..e884aaf3e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -3,34 +3,6 @@
url = https://github.com/gradido/gn.git
branch = master
-[submodule "login_server/dependencies/tinf"]
- path = login_server/dependencies/tinf
- url = https://github.com/jibsen/tinf.git
-[submodule "login_server/dependencies/mariadb-connector-c"]
- path = login_server/dependencies/mariadb-connector-c
- url = https://github.com/MariaDB/mariadb-connector-c.git
-[submodule "login_server/src/proto"]
- path = login_server/src/proto
- url = https://github.com/gradido/gradido_protocol.git
-[submodule "login_server/dependencies/spirit-po"]
- path = login_server/dependencies/spirit-po
- url = https://github.com/cbeck88/spirit-po.git
-[submodule "login_server/dependencies/poco"]
- path = login_server/dependencies/poco
- url = https://github.com/pocoproject/poco.git
-[submodule "login_server/dependencies/cmake-modules"]
- path = login_server/dependencies/cmake-modules
- url = https://github.com/viaduck/cmake-modules.git
-
[submodule "community_server/src/protobuf"]
path = community_server/src/protobuf
url = https://github.com/gradido/gradido_protocol.git
-[submodule "login_server/dependencies/libsodium"]
- path = login_server/dependencies/libsodium
- url = https://github.com/jedisct1/libsodium.git
-[submodule "login_server/src/proto"]
- path = login_server/src/proto
- url = https://github.com/gradido/gradido_protocol.git
-[submodule "login_server/dependencies/protobuf"]
- path = login_server/dependencies/protobuf
- url = https://github.com/protocolbuffers/protobuf.git
diff --git a/README.md b/README.md
index 355a40b82..4b0a3b6fd 100644
--- a/README.md
+++ b/README.md
@@ -60,7 +60,6 @@ docker-compose -f docker-compose.yml up
- [frontend](./frontend) Wallet frontend
- [backend](./backend) GraphQL & Business logic backend
- [mariadb](./mariadb) Database backend
-- [login_server](./login_server) User credential storage & business logic backend
- [community_server](./community_server/) Business logic backend
We are currently restructuring the service to reduce dependencies and unify business logic into one place. Furthermore the databases defined for each service will be unified into one.
diff --git a/admin/package.json b/admin/package.json
index e38d21af8..11ca864c9 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -12,7 +12,7 @@
"dev": "yarn run serve",
"build": "vue-cli-service build",
"lint": "eslint --ext .js,.vue .",
- "test": "jest --coverage",
+ "test": "TZ=UTC jest --coverage",
"locales": "scripts/missing-keys.sh && scripts/sort.sh"
},
"dependencies": {
@@ -36,14 +36,12 @@
"graphql": "^15.6.1",
"identity-obj-proxy": "^3.0.0",
"jest": "26.6.3",
- "moment": "^2.29.1",
"regenerator-runtime": "^0.13.9",
"stats-webpack-plugin": "^0.7.0",
"vue": "^2.6.11",
"vue-apollo": "^3.0.8",
"vue-i18n": "^8.26.5",
"vue-jest": "^3.0.7",
- "vue-moment": "^4.1.0",
"vue-router": "^3.5.3",
"vue-toasted": "^1.1.28",
"vuex": "^3.6.2",
diff --git a/admin/src/components/CreationFormular.spec.js b/admin/src/components/CreationFormular.spec.js
index b3807b16f..cfc23fa26 100644
--- a/admin/src/components/CreationFormular.spec.js
+++ b/admin/src/components/CreationFormular.spec.js
@@ -5,14 +5,6 @@ import { createPendingCreations } from '../graphql/createPendingCreations'
const localVue = global.localVue
-const apolloMock = jest.fn().mockResolvedValue({
- data: {
- verifyLogin: {
- name: 'success',
- id: 0,
- },
- },
-})
const apolloMutateMock = jest.fn().mockResolvedValue({
data: {
createPendingCreation: [0, 0, 0],
@@ -23,19 +15,12 @@ const toastedErrorMock = jest.fn()
const toastedSuccessMock = jest.fn()
const mocks = {
- $t: jest.fn((t) => t),
- $moment: jest.fn(() => {
- return {
- format: jest.fn((m) => m),
- subtract: jest.fn(() => {
- return {
- format: jest.fn((m) => m),
- }
- }),
- }
+ $t: jest.fn((t, options) => (options ? [t, options] : t)),
+ $d: jest.fn((d) => {
+ const date = new Date(d)
+ return date.toISOString().split('T')[0]
}),
$apollo: {
- query: apolloMock,
mutate: apolloMutateMock,
},
$store: {
@@ -56,7 +41,12 @@ const mocks = {
const propsData = {
type: '',
creation: [],
- itemsMassCreation: {},
+}
+
+const now = new Date(Date.now())
+const getCreationDate = (sub) => {
+ const date = sub === 0 ? now : new Date(now.getFullYear(), now.getMonth() - sub, 1, 0)
+ return date.toISOString().split('T')[0]
}
describe('CreationFormular', () => {
@@ -75,21 +65,24 @@ describe('CreationFormular', () => {
expect(wrapper.find('.component-creation-formular').exists()).toBeTruthy()
})
- describe('server sends back moderator data', () => {
- it('called store commit with mocked data', () => {
- expect(stateCommitMock).toBeCalledWith('moderator', { name: 'success', id: 0 })
- })
- })
-
- describe('server throws error for moderator data call', () => {
- beforeEach(() => {
- jest.clearAllMocks()
- apolloMock.mockRejectedValueOnce({ message: 'Ouch!' })
- wrapper = Wrapper()
+ describe('text and value form props', () => {
+ beforeEach(async () => {
+ wrapper = mount(CreationFormular, {
+ localVue,
+ mocks,
+ propsData: {
+ creationUserData: { memo: 'Memo from property', amount: 42 },
+ ...propsData,
+ },
+ })
})
- it('has called store commit with fake data', () => {
- expect(stateCommitMock).toBeCalledWith('moderator', { id: 0, name: 'Test Moderator' })
+ it('has text taken from props', () => {
+ expect(wrapper.vm.text).toBe('Memo from property')
+ })
+
+ it('has value taken from props', () => {
+ expect(wrapper.vm.value).toBe(42)
})
})
@@ -98,52 +91,6 @@ describe('CreationFormular', () => {
expect(wrapper.findAll('input[type="radio"]').length).toBe(3)
})
- describe('with mass creation', () => {
- beforeEach(async () => {
- jest.clearAllMocks()
- await wrapper.setProps({ type: 'massCreation', creation: [200, 400, 600] })
- await wrapper.setData({ rangeMin: 180 })
- await wrapper.setData({ text: 'Test create coins' })
- await wrapper.setData({ value: 90 })
- })
-
- describe('first radio button', () => {
- beforeEach(async () => {
- await wrapper.findAll('input[type="radio"]').at(0).setChecked()
- })
-
- it('emits update-radio-selected with index 0', () => {
- expect(wrapper.emitted()['update-radio-selected']).toEqual([
- [expect.arrayContaining([0])],
- ])
- })
- })
-
- describe('second radio button', () => {
- beforeEach(async () => {
- await wrapper.findAll('input[type="radio"]').at(1).setChecked()
- })
-
- it('emits update-radio-selected with index 1', () => {
- expect(wrapper.emitted()['update-radio-selected']).toEqual([
- [expect.arrayContaining([1])],
- ])
- })
- })
-
- describe('third radio button', () => {
- beforeEach(async () => {
- await wrapper.findAll('input[type="radio"]').at(2).setChecked()
- })
-
- it('emits update-radio-selected with index 2', () => {
- expect(wrapper.emitted()['update-radio-selected']).toEqual([
- [expect.arrayContaining([2])],
- ])
- })
- })
- })
-
describe('with single creation', () => {
beforeEach(async () => {
jest.clearAllMocks()
@@ -153,17 +100,17 @@ describe('CreationFormular', () => {
item: { email: 'benjamin@bluemchen.de' },
})
await wrapper.findAll('input[type="radio"]').at(1).setChecked()
- await wrapper.find('textarea').setValue('Test create coins')
await wrapper.find('input[type="number"]').setValue(90)
})
describe('first radio button', () => {
beforeEach(async () => {
await wrapper.findAll('input[type="radio"]').at(0).setChecked()
+ await wrapper.find('textarea').setValue('Test create coins')
})
it('sets rangeMax to 200', () => {
- expect(wrapper.vm.rangeMax).toBe(400)
+ expect(wrapper.vm.rangeMax).toBe(200)
})
describe('sendForm', () => {
@@ -177,7 +124,7 @@ describe('CreationFormular', () => {
mutation: createPendingCreation,
variables: {
email: 'benjamin@bluemchen.de',
- creationDate: 'YYYY-MM-01',
+ creationDate: getCreationDate(2),
amount: 90,
memo: 'Test create coins',
moderator: 0,
@@ -185,9 +132,30 @@ describe('CreationFormular', () => {
}),
)
})
+
+ it('emits update-user-data', () => {
+ expect(wrapper.emitted('update-user-data')).toEqual([
+ [{ email: 'benjamin@bluemchen.de' }, [0, 0, 0]],
+ ])
+ })
+
+ it('toasts a success message', () => {
+ expect(toastedSuccessMock).toBeCalledWith([
+ 'creation_form.toasted',
+ { email: 'benjamin@bluemchen.de', value: '90' },
+ ])
+ })
+
+ it('updates open creations in store', () => {
+ expect(stateCommitMock).toBeCalledWith('openCreationsPlus', 1)
+ })
+
+ it('resets the form data', () => {
+ expect(wrapper.vm.value).toBe(0)
+ })
})
- describe('sendForm', () => {
+ describe('sendForm with server error', () => {
beforeEach(async () => {
apolloMutateMock.mockRejectedValueOnce({ message: 'Ouch!' })
await wrapper.find('.test-submit').trigger('click')
@@ -373,9 +341,18 @@ describe('CreationFormular', () => {
})
})
- describe('with mass creation', () => {
+ describe('mass creation with success', () => {
beforeEach(async () => {
jest.clearAllMocks()
+ apolloMutateMock.mockResolvedValue({
+ data: {
+ createPendingCreations: {
+ success: true,
+ successfulCreation: ['bob@baumeister.de', 'bibi@bloxberg.de'],
+ failedCreation: [],
+ },
+ },
+ })
await wrapper.setProps({
type: 'massCreation',
creation: [200, 400, 600],
@@ -395,14 +372,14 @@ describe('CreationFormular', () => {
pendingCreations: [
{
email: 'bob@baumeister.de',
- creationDate: 'YYYY-MM-01',
+ creationDate: getCreationDate(1),
amount: 200,
memo: 'Test mass create coins',
moderator: 0,
},
{
email: 'bibi@bloxberg.de',
- creationDate: 'YYYY-MM-01',
+ creationDate: getCreationDate(1),
amount: 200,
memo: 'Test mass create coins',
moderator: 0,
@@ -412,6 +389,73 @@ describe('CreationFormular', () => {
}),
)
})
+
+ it('updates open creations in store', () => {
+ expect(stateCommitMock).toBeCalledWith('openCreationsPlus', 2)
+ })
+
+ it('emits remove-all-bookmark', () => {
+ expect(wrapper.emitted('remove-all-bookmark')).toBeTruthy()
+ })
+ })
+
+ describe('mass creation with success but all failed', () => {
+ beforeEach(async () => {
+ jest.clearAllMocks()
+ apolloMutateMock.mockResolvedValue({
+ data: {
+ createPendingCreations: {
+ success: true,
+ successfulCreation: [],
+ failedCreation: ['bob@baumeister.de', 'bibi@bloxberg.de'],
+ },
+ },
+ })
+ await wrapper.setProps({
+ type: 'massCreation',
+ creation: [200, 400, 600],
+ items: [{ email: 'bob@baumeister.de' }, { email: 'bibi@bloxberg.de' }],
+ })
+ await wrapper.findAll('input[type="radio"]').at(1).setChecked()
+ await wrapper.find('textarea').setValue('Test mass create coins')
+ await wrapper.find('input[type="number"]').setValue(200)
+ await wrapper.find('.test-submit').trigger('click')
+ })
+
+ it('updates open creations in store', () => {
+ expect(stateCommitMock).toBeCalledWith('openCreationsPlus', 0)
+ })
+
+ it('toasts two errors', () => {
+ expect(toastedErrorMock).toBeCalledWith(
+ 'Could not created PendingCreation for bob@baumeister.de',
+ )
+ expect(toastedErrorMock).toBeCalledWith(
+ 'Could not created PendingCreation for bibi@bloxberg.de',
+ )
+ })
+ })
+
+ describe('mass creation with error', () => {
+ beforeEach(async () => {
+ jest.clearAllMocks()
+ apolloMutateMock.mockRejectedValue({
+ message: 'Oh no!',
+ })
+ await wrapper.setProps({
+ type: 'massCreation',
+ creation: [200, 400, 600],
+ items: [{ email: 'bob@baumeister.de' }, { email: 'bibi@bloxberg.de' }],
+ })
+ await wrapper.findAll('input[type="radio"]').at(1).setChecked()
+ await wrapper.find('textarea').setValue('Test mass create coins')
+ await wrapper.find('input[type="number"]').setValue(200)
+ await wrapper.find('.test-submit').trigger('click')
+ })
+
+ it('toasts an error message', () => {
+ expect(toastedErrorMock).toBeCalledWith('Oh no!')
+ })
})
})
})
diff --git a/admin/src/components/CreationFormular.vue b/admin/src/components/CreationFormular.vue
index 3c8c914e2..34df13e11 100644
--- a/admin/src/components/CreationFormular.vue
+++ b/admin/src/components/CreationFormular.vue
@@ -7,51 +7,15 @@
{{ $t('creation_form.select_month') }}
-
-
-
- {{ beforeLastMonth.short }} {{ creation[0] != null ? creation[0] + ' GDD' : '' }}
-
-
-
-
-
-
- {{ lastMonth.short }} {{ creation[1] != null ? creation[1] + ' GDD' : '' }}
-
-
-
-
-
-
- {{ currentMonth.short }} {{ creation[2] != null ? creation[2] + ' GDD' : '' }}
-
-
-
+
-
-
+
{{ $t('creation_form.select_value') }}
@@ -62,7 +26,6 @@
:max="rangeMax"
>
-
-
+
{{ $t('creation_form.enter_text') }}
@@ -100,18 +63,17 @@
variant="success"
class="test-submit"
@click="submitCreation"
- :disabled="radioSelected === '' || value <= 0 || text.length < 10"
+ :disabled="selected === '' || value <= 0 || text.length < 10"
>
{{ $t('creation_form.update_creation') }}
-
{{ $t('creation_form.submit_creation') }}
@@ -123,11 +85,12 @@
diff --git a/admin/src/components/EditCreationFormular.spec.js b/admin/src/components/EditCreationFormular.spec.js
index ed0f412ba..84d3e26d3 100644
--- a/admin/src/components/EditCreationFormular.spec.js
+++ b/admin/src/components/EditCreationFormular.spec.js
@@ -7,8 +7,9 @@ const apolloMutateMock = jest.fn().mockResolvedValue({
data: {
updatePendingCreation: {
creation: [0, 0, 0],
+ amount: 500,
date: new Date(),
- memo: 'qwertzuiopasdfghjkl',
+ memo: 'Test Schöpfung 2',
moderator: 0,
},
},
@@ -20,15 +21,9 @@ const toastedSuccessMock = jest.fn()
const mocks = {
$t: jest.fn((t) => t),
- $moment: jest.fn(() => {
- return {
- format: jest.fn((m) => m),
- subtract: jest.fn(() => {
- return {
- format: jest.fn((m) => m),
- }
- }),
- }
+ $d: jest.fn((d) => {
+ const date = new Date(d)
+ return date.toISOString().split('T')[0]
}),
$apollo: {
mutate: apolloMutateMock,
@@ -48,12 +43,18 @@ const mocks = {
},
}
+const now = new Date(Date.now())
+const getCreationDate = (sub) => {
+ const date = sub === 0 ? now : new Date(now.getFullYear(), now.getMonth() - sub, 1, 0)
+ return date.toISOString().split('T')[0]
+}
+
const propsData = {
creation: [200, 400, 600],
creationUserData: {
memo: 'Test schöpfung 1',
amount: 100,
- date: '2021-12-01',
+ date: getCreationDate(0),
},
item: {
id: 0,
@@ -82,196 +83,79 @@ describe('EditCreationFormular', () => {
expect(wrapper.findAll('input[type="radio"]').length).toBe(3)
})
- describe('with single creation', () => {
+ it('has the third radio button checked', () => {
+ expect(wrapper.findAll('input[type="radio"]').at(0).element.checked).toBeFalsy()
+ expect(wrapper.findAll('input[type="radio"]').at(1).element.checked).toBeFalsy()
+ expect(wrapper.findAll('input[type="radio"]').at(2).element.checked).toBeTruthy()
+ })
+
+ it('has rangeMax of 700', () => {
+ expect(wrapper.find('input[type="number"]').attributes('max')).toBe('700')
+ })
+
+ describe('change and save memo and value with success', () => {
beforeEach(async () => {
- jest.clearAllMocks()
- await wrapper.setProps({ creation: [200, 400, 600] })
- await wrapper.setData({ rangeMin: 180 })
- await wrapper.setData({ text: 'Test create coins' })
- await wrapper.setData({ value: 90 })
+ await wrapper.find('input[type="number"]').setValue(500)
+ await wrapper.find('textarea').setValue('Test Schöpfung 2')
+ await wrapper.find('.test-submit').trigger('click')
})
- describe('first radio button', () => {
- beforeEach(async () => {
- await wrapper.findAll('input[type="radio"]').at(0).setChecked()
- })
-
- it('sets rangeMin to 0', () => {
- expect(wrapper.vm.rangeMin).toBe(0)
- })
-
- it('sets rangeMax to 200', () => {
- expect(wrapper.vm.rangeMax).toBe(200)
- })
-
- describe('sendForm', () => {
- beforeEach(async () => {
- await wrapper.find('.test-submit').trigger('click')
- })
-
- it('sends ... to apollo', () => {
- expect(apolloMutateMock).toBeCalledWith(
- expect.objectContaining({
- variables: {
- amount: 90,
- creationDate: 'YYYY-MM-01',
- email: 'bob@baumeister.de',
- id: 0,
- memo: 'Test create coins',
- moderator: 0,
- },
- }),
- )
- })
-
- it('emits update-user-data', () => {
- expect(wrapper.emitted('update-user-data')).toBeTruthy()
- expect(wrapper.emitted('update-user-data')).toEqual([
- [
- {
- id: 0,
- email: 'bob@baumeister.de',
- },
- [0, 0, 0],
- ],
- ])
- })
-
- it('toast success message', () => {
- expect(toastedSuccessMock).toBeCalledWith('creation_form.toasted_update')
- })
-
- describe('sendForm with error', () => {
- beforeEach(async () => {
- jest.clearAllMocks()
- apolloMutateMock.mockRejectedValue({
- message: 'Ouch!',
- })
- wrapper = Wrapper()
- await wrapper.setProps({ type: 'singleCreation', creation: [200, 400, 600] })
- await wrapper.setData({ text: 'Test create coins' })
- await wrapper.setData({ value: 90 })
- await wrapper.findAll('input[type="radio"]').at(0).setChecked()
- await wrapper.setData({ rangeMin: 100 })
- await wrapper.find('.test-submit').trigger('click')
- })
-
- it('toast error message', () => {
- expect(toastedErrorMock).toBeCalledWith('Ouch!')
- })
- })
- })
+ it('calls the API', () => {
+ expect(apolloMutateMock).toBeCalledWith(
+ expect.objectContaining({
+ variables: {
+ id: 0,
+ email: 'bob@baumeister.de',
+ creationDate: getCreationDate(0),
+ amount: 500,
+ memo: 'Test Schöpfung 2',
+ moderator: 0,
+ },
+ }),
+ )
})
- describe('second radio button', () => {
- beforeEach(async () => {
- await wrapper.findAll('input[type="radio"]').at(1).setChecked()
- })
-
- it('sets rangeMin to 0', () => {
- expect(wrapper.vm.rangeMin).toBe(0)
- })
-
- it('sets rangeMax to 400', () => {
- expect(wrapper.vm.rangeMax).toBe(400)
- })
-
- describe('sendForm', () => {
- beforeEach(async () => {
- await wrapper.find('.test-submit').trigger('click')
- })
-
- it('sends ... to apollo', () => {
- expect(apolloMutateMock).toBeCalledWith(
- expect.objectContaining({
- variables: {
- amount: 90,
- creationDate: 'YYYY-MM-01',
- email: 'bob@baumeister.de',
- id: 0,
- memo: 'Test create coins',
- moderator: 0,
- },
- }),
- )
- })
-
- describe('sendForm with error', () => {
- beforeEach(async () => {
- jest.clearAllMocks()
- apolloMutateMock.mockRejectedValue({
- message: 'Ouch!',
- })
- wrapper = Wrapper()
- await wrapper.setProps({ creation: [200, 400, 600] })
- await wrapper.setData({ text: 'Test create coins' })
- await wrapper.setData({ value: 100 })
- await wrapper.findAll('input[type="radio"]').at(1).setChecked()
- await wrapper.setData({ rangeMin: 180 })
- await wrapper.find('.test-submit').trigger('click')
- })
-
- it('toast error message', () => {
- expect(toastedErrorMock).toBeCalledWith('Ouch!')
- })
- })
- })
+ it('emits update-user-data', () => {
+ expect(wrapper.emitted('update-user-data')).toEqual([
+ [
+ {
+ id: 0,
+ email: 'bob@baumeister.de',
+ },
+ [0, 0, 0],
+ ],
+ ])
})
- describe('third radio button', () => {
- beforeEach(async () => {
- await wrapper.setData({ rangeMin: 180 })
- await wrapper.findAll('input[type="radio"]').at(2).setChecked()
- })
+ it('emits update-creation-data', () => {
+ expect(wrapper.emitted('update-creation-data')).toEqual([
+ [
+ {
+ amount: 500,
+ date: expect.any(Date),
+ memo: 'Test Schöpfung 2',
+ moderator: 0,
+ row: expect.any(Object),
+ },
+ ],
+ ])
+ })
- it('sets rangeMin to 180', () => {
- expect(wrapper.vm.rangeMin).toBe(180)
- })
+ it('toasts a success message', () => {
+ expect(toastedSuccessMock).toBeCalledWith('creation_form.toasted_update')
+ })
+ })
- it('sets rangeMax to 700', () => {
- expect(wrapper.vm.rangeMax).toBe(700)
- })
+ describe('change and save memo and value with error', () => {
+ beforeEach(async () => {
+ apolloMutateMock.mockRejectedValue({ message: 'Oh no!' })
+ await wrapper.find('input[type="number"]').setValue(500)
+ await wrapper.find('textarea').setValue('Test Schöpfung 2')
+ await wrapper.find('.test-submit').trigger('click')
+ })
- describe('sendForm with success', () => {
- beforeEach(async () => {
- await wrapper.find('.test-submit').trigger('click')
- })
-
- it('sends ... to apollo', () => {
- expect(apolloMutateMock).toBeCalledWith(
- expect.objectContaining({
- variables: {
- amount: 90,
- creationDate: 'YYYY-MM-DD',
- email: 'bob@baumeister.de',
- id: 0,
- memo: 'Test create coins',
- moderator: 0,
- },
- }),
- )
- })
- })
-
- describe('sendForm with error', () => {
- beforeEach(async () => {
- jest.clearAllMocks()
- apolloMutateMock.mockRejectedValue({
- message: 'Ouch!',
- })
- wrapper = Wrapper()
- await wrapper.setProps({ creation: [200, 400, 600] })
- await wrapper.setData({ text: 'Test create coins' })
- await wrapper.setData({ value: 90 })
- await wrapper.findAll('input[type="radio"]').at(2).setChecked()
- await wrapper.setData({ rangeMin: 180 })
- await wrapper.find('.test-submit').trigger('click')
- })
-
- it('toast error message', () => {
- expect(toastedErrorMock).toBeCalledWith('Ouch!')
- })
- })
+ it('toasts an error message', () => {
+ expect(toastedErrorMock).toBeCalledWith('Oh no!')
})
})
})
diff --git a/admin/src/components/EditCreationFormular.vue b/admin/src/components/EditCreationFormular.vue
index 2fa45dd8e..650b00410 100644
--- a/admin/src/components/EditCreationFormular.vue
+++ b/admin/src/components/EditCreationFormular.vue
@@ -6,65 +6,14 @@
{{ $t('creation_form.select_month') }}
-
-
-
- {{ beforeLastMonth.short }}
- {{
- selectedOpenCreationAmount[0] != null
- ? selectedOpenCreationAmount[0] + ' GDD'
- : ''
- }}
-
-
-
-
-
-
- {{ lastMonth.short }}
- {{
- selectedOpenCreationAmount[1] != null
- ? selectedOpenCreationAmount[1] + ' GDD'
- : ''
- }}
-
-
-
-
-
-
- {{ currentMonth.short }}
- {{
- selectedOpenCreationAmount[2] != null
- ? selectedOpenCreationAmount[2] + ' GDD'
- : ''
- }}
-
-
-
+
-
{{ $t('creation_form.select_value') }}
@@ -76,7 +25,6 @@
:max="rangeMax"
>
-
{{ $t('creation_form.update_creation') }}
@@ -126,8 +74,11 @@
-
- <% } else if(state == PAGE_ASK_PASSPHRASE) { %>
-
-
-
-
-
-
- <% } else if(state == PAGE_FORCE_ASK_PASSPHRASE) { %>
-
- <% } else { %>
-
- <% } %>
-
-
-<%@ include file="include/footer_ripple.cpsp" %>
diff --git a/login_server/src/cpsp/Register.cpsp b/login_server/src/cpsp/Register.cpsp
deleted file mode 100644
index 4a806de59..000000000
--- a/login_server/src/cpsp/Register.cpsp
+++ /dev/null
@@ -1,85 +0,0 @@
-<%@ page class="RegisterPage" %>
-<%@ page form="true" %>
-<%@ page baseClass="PageRequestMessagedHandler" %>
-<%@ header include="HTTPInterface/PageRequestMessagedHandler.h" %>
-<%!
-#include "SingletonManager/SessionManager.h"
-#include "Poco/Net/HTTPCookie.h"
-%>
-<%%
- const char* pageName = "Registrieren";
- auto sm = SessionManager::getInstance();
-
- bool userReturned = false;
-
- if(!form.empty()) {
- if(form.get("register-password2", "") != form.get("register-password", "")) {
- addError(new Error("Passwort", "Passwörter sind nicht identisch."), false);
- } else {
- auto session = sm->getSession(request);
- if(!session) {
- session = sm->getNewSession();
- auto user_host = request.clientAddress().host();
- session->setClientIp(user_host);
- response.addCookie(session->getLoginCookie());
- }
-
- userReturned = session->createUserDirect(
- form.get("register-first-name", ""),
- form.get("register-last-name", ""),
- form.get("register-email", ""),
- form.get("register-password", ""),
- getBaseUrl()
- );
- getErrors(session);
- }
-
- } else {
- // on enter login page with empty form
- // remove old cookies if exist
- sm->deleteLoginCookies(request, response);
- }
-%><%@ include file="include/header_old.cpsp" %>
-
-<%@ include file="include/footer.cpsp" %>
diff --git a/login_server/src/cpsp/RegisterAdmin.cpsp b/login_server/src/cpsp/RegisterAdmin.cpsp
deleted file mode 100644
index 1711dc5b0..000000000
--- a/login_server/src/cpsp/RegisterAdmin.cpsp
+++ /dev/null
@@ -1,88 +0,0 @@
-<%@ page class="RegisterAdminPage" %>
-<%@ page form="true" %>
-<%@ page baseClass="SessionHTTPRequestHandler" %>
-<%@ page ctorArg="Session*" %>
-<%@ header include="HTTPInterface/SessionHTTPRequestHandler.h" %>
-<%!
-#include "SingletonManager/SessionManager.h"
-#include "controller/Group.h"
-#include "lib/DataTypeConverter.h"
-
-#include "Poco/Net/HTTPCookie.h"
-#include "ServerConfig.h"
-
-%>
-<%%
- const char* pageName = "Admin Registrieren";
- auto sm = SessionManager::getInstance();
-
- bool userReturned = false;
-
- if(!form.empty()) {
- auto group_id_string = form.get("register-group", "0");
- int group_id = 0;
- if(!sm->isValid(group_id_string, VALIDATE_ONLY_INTEGER)) {
- addError(new Error("Group id", "group_id not integer"));
- } else {
- if(DataTypeConverter::strToInt(group_id_string, group_id) != DataTypeConverter::NUMBER_PARSE_OKAY) {
- addError(new Error("Int Convert Error", "Error converting group_id to int"));
- }
- }
- if(!errorCount()) {
- userReturned = mSession->adminCreateUser(
- form.get("register-first-name", ""),
- form.get("register-last-name", ""),
- form.get("register-email", ""),
- group_id,
- getBaseUrl()
- );
- getErrors(mSession);
- }
-
- }
-
- auto groups = controller::Group::listAll();
-
-
-%><%@ include file="include/header_old.cpsp" %>
-
-
Einen neuen Account anlegen
- <%= getErrorsHtml() %>
- <% if(!form.empty() && userReturned) {%>
-
-
- Die Anmeldung wird verarbeitet und es wird dem Benutzer eine Aktivierungs-E-Mail zugeschickt.
-
-
-
Zurück
- <% } else { %>
-
-
-
- Account anlegen
- Bitte gebe die Benutzer-Daten ein um einen Account anzulegen
-
- Vorname
- "/>
-
-
- Nachname
- "/>
-
-
- E-Mail
- "/>
-
-
- <% for(auto it = groups.begin(); it != groups.end(); it++) {
- auto group_model = (*it)->getModel(); %>
- <%= group_model->getName() %>
- <% } %>
-
-
-
-
-
- <% } %>
-
-<%@ include file="include/footer.cpsp" %>
diff --git a/login_server/src/cpsp/RegisterDirect.cpsp b/login_server/src/cpsp/RegisterDirect.cpsp
deleted file mode 100644
index 7892a9e97..000000000
--- a/login_server/src/cpsp/RegisterDirect.cpsp
+++ /dev/null
@@ -1,102 +0,0 @@
-<%@ page class="RegisterDirectPage" %>
-<%@ page form="true" %>
-<%@ page baseClass="PageRequestMessagedHandler" %>
-<%@ header include="HTTPInterface/PageRequestMessagedHandler.h" %>
-<%!
-#include "SingletonManager/SessionManager.h"
-#include "controller/Group.h"
-#include "lib/DataTypeConverter.h"
-#include "Poco/Net/HTTPCookie.h"
-
-%>
-<%%
- const char* pageName = "Registrieren";
- auto sm = SessionManager::getInstance();
-
- bool userReturned = false;
- std::string caller_uri;
-
- if(!form.empty()) {
-
- caller_uri = form.get("caller_uri", "");
-
- if(form.get("register-password2", "") != form.get("register-password", "")) {
- addError(new Error("Passwort", "Passwörter sind nicht identisch."), false);
- } else {
- auto session = sm->getSession(request);
- if(!session) {
- session = sm->getNewSession();
- auto user_host = request.clientAddress().host();
- session->setClientIp(user_host);
- session->setCallerUri(caller_uri);
- response.addCookie(session->getLoginCookie());
- }
- printf("caller uri after session: %s\n", caller_uri.data());
- auto email = form.get("register-email", "");
- auto password = form.get("register-password", "");
- if(email != "" && password != "") {
-
- userReturned = session->createUserDirect(
- form.get("register-first-name", ""),
- form.get("register-last-name", ""),
- email,
- password,
- getBaseUrl()
- );
- }
-
- getErrors(session);
-
- if(!errorCount() && userReturned) {
- auto user_host = request.clientAddress().host();
- session->setClientIp(user_host);
- response.addCookie(session->getLoginCookie());
- if(caller_uri == "") {
- caller_uri = session->getCallerUri();
- }
- if(caller_uri != "") {
- std::string redirect_url = caller_uri;
- redirect_url += "?session_id=" + std::to_string(session->getHandle());
- response.redirect(redirect_url);
- return;
- }
- auto user = session->getNewUser();
- if(user->getModel()->getGroupId() == 0) {
- response.redirect(getBaseUrl() + "/userUpdateGroup");
- } else {
- response.redirect(user->getGroupBaseUrl());
- }
- return;
- }
- }
-
- } else {
- // on enter login page with empty form
- // remove old cookies if exist
- sm->deleteLoginCookies(request, response);
- }
-
-
-%><%@ include file="include/header.cpsp" %>
-<%= getErrorsHtml() %>
-
-
-
Einen neuen Account anlegen
-
-
-<%@ include file="include/footer.cpsp" %>
diff --git a/login_server/src/cpsp/ResetPassword.cpsp b/login_server/src/cpsp/ResetPassword.cpsp
deleted file mode 100644
index 093b0e13f..000000000
--- a/login_server/src/cpsp/ResetPassword.cpsp
+++ /dev/null
@@ -1,166 +0,0 @@
-<%@ page class="ResetPasswordPage" %>
-<%@ page form="true" %>
-<%@ page baseClass="PageRequestMessagedHandler" %>
-<%@ header include="HTTPInterface/PageRequestMessagedHandler.h" %>
-<%!
-#include "SingletonManager/LanguageManager.h"
-#include "SingletonManager/SessionManager.h"
-#include "SingletonManager/EmailManager.h"
-#include "controller/User.h"
-#include "controller/UserBackup.h"
-
-enum PageState {
- PAGE_EMAIL_ASK,
- PAGE_ASK,
- PAGE_WAIT_EMAIL,
- PAGE_WAIT_ADMIN,
- PAGE_EMAIL_ALREADY_SEND
-};
-%><%%
- PageState state = PAGE_EMAIL_ASK;
- auto lm = LanguageManager::getInstance();
- auto sm = SessionManager::getInstance();
- auto adminReceiver = EmailManager::getInstance()->getAdminReceiver();
-
- const char* pageName = "Passwort vergessen";
- auto lang = chooseLanguage(request);
-
- // class="btn btn-outline-secondary flag-btn"
- // class="btn btn-secondary disabled flag-btn" disabled
- std::string eng_btn_classes = "";
- std::string de_btn_classes = "";
-
- auto langCatalog = lm->getFreeCatalog(lang);
-
- std::string emailInputClass = "form-control";
- std::string passphraseRadioClass = "group";
-
- std::string email = "";
-
- if(!form.empty()) {
- auto session = sm->getNewSession();
- email = form.get("email", "");
- auto passphraseMemorized = form.get("passphrase_memorized", "");
- auto user = controller::User::create();
- auto ask = form.get("ask_passphrase", "");
-
- if(email != "")
- {
- bool user_exist = false;
- bool sendUserEmail = false;
-
- if(!sm->isValid(email, VALIDATE_EMAIL)) {
- addError(new Error(gettext(session, "E-Mail"), gettext(session, "Das ist keine gültige E-Mail Adresse")), false);
- emailInputClass += " is-invalid";
- }
- user_exist = user->load(email) == 1;
-
- if(ask == "true")
- {
- if(passphraseMemorized == "") {
- addError(new Error(gettext(session, "Passphrase"), gettext(session, "Bitte wähle eine Option aus.")), false);
- passphraseRadioClass += " group-is-invalid";
- } else if(passphraseMemorized == "true") {
- sendUserEmail = true;
- }
-
- }
- else
- {
- if(user_exist && (!user->tryLoadPassphraseUserBackup() || !user->hasPublicKey())) {
- sendUserEmail = true;
- }
- }
-
- if(!errorCount())
- {
- // send reset password email
- int result = 0;
- if(user_exist) {
- result = session->sendResetPasswordEmail(user, sendUserEmail, ServerConfig::g_serverPath + "/checkEmail");
- }
-
- if(2 == result) {
- state = PAGE_EMAIL_ALREADY_SEND;
- } else if(sendUserEmail) {
- state = PAGE_WAIT_EMAIL;
- } else {
- state = PAGE_WAIT_ADMIN;
- }
- }
- }
- else
- {
- addError(new Error(gettext(session, "E-Mail"), gettext(session, "E-Mail Adresse nicht angegeben.")), false);
- emailInputClass += " is-invalid";
- }
-
- }
-
-
-%><%@ include file="include/header.cpsp" %>
- <%= getErrorsHtml() %>
-
- <% } else if(state == PAGE_WAIT_EMAIL) { %>
- <%= langCatalog->gettext("Dir wird eine E-Mail zugeschickt um dein Passwort zurückzusetzen.") %>
- <% } else if(state == PAGE_WAIT_ADMIN) { %>
- <%= langCatalog->gettext("Der Admin hat eine E-Mail bekommen und wird sich bei dir melden.") %>
- <% } else if(state == PAGE_EMAIL_ALREADY_SEND) { %>
-
<%= langCatalog->gettext("Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-Verzeichnis nach. ") %>
-
<%= langCatalog->gettext("Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten gewartet?") %>
-
<%= langCatalog->gettext("E-Mail an Support schicken")%>
- <% } %>
-
-
-
-
-
-
-<%@ include file="include/footer.cpsp" %>
-
diff --git a/login_server/src/cpsp/SaveKeys.cpsp b/login_server/src/cpsp/SaveKeys.cpsp
deleted file mode 100644
index ded9dc3f5..000000000
--- a/login_server/src/cpsp/SaveKeys.cpsp
+++ /dev/null
@@ -1,137 +0,0 @@
-<%@ page class="SaveKeysPage" %>
-<%@ page baseClass="SessionHTTPRequestHandler" %>
-<%@ page ctorArg="Session*" %>
-<%@ header include="HTTPInterface/SessionHTTPRequestHandler.h" %>
-<%@ page form="true" %>
-<%!
-#include "Poco/Net/HTTPServerParams.h"
-
-enum PageState
-{
- PAGE_ASK,
- PAGE_SHOW_PUBKEY,
- PAGE_ERROR
-};
-
-%>
-<%%
- const char* pageName = "Daten auf Server speichern?";
- bool hasErrors = mSession->errorCount() > 0;
- // crypto key only in memory, if user has tipped in his passwort in this session
- auto user = mSession->getNewUser();
- bool hasPassword = user->getModel()->hasPrivateKeyEncrypted();
- PageState state = PAGE_ASK;
- auto uri_start = ServerConfig::g_php_serverPath;//request.serverParams().getServerName();
-
- // skip asking user if he like to save keys and passphrase on server for now!
- state = PAGE_SHOW_PUBKEY;
- if(!mSession->generateKeys(true, true)) {
- getErrors(mSession);
- }
- /*
- if(!form.empty()) {
- // privkey
- auto savePrivkeyChoice = form.get("save-privkey");
- bool savePrivkey = false;
- if(savePrivkeyChoice == "yes") {
- if(!hasPassword) {
- // check pwd
- auto pwd = form.get("save-privkey-password", "");
-
- if(!mSession->isPwdValid(pwd)) {
- addError(new Error("Passwort", "Das Passwort stimmt nicht. Bitte verwende dein Passwort von der Registrierung"), false);
- hasErrors = true;
- } else {
- savePrivkey = true;
- }
- } else {
- savePrivkey = true;
- }
- }
- if(!hasErrors) {
- auto savePassphraseChoice = form.get("save-passphrase");
- bool savePassphrase = false;
- if(savePassphraseChoice == "yes") {
- savePassphrase = true;
- }
- if(!mSession->generateKeys(savePrivkey, savePassphrase)) {
- hasErrors = true;
- } else if(mSession->getSessionState() >= SESSION_STATE_KEY_PAIR_GENERATED) {
- state = PAGE_SHOW_PUBKEY;
-
- //printf("uri_start: %s\n", uri_start.data());
- //response.redirect(uri_start + "/");
- } else {
- state = PAGE_ERROR;
- }
- }
- //printf("SaveKeysPage: hasErrors: %d, session state: %d, target state: %d\n",
- //hasErrors, mSession->getSessionState(), SESSION_STATE_KEY_PAIR_GENERATED);
- }*/
- getErrors(mSession);
-%><%@ include file="include/header_old.cpsp" %>
-
-
Daten speichern
- <%= getErrorsHtml() %>
- <% if(state == PAGE_ASK) { %>
-
-
- Gradido Private Key speichern
-
-
Möchtest du deinen Gradido Private Key auf dem Server mit deinem Passwort verschlüsselt speichern?
-
Wenn du ihn speicherst brauchst du dich in Zukunft nur mit deiner E-Mail und deinem Passwort einzuloggen.
-
Wenn du ihn nicht speicherst, müsstest du jedes mal wenn du eine Transaktion machen willst, deine Passphrase hier reinkopieren.
-
-
-
- Ja, bitte speichern!
-
- <% if(!hasPassword) { %>
- Ich brauche nochmal dein Passwort wenn du dich für ja entscheidest.
-
- Passwort
-
-
- <% } %>
-
-
- Nein, ich kümmere mich selbst darum!
-
-
-
- Passphrase speichern
-
-
Möchtest du deine Passphrase mit dem Server-Admin-Key verschlüsselt auf dem Server gespeichert haben?
-
Dann kann dir der Server-Admin deine Passphrase zuschicken wenn du sie verlegt hast.
-
-
-
- Ja, bitte speichern!
-
-
-
- Nein, ich vertraue nur mir selbst!
-
-
-
-
- <% } else if(state == PAGE_SHOW_PUBKEY) { %>
-
-
<%= gettext("Daten gespeichert!") %>
-
<%= gettext("Deine Daten wurden verschlüsselt und gespeichert.") %>
-
-
-
-
Zurück zur Startseite
-
- <% } else if(state == PAGE_ERROR) { %>
-
-
Ein Fehler trat auf, bitte versuche es erneut oder wende dich an den Server-Admin
- <%= mSession->getSessionStateString() %>
-
- <% } %>
-
-<%@ include file="include/footer.cpsp" %>
diff --git a/login_server/src/cpsp/TestUserGenerator.cpsp b/login_server/src/cpsp/TestUserGenerator.cpsp
deleted file mode 100644
index 41c3ad99d..000000000
--- a/login_server/src/cpsp/TestUserGenerator.cpsp
+++ /dev/null
@@ -1,102 +0,0 @@
-<%@ page class="TestUserGenerator" %>
-<%@ page form="true" %>
-<%@ page baseClass="PageRequestMessagedHandler" %>
-<%@ header include="HTTPInterface/PageRequestMessagedHandler.h" %>
-<%!
- #include "Crypto/SecretKeyCryptography.h"
- #include "Crypto/KeyPairEd25519.h"
- #include "ServerConfig.h"
- #include "lib/DataTypeConverter.h"
-
- #include "controller/User.h"
-%>
-<%%
- const char* pageName = "Test User Generator";
- // needed for header_large
- auto user = controller::User::create();
-
- std::string email;
- std::string password_hashed;
- std::string pubkey_hex;
- std::string privkey_hex_encrypted;
- std::string passphrase_str;
-
- bool user_created = false;
- // add
- if(!form.empty()) {
- email = form.get("email", "");
- auto password = form.get("password", "");
- if(email == "") {
- addError(new Error("Create User", "E-Mail is empty!"));
- }
- else if(password == "") {
- addError(new Error("Create User", "Password is empty!"));
- }
- else
- {
- auto passphrase = Passphrase::generate(&ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER]);
- passphrase_str = passphrase->getString();
- auto key_pair = KeyPairEd25519::create(passphrase);
- Poco::AutoPtr secret_key = new SecretKeyCryptography;
- secret_key->createKey(email, password);
- password_hashed = std::to_string(secret_key->getKeyHashed());
- auto privkey_encrypted = key_pair->getCryptedPrivKey(secret_key);
- privkey_hex_encrypted = DataTypeConverter::binToHex(privkey_encrypted);
- pubkey_hex = key_pair->getPublicKeyHex();
- user_created = true;
- delete key_pair;
- }
- }
-
- // select all
- auto groups = controller::Group::listAll();
- //auto groups = controller::Group::load("gdd1");
- //std::vector> groups;
-
-%><%@ include file="include/header_large.cpsp" %>
-<%= getErrorsHtml() %>
-
-<%@ include file="include/footer.cpsp" %>
diff --git a/login_server/src/cpsp/TranslatePassphrase.cpsp b/login_server/src/cpsp/TranslatePassphrase.cpsp
deleted file mode 100644
index 1bc80e53c..000000000
--- a/login_server/src/cpsp/TranslatePassphrase.cpsp
+++ /dev/null
@@ -1,95 +0,0 @@
-<%@ page class="TranslatePassphrasePage" %>
-<%@ page baseClass="SessionHTTPRequestHandler" %>
-<%@ page ctorArg="Session*" %>
-<%@ header include="HTTPInterface/SessionHTTPRequestHandler.h" %>
-<%@ page form="true" %>
-<%!
-#include "Crypto/KeyPairEd25519.h"
-#include "ServerConfig.h"
-%>
-<%%
- chooseLanguage(request);
- // variable needed for flags
- auto lang = mSession->getLanguage();
- auto uri_start = ServerConfig::g_serverPath;
- const char* pageName = gettext("Passphrase Transformieren");
- std::string passphrase;
- auto role = mSession->getNewUser()->getModel()->getRole();
- std::string inputPassphrase;
-
- Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
- Mnemonic* targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
- if(lang == LANG_DE) {
- wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
- targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
- }
-
- if(!form.empty())
- {
-
- inputPassphrase = form.get("inputPassphrase", "");
- auto localPassphrase = Passphrase::filter(inputPassphrase);
-
- auto btnGenerate = form.get("btnGenerate", "");
- if("" != btnGenerate) {
- auto passphrase_gen = Passphrase::generate(wordSource);
-
- localPassphrase = passphrase_gen->getString();
- inputPassphrase = localPassphrase;
- }
- auto passphrase_object = Passphrase::create(localPassphrase, wordSource);
- if(localPassphrase != "" && passphrase_object.isNull() || !passphrase_object->checkIfValid()) {
- addError(new Error(
- gettext("Fehler"),
- gettext("Diese Passphrase ist ungültig, bitte überprüfen oder neu generieren (lassen).")
- ), false);
- } else {
- if(wordSource == &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER]) {
- targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
- } else {
- targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
- }
- auto transformed_passphrase_obj = passphrase_object->transform(targetSource);
- passphrase = transformed_passphrase_obj->getString();
- }
-
-
- }
-%><%@ include file="include/login_header.cpsp" %><%@ include file="include/flags.cpsp" %>
-
-
<%= gettext("Passphrase umwandeln") %>
-
-
-
-<%@ include file="include/footer_ripple.cpsp" %>
\ No newline at end of file
diff --git a/login_server/src/cpsp/UserUpdateGroup.cpsp b/login_server/src/cpsp/UserUpdateGroup.cpsp
deleted file mode 100644
index 64dcf86a3..000000000
--- a/login_server/src/cpsp/UserUpdateGroup.cpsp
+++ /dev/null
@@ -1,139 +0,0 @@
-<%@ page class="UserUpdateGroupPage" %>
-<%@ page baseClass="SessionHTTPRequestHandler" %>
-<%@ page ctorArg="Session*" %>
-<%@ header include="HTTPInterface/SessionHTTPRequestHandler.h" %>
-<%!
-
-#include "controller/Group.h"
-#include "SingletonManager/SessionManager.h"
-#include "SingletonManager/PendingTasksManager.h"
-#include "lib/DataTypeConverter.h"
-#include "model/gradido/Transaction.h"
-
-enum PageState {
- PAGE_STATE_OVERVIEW,
- PAGE_STATE_REQUEST_IS_RUNNING,
- PAGE_STATE_NO_GROUPS
-};
-
-%>
-<%%
- const char* pageName = gettext("Gruppe wählen");
- auto user = mSession->getNewUser();
- auto sm = SessionManager::getInstance();
- auto pt = PendingTasksManager::getInstance();
- PageState state = PAGE_STATE_OVERVIEW;
-
- auto groups = controller::Group::listAll();
- Poco::AutoPtr
choosen_group;
-
- if(!form.empty()) {
- auto group_id_string = form.get("group_id", "");
- if(group_id_string == "") {
- addError(new Error(gettext("Fehler"), gettext("HTML Form Fehler")));
- } else {
- int group_id = 0;
- if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(group_id_string, group_id)) {
- std::string group_alias = "";
-
- for(auto it = groups.begin(); it != groups.end(); it++) {
- auto group_model = (*it)->getModel();
- if(group_model->getID() == group_id) {
- choosen_group = *it;
- }
- }
- if(choosen_group.isNull()) {
- addError(new Error(gettext("Fehler"), gettext("Interner Fehler")));
- } else {
- auto addGroupMemberTransaction =
- model::gradido::Transaction::createGroupMemberUpdate(user, choosen_group);
- response.redirect(ServerConfig::g_serverPath + "/checkTransactions");
- return;
- state = PAGE_STATE_REQUEST_IS_RUNNING;
- }
- } else {
- addError(new Error(gettext("Fehler"), gettext("HTML Value Type Fehler")));
- }
- }
- } else {
- if(groups.size() == 0) {
- if(user->getModel()->getRole() == model::table::ROLE_ADMIN) {
- response.redirect(getBaseUrl() + "/groups");
- return;
- }
- state = PAGE_STATE_NO_GROUPS;
-
- } else {
- auto referer = request.find("Referer");
- std::string refererString;
- if (referer != request.end()) {
- refererString = referer->second;
- }
-
-
-
- pt->lock("userUpdateGroup Page");
- auto has_pending_group_add_member_task = pt->hasPendingGradidoTransaction(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER);
- auto referer_was_checkTransaction = refererString.find("checkTransactions") != std::string::npos;
- if(has_pending_group_add_member_task) {
- state = PAGE_STATE_REQUEST_IS_RUNNING;
- auto tasks = pt->getPendingGradidoTransactions(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER);
- // should be only one
- auto transaction = tasks[0];
- if(transaction->getSignCount() == 0) {
- pt->unlock();
- response.redirect(getBaseUrl() + "/checkTransactions");
- return;
- }
- } else if(referer_was_checkTransaction && user->getModel()->getGroupId()) {
- pt->unlock();
- response.redirect(user->getGroupBaseUrl());
- return;
- }
-
- pt->unlock();
- }
- }
-
-
-
-
-%><%@ include file="include/header.cpsp" %>
-<%= getErrorsHtml() %>
-
- <% if(PAGE_STATE_OVERVIEW == state ) { %>
-
-
<%= gettext("Gruppe wählen") %>
-
-
<%= gettext("Bitte wähle die Gruppe/Gemeinschaft aus, zu der du gehörst.") %>
-
<%= gettext("Du bekommst eine Bestätigungsmail, nachdem dein Beitritt bestätigt wurde.") %>
-
-
-
-
-
-
-
-
-
- <% for(auto it = groups.begin(); it != groups.end(); it++) {
- auto group_model = (*it)->getModel(); %>
-
-
-
<%= group_model->getName() %>
-
<%= group_model->getAlias() %>
-
<%= group_model->getUrl() %>
-
<%= group_model->getDescription()%>
-
- <% } %>
-
"/>
-
-
- <% } else if(PAGE_STATE_REQUEST_IS_RUNNING == state) { %>
-
<%= gettext("Deine Beitrittsanfrage wird bearbeitet, du bekommst eine E-Mail wenn sie bestätigt oder abgelehnt wurde.") %>
-
<%= gettext("Abmelden") %>
- <% } else if(PAGE_STATE_NO_GROUPS == state) { %>
-
<%= gettext("Noch keine Gruppen vorhanden, bitte warte bis der Admin welche hinzugefügt hat.") %>
- <% } %>
-
-<%@ include file="include/footer.cpsp" %>
diff --git a/login_server/src/cpsp/UserUpdatePassword.cpsp b/login_server/src/cpsp/UserUpdatePassword.cpsp
deleted file mode 100644
index 260a29475..000000000
--- a/login_server/src/cpsp/UserUpdatePassword.cpsp
+++ /dev/null
@@ -1,102 +0,0 @@
-<%@ page class="UserUpdatePasswordPage" %>
-<%@ page baseClass="SessionHTTPRequestHandler" %>
-<%@ page ctorArg="Session*" %>
-<%@ header include="HTTPInterface/SessionHTTPRequestHandler.h" %>
-<%!
-#include "SingletonManager/SessionManager.h"
-#include "tasks/AuthenticatedEncryptionCreateKeyTask.h"
-#include "Poco/Net/HTTPCookie.h"
-
-enum PageState {
- PAGE_STATE_ASK_PASSWORD,
- PAGE_STATE_SUCCEED
-};
-
-%>
-<%%
- const char* pageName = "Passwort bestimmen";
- auto user = mSession->getNewUser();
- auto sm = SessionManager::getInstance();
- auto uri_start = getBaseUrl();
- PageState state = PAGE_STATE_ASK_PASSWORD;
-
- // remove old cookies if exist
- sm->deleteLoginCookies(request, response, mSession);
- // save login cookie, because maybe we've get an new session
- response.addCookie(mSession->getLoginCookie());
-
- if(!form.empty()) {
- auto pwd = form.get("register-password", "");
- if(pwd != "") {
- if(!mSession->getLanguageCatalog()) {
- mSession->setLanguage(LANG_EN);
- }
- if(pwd != form.get("register-password2", "")) {
- mSession->addError(new Error("Passwort", "Passwörter sind nicht identisch."), false);
- } else if(SessionManager::getInstance()->checkPwdValidation(pwd, mSession, mSession->getLanguageCatalog())) {
- auto sessionState = mSession->getSessionState();
-
- if(user->setNewPassword(pwd) >= 0) {
- //std::string referUri = request.get("Referer", uri_start + "/");
- //printf("[updateUserPasswordPage] redirect to referUri: %s\n", referUri.data());
-
- // I think we can savly assume that this session was loaded from verification code
- //! \return 1 = konto already activated
- //! -1 = invalid code
- //! -2 = critical error
- //! 0 = ok
- auto code = mSession->getEmailVerificationCode();
- int retUpdateEmailCode = 0;
- if(code) {
- retUpdateEmailCode = mSession->updateEmailVerification(mSession->getEmailVerificationCode());
- }
- //mSession->getErrors(user);
- if(-2 == retUpdateEmailCode || -1 == retUpdateEmailCode || 1 == retUpdateEmailCode) {
- response.redirect(uri_start + "/error500");
- return;
- }
- if(sessionState == SESSION_STATE_RESET_PASSWORD_REQUEST) {
- state = PAGE_STATE_SUCCEED;
- mSession->updateState(SESSION_STATE_RESET_PASSWORD_SUCCEED);
- sm->deleteLoginCookies(request, response, mSession);
- sm->releaseSession(mSession);
- mSession = nullptr;
- } else {
- response.redirect(uri_start + "/passphrase");
- return;
- }
- }
- }
- }
- }
- if(mSession) {
- getErrors(mSession);
- }
- //getErrors(user);
- //printf("session state end [UpdateUserPassword Page]: %s\n", mSession->getSessionStateString());
-%><%@ include file="include/header.cpsp" %>
-<%= getErrorsHtml() %>
-
-<%@ include file="include/footer.cpsp" %>
diff --git a/login_server/src/cpsp/include/flags.cpsp b/login_server/src/cpsp/include/flags.cpsp
deleted file mode 100644
index a98f823dd..000000000
--- a/login_server/src/cpsp/include/flags.cpsp
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
- class="flag-btn"<% }
- else { %>class="flag-btn" disabled<% } %>>
-
-
- class="flag-btn"<% }
- else { %>class="flag-btn" disabled<% } %>>
-
-
-
-
\ No newline at end of file
diff --git a/login_server/src/cpsp/include/footer.cpsp b/login_server/src/cpsp/include/footer.cpsp
deleted file mode 100644
index 0117affe0..000000000
--- a/login_server/src/cpsp/include/footer.cpsp
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
Copyright © Gradido 2020
-
-
-
- <%= mTimeProfiler.string() %>
-
-
-
Login Server in Entwicklung
-
Alpha <%= ServerConfig::g_versionString %>
-
-
-