63 Commits

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

View File

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

1
.gitignore vendored
View File

@@ -138,3 +138,4 @@ build
lib lib
/oss-attribution /oss-attribution
*.tmp *.tmp
pnpm-lock.yaml

1
.npmrc Normal file
View File

@@ -0,0 +1 @@
strict-peer-dependencies=false

View File

@@ -2,4 +2,165 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC. All notable changes to this project will be documented in this file. Dates are displayed in UTC.
#### 0.1.0 #### [v0.2.3](https://git.odit.services/lfk/mailer/compare/v0.2.2...v0.2.3)
- Fixed missing closing tag [`8e2bbb3`](https://git.odit.services/lfk/mailer/commit/8e2bbb324091c0ba28ccd24fc189b2e7ddab8ce3)
#### [v0.2.2](https://git.odit.services/lfk/mailer/compare/v0.2.1...v0.2.2)
> 3 February 2023
- update runner-welcome mail template [`#15`](https://git.odit.services/lfk/mailer/issues/15)
- 🚀Bumped version to v0.2.2 [`a616570`](https://git.odit.services/lfk/mailer/commit/a6165708a6a529bf219f28be74e2de71e64a2be5)
- Merge pull request 'cleaned up mail texts for lfk 2023' (#16) from feature/simpler-mail-texts into main [`e7ad878`](https://git.odit.services/lfk/mailer/commit/e7ad878fb93773d1dec35d3b8b9c4f7b4b773221)
- cleaned up mail texts for lfk 2023 [`1eb1a0a`](https://git.odit.services/lfk/mailer/commit/1eb1a0ad7e11b8f25b2b8d0efea991cab444c6ee)
#### [v0.2.1](https://git.odit.services/lfk/mailer/compare/v0.1.2...v0.2.1)
> 2 February 2023
- update runner-welcome mail template [`#15`](https://git.odit.services/lfk/mailer/issues/15)
- Moved Release management to releaseit [`68bd293`](https://git.odit.services/lfk/mailer/commit/68bd293acb474fe8f201423ffd442d0ee186a482)
- Fresh licenses 4 yall [`c48a2ed`](https://git.odit.services/lfk/mailer/commit/c48a2ed01e65dc20c562d80099ca7448a8725446)
- Version pinning [`22470d6`](https://git.odit.services/lfk/mailer/commit/22470d6160b450515966e7e38c37c45085f8ceb2)
- 🚀Bumped version to v0.2.1 [`da4f497`](https://git.odit.services/lfk/mailer/commit/da4f497e887e788adf6d39f71d61488157c8381a)
- Now building w/ kaniko [`f422f98`](https://git.odit.services/lfk/mailer/commit/f422f989c7d5c2fead70e37fc314b734034916f7)
- 📖New license file version [CI SKIP] [skip ci] [`247d4b6`](https://git.odit.services/lfk/mailer/commit/247d4b617678655845b5baf6ae5deba01e953a39)
- Bumped used ci node images [`0692b72`](https://git.odit.services/lfk/mailer/commit/0692b72955974c2fdee6441d4e7838d41dde8ed6)
- 🚀Bumped version to v0.2.0 [`84e3778`](https://git.odit.services/lfk/mailer/commit/84e3778b8962834b57ee92ba01a0b02505bbc7e7)
- Merge pull request 'feature/kaniko' (#18) from feature/kaniko into dev [`4ca5f9d`](https://git.odit.services/lfk/mailer/commit/4ca5f9d38dc3300d0bcbf8448283b53b484a827d)
- 🧾New changelog file version [CI SKIP] [skip ci] [`00bb40d`](https://git.odit.services/lfk/mailer/commit/00bb40ddf999245d9fa0b005f000e670f4daf60c)
- Bumped docker node [`af173dc`](https://git.odit.services/lfk/mailer/commit/af173dcec822f12d8233b717304ad82b7fac14db)
- 🧾New changelog file version [CI SKIP] [skip ci] [`e155454`](https://git.odit.services/lfk/mailer/commit/e155454013aa32e31db6afe5d6cb476c21d38aba)
- Shut up pnpm warnings [`acb013e`](https://git.odit.services/lfk/mailer/commit/acb013e8ae86f868aced40dbc2a68f8165627145)
- Merge pull request 'update runner-welcome mail template' (#17) from dev into main [`07306be`](https://git.odit.services/lfk/mailer/commit/07306be49722877dcce04660e452acedc6f77663)
- 🧾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 # Typescript Build
FROM registry.odit.services/mirror/node:14.15.1-alpine3.12 FROM registry.odit.services/hub/library/node:19.0.1-alpine3.16
WORKDIR /app WORKDIR /app
COPY package.json ./ COPY package.json ./
RUN npm i -g pnpm RUN npm i -g pnpm
@@ -8,7 +8,7 @@ COPY tsconfig.json ./
COPY src ./src COPY src ./src
RUN pnpm run build RUN pnpm run build
# final image # final image
FROM registry.odit.services/mirror/node:14.15.1-alpine3.12 FROM registry.odit.services/hub/library/node:19.0.1-alpine3.16
COPY package.json ./ COPY package.json ./
RUN npm i -g pnpm RUN npm i -g pnpm
RUN pnpm i --prod RUN pnpm i --prod

View File

@@ -515,6 +515,35 @@ OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
SOFTWARE SOFTWARE
# auto-changelog
**Author**: Pete Cook <pete@cookpete.com> (https://github.com/cookpete)
**Repo**: https://github.com/CookPete/auto-changelog.git
**License**: MIT
**Description**: Command line tool for generating a changelog from git tags and commit history
## License Text
The MIT License
Copyright (c) 2017 Pete Cook https://cookpete.com
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 # axios
**Author**: Matt Zabriskie **Author**: Matt Zabriskie
**Repo**: https://github.com/axios/axios.git **Repo**: https://github.com/axios/axios.git

View File

@@ -1,92 +1,99 @@
{ {
"name": "@odit/lfk-mailer", "name": "@odit/lfk-mailer",
"version": "0.1.0", "version": "0.2.3",
"description": "The document mailer for the LfK! runner system. This generates and sends mails (password reset, welcome, ...)", "description": "The document mailer for the LfK! runner system. This generates and sends mails (password reset, welcome, ...)",
"main": "src/app.ts", "main": "src/app.ts",
"scripts": { "scripts": {
"dev": "nodemon src/app.ts", "dev": "nodemon src/app.ts",
"build": "rimraf ./dist && tsc && cp-cli ./src/templates ./dist/templates && cp-cli ./src/locales ./dist/locales", "build": "rimraf ./dist && tsc && cp-cli ./src/templates ./dist/templates && cp-cli ./src/locales ./dist/locales",
"licenses:export": "license-exporter --markdown", "licenses:export": "license-exporter --markdown",
"release": "release-it --only-version", "changelog:export": "auto-changelog --commit-limit false -p -u --hide-credit",
"translations:sort": "node ./scripts/sort_translations.js", "release": "release-it --only-version",
"test": "jest", "translations:sort": "node ./scripts/sort_translations.js",
"test:watch": "jest --watchAll", "test": "jest",
"test:generate_env": "ts-node ./scripts/create_testenv.ts", "test:watch": "jest --watchAll",
"test:ci": "npm run test:generate_env && npm run test:ci:run", "test:generate_env": "ts-node ./scripts/create_testenv.ts",
"test:ci:run": "start-server-and-test dev http://localhost:4010/docs/openapi.json test" "test:ci": "npm run test:generate_env && npm run test:ci:run",
}, "test:ci:run": "start-server-and-test dev http://localhost:4010/docs/openapi.json test"
"repository": { },
"type": "git", "repository": {
"url": "git@git.odit.services:lfk/mailer.git" "type": "git",
}, "url": "git@git.odit.services:lfk/mailer.git"
"keywords": [ },
"odit", "keywords": [
"lfk", "odit",
"mail", "lfk",
"node" "mail",
], "node"
"author": { ],
"name": "ODIT.Services", "author": {
"email": "info@odit.services", "name": "ODIT.Services",
"url": "https://odit.services" "email": "info@odit.services",
}, "url": "https://odit.services"
"contributors": [ },
{ "contributors": [
"name": "Philipp Dormann", {
"email": "philipp@philippdormann.de", "name": "Philipp Dormann",
"url": "https://philippdormann.de" "email": "philipp@philippdormann.de",
}, "url": "https://philippdormann.de"
{ },
"name": "Nicolai Ort", {
"email": "info@nicolai-ort.com", "name": "Nicolai Ort",
"url": "https://nicolai-ort.com" "email": "info@nicolai-ort.com",
} "url": "https://nicolai-ort.com"
], }
"license": "CC-BY-NC-SA-4.0", ],
"dependencies": { "license": "CC-BY-NC-SA-4.0",
"@odit/class-validator-jsonschema": "^2.1.1", "dependencies": {
"class-transformer": "0.3.1", "@odit/class-validator-jsonschema": "2.1.1",
"class-validator": "^0.13.1", "class-transformer": "0.3.1",
"consola": "^2.15.3", "class-validator": "0.13.1",
"cors": "^2.8.5", "consola": "2.15.3",
"dotenv": "^8.2.0", "cors": "2.8.5",
"express": "^4.17.1", "dotenv": "8.2.0",
"handlebars": "^4.7.6", "express": "4.17.1",
"i18next": "^19.8.7", "handlebars": "4.7.6",
"i18next-fs-backend": "^1.0.8", "i18next": "19.8.7",
"nodemailer": "^6.5.0", "i18next-fs-backend": "1.0.8",
"reflect-metadata": "^0.1.13", "nodemailer": "6.5.0",
"routing-controllers": "0.9.0-alpha.6", "reflect-metadata": "0.1.13",
"routing-controllers-openapi": "2.2.0" "routing-controllers": "0.9.0-alpha.6",
}, "routing-controllers-openapi": "2.2.0"
"devDependencies": { },
"@odit/license-exporter": "^0.0.10", "devDependencies": {
"@types/express": "^4.17.11", "@odit/license-exporter": "0.0.10",
"@types/jest": "^26.0.20", "@types/express": "4.17.11",
"@types/node": "^14.14.22", "@types/jest": "26.0.20",
"@types/nodemailer": "^6.4.0", "@types/node": "14.14.22",
"axios": "^0.21.1", "@types/nodemailer": "6.4.0",
"cp-cli": "^2.0.0", "auto-changelog": "^2.4.0",
"jest": "^26.6.3", "axios": "0.21.1",
"nodemon": "^2.0.7", "cp-cli": "2.0.0",
"release-it": "^14.2.2", "jest": "26.6.3",
"rimraf": "^3.0.2", "nodemon": "2.0.7",
"start-server-and-test": "^1.12.0", "release-it": "14.2.2",
"ts-jest": "^26.5.2", "rimraf": "3.0.2",
"ts-node": "^9.1.1", "start-server-and-test": "1.12.0",
"typescript": "^4.1.3" "ts-jest": "26.5.2",
}, "ts-node": "9.1.1",
"release-it": { "typescript": "4.1.3"
"git": { },
"commit": true, "release-it": {
"requireCleanWorkingDir": false, "git": {
"commitMessage": "🚀Bumped version to v${version}", "commit": true,
"requireBranch": "dev", "requireCleanWorkingDir": false,
"push": false, "commitMessage": "🚀Bumped version to v${version}",
"tag": false "requireBranch": "dev",
}, "push": true,
"npm": { "tag": true,
"publish": false "tagName": "v${version}",
} "tagAnnotation": "v${version}"
} },
} "npm": {
"publish": false
},
"hooks": {
"after:bump": "npm run changelog:export && npm run licenses:export && git add CHANGELOG.md && git add licenses.md"
}
}
}

View File

@@ -121,11 +121,12 @@ export class Mailer {
/** /**
* Function for sending a reset mail from the reset mail template. * 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 to_address The address the mail will be sent to. Should always get pulled from a runner object.
* @param token The requested password reset token - will be combined with the app_url to generate a password reset link. * @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") { public async sendWelcomeMail(to_address: string, token: string, locale: string = "en") {
await i18next.changeLanguage(locale); await i18next.changeLanguage(locale);
token = Buffer.from(token).toString("base64");
const replacements = { const replacements = {
recipient_mail: to_address, recipient_mail: to_address,
@@ -133,7 +134,7 @@ export class Mailer {
link_imprint: `${config.app_url}/imprint`, link_imprint: `${config.app_url}/imprint`,
link_privacy: `${config.app_url}/privacy`, link_privacy: `${config.app_url}/privacy`,
selfservice_link: `${config.app_url}/selfservice/profile/${token}`, 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, contact_mail: config.contact_mail,
event_name: config.event_name event_name: config.event_name
} }
@@ -152,6 +153,40 @@ export class Mailer {
await this.sendMail(mail); 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. * Wrapper function for sending a mail via this object's transporter.
* @param mail MailOptions object containing the * @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 { OpenAPI } from 'routing-controllers-openapi';
import { Mailer } from '../Mailer'; import { Mailer } from '../Mailer';
import { locales } from '../models/LocaleEnum'; import { locales } from '../models/LocaleEnum';
import { MailTypes } from '../models/MailTypeEnum';
import { ResetMail } from '../models/ResetMail'; import { ResetMail } from '../models/ResetMail';
import { SuccessResponse } from '../models/SuccessResponse'; import { SuccessResponse } from '../models/SuccessResponse';
import { WelcomeMail } from '../models/WelcomeMail'; import { WelcomeMail } from '../models/WelcomeMail';
@@ -28,7 +29,7 @@ export class MailController {
} catch (error) { } catch (error) {
throw error; throw error;
} }
return new SuccessResponse(locale); return new SuccessResponse(MailTypes.PASSWORD_RESET, locale);
} }
@Post('/test') @Post('/test')
@@ -44,7 +45,7 @@ export class MailController {
console.log(error) console.log(error)
throw error; throw error;
} }
return new SuccessResponse(locale); return new SuccessResponse(MailTypes.TEST, locale);
} }
@Post('/registration') @Post('/registration')
@@ -60,6 +61,22 @@ export class MailController {
console.log(error) console.log(error)
throw 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.", "a-password-reset-for-your-account-got-requested": "Ein Passwort Reset wurde für dein Konto beantragt.",
"all-rights-reserved": "Alle Rechte vorbehalten", "all-rights-reserved": "Alle Rechte vorbehalten",
"event_name-registration": "{{event_name}} Registrierung", "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-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", "imprint": "Impressum",
"lfk-mail-test": "{{copyright_owner}} - Mail test", "lfk-mail-test": "{{copyright_owner}} - Mail test",
"lfk-password-reset": "{{copyright_owner}} - Passwort zurücksetzen", "lfk-password-reset": "{{copyright_owner}} - Passwort zurücksetzen",
@@ -12,15 +12,20 @@
"privacy": "Datenschutz", "privacy": "Datenschutz",
"reset-password": "Passwort zurücksetzen", "reset-password": "Passwort zurücksetzen",
"test-mail": "Test mail", "test-mail": "Test mail",
"thanks-for-registering-and-welcome-to-the-event_name": "Vielen Dank für die Registrierung und willkommen beim {{event_name}}!", "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.",
"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.", "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-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-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-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.", "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", "view-my-data": "Meine Daten",
"we-successfully-processed-your-registration": "Wir haben deine Registrierung erfolgreich verarbeitet.", "we-successfully-processed-your-registration": "Wir haben deine Registrierung erfolgreich verarbeitet.",
"welcome": "Willkommen", "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:", "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-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-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", "privacy": "Privacy",
"reset-password": "Reset password", "reset-password": "Reset password",
"test-mail": "Test mail", "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}}!", "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.", "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-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-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-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", "view-my-data": "View my data",
"we-successfully-processed-your-registration": "We successfully processed your registration.", "we-successfully-processed-your-registration": "We successfully processed your registration.",
"welcome": "Welcome", "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:", "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 { IsBoolean, IsString } from 'class-validator';
import { locales } from './LocaleEnum'; import { locales } from './LocaleEnum';
import { MailTypes } from './MailTypeEnum';
/** /**
* Simple success response class to make everyone happy :) * Simple success response class to make everyone happy :)
@@ -15,7 +16,11 @@ export class SuccessResponse {
@IsString() @IsString()
locale: locales; locale: locales;
constructor(locale?: locales) { @IsString()
type: MailTypes;
constructor(type: MailTypes, locale?: locales) {
this.type = type;
this.locale = locale || locales.en; 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({ expect(res.data).toEqual({
success: true, success: true,
message: "Sent!", message: "Sent!",
locale: "en" locale: "en",
type: "PASSWORD_RESET"
}) })
}); });
it('Post with auth, body and locale=en should return 200', async () => { 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({ expect(res.data).toEqual({
success: true, success: true,
message: "Sent!", message: "Sent!",
locale: "en" locale: "en",
type: "PASSWORD_RESET"
}) })
}); });
it('Post with auth, body and locale=de should return 200', async () => { 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({ expect(res.data).toEqual({
success: true, success: true,
message: "Sent!", 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({ expect(res.data).toEqual({
success: true, success: true,
message: "Sent!", message: "Sent!",
locale: "en" locale: "en",
type: "RUNNER_WELCOME"
}) })
}); });
it('Post with auth, body and locale=en should return 200', async () => { 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({ expect(res.data).toEqual({
success: true, success: true,
message: "Sent!", message: "Sent!",
locale: "en" locale: "en",
type: "RUNNER_WELCOME"
}) })
}); });
it('Post with auth, body and locale=de should return 200', async () => { 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({ expect(res.data).toEqual({
success: true, success: true,
message: "Sent!", message: "Sent!",
locale: "de" locale: "de",
type: "RUNNER_WELCOME"
}) })
}); });
}); });

View File

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