mirror of
https://github.com/IT4Change/gradido.git
synced 2026-02-06 09:56:05 +00:00
Merge branch '3030-feature-role-administration-backend' of github.com:gradido/gradido into 3030-feature-role-administration-backend
This commit is contained in:
commit
e292dcfc8d
14
CHANGELOG.md
14
CHANGELOG.md
@ -4,8 +4,22 @@ 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).
|
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
|
||||||
|
|
||||||
|
#### [1.22.1](https://github.com/gradido/gradido/compare/1.22.0...1.22.1)
|
||||||
|
|
||||||
|
- fix(backend): use base url from config in email templates [`#3114`](https://github.com/gradido/gradido/pull/3114)
|
||||||
|
- feat(frontend): test right side layout template [`#3052`](https://github.com/gradido/gradido/pull/3052)
|
||||||
|
- feat(backend): remove iota from backend [`#3115`](https://github.com/gradido/gradido/pull/3115)
|
||||||
|
- refactor(frontend): text juni to juli [`#3116`](https://github.com/gradido/gradido/pull/3116)
|
||||||
|
- refactor(frontend): refactor changes incorporated [`#3113`](https://github.com/gradido/gradido/pull/3113)
|
||||||
|
- refactor(frontend): date from deploy changed to infotext [`#3108`](https://github.com/gradido/gradido/pull/3108)
|
||||||
|
- fix(frontend): add alias to the verifyLogin GraphQL answer. [`#3107`](https://github.com/gradido/gradido/pull/3107)
|
||||||
|
- fix(backend): moderator message don't send email to user [`#3106`](https://github.com/gradido/gradido/pull/3106)
|
||||||
|
|
||||||
#### [1.22.0](https://github.com/gradido/gradido/compare/1.21.0...1.22.0)
|
#### [1.22.0](https://github.com/gradido/gradido/compare/1.21.0...1.22.0)
|
||||||
|
|
||||||
|
> 30 June 2023
|
||||||
|
|
||||||
|
- chore(release): v1.22.0 [`#3101`](https://github.com/gradido/gradido/pull/3101)
|
||||||
- fix(backend): yarn.lock after typeorm update [`#3097`](https://github.com/gradido/gradido/pull/3097)
|
- fix(backend): yarn.lock after typeorm update [`#3097`](https://github.com/gradido/gradido/pull/3097)
|
||||||
- feat(frontend): new style for settings page [`#3040`](https://github.com/gradido/gradido/pull/3040)
|
- feat(frontend): new style for settings page [`#3040`](https://github.com/gradido/gradido/pull/3040)
|
||||||
- feat(admin): query users on contributions [`#3094`](https://github.com/gradido/gradido/pull/3094)
|
- feat(admin): query users on contributions [`#3094`](https://github.com/gradido/gradido/pull/3094)
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
"description": "Administraion Interface for Gradido",
|
"description": "Administraion Interface for Gradido",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"author": "Moriz Wahl",
|
"author": "Moriz Wahl",
|
||||||
"version": "1.22.0",
|
"version": "1.22.1",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"private": false,
|
"private": false,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@ -21,11 +21,6 @@ KLICKTIPP_PASSWORD=secret321
|
|||||||
KLICKTIPP_APIKEY_DE=SomeFakeKeyDE
|
KLICKTIPP_APIKEY_DE=SomeFakeKeyDE
|
||||||
KLICKTIPP_APIKEY_EN=SomeFakeKeyEN
|
KLICKTIPP_APIKEY_EN=SomeFakeKeyEN
|
||||||
|
|
||||||
# IOTA
|
|
||||||
IOTA=false
|
|
||||||
IOTA_API_URL=https://chrysalis-nodes.iota.org
|
|
||||||
IOTA_COMMUNITY_ALIAS=GRADIDO: TestHelloWelt1
|
|
||||||
|
|
||||||
# Community
|
# Community
|
||||||
COMMUNITY_NAME=Gradido Entwicklung
|
COMMUNITY_NAME=Gradido Entwicklung
|
||||||
COMMUNITY_URL=http://localhost/
|
COMMUNITY_URL=http://localhost/
|
||||||
|
|||||||
@ -22,11 +22,6 @@ KLICKTIPP_PASSWORD=$KLICKTIPP_PASSWORD
|
|||||||
KLICKTIPP_APIKEY_DE=$KLICKTIPP_APIKEY_DE
|
KLICKTIPP_APIKEY_DE=$KLICKTIPP_APIKEY_DE
|
||||||
KLICKTIPP_APIKEY_EN=$KLICKTIPP_APIKEY_EN
|
KLICKTIPP_APIKEY_EN=$KLICKTIPP_APIKEY_EN
|
||||||
|
|
||||||
# IOTA
|
|
||||||
IOTA=$IOTA
|
|
||||||
IOTA_API_URL=https://chrysalis-nodes.iota.org
|
|
||||||
IOTA_COMMUNITY_ALIAS=GRADIDO: TestHelloWelt1
|
|
||||||
|
|
||||||
# Community
|
# Community
|
||||||
COMMUNITY_NAME=$COMMUNITY_NAME
|
COMMUNITY_NAME=$COMMUNITY_NAME
|
||||||
COMMUNITY_URL=$COMMUNITY_URL
|
COMMUNITY_URL=$COMMUNITY_URL
|
||||||
|
|||||||
@ -33,8 +33,6 @@ LABEL maintainer="support@gradido.net"
|
|||||||
# Install Additional Software
|
# Install Additional Software
|
||||||
## install: git
|
## install: git
|
||||||
#RUN apk --no-cache add git
|
#RUN apk --no-cache add git
|
||||||
# Install Build Tool for Rust for @iota/client
|
|
||||||
RUN apk add --no-cache rust cargo python3 make g++
|
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
## Expose Container Port
|
## Expose Container Port
|
||||||
@ -94,9 +92,6 @@ CMD /bin/sh -c "yarn run start"
|
|||||||
##################################################################################
|
##################################################################################
|
||||||
FROM base as production
|
FROM base as production
|
||||||
|
|
||||||
# Remove Build Tool for Rust else they would bloat the image unneccessary
|
|
||||||
RUN apk del rust cargo python3 make g++
|
|
||||||
|
|
||||||
# Copy "binary"-files from build image
|
# Copy "binary"-files from build image
|
||||||
COPY --from=build ${DOCKER_WORKDIR}/build ./build
|
COPY --from=build ${DOCKER_WORKDIR}/build ./build
|
||||||
COPY --from=build ${DOCKER_WORKDIR}/../database/build ../database/build
|
COPY --from=build ${DOCKER_WORKDIR}/../database/build ../database/build
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gradido-backend",
|
"name": "gradido-backend",
|
||||||
"version": "1.22.0",
|
"version": "1.22.1",
|
||||||
"description": "Gradido unified backend providing an API-Service for Gradido Transactions",
|
"description": "Gradido unified backend providing an API-Service for Gradido Transactions",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": "https://github.com/gradido/gradido/backend",
|
"repository": "https://github.com/gradido/gradido/backend",
|
||||||
@ -19,7 +19,6 @@
|
|||||||
"locales": "scripts/sort.sh"
|
"locales": "scripts/sort.sh"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@iota/client": "^2",
|
|
||||||
"apollo-server-express": "^2.25.2",
|
"apollo-server-express": "^2.25.2",
|
||||||
"await-semaphore": "^0.1.3",
|
"await-semaphore": "^0.1.3",
|
||||||
"axios": "^0.21.1",
|
"axios": "^0.21.1",
|
||||||
|
|||||||
@ -1,43 +0,0 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
||||||
import { IotaClientSingleton } from '@/apis/IotaConnector'
|
|
||||||
import { CONFIG } from '@/config'
|
|
||||||
|
|
||||||
CONFIG.IOTA = true
|
|
||||||
CONFIG.IOTA_COMMUNITY_ALIAS = 'GRADIDO: TestHelloWelt1'
|
|
||||||
CONFIG.IOTA_API_URL = 'https://chrysalis-nodes.iota.org'
|
|
||||||
|
|
||||||
describe('apis/IotaConnector/enabled', () => {
|
|
||||||
describe('Hello World', () => {
|
|
||||||
const now = new Date()
|
|
||||||
let messageId: string
|
|
||||||
const messageString = 'Hello World - ' + now.toString()
|
|
||||||
const messageHexString = Buffer.from(messageString, 'utf8').toString('hex')
|
|
||||||
const indexHexString = Buffer.from(CONFIG.IOTA_COMMUNITY_ALIAS, 'utf8').toString('hex')
|
|
||||||
it('sends hello world message to iota tangle', async () => {
|
|
||||||
const iotaMessage = await IotaClientSingleton.getInstance()?.sendDataMessage(messageString)
|
|
||||||
expect(iotaMessage).toMatchObject({
|
|
||||||
message: {
|
|
||||||
payload: {
|
|
||||||
data: messageHexString,
|
|
||||||
index: indexHexString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
messageId: expect.any(String),
|
|
||||||
})
|
|
||||||
messageId =
|
|
||||||
iotaMessage?.messageId ?? '5498130bc3918e1a7143969ce05805502417e3e1bd596d3c44d6a0adeea22710'
|
|
||||||
})
|
|
||||||
it('receives hello world message from iota tangle by message id', async () => {
|
|
||||||
const iotaMessage = await IotaClientSingleton.getInstance()?.getMessage(messageId)
|
|
||||||
expect(iotaMessage).toMatchObject({
|
|
||||||
message: {
|
|
||||||
payload: {
|
|
||||||
data: messageHexString,
|
|
||||||
index: indexHexString,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
messageId,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
import { Client, ClientBuilder } from '@iota/client'
|
|
||||||
import { MessageWrapper } from '@iota/client/lib/types'
|
|
||||||
|
|
||||||
import { CONFIG } from '@/config'
|
|
||||||
import { backendLogger as logger } from '@/server/logger'
|
|
||||||
|
|
||||||
// Source: https://refactoring.guru/design-patterns/singleton/typescript/example
|
|
||||||
// and ../federation/client/FederationClientFactory.ts
|
|
||||||
/**
|
|
||||||
* A Singleton class defines the `getInstance` method that lets clients access
|
|
||||||
* the unique singleton instance.
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-extraneous-class
|
|
||||||
class IotaClientSingleton {
|
|
||||||
// eslint-disable-next-line no-use-before-define
|
|
||||||
private static instance: IotaClientSingleton
|
|
||||||
private client: Client
|
|
||||||
/**
|
|
||||||
* The Singleton's constructor should always be private to prevent direct
|
|
||||||
* construction calls with the `new` operator.
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line no-useless-constructor, @typescript-eslint/no-empty-function
|
|
||||||
private constructor() {}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The static method that controls the access to the singleton instance.
|
|
||||||
*
|
|
||||||
* This implementation let you subclass the Singleton class while keeping
|
|
||||||
* just one instance of each subclass around.
|
|
||||||
*/
|
|
||||||
public static getInstance(): IotaClientSingleton | undefined {
|
|
||||||
if (!CONFIG.IOTA || !CONFIG.IOTA_API_URL) {
|
|
||||||
logger.info(`Iota are disabled via config...`)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if (!IotaClientSingleton.instance) {
|
|
||||||
IotaClientSingleton.instance = new IotaClientSingleton()
|
|
||||||
try {
|
|
||||||
IotaClientSingleton.instance.client = new ClientBuilder().node(CONFIG.IOTA_API_URL).build()
|
|
||||||
} catch (e) {
|
|
||||||
logger.error("couldn't connect to iota")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return IotaClientSingleton.instance
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* send data message onto iota tangle
|
|
||||||
* use CONFIG.IOTA_COMMUNITY_ALIAS for index
|
|
||||||
* @param {string} message - the message as utf based string, will be converted to hex automatically from @iota/client
|
|
||||||
* @return {Promise<MessageWrapper>} the iota message typed
|
|
||||||
*/
|
|
||||||
public sendDataMessage(message: string): Promise<MessageWrapper> {
|
|
||||||
return this.client.message().index(CONFIG.IOTA_COMMUNITY_ALIAS).data(message).submit()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* receive message for known message id from iota tangle
|
|
||||||
* @param {string} messageId - as hex string
|
|
||||||
* @return {Promise<MessageWrapper>} the iota message typed
|
|
||||||
*/
|
|
||||||
public getMessage(messageId: string): Promise<MessageWrapper> {
|
|
||||||
return this.client.getMessage().data(messageId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export { IotaClientSingleton }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* example for message:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
message: {
|
|
||||||
networkId: '1454675179895816119',
|
|
||||||
parentMessageIds: [
|
|
||||||
'5f30efecca59fdfef7c103e85ef691b2b1dc474e9eae9056888a6d58605083e7',
|
|
||||||
'77cef2fb405daedcd7469e009bb87a6d9a4840e618cdb599cd21a30a9fec88dc',
|
|
||||||
'7d2cfb39f40585ba568a29ad7e85c1478b2584496eb736d4001ac344f6a6cacf',
|
|
||||||
'c66da602874220dfa26925f6be540d37c0084d37cd04726fcc5be9d80b36f850'
|
|
||||||
],
|
|
||||||
payload: {
|
|
||||||
type: 2,
|
|
||||||
index: '4752414449444f3a205465737448656c6c6f57656c7431',
|
|
||||||
data: '48656c6c6f20576f726c64202d20546875204a756e20303820323032332031343a35393a343520474d542b3030303020284b6f6f7264696e69657274652057656c747a65697429'
|
|
||||||
},
|
|
||||||
nonce: '13835058055282465157'
|
|
||||||
},
|
|
||||||
messageId: '5498130bc3918e1a7143969ce05805502417e3e1bd596d3c44d6a0adeea22710'
|
|
||||||
}
|
|
||||||
```
|
|
||||||
*/
|
|
||||||
@ -1,26 +0,0 @@
|
|||||||
import { IotaClientSingleton } from '@/apis/IotaConnector'
|
|
||||||
import { CONFIG } from '@/config'
|
|
||||||
import { backendLogger as logger } from '@/server/logger'
|
|
||||||
|
|
||||||
describe('apis/IotaConnector/disabled', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
CONFIG.IOTA = false
|
|
||||||
})
|
|
||||||
it('getInstance return undefined if iota is disabled', () => {
|
|
||||||
const spyLog = jest.spyOn(logger, 'info')
|
|
||||||
expect(IotaClientSingleton.getInstance()).toBeUndefined()
|
|
||||||
expect(spyLog).toHaveBeenCalledWith('Iota are disabled via config...')
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('apis/IotaConnector/invalidIotaUrl', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
CONFIG.IOTA = true
|
|
||||||
CONFIG.IOTA_API_URL = 'invalidUrl'
|
|
||||||
})
|
|
||||||
it('log "couldn\'t connect to iota"', () => {
|
|
||||||
const spyLog = jest.spyOn(logger, 'error')
|
|
||||||
expect(IotaClientSingleton.getInstance()).toBeUndefined()
|
|
||||||
expect(spyLog).toHaveBeenCalledWith("couldn't connect to iota")
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@ -19,7 +19,7 @@ const constants = {
|
|||||||
LOG_LEVEL: process.env.LOG_LEVEL ?? 'info',
|
LOG_LEVEL: process.env.LOG_LEVEL ?? 'info',
|
||||||
CONFIG_VERSION: {
|
CONFIG_VERSION: {
|
||||||
DEFAULT: 'DEFAULT',
|
DEFAULT: 'DEFAULT',
|
||||||
EXPECTED: 'v16.2023-06-08',
|
EXPECTED: 'v17.2023-07-03',
|
||||||
CURRENT: '',
|
CURRENT: '',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -51,12 +51,6 @@ const klicktipp = {
|
|||||||
KLICKTIPP_APIKEY_EN: process.env.KLICKTIPP_APIKEY_EN ?? 'SomeFakeKeyEN',
|
KLICKTIPP_APIKEY_EN: process.env.KLICKTIPP_APIKEY_EN ?? 'SomeFakeKeyEN',
|
||||||
}
|
}
|
||||||
|
|
||||||
const iota = {
|
|
||||||
IOTA: process.env.IOTA === 'true' || false,
|
|
||||||
IOTA_API_URL: process.env.IOTA_API_URL ?? 'https://chrysalis-nodes.iota.org',
|
|
||||||
IOTA_COMMUNITY_ALIAS: process.env.IOTA_COMMUNITY_ALIAS ?? 'GRADIDO: TestHelloWelt1',
|
|
||||||
}
|
|
||||||
|
|
||||||
const community = {
|
const community = {
|
||||||
COMMUNITY_NAME: process.env.COMMUNITY_NAME ?? 'Gradido Entwicklung',
|
COMMUNITY_NAME: process.env.COMMUNITY_NAME ?? 'Gradido Entwicklung',
|
||||||
COMMUNITY_URL: process.env.COMMUNITY_URL ?? 'http://localhost/',
|
COMMUNITY_URL: process.env.COMMUNITY_URL ?? 'http://localhost/',
|
||||||
@ -132,7 +126,6 @@ export const CONFIG = {
|
|||||||
...server,
|
...server,
|
||||||
...database,
|
...database,
|
||||||
...klicktipp,
|
...klicktipp,
|
||||||
...iota,
|
|
||||||
...community,
|
...community,
|
||||||
...email,
|
...email,
|
||||||
...loginServer,
|
...loginServer,
|
||||||
|
|||||||
@ -484,7 +484,7 @@ exports[`sendEmailVariants sendAddedContributionMessageEmail result has the corr
|
|||||||
</div>
|
</div>
|
||||||
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
||||||
<h2 style=\\"margin-top: 15px; color: #383838;\\">Read and reply to message</h2>
|
<h2 style=\\"margin-top: 15px; color: #383838;\\">Read and reply to message</h2>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"https://gdd.gradido.net/community/contribution\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To view and reply to the message, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"http://localhost/contribution\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
||||||
@ -651,8 +651,8 @@ exports[`sendEmailVariants sendContributionConfirmedEmail result has the correct
|
|||||||
</div>
|
</div>
|
||||||
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
||||||
<h2 style=\\"margin-top: 15px; color: #383838;\\">Contribution details</h2>
|
<h2 style=\\"margin-top: 15px; color: #383838;\\">Contribution details</h2>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"https://gdd.gradido.net/community/contributions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"http://localhost/community/contributions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Or copy the link into your browser window.</div><a class=\\"clink\\" href=\\"https://gdd.gradido.net/community/contributions\\" style=\\"line-break: anywhere; margin-bottom: 40px;\\">https://gdd.gradido.net/community/contributions</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Or copy the link into your browser window.</div><a class=\\"clink\\" href=\\"http://localhost/community/contributions\\" style=\\"line-break: anywhere; margin-bottom: 40px;\\">http://localhost/community/contribution</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
||||||
@ -819,8 +819,8 @@ exports[`sendEmailVariants sendContributionDeletedEmail result has the correct h
|
|||||||
</div>
|
</div>
|
||||||
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
||||||
<h2 style=\\"margin-top: 15px; color: #383838;\\">Contribution details</h2>
|
<h2 style=\\"margin-top: 15px; color: #383838;\\">Contribution details</h2>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"https://gdd.gradido.net/community/contributions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"http://localhost/community/contributions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Or copy the link into your browser window.</div><a class=\\"clink\\" href=\\"https://gdd.gradido.net/community/contributions\\" style=\\"line-break: anywhere; margin-bottom: 40px;\\">https://gdd.gradido.net/community/contributions</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Or copy the link into your browser window.</div><a class=\\"clink\\" href=\\"http://localhost/community/contributions\\" style=\\"line-break: anywhere; margin-bottom: 40px;\\">http://localhost/community/contribution</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
||||||
@ -987,8 +987,8 @@ exports[`sendEmailVariants sendContributionDeniedEmail result has the correct ht
|
|||||||
</div>
|
</div>
|
||||||
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
||||||
<h2 style=\\"margin-top: 15px; color: #383838;\\">Contribution details</h2>
|
<h2 style=\\"margin-top: 15px; color: #383838;\\">Contribution details</h2>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"https://gdd.gradido.net/community/contributions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">To see your common good contributions and related messages, go to the “Creation” menu in your Gradido account and click on the “My contributions” tab.</div><a class=\\"button-3\\" href=\\"http://localhost/community/contributions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Or copy the link into your browser window.</div><a class=\\"clink\\" href=\\"https://gdd.gradido.net/community/contributions\\" style=\\"line-break: anywhere; margin-bottom: 40px;\\">https://gdd.gradido.net/community/contributions</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Or copy the link into your browser window.</div><a class=\\"clink\\" href=\\"http://localhost/community/contributions\\" style=\\"line-break: anywhere; margin-bottom: 40px;\\">http://localhost/community/contribution</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
||||||
@ -1328,7 +1328,7 @@ exports[`sendEmailVariants sendTransactionLinkRedeemedEmail result has the corre
|
|||||||
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
||||||
<h2 style=\\"margin-top: 15px; color: #383838;\\">Transaction details</h2>
|
<h2 style=\\"margin-top: 15px; color: #383838;\\">Transaction details</h2>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Amount: 17.65 GDD<br>Message: You deserve it! 🙏🏼<br>You can find transaction details in your Gradido account.
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Amount: 17.65 GDD<br>Message: You deserve it! 🙏🏼<br>You can find transaction details in your Gradido account.
|
||||||
</div><a class=\\"button-3\\" href=\\"https://gdd.gradido.net/transactions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
</div><a class=\\"button-3\\" href=\\"http://localhost/transactions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
||||||
@ -1495,7 +1495,7 @@ exports[`sendEmailVariants sendTransactionReceivedEmail result has the correct h
|
|||||||
</div>
|
</div>
|
||||||
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
<div class=\\"content\\" style=\\"display: block; width: 78%; margin: 40px 1% 40px 1%; padding: 20px 10% 40px 10%; border-radius: 24px; background-image: linear-gradient(180deg, #f5f5f5, #f5f5f5);\\">
|
||||||
<h2 style=\\"margin-top: 15px; color: #383838;\\">Transaction details</h2>
|
<h2 style=\\"margin-top: 15px; color: #383838;\\">Transaction details</h2>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">You can find transaction details in your Gradido account.</div><a class=\\"button-3\\" href=\\"https://gdd.gradido.net/transactions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">You can find transaction details in your Gradido account.</div><a class=\\"button-3\\" href=\\"http://localhost/transactions\\" style=\\"display: inline-block; padding: 9px 15px; color: white; border: 0; line-height: inherit; text-decoration: none; cursor: pointer; border-radius: 20px; background-image: radial-gradient(circle farthest-corner at 0% 0%, #f9cd69, #c58d38); box-shadow: 16px 13px 35px 0 rgba(56, 56, 56, 0.3); margin: 25px 0 25px 0; width: 50%;\\">To account</a>
|
||||||
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
<div class=\\"p_content\\" style=\\"margin: 15px 0 15px 0; line-height: 26px; color: #9ca0a8;\\">Please do not reply to this email.</div>
|
||||||
</div>
|
</div>
|
||||||
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
<div class=\\"text-block\\" style=\\"margin-top: 20px; color: #9ca0a8;\\">
|
||||||
|
|||||||
@ -9,6 +9,6 @@ block content
|
|||||||
h2= t('emails.addedContributionMessage.readMessage')
|
h2= t('emails.addedContributionMessage.readMessage')
|
||||||
div(class="p_content")= t('emails.addedContributionMessage.toSeeAndAnswerMessage')
|
div(class="p_content")= t('emails.addedContributionMessage.toSeeAndAnswerMessage')
|
||||||
|
|
||||||
a.button-3(href="https://gdd.gradido.net/community/contribution") #{t('emails.general.toAccount')}
|
a.button-3(href=`${communityURL}contribution`) #{t('emails.general.toAccount')}
|
||||||
|
|
||||||
include ../includes/doNotReply.pug
|
include ../includes/doNotReply.pug
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
//-
|
//-
|
||||||
h2= t('emails.general.contributionDetails')
|
h2= t('emails.general.contributionDetails')
|
||||||
div(class="p_content")= t('emails.contribution.toSeeContributionsAndMessages')
|
div(class="p_content")= t('emails.contribution.toSeeContributionsAndMessages')
|
||||||
a.button-3(href="https://gdd.gradido.net/community/contributions") #{t('emails.general.toAccount')}
|
a.button-3(href=`${communityURL}community/contributions`) #{t('emails.general.toAccount')}
|
||||||
div(class="p_content")= t('emails.general.orCopyLink')
|
div(class="p_content")= t('emails.general.orCopyLink')
|
||||||
|
|
||||||
a.clink(href="https://gdd.gradido.net/community/contributions") https://gdd.gradido.net/community/contributions
|
a.clink(href=`${communityURL}community/contributions`) #{`${communityURL}community/contribution`}
|
||||||
@ -13,6 +13,6 @@ block content
|
|||||||
br
|
br
|
||||||
= t('emails.general.detailsYouFindOnLinkToYourAccount')
|
= t('emails.general.detailsYouFindOnLinkToYourAccount')
|
||||||
|
|
||||||
a.button-3(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')}
|
a.button-3(href=`${communityURL}transactions`) #{t('emails.general.toAccount')}
|
||||||
|
|
||||||
include ../includes/doNotReply.pug
|
include ../includes/doNotReply.pug
|
||||||
|
|||||||
@ -9,7 +9,7 @@ block content
|
|||||||
h2= t('emails.general.transactionDetails')
|
h2= t('emails.general.transactionDetails')
|
||||||
div(class="p_content")= t('emails.general.detailsYouFindOnLinkToYourAccount')
|
div(class="p_content")= t('emails.general.detailsYouFindOnLinkToYourAccount')
|
||||||
|
|
||||||
a.button-3(href="https://gdd.gradido.net/transactions") #{t('emails.general.toAccount')}
|
a.button-3(href=`${communityURL}transactions`) #{t('emails.general.toAccount')}
|
||||||
|
|
||||||
include ../includes/doNotReply.pug
|
include ../includes/doNotReply.pug
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gradido-database",
|
"name": "gradido-database",
|
||||||
"version": "1.22.0",
|
"version": "1.22.1",
|
||||||
"description": "Gradido Database Tool to execute database migrations",
|
"description": "Gradido Database Tool to execute database migrations",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": "https://github.com/gradido/gradido/database",
|
"repository": "https://github.com/gradido/gradido/database",
|
||||||
|
|||||||
@ -27,7 +27,7 @@ COMMUNITY_DESCRIPTION="Gradido Development Stage1 Test Community"
|
|||||||
COMMUNITY_SUPPORT_MAIL=support@supportmail.com
|
COMMUNITY_SUPPORT_MAIL=support@supportmail.com
|
||||||
|
|
||||||
# backend
|
# backend
|
||||||
BACKEND_CONFIG_VERSION=v16.2023-06-08
|
BACKEND_CONFIG_VERSION=v17.2023-07-03
|
||||||
|
|
||||||
JWT_EXPIRES_IN=10m
|
JWT_EXPIRES_IN=10m
|
||||||
GDT_API_URL=https://gdt.gradido.net
|
GDT_API_URL=https://gdt.gradido.net
|
||||||
@ -40,9 +40,6 @@ KLICKTIPP_PASSWORD=
|
|||||||
KLICKTIPP_APIKEY_DE=
|
KLICKTIPP_APIKEY_DE=
|
||||||
KLICKTIPP_APIKEY_EN=
|
KLICKTIPP_APIKEY_EN=
|
||||||
|
|
||||||
# IOTA
|
|
||||||
IOTA=false
|
|
||||||
|
|
||||||
EMAIL=true
|
EMAIL=true
|
||||||
EMAIL_TEST_MODUS=false
|
EMAIL_TEST_MODUS=false
|
||||||
EMAIL_TEST_RECEIVER=test_team@gradido.net
|
EMAIL_TEST_RECEIVER=test_team@gradido.net
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gradido-dht-node",
|
"name": "gradido-dht-node",
|
||||||
"version": "1.22.0",
|
"version": "1.22.1",
|
||||||
"description": "Gradido dht-node module",
|
"description": "Gradido dht-node module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": "https://github.com/gradido/gradido/",
|
"repository": "https://github.com/gradido/gradido/",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gradido-federation",
|
"name": "gradido-federation",
|
||||||
"version": "1.22.0",
|
"version": "1.22.1",
|
||||||
"description": "Gradido federation module providing Gradido-Hub-Federation and versioned API for inter community communication",
|
"description": "Gradido federation module providing Gradido-Hub-Federation and versioned API for inter community communication",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"repository": "https://github.com/gradido/gradido/federation",
|
"repository": "https://github.com/gradido/gradido/federation",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "bootstrap-vue-gradido-wallet",
|
"name": "bootstrap-vue-gradido-wallet",
|
||||||
"version": "1.22.0",
|
"version": "1.22.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node run/server.js",
|
"start": "node run/server.js",
|
||||||
|
|||||||
50
frontend/src/layouts/templates/RightSide.spec.js
Normal file
50
frontend/src/layouts/templates/RightSide.spec.js
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
import { mount } from '@vue/test-utils'
|
||||||
|
import RightSide from './RightSide'
|
||||||
|
|
||||||
|
const localVue = global.localVue
|
||||||
|
|
||||||
|
describe('RightSide', () => {
|
||||||
|
let wrapper
|
||||||
|
|
||||||
|
const mocks = {
|
||||||
|
$route: {
|
||||||
|
path: '/community/contribute',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const Wrapper = () => {
|
||||||
|
return mount(RightSide, { localVue, mocks })
|
||||||
|
}
|
||||||
|
|
||||||
|
describe('at /community/contribute', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
wrapper = Wrapper()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has name set to "community"', () => {
|
||||||
|
expect(wrapper.vm.name).toBe('community')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('at /settings', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
mocks.$route.path = '/settings'
|
||||||
|
wrapper = Wrapper()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has name set to "empty"', () => {
|
||||||
|
expect(wrapper.vm.name).toBe('empty')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('at /overview', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
mocks.$route.path = '/overview'
|
||||||
|
wrapper = Wrapper()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has name set to "transactions"', () => {
|
||||||
|
expect(wrapper.vm.name).toBe('transactions')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "gradido",
|
"name": "gradido",
|
||||||
"version": "1.22.0",
|
"version": "1.22.1",
|
||||||
"description": "Gradido",
|
"description": "Gradido",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"repository": "git@github.com:gradido/gradido.git",
|
"repository": "git@github.com:gradido/gradido.git",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user