Compare commits

...

43 Commits
v0.1.0 ... main

Author SHA1 Message Date
Philipp Dormann e7ad878fb9
Merge pull request 'cleaned up mail texts for lfk 2023' (#16) from feature/simpler-mail-texts into main
continuous-integration/drone/push Build is failing Details
Reviewed-on: #16
Reviewed-by: Nicolai Ort <info@nicolai-ort.com>
2023-02-01 13:55:30 +00:00
Nicolai Ort 07306be497
Merge pull request 'update runner-welcome mail template' (#17) from dev into main
continuous-integration/drone/push Build is passing Details
Reviewed-on: #17
Reviewed-by: Nicolai Ort <info@nicolai-ort.com>
2023-02-01 12:27:19 +00:00
Philipp Dormann 247d4b6176 📖New license file version [CI SKIP] [skip ci]
continuous-integration/drone/pr Build is failing Details
2023-01-31 13:01:06 +00:00
Philipp Dormann 00bb40ddf9 🧾New changelog file version [CI SKIP] [skip ci]
continuous-integration/drone/pr Build is failing Details
2023-01-31 13:00:29 +00:00
Philipp Dormann 809df9c4ac
update runner-welcome mail template
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is failing Details
close #15
2023-01-31 13:59:11 +01:00
Philipp Dormann 1eb1a0ad7e
cleaned up mail texts for lfk 2023
continuous-integration/drone/pr Build is failing Details
2023-01-31 13:56:59 +01:00
Nicolai Ort e713ef54ef 🧾New changelog file version [CI SKIP] [skip ci] 2021-04-15 18:04:19 +00:00
Nicolai Ort 15b98e8309 Merge pull request 'Release 0.1.2' (#14) from dev into main
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #14
Reviewed-by: Philipp Dormann <philipp@philippdormann.de>
2021-04-15 18:02:59 +00:00
Nicolai Ort fbc95be345 🧾New changelog file version [CI SKIP] [skip ci]
continuous-integration/drone/pr Build is passing Details
2021-04-15 18:01:45 +00:00
Nicolai Ort d550059494 🚀Bumped version to v0.1.2
continuous-integration/drone/push Build is passing Details
2021-04-15 20:00:56 +02:00
Nicolai Ort 49ba2f5593 Merge branch 'dev' of git.odit.services:lfk/mailer into dev 2021-04-15 20:00:19 +02:00
Nicolai Ort 8099d2fdba Fixed typos and added missing translations🌎 2021-04-15 20:00:16 +02:00
Nicolai Ort c8378b66ba 🧾New changelog file version [CI SKIP] [skip ci] 2021-03-31 17:49:51 +00:00
Nicolai Ort b47660af65 Merge pull request 'Release 0.1.1' (#13) from dev into main
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
Reviewed-on: #13
Reviewed-by: Philipp Dormann <philipp@philippdormann.de>
2021-03-31 17:49:04 +00:00
Nicolai Ort d996d2e85f 🧾New changelog file version [CI SKIP] [skip ci]
continuous-integration/drone/pr Build is passing Details
2021-03-31 17:47:35 +00:00
Nicolai Ort 7faf6b09c6 Merge branch 'dev' of git.odit.services:lfk/mailer into dev
continuous-integration/drone/push Build is passing Details
2021-03-31 19:46:53 +02:00
Nicolai Ort 34e0c729b5 🚀Bumped version to v0.1.1 2021-03-31 19:46:48 +02:00
Nicolai Ort 8996aef152 🧾New changelog file version [CI SKIP] [skip ci] 2021-03-31 17:46:40 +00:00
Nicolai Ort 5ff6f77daf Merge pull request 'Now base64-encoding the selfservice tokens👀' (#12) from bugfix/11-selfservice_profile_link into dev
continuous-integration/drone/push Build is failing Details
Reviewed-on: #12
2021-03-31 17:45:59 +00:00
Nicolai Ort 1f581650c5 Now base64-encoding the selfservice tokens👀
continuous-integration/drone/pr Build is passing Details
ref #11
2021-03-31 19:44:37 +02:00
Nicolai Ort ab0e41f73b 📖New license file version [CI SKIP] [skip ci] 2021-03-15 15:27:42 +00:00
Nicolai Ort 416be7920c 🧾New changelog file version [CI SKIP] [skip ci] 2021-03-15 15:27:00 +00:00
Nicolai Ort f55471825e Dockerfile with cached images 🔥
continuous-integration/drone/push Build is passing Details
2021-03-15 16:26:17 +01:00
Nicolai Ort d5f29108c4 Revert "Now using more images powered by us 🚀🚀🚀"
This reverts commit c1d8b781a6.
2021-03-15 16:22:58 +01:00
Nicolai Ort c1d8b781a6 Now using more images powered by us 🚀🚀🚀
continuous-integration/drone/push Build was killed Details
2021-03-15 16:21:25 +01:00
Nicolai Ort f6c03c7ae2 Applied Docker MTU fix 🛠
continuous-integration/drone/push Build is failing Details
2021-03-15 16:17:28 +01:00
Nicolai Ort 7842a3c437 Updated ci with new kubernetes secrets 🚀🚀🚀
continuous-integration/drone/push Build is failing Details
ref odit/org#12
2021-03-12 18:59:48 +01:00
Nicolai Ort 18c8600563 Changed ci pipeline type to kubernetes
continuous-integration/drone/push Build encountered an error Details
ref odit/org#12 (comment)
2021-03-10 20:10:12 +01:00
Nicolai Ort 07aeaf6d6b 🧾New changelog file version [CI SKIP] [skip ci] 2021-03-05 18:06:13 +00:00
Nicolai Ort f011659469 Merge pull request 'Selfservice link forgotten mails feature/5-registration_forgot_mails' (#10) from feature/5-registration_forgot_mails into dev
continuous-integration/drone/push Build is failing Details
Reviewed-on: #10
2021-03-05 18:05:49 +00:00
Nicolai Ort 577f321b3f Fixed typo
continuous-integration/drone/pr Build is passing Details
ref #5
2021-03-05 19:05:08 +01:00
Nicolai Ort 91f9a8cbde Added tests
continuous-integration/drone/pr Build is passing Details
ref #5
2021-03-05 18:42:53 +01:00
Nicolai Ort 8271014a10 Adjusted tests for mail types
ref #5
2021-03-05 18:39:56 +01:00
Nicolai Ort 0fa94fc867 Added MailTypes to responses
ref #5
2021-03-05 18:37:51 +01:00
Nicolai Ort 015b25a205 Added new mailtype enum
ref #5
2021-03-05 18:32:24 +01:00
Nicolai Ort 9807e61fa8 Added endpoint
ref #5
2021-03-05 18:30:50 +01:00
Nicolai Ort 8da7c55deb Added new mailer function
ref #5
2021-03-05 18:29:22 +01:00
Nicolai Ort 34e30d6492 Renamed templates
ref #5
2021-03-05 18:27:17 +01:00
Nicolai Ort 9ba4b4001d Sorted locales
ref #5
2021-03-05 18:25:25 +01:00
Nicolai Ort 44972e4a93 Added translation keys to txt
ref #5
2021-03-05 18:25:06 +01:00
Nicolai Ort 1d4d1d18d8 Added translation keys
ref #5
2021-03-05 18:23:52 +01:00
Nicolai Ort 56c3deca57 Added mail templates for forgotten selfservice links
ref #5
2021-03-05 18:20:56 +01:00
Nicolai Ort 00e78371f3 🧾New changelog file version [CI SKIP] [skip ci] 2021-03-04 16:03:36 +00:00
17 changed files with 946 additions and 200 deletions

View File

@ -1,150 +1,175 @@
---
kind: pipeline
name: tests:node_latest
clone:
disable: true
steps:
- name: checkout pr
image: alpine/git
commands:
- git clone $DRONE_REMOTE_URL .
- git checkout $DRONE_SOURCE_BRANCH
- name: run tests
image: node:latest
commands:
- yarn
- yarn test:ci
trigger:
event:
- pull_request
---
kind: pipeline
type: docker
name: build:dev
clone:
disable: true
steps:
- name: clone
image: alpine/git
commands:
- git clone $DRONE_REMOTE_URL .
- git checkout dev
- name: build dev
image: plugins/docker
depends_on: [clone]
settings:
username:
from_secret: DOCKER_REGISTRY_USER
password:
from_secret: DOCKER_REGISTRY_PASSWORD
repo: registry.odit.services/lfk/mailer
tags:
- dev
registry: registry.odit.services
- name: run changelog export
depends_on: ["clone"]
image: node:latest
commands:
- npx auto-changelog --commit-limit false -p -u --hide-credit
- name: push new changelog to repo
depends_on: ["run changelog export"]
image: appleboy/drone-git-push
settings:
branch: dev
commit: true
commit_message: 🧾New changelog file version [CI SKIP] [skip ci]
author_email: bot@odit.services
remote: git@git.odit.services:lfk/mailer.git
ssh_key:
from_secret: GITLAB_SSHKEY
- name: run full license export
depends_on: ["clone"]
image: node:14.15.1-alpine3.12
commands:
- yarn
- yarn licenses:export
- name: push new licenses file to repo
depends_on: ["run full license export"]
image: appleboy/drone-git-push
settings:
branch: dev
commit: true
commit_message: 📖New license file version [CI SKIP] [skip ci]
author_email: bot@odit.services
remote: git@git.odit.services:lfk/mailer.git
skip_verify: true
ssh_key:
from_secret: GITLAB_SSHKEY
trigger:
branch:
- dev
event:
- push
---
kind: pipeline
type: docker
name: build:latest
clone:
disable: true
steps:
- name: clone
image: alpine/git
commands:
- git clone $DRONE_REMOTE_URL .
- git checkout dev
- git merge main
- git checkout main
- name: build latest
depends_on: ["clone"]
image: plugins/docker
settings:
username:
from_secret: DOCKER_REGISTRY_USER
password:
from_secret: DOCKER_REGISTRY_PASSWORD
repo: registry.odit.services/lfk/mailer
tags:
- latest
registry: registry.odit.services
- name: push merge to repo
depends_on: ["clone"]
image: appleboy/drone-git-push
settings:
branch: dev
commit: false
remote: git@git.odit.services:lfk/mailer.git
ssh_key:
from_secret: GITLAB_SSHKEY
trigger:
branch:
- main
event:
- push
---
kind: pipeline
type: docker
name: build:tags
steps:
- name: build $DRONE_TAG
image: plugins/docker
depends_on: [clone]
settings:
username:
from_secret: DOCKER_REGISTRY_USER
password:
from_secret: DOCKER_REGISTRY_PASSWORD
repo: registry.odit.services/lfk/mailer
tags:
- '${DRONE_TAG}'
registry: registry.odit.services
trigger:
event:
---
kind: secret
name: docker_username
get:
path: odit-registry-builder
name: username
---
kind: secret
name: docker_password
get:
path: odit-registry-builder
name: password
---
kind: secret
name: git_ssh
get:
path: odit-git-bot
name: sshkey
---
kind: pipeline
type: kubernetes
name: tests:node_latest
clone:
disable: true
steps:
- name: checkout pr
image: alpine/git
commands:
- git clone $DRONE_REMOTE_URL .
- git checkout $DRONE_SOURCE_BRANCH
- name: run tests
image: node:latest
commands:
- yarn
- yarn test:ci
trigger:
event:
- pull_request
---
kind: pipeline
type: kubernetes
name: build:dev
clone:
disable: true
steps:
- name: clone
image: alpine/git
commands:
- git clone $DRONE_REMOTE_URL .
- git checkout dev
- name: build dev
image: plugins/docker
depends_on: [clone]
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: registry.odit.services/lfk/mailer
tags:
- dev
registry: registry.odit.services
mtu: 1000
- name: run changelog export
depends_on: ["clone"]
image: node:latest
commands:
- npx auto-changelog --commit-limit false -p -u --hide-credit
- name: push new changelog to repo
depends_on: ["run changelog export"]
image: appleboy/drone-git-push
settings:
branch: dev
commit: true
commit_message: 🧾New changelog file version [CI SKIP] [skip ci]
author_email: bot@odit.services
remote: git@git.odit.services:lfk/mailer.git
ssh_key:
from_secret: git_ssh
- name: run full license export
depends_on: ["clone"]
image: node:14.15.1-alpine3.12
commands:
- yarn
- yarn licenses:export
- name: push new licenses file to repo
depends_on: ["run full license export"]
image: appleboy/drone-git-push
settings:
branch: dev
commit: true
commit_message: 📖New license file version [CI SKIP] [skip ci]
author_email: bot@odit.services
remote: git@git.odit.services:lfk/mailer.git
skip_verify: true
ssh_key:
from_secret: git_ssh
trigger:
branch:
- dev
event:
- push
---
kind: pipeline
type: kubernetes
name: build:latest
clone:
disable: true
steps:
- name: clone
image: alpine/git
commands:
- git clone $DRONE_REMOTE_URL .
- git checkout dev
- git merge main
- git checkout main
- name: build latest
depends_on: ["clone"]
image: plugins/docker
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: registry.odit.services/lfk/mailer
tags:
- latest
registry: registry.odit.services
mtu: 1000
- name: push merge to repo
depends_on: ["clone"]
image: appleboy/drone-git-push
settings:
branch: dev
commit: false
remote: git@git.odit.services:lfk/mailer.git
ssh_key:
from_secret: git_ssh
trigger:
branch:
- main
event:
- push
---
kind: pipeline
type: kubernetes
name: build:tags
steps:
- name: build $DRONE_TAG
image: plugins/docker
depends_on: [clone]
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: registry.odit.services/lfk/mailer
tags:
- '${DRONE_TAG}'
registry: registry.odit.services
mtu: 1000
trigger:
event:
- tag

View File

@ -2,4 +2,136 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### 0.1.0
#### [v0.1.2](https://git.odit.services/lfk/mailer/compare/v0.1.2...v0.1.2)
- update runner-welcome mail template [`#15`](https://git.odit.services/lfk/mailer/issues/15)
- 🧾New changelog file version [CI SKIP] [skip ci] [`e713ef5`](https://git.odit.services/lfk/mailer/commit/e713ef54ef39d4759832ada073cea825b4ef26dc)
#### [v0.1.2](https://git.odit.services/lfk/mailer/compare/v0.1.1...v0.1.2)
> 15 April 2021
- Merge pull request 'Release 0.1.2' (#14) from dev into main [`15b98e8`](https://git.odit.services/lfk/mailer/commit/15b98e83098906005e0f3f0b24313f9cab6ec1af)
- Fixed typos and added missing translations🌎 [`8099d2f`](https://git.odit.services/lfk/mailer/commit/8099d2fdbaa8fea6e4fd6a993ac1cfb09e01d14d)
- 🧾New changelog file version [CI SKIP] [skip ci] [`c8378b6`](https://git.odit.services/lfk/mailer/commit/c8378b66ba512a90ca4386d5a3570f4bb8bea049)
- 🧾New changelog file version [CI SKIP] [skip ci] [`fbc95be`](https://git.odit.services/lfk/mailer/commit/fbc95be3455eed0d97a124f7df277d0f902e76c9)
- 🚀Bumped version to v0.1.2 [`d550059`](https://git.odit.services/lfk/mailer/commit/d5500594945b99e428ac1651afd1fe8a8eeba192)
#### [v0.1.1](https://git.odit.services/lfk/mailer/compare/v0.1.0...v0.1.1)
> 31 March 2021
- Merge pull request 'Release 0.1.1' (#13) from dev into main [`b47660a`](https://git.odit.services/lfk/mailer/commit/b47660af65362d773911e99fa9ebf99340d1a368)
- Added mail templates for forgotten selfservice links [`56c3dec`](https://git.odit.services/lfk/mailer/commit/56c3deca574fc4501cc9b51128b4f3b0467d24c9)
- Applied Docker MTU fix 🛠 [`f6c03c7`](https://git.odit.services/lfk/mailer/commit/f6c03c7ae218faf8bcdc4108e809ef121b87ef92)
- 🧾New changelog file version [CI SKIP] [skip ci] [`00e7837`](https://git.odit.services/lfk/mailer/commit/00e78371f3d875460596c24f3544d4e94a896f3c)
- Added tests [`91f9a8c`](https://git.odit.services/lfk/mailer/commit/91f9a8cbdecf74a74e68b80f3aec675de59e46d4)
- Added translation keys [`1d4d1d1`](https://git.odit.services/lfk/mailer/commit/1d4d1d18d85349b6f877fa5f1df82fe0d9dafe79)
- Sorted locales [`9ba4b40`](https://git.odit.services/lfk/mailer/commit/9ba4b4001d35afa49e4eb3232a21784ed443c52e)
- 📖New license file version [CI SKIP] [skip ci] [`ab0e41f`](https://git.odit.services/lfk/mailer/commit/ab0e41f73be5ad281d5909d6d8baa4dd882c7cc3)
- Updated ci with new kubernetes secrets 🚀🚀🚀 [`7842a3c`](https://git.odit.services/lfk/mailer/commit/7842a3c437a7d028df9e610257f7ccc0c3d8a871)
- Added new mailer function [`8da7c55`](https://git.odit.services/lfk/mailer/commit/8da7c55deb5c0b4fccb7f18688613d06dd92df45)
- Adjusted tests for mail types [`8271014`](https://git.odit.services/lfk/mailer/commit/8271014a101439ea46233099182eb78da9fdc11c)
- Added MailTypes to responses [`0fa94fc`](https://git.odit.services/lfk/mailer/commit/0fa94fc8679b45aa702068ad96097fe18b385a50)
- Revert "Now using more images powered by us 🚀🚀🚀" [`d5f2910`](https://git.odit.services/lfk/mailer/commit/d5f29108c479e641db91b2f48ab3cf5da16e9d14)
- Now using more images powered by us 🚀🚀🚀 [`c1d8b78`](https://git.odit.services/lfk/mailer/commit/c1d8b781a62ebedafa7f1fa598eab966e91d8b64)
- Added endpoint [`9807e61`](https://git.odit.services/lfk/mailer/commit/9807e61fa81a5790fc09f9920905c683ea1c3a79)
- 🧾New changelog file version [CI SKIP] [skip ci] [`07aeaf6`](https://git.odit.services/lfk/mailer/commit/07aeaf6d6ba46d0bde62141a7ab0f47c9afde565)
- 🧾New changelog file version [CI SKIP] [skip ci] [`416be79`](https://git.odit.services/lfk/mailer/commit/416be7920cc551bfd2da2ddfc2fdc25367cafc99)
- Added translation keys to txt [`44972e4`](https://git.odit.services/lfk/mailer/commit/44972e4a93204aa9f6acbbf29f3012aa8213af77)
- 🧾New changelog file version [CI SKIP] [skip ci] [`d996d2e`](https://git.odit.services/lfk/mailer/commit/d996d2e85f24c9e3723913bafc8078a13732fc04)
- 🧾New changelog file version [CI SKIP] [skip ci] [`8996aef`](https://git.odit.services/lfk/mailer/commit/8996aef1523e079aec83b63df99c44173f3a43cc)
- 🚀Bumped version to v0.1.1 [`34e0c72`](https://git.odit.services/lfk/mailer/commit/34e0c729b542b026b997f25a33165383ff879222)
- Merge pull request 'Now base64-encoding the selfservice tokens👀' (#12) from bugfix/11-selfservice_profile_link into dev [`5ff6f77`](https://git.odit.services/lfk/mailer/commit/5ff6f77dafa6a3a67615fae6d228c31cb8eac6b9)
- Changed ci pipeline type to kubernetes [`18c8600`](https://git.odit.services/lfk/mailer/commit/18c8600563c4369321a0e9ba51a09a2fa95198b5)
- Dockerfile with cached images 🔥 [`f554718`](https://git.odit.services/lfk/mailer/commit/f55471825ef6833600780cb229148d7b7d122150)
- Now base64-encoding the selfservice tokens👀 [`1f58165`](https://git.odit.services/lfk/mailer/commit/1f581650c5164b6b6d6a6fce5e86e64074c1bdf9)
- Merge pull request 'Selfservice link forgotten mails feature/5-registration_forgot_mails' (#10) from feature/5-registration_forgot_mails into dev [`f011659`](https://git.odit.services/lfk/mailer/commit/f011659469bd62dffc17e440a6ed42d1fbe7956e)
- Added new mailtype enum [`015b25a`](https://git.odit.services/lfk/mailer/commit/015b25a2056fe3537fb8e88539c25c2c9e6ba618)
- Fixed typo [`577f321`](https://git.odit.services/lfk/mailer/commit/577f321b3ffcea666eaaa529e86e532702432635)
- Renamed templates [`34e30d6`](https://git.odit.services/lfk/mailer/commit/34e30d64929ca7555cee62c4da86d07050b94ff5)
#### v0.1.0
> 4 March 2021
- Merge pull request 'Alpha release 0.1.0' (#9) from dev into main [`e60360c`](https://git.odit.services/lfk/mailer/commit/e60360ccd4f5d6d01b7f20b12e60edc4adb1f75d)
- 📖New license file version [CI SKIP] [skip ci] [`10b1312`](https://git.odit.services/lfk/mailer/commit/10b13127aa48f65641d1295b77556a6f74a94625)
- Added basic welcome mails [`b3f61f5`](https://git.odit.services/lfk/mailer/commit/b3f61f51e367c10e102e1d53e6c41c8280f6c0c3)
- 🚀Bumped version to v0.1.0 [`5e7cfff`](https://git.odit.services/lfk/mailer/commit/5e7cfff41eaf14bf17319319534c7713d9bbf3b9)
- Added drone file [`3f21503`](https://git.odit.services/lfk/mailer/commit/3f21503848b14c5f8f2066ab3fd8fe114bf1de41)
- 📖New license file version [CI SKIP] [skip ci] [`f11137e`](https://git.odit.services/lfk/mailer/commit/f11137e0c2140cd226d418c284387bc6a9532030)
- Added welcome mail tests [`ce87e1f`](https://git.odit.services/lfk/mailer/commit/ce87e1fc03340922c412a431d9595c740a78f42b)
- Added reset mail valid tests [`4624250`](https://git.odit.services/lfk/mailer/commit/46242509637e05e6b258b406d0a2a76e5db9ca03)
- Added all missing config vars/interpolations [`4994cb0`](https://git.odit.services/lfk/mailer/commit/4994cb0489b168ecc9f18103fdea5e578bb9ef74)
- Sorted translations [`1862013`](https://git.odit.services/lfk/mailer/commit/18620133b92baa81272ee084385129b2fb60d234)
- Added more info to the readme [`9cb100c`](https://git.odit.services/lfk/mailer/commit/9cb100c7c43b082263f4f58c82554c85d7be8494)
- Moved models to their own files [`9ce86eb`](https://git.odit.services/lfk/mailer/commit/9ce86ebef7d11ed0fb674dcf77f1b6dacd934aa4)
- Fixed typo [`4b5e24f`](https://git.odit.services/lfk/mailer/commit/4b5e24f3e30db94cf46d6d6362be519343c71a83)
- Added test mail tests [`bf9652d`](https://git.odit.services/lfk/mailer/commit/bf9652dcfed3667f9d2e8cfd933963935a621a88)
- Added + sorted translations [`6e99ad5`](https://git.odit.services/lfk/mailer/commit/6e99ad5c1ca3a4853a38acae6f0526c0fa54180c)
- Added german translations [`e2237d3`](https://git.odit.services/lfk/mailer/commit/e2237d34d39ccaef5600a6eb5d4c555531cb5941)
- Added jest config and first tests [`ec939e6`](https://git.odit.services/lfk/mailer/commit/ec939e6c1142e825cdb21555e03d9e026e7cdf3c)
- Added langauge keys for pw reset [`7595235`](https://git.odit.services/lfk/mailer/commit/7595235491694e95b11043f2d5e1fa20c65cd43c)
- Locales as enums [`d450ecb`](https://git.odit.services/lfk/mailer/commit/d450ecbf7cf8e0b97c46e1f1f57cfcd6f7c30dce)
- Added dockerfile and docker-compose [`c0c8046`](https://git.odit.services/lfk/mailer/commit/c0c8046031aeb19b3da5cd292316af54462c0978)
- Updated api doc tests to listen on the right endpoint [`f6a53cc`](https://git.odit.services/lfk/mailer/commit/f6a53cc3e47308e84cde13640cb3f614642fd4ca)
- Added drone pipeline for automagic tests [`3501a4b`](https://git.odit.services/lfk/mailer/commit/3501a4bef1b6ec73ea0be643e1b4e95ee9874ff9)
- Added env var docs to readme [`5314100`](https://git.odit.services/lfk/mailer/commit/5314100065f24cb0902c1ba207b880016abd300e)
- Added missing translations [`1ec95a1`](https://git.odit.services/lfk/mailer/commit/1ec95a1fda13bdfdc9c056a4f73578045c77d964)
- 📖New license file version [CI SKIP] [skip ci] [`4cde30e`](https://git.odit.services/lfk/mailer/commit/4cde30ef98370069dfad748e12bd720c1b84ad3e)
- Merge pull request 'Welcome mails feature/2-welcome_mails' (#7) from feature/2-welcome_mails into dev [`0b96dc8`](https://git.odit.services/lfk/mailer/commit/0b96dc8ba519b42922f1464853d694fc2984cbc0)
- Merge pull request 'Added real information to the README feature/3-readme' (#8) from feature/3-readme into dev [`aed676c`](https://git.odit.services/lfk/mailer/commit/aed676c04b6223916b638340b04677fc34c5b6ae)
- Added registration mail endpoint [`b3952c3`](https://git.odit.services/lfk/mailer/commit/b3952c39e5f52412c955d6a9cb96f81396e06d82)
- Added request class [`056b74c`](https://git.odit.services/lfk/mailer/commit/056b74ce2268185d39554a7d7afeaaf75c4e17a2)
- Added reset mail request model [`5812a48`](https://git.odit.services/lfk/mailer/commit/5812a485ee2e23e8d0bb15bedbebdf7734817865)
- Now accepting reset mail class [`7445223`](https://git.odit.services/lfk/mailer/commit/7445223f1e6782536157d09cddcad9c942b72e7d)
- Added ci status [`e48f830`](https://git.odit.services/lfk/mailer/commit/e48f830c08900a9c9e4451d16a25f3ef3d9485e4)
- Merge pull request 'Added tests for the mail endpoints feature/4-tests' (#6) from feature/4-tests into dev [`7473931`](https://git.odit.services/lfk/mailer/commit/7473931f2705bbdff7a15b74f8d1f39228694697)
- Merge pull request 'Initial release 0.0.1' (#1) from dev into main [`1d3901a`](https://git.odit.services/lfk/mailer/commit/1d3901ae8f9a0c4675cacd7d0c44c547a06985d4)
- Added basic loaders/files/dirs [`4e80aa8`](https://git.odit.services/lfk/mailer/commit/4e80aa8a32911ca9697e411f82e8923977ae8216)
- Added the old mail templates [`c5f2532`](https://git.odit.services/lfk/mailer/commit/c5f2532504768ee26c170e4f4d84bc25a87c63cc)
- Initial commit [`907b989`](https://git.odit.services/lfk/mailer/commit/907b989d534dab098cc6013f5954203bc9a37510)
- Added language keys for test mails [`8ab80fd`](https://git.odit.services/lfk/mailer/commit/8ab80fd7ed19f90c51a3f15f90d23e33c451df8e)
- Added basic files and depedencies [`4e5d5ae`](https://git.odit.services/lfk/mailer/commit/4e5d5ae31171a9b60e684694e04b840a92abbe50)
- Added basic mailer that can send pw reset mails [`279a9ca`](https://git.odit.services/lfk/mailer/commit/279a9ca946ec028e7003df4f3f78ce80f5e455b4)
- Added basic config [`9c2f465`](https://git.odit.services/lfk/mailer/commit/9c2f465b99b8610047b5f5b4b8d6707e6d6ee8bd)
- Now generateing api key via eng_gen script [`17f5876`](https://git.odit.services/lfk/mailer/commit/17f5876d738bcc461f7b4fac907cb8bb9bc13aa5)
- Added function for sending test mail [`602600d`](https://git.odit.services/lfk/mailer/commit/602600db895a01ca72182e3e2d6094a5e20d4b85)
- Added basic apispec generator [`124c7a5`](https://git.odit.services/lfk/mailer/commit/124c7a5d1544686dc4fd6e2eaf50e519c2fe0a49)
- Added app startup file [`53daae9`](https://git.odit.services/lfk/mailer/commit/53daae956da47008312e45a49d445f5674c33551)
- Added basic mail controller [`972b09d`](https://git.odit.services/lfk/mailer/commit/972b09d8ca4cf250e308340a4ba59f741de77801)
- Added ans sorted translations [`3f5b77d`](https://git.odit.services/lfk/mailer/commit/3f5b77dc8e085fc25b4b5cc9ffa054ee8ec5bd6b)
- Added the usual middlewares [`e0523db`](https://git.odit.services/lfk/mailer/commit/e0523db739f772166c0bf895d0d40435848f4600)
- Added function for generateing test envs [`fc37d14`](https://git.odit.services/lfk/mailer/commit/fc37d146209f6561cc1642774f1ef3a9cadb39f8)
- Added ans sorted translations [`aedcbd5`](https://git.odit.services/lfk/mailer/commit/aedcbd5f56692c522c356c9c05cd6b5e13c87b3a)
- Sorted translations [`a84500c`](https://git.odit.services/lfk/mailer/commit/a84500ca1b240c72a69d47f9b35adea7a288c23a)
- Added success response [`895e346`](https://git.odit.services/lfk/mailer/commit/895e346e599a93ac32c90318197a890fd0599513)
- Added status controller [`aa28601`](https://git.odit.services/lfk/mailer/commit/aa286013a146fe2ad11c1601bef529ad956a9fed)
- Fixed broken formatting [`dc3bab3`](https://git.odit.services/lfk/mailer/commit/dc3bab324704005490aaffcd62f18e660c4315c8)
- Added mail errors [`c5fe167`](https://git.odit.services/lfk/mailer/commit/c5fe1671a2e1325740a29c93f2fe2dbb76579391)
- Added basic jest packages and scripts [`fa9d0e5`](https://git.odit.services/lfk/mailer/commit/fa9d0e5790a6d7ba9d4490bc016e0f9afde49ec8)
- Updated comments [`d77670f`](https://git.odit.services/lfk/mailer/commit/d77670fb7023aae86b7039684a6b059ee91bf17d)
- Added custom i18n ally framework [`264af07`](https://git.odit.services/lfk/mailer/commit/264af075f306675e4247fbcadebfcdab8fa0ba3b)
- Added stuff to gitignore [`21fab5d`](https://git.odit.services/lfk/mailer/commit/21fab5d53a7f228fa4ef64e53c64fe5324b0ec17)
- Fixed json [`a1fbabd`](https://git.odit.services/lfk/mailer/commit/a1fbabdee8f414498c5efd95d5d87f41ef3cc28e)
- 🧾New changelog file version [CI SKIP] [skip ci] [`7c16dd1`](https://git.odit.services/lfk/mailer/commit/7c16dd1b447369c87f2e3a487ec2a3f1fc8451c5)
- Disabled html autoformatting [`6c5996e`](https://git.odit.services/lfk/mailer/commit/6c5996e1e514ad9b2294316088c34e44255ae895)
- Added nodemailer dependencies [`87d7175`](https://git.odit.services/lfk/mailer/commit/87d7175f962e8810c98fc72a9bb0fc19ef9e2c22)
- Added initial translation [`48aa076`](https://git.odit.services/lfk/mailer/commit/48aa076e08b7c32bf53b86c942b129d7f366d93b)
- Updated consola [`9323cec`](https://git.odit.services/lfk/mailer/commit/9323cecf944dde0b5c187059ded0fe576a0e6758)
- Added eventname to config [`a62f9c6`](https://git.odit.services/lfk/mailer/commit/a62f9c683dd09303af47e2ed4e8df60bb2df3121)
- Added test watch mode [`38cffc2`](https://git.odit.services/lfk/mailer/commit/38cffc20490fe10b4e4bc4d88a8377562cd1545a)
- Added email address verification [`9b5c0b8`](https://git.odit.services/lfk/mailer/commit/9b5c0b8f0630ddaeb78e0d319692985d91a6db76)
- Fixed argument bug [`6a803c0`](https://git.odit.services/lfk/mailer/commit/6a803c04ab2065db60a13b1aa3333fdfe252f1ab)
- Added env generation script [`01f5001`](https://git.odit.services/lfk/mailer/commit/01f500135518a628cca9f2a51e25f9ef94b99fa2)
- Not ignoring i18n ally framework any more [`92494ea`](https://git.odit.services/lfk/mailer/commit/92494eaf6cea490a2c87ebc8f4d14e52d7d9ed0c)
- Added copyright owner to config [`806cc81`](https://git.odit.services/lfk/mailer/commit/806cc814c39fbe9e09eda87660e076eade1c8b01)
- Adjusted mail title [`314ceac`](https://git.odit.services/lfk/mailer/commit/314ceaca9d1ff8423c027a9457e6c8d8520272a4)
- Fixed inerpolation [`f8b9b18`](https://git.odit.services/lfk/mailer/commit/f8b9b188ae47adbc2a11a68274e9d2db3eb6b692)
- Changed wording [`940acab`](https://git.odit.services/lfk/mailer/commit/940acab77015eced94e5273d4d0a824653665098)
- Updated interpolations [`0926f31`](https://git.odit.services/lfk/mailer/commit/0926f31fac183a7064aac1679babc57f3b3681c8)
- Added empty locale files [`0438df3`](https://git.odit.services/lfk/mailer/commit/0438df3bd18c4c424d0db4c269f3ce9f40eb97e5)
- Removed eventname from config [`691d61b`](https://git.odit.services/lfk/mailer/commit/691d61bd3c40ded3d617a8569dab51e7728ee8ce)
- Added eventname to config [`9bdb307`](https://git.odit.services/lfk/mailer/commit/9bdb3072aa318f5621443b839c6d1067d80b3580)
- Moved scripts to own scripts folder [`22195c1`](https://git.odit.services/lfk/mailer/commit/22195c11dd825f83d8415445e2ee82aaa53a83cd)

View File

@ -1,5 +1,5 @@
# Typescript Build
FROM registry.odit.services/mirror/node:14.15.1-alpine3.12
FROM registry.odit.services/hub/library/node:14.15.1-alpine3.12
WORKDIR /app
COPY package.json ./
RUN npm i -g pnpm
@ -8,7 +8,7 @@ COPY tsconfig.json ./
COPY src ./src
RUN pnpm run build
# final image
FROM registry.odit.services/mirror/node:14.15.1-alpine3.12
FROM registry.odit.services/hub/library/node:14.15.1-alpine3.12
COPY package.json ./
RUN npm i -g pnpm
RUN pnpm i --prod

View File

@ -244,7 +244,7 @@ SOFTWARE.
# i18next-fs-backend
**Author**: undefined
**Repo**: git@github.com:i18next/i18next-fs-backend.git
**License**: undefined
**License**: MIT
**Description**: i18next-fs-backend is a backend layer for i18next using in Node.js and for Deno to load translations from the filesystem.
## License Text
@ -492,27 +492,27 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
**License**: MIT
**Description**: TypeScript definitions for Nodemailer
## License Text
MIT License
Copyright (c) Microsoft Corporation. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
MIT License
Copyright (c) Microsoft Corporation.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
# axios
@ -604,7 +604,7 @@ SOFTWARE.
**Author**: [object Object]
**Repo**: https://github.com/remy/nodemon.git
**License**: MIT
**Description**: Simple monitor script for use during development of a node.js app.
**Description**: Simple monitor script for use during development of a Node.js app.
## License Text
MIT License
@ -687,6 +687,27 @@ IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
**License**: MIT
**Description**: Starts server, waits for URL, then runs test command; when the tests end, shuts down server
## License Text
MIT License
Copyright (c) 2022 bahmutov
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
# ts-jest

View File

@ -1,6 +1,6 @@
{
"name": "@odit/lfk-mailer",
"version": "0.1.0",
"version": "0.1.2",
"description": "The document mailer for the LfK! runner system. This generates and sends mails (password reset, welcome, ...)",
"main": "src/app.ts",
"scripts": {

View File

@ -121,11 +121,12 @@ export class Mailer {
/**
* Function for sending a reset mail from the reset mail template.
* @param to_address The address the mail will be sent to. Should always get pulled from a user object.
* @param token The requested password reset token - will be combined with the app_url to generate a password reset link.
* @param to_address The address the mail will be sent to. Should always get pulled from a runner object.
* @param token The runner's selfservice token - will be combined with the app_url to generate a selfservice profile link.
*/
public async sendWelcomeMail(to_address: string, token: string, locale: string = "en") {
await i18next.changeLanguage(locale);
token = Buffer.from(token).toString("base64");
const replacements = {
recipient_mail: to_address,
@ -133,7 +134,7 @@ export class Mailer {
link_imprint: `${config.app_url}/imprint`,
link_privacy: `${config.app_url}/privacy`,
selfservice_link: `${config.app_url}/selfservice/profile/${token}`,
forgot_link: `${config.app_url}/selfservice`,
forgot_link: `${config.app_url}/selfservice/`,
contact_mail: config.contact_mail,
event_name: config.event_name
}
@ -152,6 +153,40 @@ export class Mailer {
await this.sendMail(mail);
}
/**
* Function for sending a selfservice link forgotten mail from the runner_forgot template.
* @param to_address The address the mail will be sent to. Should always get pulled from a runner object.
* @param token The runner's selfservice token - will be combined with the app_url to generate a selfservice profile link.
*/
public async sendSelfserviceForgottenMail(to_address: string, token: string, locale: string = "en") {
await i18next.changeLanguage(locale);
token = Buffer.from(token).toString("base64");
const replacements = {
recipient_mail: to_address,
copyright_owner: config.copyright_owner,
link_imprint: `${config.app_url}/imprint`,
link_privacy: `${config.app_url}/privacy`,
selfservice_link: `${config.app_url}/selfservice/profile/${token}`,
forgot_link: `${config.app_url}/selfservice/`,
contact_mail: config.contact_mail,
event_name: config.event_name
}
const template_html = Handlebars.compile(fs.readFileSync(__dirname + '/templates/runner_forgot.html', { encoding: 'utf8' }));
const template_txt = Handlebars.compile(fs.readFileSync(__dirname + '/templates/runner_forgot.txt', { encoding: 'utf8' }));
const body_html = template_html(replacements);
const body_txt = template_txt(replacements);
const mail: MailOptions = {
to: to_address,
subject: i18next.t("your-event_name-profile", Mailer.interpolations).toString(),
text: body_txt,
html: body_html
};
await this.sendMail(mail);
}
/**
* Wrapper function for sending a mail via this object's transporter.
* @param mail MailOptions object containing the

View File

@ -2,6 +2,7 @@ import { Authorized, Body, JsonController, Post, QueryParam } from 'routing-cont
import { OpenAPI } from 'routing-controllers-openapi';
import { Mailer } from '../Mailer';
import { locales } from '../models/LocaleEnum';
import { MailTypes } from '../models/MailTypeEnum';
import { ResetMail } from '../models/ResetMail';
import { SuccessResponse } from '../models/SuccessResponse';
import { WelcomeMail } from '../models/WelcomeMail';
@ -28,7 +29,7 @@ export class MailController {
} catch (error) {
throw error;
}
return new SuccessResponse(locale);
return new SuccessResponse(MailTypes.PASSWORD_RESET, locale);
}
@Post('/test')
@ -44,7 +45,7 @@ export class MailController {
console.log(error)
throw error;
}
return new SuccessResponse(locale);
return new SuccessResponse(MailTypes.TEST, locale);
}
@Post('/registration')
@ -60,6 +61,22 @@ export class MailController {
console.log(error)
throw error;
}
return new SuccessResponse(locale);
return new SuccessResponse(MailTypes.RUNNER_WELCOME, locale);
}
@Post('/registration_forgot')
@OpenAPI({ description: "Sends selfservice link forgotten mails", parameters: [{ in: "query", name: "locale", schema: { type: "string", enum: ["de", "en"] } }] })
async sendSelfserviceForgotten(@Body({ validate: true }) mailOptions: WelcomeMail, @QueryParam("locale") locale: locales) {
if (!this.initialized) {
await this.mailer.init();
this.initialized = true;
}
try {
this.mailer.sendSelfserviceForgottenMail(mailOptions.address, mailOptions.selfserviceToken, locale?.toString())
} catch (error) {
console.log(error)
throw error;
}
return new SuccessResponse(MailTypes.RUNNER_FORGOT, locale);
}
}

View File

@ -2,9 +2,9 @@
"a-password-reset-for-your-account-got-requested": "Ein Passwort Reset wurde für dein Konto beantragt.",
"all-rights-reserved": "Alle Rechte vorbehalten",
"event_name-registration": "{{event_name}} Registrierung",
"if-you-didnt-register-yourself-you-should-contact-us-to-get-your-data-removed-from-our-systems": "Solltest du dich nicht selbst registriert haben schick uns bitte eine Mail und wir entfernen deine Daten aus unserem System: ",
"if-you-didnt-register-yourself-you-should-contact-us-to-get-your-data-removed-from-our-systems": "Solltest du dich nicht selbst registriert haben, sende uns bitte eine Mail und wir entfernen deine Daten aus unserem System: ",
"if-you-didnt-request-the-reset-please-ignore-this-mail": "Solltest du den Reset nicht beantragt haben kannst du diese Mail einfach ignorieren.",
"if-you-ever-loose-the-link-you-can-request-a-new-one-by-visiting-our-website": "Solltest du den Link verlieren kannst du auf unserer Website einen neuen beantragen:",
"if-you-ever-loose-the-link-you-can-request-a-new-one-by-visiting-our-website": "Auf unserer Website kannst du jederzeit einen neuen Login-Link beantragen:",
"imprint": "Impressum",
"lfk-mail-test": "{{copyright_owner}} - Mail test",
"lfk-password-reset": "{{copyright_owner}} - Passwort zurücksetzen",
@ -12,15 +12,20 @@
"privacy": "Datenschutz",
"reset-password": "Passwort zurücksetzen",
"test-mail": "Test mail",
"thanks-for-registering-and-welcome-to-the-event_name": "Vielen Dank für die Registrierung und willkommen beim {{event_name}}!",
"the-only-thing-you-have-to-do-now-is-to-bring-your-registration-code-with-you": "Du must nichts weiter machen, außer deinen Registrierungscode zum Lauf mitzubringen.",
"thank-you-for-requesting-a-new-link-to-your-event_name-runner-profile": "Danke, dass du einen neuen Profillink für das {{event_name}} Läuferstem beantragt hast.",
"thanks-for-registering-and-welcome-to-the-event_name": "Vielen Dank für die Registrierung beim {{event_name}}",
"the-only-thing-you-have-to-do-now-is-to-bring-your-registration-code-with-you": "Bitte bringe deinen Registrierungscode zum Lauf am 21.04.2023 mit.",
"this-is-a-test-mail-triggered-by-an-admin-in-the-lfk-backend": "Das ist eine Testmail, die von einem Admin im LfK! Backend erzeugt wurde.",
"this-mail-was-sent-to-recipient_mail-because-someone-request-a-mail-test-for-this-mail-address": "Du bekommst diese Mail, weil jemand eine Testmail für deine Mail-Adresse angefragt hat.",
"this-mail-was-sent-to-you-because-someone-request-a-password-reset-for-a-account-linked-to-the-mail-address": "Du bekommst diese E-Mail, weil jemand einen Passwort-Reset für deinen Account beantragt hat.",
"this-mail-was-sent-to-you-because-someone-requested-a-new-link-to-access-your-profile-for-the-event_name": "Diese E-Mail wurde an dich gesendet, weil jemand einen neuen Link angefordert hat, um auf dein {{event_name}} Profil zuzugreifen.",
"this-mail-was-sent-to-you-because-someone-used-your-mail-address-to-register-themselfes-for-the-event_name": "Du bekommst diese Mail, weil jemand deine E-Mail-Adresse verwendet hat, um sich beim {{event_name}} zu registrieren.",
"to-prevent-spam-you-can-only-request-a-new-link-every-24hrs": "Um Spam zu vermeiden, kannst du nur alle 24 Stunden einen neuen Link anfordern.",
"view-my-data": "Meine Daten",
"we-successfully-processed-your-registration": "Wir haben deine Registrierung erfolgreich verarbeitet.",
"welcome": "Willkommen",
"you-can-view-your-registration-code-lap-times-and-much-more-by-visiting-our-selfservice": "Du kannst deinen Registrierungscode, deine Rundenzeiten unv vieles mehr im Selfservice einsehen:",
"your-password-wont-be-changed-until-you-click-the-reset-link-below-and-set-a-new-one": "Dein Passwort wird erst zurückgesetzt, wenn du den Reset-Link öffnest und ein neues Passwort setzt."
"you-can-view-your-registration-code-lap-times-and-much-more-by-visiting-our-selfservice": "Deinen Registrierungscode, Rundenzeiten und vieles mehr kannst du im Selfservice einsehen:",
"your-event_name-profile": "Dein {{event_name}} Profil",
"your-password-wont-be-changed-until-you-click-the-reset-link-below-and-set-a-new-one": "Dein Passwort wird erst zurückgesetzt, wenn du den Reset-Link öffnest und ein neues Passwort setzt.",
"your-profile": "Dein Profil"
}

View File

@ -12,15 +12,20 @@
"privacy": "Privacy",
"reset-password": "Reset password",
"test-mail": "Test mail",
"thank-you-for-requesting-a-new-link-to-your-event_name-runner-profile": "Thank you for requesting a new link to your {{event_name}} runner profile.",
"thanks-for-registering-and-welcome-to-the-event_name": "Thanks for registering and welcome to the {{event_name}}!",
"the-only-thing-you-have-to-do-now-is-to-bring-your-registration-code-with-you": "The only thing you have to do now is to bring your registration code with you.",
"this-is-a-test-mail-triggered-by-an-admin-in-the-lfk-backend": "This is a test mail triggered by an admin in the LfK! backend.",
"this-mail-was-sent-to-recipient_mail-because-someone-request-a-mail-test-for-this-mail-address": "This mail was sent to you because someone request a mail test for this mail address.",
"this-mail-was-sent-to-you-because-someone-request-a-password-reset-for-a-account-linked-to-the-mail-address": "This mail was sent to you because someone request a password reset for a account linked to the mail address.",
"this-mail-was-sent-to-you-because-someone-used-your-mail-address-to-register-themselfes-for-the-event_name": "This mail was sent to you, because someone used your mail address to register themselfes for the {{event_name}}",
"this-mail-was-sent-to-you-because-someone-requested-a-new-link-to-access-your-profile-for-the-event_name": "This mail was sent to you, because someone requested a new link to access your profile for the {{event_name}}.",
"this-mail-was-sent-to-you-because-someone-used-your-mail-address-to-register-themselfes-for-the-event_name": "This mail was sent to you, because someone used your mail address to register themselves for the {{event_name}}",
"to-prevent-spam-you-can-only-request-a-new-link-every-24hrs": "To prevent spam you can only request a new link every 24hrs.",
"view-my-data": "View my data",
"we-successfully-processed-your-registration": "We successfully processed your registration.",
"welcome": "Welcome",
"you-can-view-your-registration-code-lap-times-and-much-more-by-visiting-our-selfservice": "You can view your registration code, lap times and much more by visiting our selfservice:",
"your-password-wont-be-changed-until-you-click-the-reset-link-below-and-set-a-new-one": "Your password won't be changed until you click the reset link below and set a new one."
"your-event_name-profile": "Your {{event_name}} profile",
"your-password-wont-be-changed-until-you-click-the-reset-link-below-and-set-a-new-one": "Your password won't be changed until you click the reset link below and set a new one.",
"your-profile": "Your profile"
}

View File

@ -0,0 +1,6 @@
export enum MailTypes {
PASSWORD_RESET = "PASSWORD_RESET",
RUNNER_FORGOT = "RUNNER_FORGOT",
RUNNER_WELCOME = "RUNNER_WELCOME",
TEST = "TEST"
}

View File

@ -1,5 +1,6 @@
import { IsBoolean, IsString } from 'class-validator';
import { locales } from './LocaleEnum';
import { MailTypes } from './MailTypeEnum';
/**
* Simple success response class to make everyone happy :)
@ -15,7 +16,11 @@ export class SuccessResponse {
@IsString()
locale: locales;
constructor(locale?: locales) {
@IsString()
type: MailTypes;
constructor(type: MailTypes, locale?: locales) {
this.type = type;
this.locale = locale || locales.en;
}
}

View File

@ -0,0 +1,396 @@
<!DOCTYPE html>
<html lang="de" xmlns="http://www.w3.org/1999/xhtml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<title>{{__ "your-event_name-profile"}}<title> <!-- The title tag shows in email notifications, like Android 4.4. -->
<meta charset="utf-8"> <!-- utf-8 works for most cases -->
<meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
<meta name="viewport" content="width=device-width"> <!-- Forcing initial-scale shouldn't be necessary -->
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Use the latest (edge) version of IE rendering engine -->
<meta name="x-apple-disable-message-reformatting"> <!-- Disable auto-scale in iOS 10 Mail entirely -->
<meta name="format-detection" content="telephone=no,address=no,email=no,date=no,url=no"> <!-- Tell iOS not to automatically link certain text strings. -->
<!-- CSS Reset : BEGIN -->
<style>
/* What it does: Remove spaces around the email design added by some email clients. */
/* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
html,
body {
margin: 0 auto !important;
padding: 0 !important;
height: 100% !important;
width: 100% !important;
}
/* What it does: Stops email clients resizing small text. */
* {
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
}
/* What it does: Centers email on Android 4.4 */
div[style*="margin: 16px 0"] {
margin:0 !important;
}
/* What it does: Stops Outlook from adding extra spacing to tables. */
table,
td {
mso-table-lspace: 0pt !important;
mso-table-rspace: 0pt !important;
}
/* What it does: Fixes webkit padding issue. */
table {
border: 0;
border-spacing: 0;
border-collapse: collapse
}
/* What it does: Forces Samsung Android mail clients to use the entire viewport. */
#MessageViewBody,
#MessageWebViewDiv{
width: 100% !important;
}
/* What it does: Uses a better rendering method when resizing images in IE. */
img {
-ms-interpolation-mode:bicubic;
}
/* What it does: Prevents Windows 10 Mail from underlining links despite inline CSS. Styles for underlined links should be inline. */
a {
text-decoration: none;
}
/* What it does: A work-around for email clients automatically linking certain text strings. */
/* iOS */
a[x-apple-data-detectors],
.unstyle-auto-detected-links a,
.aBn {
border-bottom: 0 !important;
cursor: default !important;
color: inherit !important;
text-decoration: none !important;
font-size: inherit !important;
font-family: inherit !important;
font-weight: inherit !important;
line-height: inherit !important;
}
u + #body a, /* Gmail */
#MessageViewBody a /* Samsung Mail */
{
color: inherit;
text-decoration: none;
font-size: inherit;
font-family: inherit;
font-weight: inherit;
line-height: inherit;
}
/* What it does: Prevents Gmail from changing the text color in conversation threads. */
.im {
color: inherit !important;
}
/* What it does: Prevents Gmail from displaying an download button on large, non-linked images. */
.a6S {
display: none !important;
opacity: 0.01 !important;
}
/* If the above doesn't work, add a .g-img class to any image in question. */
img.g-img + div {
display:none !important;
}
/* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */
/* Create one of these media queries for each additional viewport size you'd like to fix */
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
@media only screen and (min-device-width: 320px) and (max-device-width: 374px) {
u ~ div .email-container {
min-width: 320px !important;
}
}
/* iPhone 6, 6S, 7, 8, and X */
@media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
u ~ div .email-container {
min-width: 375px !important;
}
}
/* iPhone 6+, 7+, and 8+ */
@media only screen and (min-device-width: 414px) {
u ~ div .email-container {
min-width: 414px !important;
}
}
</style>
<!-- What it does: Helps DPI scaling in Outlook 2007-2013 -->
<!--[if gte mso 9]>
<xml>
<o:OfficeDocumentSettings>
<o:AllowPNG/>
<o:PixelsPerInch>96</o:PixelsPerInch>
</o:OfficeDocumentSettings>
</xml>
<![endif]-->
<!-- CSS Reset : END -->
<!-- Progressive Enhancements : BEGIN -->
<style>
/* What it does: Hover styles for buttons and tags */
.s-btn__primary:hover {
background: #0077CC !important;
border-color: #0077CC !important;
}
.s-btn__white:hover {
background: #EFF0F1 !important;
border-color: #EFF0F1 !important;
}
.s-btn__outlined:hover {
background: rgba(0,119,204,.05) !important;
color: #005999 !important;
}
.s-tag:hover,
.post-tag:hover {
border-color: #cee0ed !important;
background: #cee0ed !important;
}
/* What it does: Styles markdown links that we can't write inline CSS for. */
.has-markdown a,
.has-markdown a:visited {
color: #0077CC !important;
text-decoration: none !important;
}
/* What it does: Styles markdown code blocks that we can't write inline CSS for. */
code {
padding: 1px 5px;
background-color: #EFF0F1;
color: #242729;
font-size: 13px;
line-height: inherit;
font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, sans-serif;
}
pre {
margin: 0 0 15px;
line-height: 17px;
background-color: #EFF0F1;
padding: 4px 8px;
border-radius: 3px;
overflow-x: auto;
}
pre code {
margin: 0 0 15px;
padding: 0;
line-height: 17px;
background-color: none;
}
/* What it does: Styles markdown blockquotes that we can't write inline CSS for. */
blockquote {
margin: 0 0 15px;
padding: 4px 10px;
background-color: #FFF8DC;
border-left: 2px solid #ffeb8e;
}
blockquote p {
padding: 4px 0;
margin: 0;
overflow-wrap: break-word;
}
/* What it does: Rounds corners in email clients that support it */
.bar {
border-radius: 5px;
}
.btr {
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
.bbr {
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
}
@media screen and (max-width: 680px) {
/* What it does: Forces table cells into full-width rows. */
.stack-column,
.stack-column-center {
display: block !important;
width: 100% !important;
max-width: 100% !important;
direction: ltr !important;
}
/* And center justify these ones. */
.stack-column-center {
text-align: center !important;
}
/* Hides things in small viewports. */
.hide-on-mobile {
display: none !important;
max-height: 0 !important;
overflow: hidden !important;
visibility: hidden !important;
}
/* What it does: Utility classes to reduce spacing for smaller viewports. */
.sm-p-none {padding: 0 !important;}
.sm-pt-none {padding-top: 0 !important;}
.sm-pb-none {padding-bottom: 0 !important;}
.sm-pr-none {padding-right: 0 !important;}
.sm-pl-none {padding-left: 0 !important;}
.sm-px-none {padding-left: 0 !important; padding-right: 0 !important;}
.sm-py-none {padding-top: 0 !important; padding-bottom: 0 !important;}
.sm-p {padding: 20px !important;}
.sm-pt {padding-top: 20px !important;}
.sm-pb {padding-bottom: 20px !important;}
.sm-pr {padding-right: 20px !important;}
.sm-pl {padding-left: 20px !important;}
.sm-px {padding-left: 20px !important; padding-right: 20px !important;}
.sm-py {padding-top: 20px !important; padding-bottom: 20px !important;}
.sm-mb {margin-bottom: 20px !important;}
/* What it does: Utility classes to kill border radius for smaller viewports. Used mainly on the email's main container(s). */
.bar,
.btr,
.bbr {
border-top-left-radius: 0;
border-top-right-radius: 0;
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
}
}
</style>
<!-- Progressive Enhancements : END -->
</head>
<!--
The email background color is defined in three places, just below. If you change one, remember to change the others.
1. body tag: for most email clients
2. center tag: for Gmail and Inbox mobile apps and web versions of Gmail, GSuite, Inbox, Yahoo, AOL, Libero, Comcast, freenet, Mail.ru, Orange.fr
3. mso conditional: For Windows 10 Mail
-->
<body width="100%" style="margin: 0; padding: 0 !important; background: #f3f3f5; mso-line-height-rule: exactly;">
<center style="width: 100%; background: #f3f3f5;">
<!--[if mso | IE]>
<table role="presentation" border="0" cellpadding="0" cellspacing="0" width="100%" style="background-color: #f3f3f5;">
<tr>
<td>
<![endif]-->
<!-- Visually Hidden Preview Text : BEGIN -->
<div style="display: none; font-size: 1px; line-height: 1px; max-height: 0px; max-width: 0px; opacity: 0; overflow: hidden; mso-hide: all; font-family: sans-serif;">
{{__ "your-event_name-profile"}}
</div>
<!-- Visually Hidden Preview Text : END -->
<div class="email-container" style="max-width: 680px; margin: 0 auto;">
<!--[if mso]>
<table role="presentation" cellspacing="0" cellpadding="0" border="0" width="680" align="center">
<tr>
<td>
<![endif]-->
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="max-width: 680px; width:100%">
<tr>
<td style="padding: 30px; background-color: #ffffff;" class="sm-p bar">
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%;">
<tr>
<td style="padding-bottom: 15px; font-family: arial, sans-serif; font-size: 15px; line-height: 21px; color: #3C3F44; text-align: left;">
<h1 style="font-weight: bold; font-size: 27px; line-height: 27px; color: #0C0D0E; margin: 0 0 15px 0;">{{event_name}}</h1>
</td>
</tr>
<tr>
<td style="padding-bottom: 15px; font-family: arial, sans-serif; font-size: 15px; line-height: 21px; color: #3C3F44; text-align: left;">
<h1 style="font-weight: bold; font-size: 21px; line-height: 21px; color: #0C0D0E; margin: 0 0 15px 0;">{{__ "your-profile"}}</h1>
<p style="margin: 0 0 15px;" class="has-markdown">
{{__ "thank-you-for-requesting-a-new-link-to-your-event_name-runner-profile"}}<br>
{{__ "you-can-view-your-registration-code-lap-times-and-much-more-by-visiting-our-selfservice"}}
</p>
</td>
</tr>
<!-- Button Row : BEGIN -->
<tr>
<td>
<!-- Button : BEGIN -->
<table align="left" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="s-btn s-btn__primary" style="border-radius: 4px; background: #0095ff;">
<a class="s-btn s-btn__primary" href="{{selfservice_link}}" target="_parent" style="background: #0095FF; border: 1px solid #0077cc; box-shadow: inset 0 1px 0 0 rgba(102,191,255,.75); font-family: arial, sans-serif; font-size: 17px; line-height: 17px; color: #ffffff; text-align: center; text-decoration: none; padding: 13px 17px; display: block; border-radius: 4px; white-space: nowrap;">{{__ "view-my-data"}}</a>
</td>
</tr>
</table>
<!-- Button : END -->
</td>
</tr>
<tr>
<td style="padding-bottom: 15px; font-family: arial, sans-serif; font-size: 15px; line-height: 21px; color: #3C3F44; text-align: left;">
<p>Link: <a href="{{selfservice_link}}">{{selfservice_link}}</a><br>
{{__ "if-you-ever-loose-the-link-you-can-request-a-new-one-by-visiting-our-website"}} <a href="{{forgot_link}}">{{forgot_link}}</a></p></td>
</tr>
<!-- Button Row : END -->
</table>
</td>
</tr>
<!-----------------------------
EMAIL BODY : END
------------------------------>
<!-- Footer : BEGIN -->
<tr>
<td style="padding: 30px;" class="sm-p">
<table align="left" border="0" cellpadding="0" cellspacing="0" role="presentation" width="100%">
<!-- Subscription Info : BEGIN -->
<tr>
<td style="padding-bottom: 10px; font-size: 12px; line-height: 15px; font-family: arial, sans-serif; color: #9199A1; text-align: left;">
Copyright © {{copyright_owner}}. {{__ "all-rights-reserved"}}
</td>
</tr>
<tr>
<td style="font-size: 12px; line-height: 15px; font-family: arial, sans-serif; color: #9199A1; text-align: left;">
<a href="{{link_imprint}}"
style="color: #9199A1; text-decoration: underline;">{{__ "imprint"}}</a>&nbsp;&nbsp;&nbsp;&nbsp;
<a href="{{link_privacy}}" style="color: #9199A1; text-decoration: underline;">{{__ "privacy"}}</a>
</td>
</tr>
<!-- Subscription Info : BEGIN -->
<!-- HR line : BEGIN -->
<tr>
<td style="padding: 30px 0;" width="100%" class="sm-py">
<table aria-hidden="true" border="0" cellpadding="0" cellspacing="0" role="presentation" style="width:100%">
<tr>
<td height="1" width="100%" style="font-size: 0; line-height: 0; border-top: 1px solid #D6D8DB;">&nbsp;</td>
</tr>
</table>
</td>
</tr>
<!-- HR line : END -->
<tr>
<td style="padding-bottom: 5px; font-size: 12px; line-height: 15px; font-family: arial, sans-serif; color: #9199A1; text-align: left;">
{{__ "this-mail-was-sent-to-you-because-someone-requested-a-new-link-to-access-your-profile-for-the-event_name"}}<br>
{{__ "to-prevent-spam-you-can-only-request-a-new-link-every-24hrs"}}<br>
{{__ "if-you-didnt-register-yourself-you-should-contact-us-to-get-your-data-removed-from-our-systems"}} <a href="mailto:{{contact_mail}}">{{contact_mail}}</a>
</td>
</tr>
<!-- Sender Info : END -->
</table>
</td>
</tr>
<!-- Footer : END -->
</table>
</div>
<!--[if mso | IE]>
</td>
</tr>
</table>
<![endif]-->
</center>
</body>
</html>

View File

@ -0,0 +1,15 @@
{{__ "your-event_name-profile"}}
{{__ "thank-you-for-requesting-a-new-link-to-your-event_name-runner-profile"}}
{{__ "you-can-view-your-registration-code-lap-times-and-much-more-by-visiting-our-selfservice"}}
{{selfservice_link}}
{{__ "if-you-ever-loose-the-link-you-can-request-a-new-one-by-visiting-our-website"}} {{forgot_link}}
Copyright © {{copyright_owner}}. {{__ "all-rights-reserved"}}.
{{__ "imprint"}}: {{link_imprint}} | {{__ "privacy"}}: {{link_privacy}}
{{__ "this-mail-was-sent-to-you-because-someone-requested-a-new-link-to-access-your-profile-for-the-event_name"}}
{{__ "to-prevent-spam-you-can-only-request-a-new-link-every-24hrs"}}
{{__ "if-you-didnt-register-yourself-you-should-contact-us-to-get-your-data-removed-from-our-systems"}} {{contact_mail}}

View File

@ -42,7 +42,8 @@ describe('POST /reset with auth and vaild body', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en"
locale: "en",
type: "PASSWORD_RESET"
})
});
it('Post with auth, body and locale=en should return 200', async () => {
@ -54,7 +55,8 @@ describe('POST /reset with auth and vaild body', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en"
locale: "en",
type: "PASSWORD_RESET"
})
});
it('Post with auth, body and locale=de should return 200', async () => {
@ -66,7 +68,8 @@ describe('POST /reset with auth and vaild body', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "de"
locale: "de",
type: "PASSWORD_RESET"
})
});
});

View File

@ -0,0 +1,75 @@
import axios from 'axios';
import { config } from '../config';
const base = "http://localhost:" + config.internal_port
const axios_config = {
validateStatus: undefined
};
describe('POST /registration_forgot without auth', () => {
it('Post without auth should return 401', async () => {
const res = await axios.post(base + '/registration_forgot', null, axios_config);
expect(res.status).toEqual(401);
});
});
describe('POST /registration_forgot with auth but wrong body', () => {
it('Post with auth but no body should return 400', async () => {
const res = await axios.post(base + '/registration_forgot?key=' + config.api_key, null, axios_config);
expect(res.status).toEqual(400);
});
it('Post with auth but no mail should return 400', async () => {
const res = await axios.post(base + '/registration_forgot?key=' + config.api_key, { selfserviceToken: "test" }, axios_config);
expect(res.status).toEqual(400);
});
it('Post with auth but no reset key should return 400', async () => {
const res = await axios.post(base + '/registration_forgot?key=' + config.api_key, { address: "test@dev.lauf-fuer-kaya.de" }, axios_config);
expect(res.status).toEqual(400);
});
it('Post with auth but invalid mail should return 400', async () => {
const res = await axios.post(base + '/registration_forgot?key=' + config.api_key, { selfserviceToken: "test", address: "testdev.l.de" }, axios_config);
expect(res.status).toEqual(400);
});
});
describe('POST /reset with auth and vaild body', () => {
it('Post with auth, body and no locale should return 200', async () => {
const res = await axios.post(base + '/registration_forgot?key=' + config.api_key, {
selfserviceToken: "test",
address: "test@dev.lauf-fuer-kaya.de"
}, axios_config);
expect(res.status).toEqual(200);
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en",
type: "RUNNER_FORGOT"
})
});
it('Post with auth, body and locale=en should return 200', async () => {
const res = await axios.post(base + '/registration_forgot?locale=en&key=' + config.api_key, {
selfserviceToken: "test",
address: "test@dev.lauf-fuer-kaya.de"
}, axios_config);
expect(res.status).toEqual(200);
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en",
type: "RUNNER_FORGOT"
})
});
it('Post with auth, body and locale=de should return 200', async () => {
const res = await axios.post(base + '/registration_forgot?locale=de&key=' + config.api_key, {
selfserviceToken: "test",
address: "test@dev.lauf-fuer-kaya.de"
}, axios_config);
expect(res.status).toEqual(200);
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "de",
type: "RUNNER_FORGOT"
})
});
});

View File

@ -42,7 +42,8 @@ describe('POST /reset with auth and vaild body', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en"
locale: "en",
type: "RUNNER_WELCOME"
})
});
it('Post with auth, body and locale=en should return 200', async () => {
@ -54,7 +55,8 @@ describe('POST /reset with auth and vaild body', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en"
locale: "en",
type: "RUNNER_WELCOME"
})
});
it('Post with auth, body and locale=de should return 200', async () => {
@ -66,7 +68,8 @@ describe('POST /reset with auth and vaild body', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "de"
locale: "de",
type: "RUNNER_WELCOME"
})
});
});

View File

@ -20,7 +20,8 @@ describe('POST /test with auth', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en"
locale: "en",
type: "TEST"
})
});
it('Post with auth and locale=en should return 200', async () => {
@ -29,7 +30,8 @@ describe('POST /test with auth', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "en"
locale: "en",
type: "TEST"
})
});
it('Post with auth and locale=de should return 200', async () => {
@ -38,7 +40,8 @@ describe('POST /test with auth', () => {
expect(res.data).toEqual({
success: true,
message: "Sent!",
locale: "de"
locale: "de",
type: "TEST"
})
});
});