diff --git a/.drone.yml b/.drone.yml
index fb4006f..7efbdd9 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -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
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 431570f..af3e598 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,4 +2,117 @@
All notable changes to this project will be documented in this file. Dates are displayed in UTC.
-#### 0.1.0
+#### [v0.1.1](https://git.odit.services/lfk/mailer/compare/v0.1.0...v0.1.1)
+
+- Added mail templates for forgotten selfservice links [`56c3dec`](https://git.odit.services/lfk/mailer/commit/56c3deca574fc4501cc9b51128b4f3b0467d24c9)
+- 🧾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)
+- 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)
+- Changed ci pipeline type to kubernetes [`18c8600`](https://git.odit.services/lfk/mailer/commit/18c8600563c4369321a0e9ba51a09a2fa95198b5)
+- Added new mailtype enum [`015b25a`](https://git.odit.services/lfk/mailer/commit/015b25a2056fe3537fb8e88539c25c2c9e6ba618)
+- 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)
+- 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)
diff --git a/Dockerfile b/Dockerfile
index f50928c..41b7e99 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -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
diff --git a/licenses.md b/licenses.md
index 30fc94b..5ae5909 100644
--- a/licenses.md
+++ b/licenses.md
@@ -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
diff --git a/package.json b/package.json
index fa6592e..529c73d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@odit/lfk-mailer",
- "version": "0.1.0",
+ "version": "0.1.1",
"description": "The document mailer for the LfK! runner system. This generates and sends mails (password reset, welcome, ...)",
"main": "src/app.ts",
"scripts": {
diff --git a/src/Mailer.ts b/src/Mailer.ts
index d2752f8..c0cd66e 100644
--- a/src/Mailer.ts
+++ b/src/Mailer.ts
@@ -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,
@@ -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
diff --git a/src/controllers/MailController.ts b/src/controllers/MailController.ts
index 99be6c2..69e8d6c 100644
--- a/src/controllers/MailController.ts
+++ b/src/controllers/MailController.ts
@@ -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);
}
}
diff --git a/src/locales/en.json b/src/locales/en.json
index 627914c..c612a2b 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -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"
}
\ No newline at end of file
diff --git a/src/models/MailTypeEnum.ts b/src/models/MailTypeEnum.ts
new file mode 100644
index 0000000..338f52c
--- /dev/null
+++ b/src/models/MailTypeEnum.ts
@@ -0,0 +1,6 @@
+export enum MailTypes {
+ PASSWORD_RESET = "PASSWORD_RESET",
+ RUNNER_FORGOT = "RUNNER_FORGOT",
+ RUNNER_WELCOME = "RUNNER_WELCOME",
+ TEST = "TEST"
+}
\ No newline at end of file
diff --git a/src/models/SuccessResponse.ts b/src/models/SuccessResponse.ts
index d3104a8..48cc43e 100644
--- a/src/models/SuccessResponse.ts
+++ b/src/models/SuccessResponse.ts
@@ -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;
}
}
\ No newline at end of file
diff --git a/src/templates/runner_forgot.html b/src/templates/runner_forgot.html
new file mode 100644
index 0000000..056f5b3
--- /dev/null
+++ b/src/templates/runner_forgot.html
@@ -0,0 +1,396 @@
+
+
+
+
+ {{__ "your-event_name-profile"}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{__ "your-event_name-profile"}}
+
+
+
+
+
+
+
+
+
+
+
+ {{event_name}}
+ |
+
+
+
+ {{__ "your-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"}}
+
+ |
+
+
+
+
+
+
+
+ |
+
+
+
+ Link: {{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"}}
+ {{__ "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}}
+ |
+
+
+
+ |
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/templates/runner_forgot.txt b/src/templates/runner_forgot.txt
new file mode 100644
index 0000000..1597847
--- /dev/null
+++ b/src/templates/runner_forgot.txt
@@ -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}}
\ No newline at end of file
diff --git a/src/tests/pw_reset_mail.spec.ts b/src/tests/pw_reset_mail.spec.ts
index d43f3a3..aeb4692 100644
--- a/src/tests/pw_reset_mail.spec.ts
+++ b/src/tests/pw_reset_mail.spec.ts
@@ -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"
})
});
});
\ No newline at end of file
diff --git a/src/tests/selfservice_forgot_mail.spec.ts b/src/tests/selfservice_forgot_mail.spec.ts
new file mode 100644
index 0000000..fcf89a3
--- /dev/null
+++ b/src/tests/selfservice_forgot_mail.spec.ts
@@ -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"
+ })
+ });
+});
\ No newline at end of file
diff --git a/src/tests/selfservice_welcome_mail.spec.ts b/src/tests/selfservice_welcome_mail.spec.ts
index 709eec0..f9bb7ee 100644
--- a/src/tests/selfservice_welcome_mail.spec.ts
+++ b/src/tests/selfservice_welcome_mail.spec.ts
@@ -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"
})
});
});
\ No newline at end of file
diff --git a/src/tests/test_mail.spec.ts b/src/tests/test_mail.spec.ts
index ff3dac6..9d88dc6 100644
--- a/src/tests/test_mail.spec.ts
+++ b/src/tests/test_mail.spec.ts
@@ -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"
})
});
});
\ No newline at end of file