Compare commits

...

60 Commits

Author SHA1 Message Date
1a3c9edeb3 🚀Bumped version to v0.5.1
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-03 18:38:44 +02:00
fd6bd88d42 Merge pull request 'Env linking bugfix bugfix/31-env_linking' (#37) from bugfix/31-env_linking into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #37
2021-04-03 16:27:56 +00:00
544542ac1e Added building pipeline for current branch
All checks were successful
continuous-integration/drone/push Build is passing
ref #31
2021-04-03 15:26:07 +02:00
67c0dae537 Now manually linking env and main
ref #31
2021-04-03 15:24:52 +02:00
cd6a139daf Merge pull request 'feature/30-profile-forgot-link' (#35) from feature/30-profile-forgot-link into dev
Some checks failed
continuous-integration/drone/push Build is failing
Reviewed-on: #35
close #30
2021-04-02 19:00:50 +00:00
ec44a8b63e Merge branch 'dev' into feature/30-profile-forgot-link
# Conflicts:
#	src/locales/en.json
#	src/views/Home.vue
2021-04-01 19:58:37 +02:00
676f0e8339 🚀Bumped version to v0.5.0
All checks were successful
continuous-integration/drone/push Build is passing
2021-04-01 19:57:02 +02:00
27fd8f9a91 Revert "🚀Bumped version to v0.5.0"
This reverts commit b8c1b8c43b.
2021-04-01 19:56:52 +02:00
bc1c824d9f Merge branch 'dev' of git.odit.services:lfk/selfservice into dev 2021-04-01 19:56:30 +02:00
b8c1b8c43b 🚀Bumped version to v0.5.0 2021-04-01 19:56:09 +02:00
713db5e1e8 Removed useless code
ref #30
2021-04-01 19:55:23 +02:00
0795ea318d Fixed post url and body
ref #30
2021-04-01 19:55:01 +02:00
bd512e0651 Merge pull request 'Runner self deletion feature/21-user_deletion' (#36) from feature/21-user_deletion into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #36
2021-04-01 17:50:41 +00:00
cf0437c3a7 Sorted translations
ref #21
2021-04-01 19:42:51 +02:00
8a24505d64 Added translations
ref #21
2021-04-01 19:42:33 +02:00
175bb168ae Content i18n run 🌍
ref #21
2021-04-01 19:40:49 +02:00
9751c2e9fd Added error toast
ref #21
2021-04-01 19:37:21 +02:00
7440fc404e Updated toasts and removed useless code
ref #21
2021-04-01 19:36:40 +02:00
ba3dedb164 Added translations 🌍
ref #21
2021-04-01 19:35:54 +02:00
d710d4b68f Updated icons
ref #21
2021-04-01 19:35:42 +02:00
125fcdd8cf Merge branch 'feature/21-user_deletion' of git.odit.services:lfk/selfservice into feature/21-user_deletion 2021-04-01 19:31:29 +02:00
8773239244 Added confirmation for profile deletion
ref #21
2021-04-01 19:31:25 +02:00
85b0549a11 Added confirmation for profile deletion 2021-04-01 19:31:19 +02:00
fc04e71311 Implemented basic deletion
ref #21
2021-04-01 19:27:12 +02:00
619078cce8 Added data deletion button
ref #21
2021-04-01 19:25:09 +02:00
30f3a51ef8 add forgot view + action
ref #30
2021-04-01 19:22:23 +02:00
60dea511b9 🐞 fix home routes
ref #30
2021-04-01 19:07:14 +02:00
863568d7d0 basic ProfileNone layout
ref #30
2021-04-01 19:07:04 +02:00
555823954a Merge branch 'main' into dev
Some checks reported errors
continuous-integration/drone/push Build was killed
2021-04-01 16:45:25 +00:00
efcb7f5674 🚀Bumped version to v0.4.5
Some checks reported errors
continuous-integration/drone/push Build was killed
2021-04-01 18:40:10 +02:00
e796f6dcaf Merge pull request 'feature/32-registration-language' (#33) from feature/32-registration-language into dev
Some checks reported errors
continuous-integration/drone/push Build was killed
Reviewed-on: #33
close #32
2021-04-01 16:38:49 +00:00
52a082841d 🐞 fix /profile/ router on register
ref #32
2021-04-01 18:31:37 +02:00
e3f7497af5 pass browser locale to api/runners/register/
ref #32
2021-04-01 18:31:18 +02:00
9b62962758 🚀Bumped version to v0.4.4
Some checks reported errors
continuous-integration/drone/push Build was killed
2021-03-31 20:16:18 +02:00
84dc33bf14 🚑 hotfix - baseurl_selfservice -> baseurl 2021-03-31 20:14:58 +02:00
cad34d357b 🚀Bumped version to v0.4.3
Some checks reported errors
continuous-integration/drone/push Build was killed
2021-03-31 20:13:03 +02:00
2056ce1e62 🚑 hotfix - Profile api path 2021-03-31 20:11:40 +02:00
3b2c99c709 🚀Bumped version to v0.4.2
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-31 20:06:42 +02:00
f150821f0f 🚑 fix organization registration token 2021-03-31 20:06:20 +02:00
5191ecea1e 🚀Bumped version to v0.4.1
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-31 19:34:36 +02:00
2141f62dca Fixed registration routing 2021-03-31 19:34:13 +02:00
149fbdf581 🚀Bumped version to v0.4.0
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-31 19:07:43 +02:00
7e0108c739 Merge pull request 'bugfix/27-route-matching' (#28) from bugfix/27-route-matching into dev
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #28
close #27
2021-03-31 17:07:18 +00:00
ba604f77e9 added env config instructions
ref #27
2021-03-31 19:03:07 +02:00
c178932d94 Home - route fixes
ref #27
2021-03-31 18:56:34 +02:00
63d9ee2f86 favicon fix
ref #27
2021-03-31 18:55:30 +02:00
106bf4c0ff route fix for favicon + background
ref #27
2021-03-31 18:55:00 +02:00
2e7a718daa load main.js as deferred
ref #27
2021-03-31 18:45:23 +02:00
f603e53151 added missing routes
ref #27
2021-03-31 18:45:04 +02:00
6e0bf56289 🚀Bumped version to v0.3.1
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-31 17:14:20 +02:00
27b81d87ae 🐞 fixed Vite/ Tailwind build 2021-03-31 17:13:57 +02:00
1c19657935 Merge pull request 'RELEASE 0.3.0' (#25) from dev into main
All checks were successful
continuous-integration/drone/push Build is passing
Reviewed-on: #25
2021-03-30 16:20:04 +00:00
cb5f48d913 🚀Bumped version to v0.3.0
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-30 18:17:31 +02:00
ae44d7e2e8 🐞 fix release config 2021-03-30 18:17:09 +02:00
69bfe9e585 Merge branch 'bugfix/23-broken-build' into dev
All checks were successful
continuous-integration/drone/push Build is passing
close #23
2021-03-30 18:12:04 +02:00
83924a9416 🚀Bumped version to v0.2.0
All checks were successful
continuous-integration/drone/push Build is passing
2021-03-27 19:44:28 +01:00
bd29d99120 Added image to docker-compose
All checks were successful
continuous-integration/drone/push Build is passing
ref #17
2021-03-27 19:38:36 +01:00
323ddc1c3d Now building latest from main [ci-skip]
All checks were successful
continuous-integration/drone/push Build is passing
ref #17
2021-03-27 19:34:03 +01:00
a174df19dd Added ci to build dev and tags
All checks were successful
continuous-integration/drone/push Build is passing
ref #17
2021-03-27 19:32:32 +01:00
eec6a358d8 Added releaseit config
ref #17
2021-03-27 19:29:47 +01:00
19 changed files with 666 additions and 170 deletions

134
.drone.yml Normal file
View File

@@ -0,0 +1,134 @@
---
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: build:dev
steps:
# - name: run full license export
# depends_on: ["clone"]
# image: node:alpine
# 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]
# author_email: bot@odit.services
# remote: git@git.odit.services:lfk/selfservice.git
# ssh_key:
# from_secret: git_ssh
- 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/selfservice
tags:
- dev
registry: registry.odit.services
mtu: 1000
trigger:
branch:
- dev
event:
- push
---
kind: pipeline
type: kubernetes
name: build:testing
steps:
- name: build testing
image: plugins/docker
depends_on: [clone]
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: registry.odit.services/lfk/selfservice
tags:
- testing
registry: registry.odit.services
mtu: 1000
trigger:
branch:
- bugfix/31-env_linking
event:
- push
---
kind: pipeline
type: kubernetes
name: build:latest
steps:
- name: build latest
image: plugins/docker
depends_on: [clone]
settings:
username:
from_secret: docker_username
password:
from_secret: docker_password
repo: registry.odit.services/lfk/selfservice
tags:
- latest
registry: registry.odit.services
mtu: 1000
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/selfservice
tags:
- '${DRONE_TAG}'
registry: registry.odit.services
mtu: 1000
trigger:
event:
- tag

View File

@@ -2,11 +2,125 @@
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.5.1](https://git.odit.services/lfk/selfservice/compare/0.5.0...0.5.1)
- Merge pull request 'feature/30-profile-forgot-link' (#35) from feature/30-profile-forgot-link into dev [`#30`](https://git.odit.services/lfk/selfservice/issues/30)
- Merge pull request 'Env linking bugfix bugfix/31-env_linking' (#37) from bugfix/31-env_linking into dev [`fd6bd88`](https://git.odit.services/lfk/selfservice/commit/fd6bd88d4238cca2a2755ab1bc51ff7870bef947)
- basic ProfileNone layout [`863568d`](https://git.odit.services/lfk/selfservice/commit/863568d7d0e132dd1b7d13a2cb1afe8db02c472c)
- add forgot view + action [`30f3a51`](https://git.odit.services/lfk/selfservice/commit/30f3a51ef82ad966225abc6fd95508af56106924)
- Added building pipeline for current branch [`544542a`](https://git.odit.services/lfk/selfservice/commit/544542ac1e9717506676c1495c2d530eca833d31)
- Removed useless code [`713db5e`](https://git.odit.services/lfk/selfservice/commit/713db5e1e8fed5f38b3a5d19cfe870eff16eeda1)
- Now manually linking env and main [`67c0dae`](https://git.odit.services/lfk/selfservice/commit/67c0dae537df5842e89c0ed040c0fef02df01b69)
- Fixed post url and body [`0795ea3`](https://git.odit.services/lfk/selfservice/commit/0795ea318d80b764eee89462ad87da86aa7ce0ae)
- 🐞 fix home routes [`60dea51`](https://git.odit.services/lfk/selfservice/commit/60dea511b9fbb6d206ee531618e788e686fa6b5a)
#### [0.5.0](https://git.odit.services/lfk/selfservice/compare/0.4.5...0.5.0)
> 1 April 2021
- 🚀Bumped version to v0.5.0 [`676f0e8`](https://git.odit.services/lfk/selfservice/commit/676f0e83393be823ccb612846650a9a98bf7f0b3)
- Revert "🚀Bumped version to v0.5.0" [`27fd8f9`](https://git.odit.services/lfk/selfservice/commit/27fd8f9a9106294ae6522f2fff42dfbf84f06f82)
- 🚀Bumped version to v0.5.0 [`b8c1b8c`](https://git.odit.services/lfk/selfservice/commit/b8c1b8c43b6d050d239d836bbb6ace2504fdcd21)
- Merge pull request 'Runner self deletion feature/21-user_deletion' (#36) from feature/21-user_deletion into dev [`bd512e0`](https://git.odit.services/lfk/selfservice/commit/bd512e0651363f1f2543136d354d9ada9990d83d)
- Sorted translations [`cf0437c`](https://git.odit.services/lfk/selfservice/commit/cf0437c3a738d42154ed1336d6020b88661b462f)
- Added translations 🌍 [`ba3dedb`](https://git.odit.services/lfk/selfservice/commit/ba3dedb1643e2d5f1c2ab92224a11c1c8a82ae71)
- Added confirmation for profile deletion [`8773239`](https://git.odit.services/lfk/selfservice/commit/8773239244c064a888a4ad1f66298f2811fcc2ae)
- Added confirmation for profile deletion [`85b0549`](https://git.odit.services/lfk/selfservice/commit/85b0549a11927758c579cd08bc8015ae00105a84)
- Updated icons [`d710d4b`](https://git.odit.services/lfk/selfservice/commit/d710d4b68ff0e9515eb4a0a4ea0def7b3552e599)
- Added data deletion button [`619078c`](https://git.odit.services/lfk/selfservice/commit/619078cce8281bef520b05bf3e735c26d0752375)
- Content i18n run 🌍 [`175bb16`](https://git.odit.services/lfk/selfservice/commit/175bb168ae134009c26072b76cd74948aecc189f)
- Implemented basic deletion [`fc04e71`](https://git.odit.services/lfk/selfservice/commit/fc04e713110df161c481cb9a3b64e78b30d4f79b)
- Added translations [`8a24505`](https://git.odit.services/lfk/selfservice/commit/8a24505d64832001d6a44800f61f7e0705892046)
- Updated toasts and removed useless code [`7440fc4`](https://git.odit.services/lfk/selfservice/commit/7440fc404ea2a8e68e7ce896e8369700069b2021)
- Added error toast [`9751c2e`](https://git.odit.services/lfk/selfservice/commit/9751c2e9fd99650efab4d5edce3909c907ea9391)
- Merge pull request 'RELEASE 0.3.0' (#25) from dev into main [`1c19657`](https://git.odit.services/lfk/selfservice/commit/1c196579356a70f9d761f7f69d79033157570076)
#### [0.4.5](https://git.odit.services/lfk/selfservice/compare/0.4.4...0.4.5)
> 1 April 2021
- Merge pull request 'feature/32-registration-language' (#33) from feature/32-registration-language into dev [`#32`](https://git.odit.services/lfk/selfservice/issues/32)
- 🚀Bumped version to v0.4.5 [`efcb7f5`](https://git.odit.services/lfk/selfservice/commit/efcb7f56745aa3f347eb98399ee1bcb68a157e9d)
- 🐞 fix /profile/ router on register [`52a0828`](https://git.odit.services/lfk/selfservice/commit/52a082841d47d1ed9c0997776a0784285a3f6ba7)
- pass browser locale to api/runners/register/ [`e3f7497`](https://git.odit.services/lfk/selfservice/commit/e3f7497af5860b2472b6cdfd33090b9d68b9fb49)
#### [0.4.4](https://git.odit.services/lfk/selfservice/compare/0.4.3...0.4.4)
> 31 March 2021
- 🚀Bumped version to v0.4.4 [`9b62962`](https://git.odit.services/lfk/selfservice/commit/9b62962758f8a73d669bca69b77f2c09a13c9e7a)
- 🚑 hotfix - baseurl_selfservice -> baseurl [`84dc33b`](https://git.odit.services/lfk/selfservice/commit/84dc33bf14ace839261aea02ffbcac5d627f8200)
#### [0.4.3](https://git.odit.services/lfk/selfservice/compare/0.4.2...0.4.3)
> 31 March 2021
- 🚀Bumped version to v0.4.3 [`cad34d3`](https://git.odit.services/lfk/selfservice/commit/cad34d357b9bd8501eed26b35b5324d2b4f756c3)
- 🚑 hotfix - Profile api path [`2056ce1`](https://git.odit.services/lfk/selfservice/commit/2056ce1e62a33e14bce5bdef5ea8cd38e039dc62)
#### [0.4.2](https://git.odit.services/lfk/selfservice/compare/0.4.1...0.4.2)
> 31 March 2021
- 🚀Bumped version to v0.4.2 [`3b2c99c`](https://git.odit.services/lfk/selfservice/commit/3b2c99c7090de03aab12415342136460ddd735ee)
- 🚑 fix organization registration token [`f150821`](https://git.odit.services/lfk/selfservice/commit/f150821f0f60e4798b02ebf50588da61ccb51279)
#### [0.4.1](https://git.odit.services/lfk/selfservice/compare/0.4.0...0.4.1)
> 31 March 2021
- Fixed registration routing [`2141f62`](https://git.odit.services/lfk/selfservice/commit/2141f62dca7ecb2be2579a7e79ffca513563c22a)
- 🚀Bumped version to v0.4.1 [`5191ece`](https://git.odit.services/lfk/selfservice/commit/5191ecea1eb3ac66a3f0c2743d43ff5b505061b7)
#### [0.4.0](https://git.odit.services/lfk/selfservice/compare/0.3.1...0.4.0)
> 31 March 2021
- Merge pull request 'bugfix/27-route-matching' (#28) from bugfix/27-route-matching into dev [`#27`](https://git.odit.services/lfk/selfservice/issues/27)
- added missing routes [`f603e53`](https://git.odit.services/lfk/selfservice/commit/f603e531512a2245ea2fe41304eb039080bcba28)
- added env config instructions [`ba604f7`](https://git.odit.services/lfk/selfservice/commit/ba604f77e9ce770e60f032cf393a5987a0401fbe)
- 🚀Bumped version to v0.4.0 [`149fbdf`](https://git.odit.services/lfk/selfservice/commit/149fbdf58180d1af33f9741d9076df0bb1591130)
- Home - route fixes [`c178932`](https://git.odit.services/lfk/selfservice/commit/c178932d943e08168fa6be39eb0a1d7e4a25824a)
- route fix for favicon + background [`106bf4c`](https://git.odit.services/lfk/selfservice/commit/106bf4c0ff07fe847f98aa250230f2a272f55a04)
- favicon fix [`63d9ee2`](https://git.odit.services/lfk/selfservice/commit/63d9ee2f867e42ecd23ca1d48d59b6deb7458d76)
- load main.js as deferred [`2e7a718`](https://git.odit.services/lfk/selfservice/commit/2e7a718daa7ca607622e3e339bdb85f5c64cfcf0)
#### [0.3.1](https://git.odit.services/lfk/selfservice/compare/0.3.0...0.3.1)
> 31 March 2021
- 🐞 fixed Vite/ Tailwind build [`27b81d8`](https://git.odit.services/lfk/selfservice/commit/27b81d87aeb907f6c3d35ea6f55b4fe56c1e79b4)
- 🚀Bumped version to v0.3.1 [`6e0bf56`](https://git.odit.services/lfk/selfservice/commit/6e0bf56289852cda0c30325f4b8ca7826386abf4)
#### [0.3.0](https://git.odit.services/lfk/selfservice/compare/0.2.0...0.3.0)
> 30 March 2021
- Merge branch 'bugfix/23-broken-build' into dev [`#23`](https://git.odit.services/lfk/selfservice/issues/23)
- migrate to Tailwind JIT + views + router/ build fix [`15b60f6`](https://git.odit.services/lfk/selfservice/commit/15b60f60b5d4f3c4035460f25807c5f5f2f19578)
- 🚀Bumped version to v0.3.0 [`cb5f48d`](https://git.odit.services/lfk/selfservice/commit/cb5f48d913b8aff2b138c93c4e29a2b8a553529d)
- 🐞 fix release config [`ae44d7e`](https://git.odit.services/lfk/selfservice/commit/ae44d7e2e86b9bee74d453301846d02b29c632f2)
- 🚀Bumped version to v0.1.2 [`5253fb1`](https://git.odit.services/lfk/selfservice/commit/5253fb18325ce9069e84180b30110ae97752ef20)
#### [0.2.0](https://git.odit.services/lfk/selfservice/compare/0.1.1...0.2.0)
> 27 March 2021
- 🚀Bumped version to v0.2.0 [`83924a9`](https://git.odit.services/lfk/selfservice/commit/83924a9416dc966a417b32fa19b5fb725181e5ee)
- Added ci to build dev and tags [`a174df1`](https://git.odit.services/lfk/selfservice/commit/a174df19ddbf65b0229af38947a9416b1bcd0703)
- Now building latest from main [ci-skip] [`323ddc1`](https://git.odit.services/lfk/selfservice/commit/323ddc1c3d91ffa74200ed9250b891d2fe4da78d)
- Added releaseit config [`eec6a35`](https://git.odit.services/lfk/selfservice/commit/eec6a358d899a40eb6bac92bb3af37b2d37a5d91)
- package dependency cleanup [`00f8d80`](https://git.odit.services/lfk/selfservice/commit/00f8d8023e3ca47eb650c8b1c5c550112ed0d503)
- Added image to docker-compose [`bd29d99`](https://git.odit.services/lfk/selfservice/commit/bd29d9912023539b26cdac36997d7cb29ec0d538)
#### [0.1.1](https://git.odit.services/lfk/selfservice/compare/0.1.0...0.1.1) #### [0.1.1](https://git.odit.services/lfk/selfservice/compare/0.1.0...0.1.1)
> 26 March 2021
- org registration - add team select [`#18`](https://git.odit.services/lfk/selfservice/issues/18) - org registration - add team select [`#18`](https://git.odit.services/lfk/selfservice/issues/18)
- added baseurl_selfservice config [`#22`](https://git.odit.services/lfk/selfservice/issues/22) - added baseurl_selfservice config [`#22`](https://git.odit.services/lfk/selfservice/issues/22)
- [tmp] vue i18n error [`7b0bc22`](https://git.odit.services/lfk/selfservice/commit/7b0bc22a7157ee4551ab69dd5be856abed90b60c) - [tmp] vue i18n error [`7b0bc22`](https://git.odit.services/lfk/selfservice/commit/7b0bc22a7157ee4551ab69dd5be856abed90b60c)
- ⏫ v0.1.1 changelog [`e2be86c`](https://git.odit.services/lfk/selfservice/commit/e2be86c5589f9ca9053d5bcdc61be3a642b94791)
- ⏫ version bump to 0.1.1 [`4d57812`](https://git.odit.services/lfk/selfservice/commit/4d57812c043e9078656818a33d241df220127a92) - ⏫ version bump to 0.1.1 [`4d57812`](https://git.odit.services/lfk/selfservice/commit/4d57812c043e9078656818a33d241df220127a92)
- Merge tag '0.1.0' into dev [`88996f8`](https://git.odit.services/lfk/selfservice/commit/88996f81d8990969048f00a7c175d2a30da2588b) - Merge tag '0.1.0' into dev [`88996f8`](https://git.odit.services/lfk/selfservice/commit/88996f81d8990969048f00a7c175d2a30da2588b)

View File

@@ -4,7 +4,7 @@ runner selfservice portal
## ⚡ Development ## ⚡ Development
### Requirements ### Requirements
- Node.js v14.15.0 or newer - Node.js v14.16.0 or newer
- yarn package manager >= v1.22.10 < 2 - yarn package manager >= v1.22.10 < 2
### Recommended Extensions ### Recommended Extensions
@@ -14,9 +14,17 @@ runner selfservice portal
### Fastest Dev Environment ### Fastest Dev Environment
- You can install the [Remote - Containers](https://github.com/Microsoft/vscode-remote-release) extension and use all recommended extensions and editor settings via the provided `./devcontainer/` config - You can install the [Remote - Containers](https://github.com/Microsoft/vscode-remote-release) extension and use all recommended extensions and editor settings via the provided `./devcontainer/` config
## 🔨 environment config ### Manual Dev Environment
```
yarn && yarn dev --open
```
## 🔨 Environment config
- copy the `/public/env.sample.js` file to `/public/env.js` - copy the `/public/env.sample.js` file to `/public/env.js`
- set the required environment variables - set the required environment variables
- `documentserver_key`: url to the [document server](https://git.odit.services/lfk/document-server) instance - `documentserver_key`: url to the [document server](https://git.odit.services/lfk/document-server) instance
- `baseurl`: url to the main instance - `baseurl`: url to the main lfk instance - WITH TRAILING SLASH
- see [@lfk/deployment](https://git.odit.services/lfk/deployment) for a complete deployment guide - see [@lfk/deployment](https://git.odit.services/lfk/deployment) for a complete deployment guide
- `baseurl_selfservice`: location of the selfservice instance - WITH TRAILING SLASH
- e.g. path: `/selfservice/`
- e.g. url: `https://example.com/selfservice/`

View File

@@ -2,5 +2,8 @@ version: "3"
services: services:
httpd: httpd:
build: . build: .
#image: registry.odit.services/lfk/selfservice:dev
volumes:
- ./public/env.sample.js:/usr/share/nginx/html/env.js
ports: ports:
- 4050:80 - 4050:80

View File

@@ -1,17 +1,17 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="de"> <html lang="de">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="icon" href="/favicon.ico" /> <link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Lauf für Kaya! - Selfservice</title> <title>Lauf für Kaya! - Selfservice</title>
</head> </head>
<body class="dark:bg-gray-900 text-black dark:text-white p-0"> <body class="dark:bg-gray-900 text-black dark:text-white p-0">
<div id="app"></div> <div id="app"></div>
<script src="/env.js"></script> <script src="./env.js"></script>
<script type="module" src="/src/main.js"></script> <script defer type="module" src="./src/main.js"></script>
</body> </body>
</html> </html>

View File

@@ -7,9 +7,16 @@ http {
error_page 404 /index.html; error_page 404 /index.html;
root /usr/share/nginx/html; root /usr/share/nginx/html;
location / { location / {
rewrite /register/(.*) /$1 break;
rewrite /profile/(.*) /$1 break;
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html;
} }
location ~* \.(?:ico|css|gif|jpe?g|png)$ { location ~* \.(?:ico|css|gif|jpe?g|png)$ {
rewrite /register/(.*) /$1 break;
rewrite /profile/(.*) /$1 break;
expires 1y; expires 1y;
add_header Pragma public; add_header Pragma public;
add_header Cache-Control "public"; add_header Cache-Control "public";

View File

@@ -1,45 +1,50 @@
{ {
"name": "@odit/lfk-selfservice", "name": "@odit/lfk-selfservice",
"version": "0.1.2", "version": "0.5.1",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
"build": "vite build", "build": "vite build",
"release": "release-it --only-version" "release": "release-it --only-version"
}, },
"dependencies": { "dependencies": {
"marked": "2.0.1", "marked": "2.0.1",
"redaxios": "0.4.1", "redaxios": "0.4.1",
"toastify-js": "1.10.0", "toastify-js": "1.10.0",
"validator": "13.5.2", "validator": "13.5.2",
"vue-i18n": "9.0.0", "vue-i18n": "9.0.0",
"vue-toastification": "2.0.0-rc.1", "vue-toastification": "2.0.0-rc.1",
"vue": "3.0.9", "vue": "3.0.9",
"vue-router": "4.0.5" "vue-router": "4.0.5"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/jit": "0.1.17", "@tailwindcss/jit": "0.1.18",
"@tailwindcss/aspect-ratio": "0.2.0", "@tailwindcss/aspect-ratio": "0.2.0",
"@tailwindcss/forms": "0.3.2", "@tailwindcss/forms": "0.3.2",
"@tailwindcss/line-clamp": "0.2.0", "@tailwindcss/line-clamp": "0.2.0",
"@tailwindcss/typography": "0.4.0", "@tailwindcss/typography": "0.4.0",
"@vitejs/plugin-vue": "1.2.0", "@vitejs/plugin-vue": "1.2.1",
"@vue/compiler-sfc": "3.0.9", "@vue/compiler-sfc": "3.0.10",
"autoprefixer": "10.2.5", "autoprefixer": "10.2.5",
"tailwindcss": "2.0.4", "tailwindcss": "2.0.4",
"release-it": "14.5.0", "release-it": "14.5.0",
"vite": "2.1.3" "vite": "2.1.5"
}, },
"release-it": { "release-it": {
"git": { "git": {
"commit": true, "commit": true,
"requireCleanWorkingDir": false, "requireCleanWorkingDir": false,
"commitMessage": "🚀Bumped version to v${version}", "commitMessage": "🚀Bumped version to v${version}",
"requireBranch": "dev", "requireBranch": "dev",
"push": false, "push": false,
"tag": false "tag": true,
}, "tagName": null,
"npm": { "tagAnnotation": "v${version}"
"publish": false },
} "npm": {
} "publish": false
} },
"hooks": {
"after:bump": "npx auto-changelog --commit-limit false -p -u --hide-credit && git add CHANGELOG.md && node order_i18n.js && git add src/locales"
}
}
}

View File

@@ -1,6 +1,6 @@
module.exports = { module.exports = {
plugins: { plugins: {
tailwindcss: {}, '@tailwindcss/jit': {},
autoprefixer: {}, autoprefixer: {},
}, },
} }

View File

@@ -1,10 +1,10 @@
const config = { const config = {
// required // required
documentserver_key: '', documentserver_key: '',
// required // required, with trailing slash
baseurl: '', baseurl: '',
// optional, will fallback to /selfservice // optional, will fallback to /selfservice/
baseurl_selfservice: '/selfservice', baseurl_selfservice: '/selfservice/',
// optional, will fallback to /imprint // optional, will fallback to /imprint
url_imprint: '', url_imprint: '',
// optional, will fallback to /privacy // optional, will fallback to /privacy

View File

@@ -2,8 +2,4 @@
<main> <main>
<router-view></router-view> <router-view></router-view>
</main> </main>
</template> </template>
<script setup>
config.baseurl_selfservice = (config.baseurl_selfservice || "/selfservice");
</script>

View File

@@ -1,8 +1,14 @@
{ {
"access_is_only_provided_via_your_email_link": "Der Zugang erfolgt nur über den Link, den Sie bei der Registrierung erhalten haben.",
"already_have_an_account": "Sie haben bereits einen Account?", "already_have_an_account": "Sie haben bereits einen Account?",
"apartment_suite_etc": "Addresszeile 2", "apartment_suite_etc": "Addresszeile 2",
"cancel_keep_my_data": "Abbrechen, meine Daten behalten",
"configuration_error": "Konfigurationsfehler", "configuration_error": "Konfigurationsfehler",
"confirm_delete_all_of_my_data": "Bestätigung, meine gesamten Daten löschen",
"confirm_personal_data": "Hiermit bestätige ich die Vollständigkeit und Richtigkeit der oben genannten Angaben", "confirm_personal_data": "Hiermit bestätige ich die Vollständigkeit und Richtigkeit der oben genannten Angaben",
"delete-all-of-my-data": "Meine gesamten Daten löschen",
"delete_my_data": "Meine Daten löschen",
"deletion_in_progress": "Daten werden gelöscht...",
"distance": "Distanz", "distance": "Distanz",
"download_certificate": "Urkunde herunterladen", "download_certificate": "Urkunde herunterladen",
"e_mail_adress": "E-Mail Adresse", "e_mail_adress": "E-Mail Adresse",
@@ -13,10 +19,13 @@
"imprint": "Impressum", "imprint": "Impressum",
"lap_time": "Rundenzeit", "lap_time": "Rundenzeit",
"lap_times": "Rundenzeiten", "lap_times": "Rundenzeiten",
"lost_your_registration_mail": "Haben Sie Ihre Registrierungsmail verloren?",
"main_page_text": "Hier können Sie sich für den Lauf Für Kaya! registrieren oder ihr Läuferprofil verwalten.", "main_page_text": "Hier können Sie sich für den Lauf Für Kaya! registrieren oder ihr Läuferprofil verwalten.",
"mittelname": "Mittelname", "mittelname": "Mittelname",
"nachname": "Nachname", "nachname": "Nachname",
"no_laps_scans_were_recorded_yet": "Es wurden noch keine Runden / Scans aufgezeichnet ...", "no_laps_scans_were_recorded_yet": "Es wurden noch keine Runden / Scans aufgezeichnet ...",
"not_registered_yet": "Noch nicht registriert?",
"organization": "Organisation",
"ort": "Ort", "ort": "Ort",
"phone_number": "Telefonnummer", "phone_number": "Telefonnummer",
"please_provide_a_valid_zipcode": "Bitte geben Sie eine gültige Postleitzahl an...", "please_provide_a_valid_zipcode": "Bitte geben Sie eine gültige Postleitzahl an...",
@@ -29,7 +38,9 @@
"register_now": "Jetzt für den Lauf für Kaya! 2021 registrieren." "register_now": "Jetzt für den Lauf für Kaya! 2021 registrieren."
}, },
"register_now": "Jetzt registrieren!", "register_now": "Jetzt registrieren!",
"register_now_small": "Jetzt registrieren",
"registrieren": "Registrieren", "registrieren": "Registrieren",
"resend_the_registration_mail": "Registrierungsmail erneut versenden",
"save_changes": "Änderungen speichern", "save_changes": "Änderungen speichern",
"sponsoring": "Sponsoring", "sponsoring": "Sponsoring",
"strasse": "Straße", "strasse": "Straße",
@@ -37,5 +48,7 @@
"this_is_not_a_valid_international_phone_number": "Dies ist keine gültige internationale Telefonnummer", "this_is_not_a_valid_international_phone_number": "Dies ist keine gültige internationale Telefonnummer",
"tos": "AGBs", "tos": "AGBs",
"view_my_data": "Meine Läuferdaten einsehen", "view_my_data": "Meine Läuferdaten einsehen",
"vorname": "Vorname" "vorname": "Vorname",
"you_have_been_registered": "Sie wurden registriert!",
"you_have_not_provided_a_valid_access_key": "Sie haben keinen gültigen Zugangsschlüssel angegeben..."
} }

View File

@@ -1,43 +1,54 @@
{ {
"already_have_an_account": "Already have an account?", "access_is_only_provided_via_your_email_link": "Access is only provided via the link you received upon registration.",
"apartment_suite_etc": "Apartment, suite, etc.", "all_data_deleted": "All Data deleted!",
"configuration_error": "Configuration error", "already_have_an_account": "Already have an account?",
"confirm_personal_data": "I hereby confirm that the above information is complete and correct", "apartment_suite_etc": "Apartment, suite, etc.",
"distance": "Distance", "cancel_keep_my_data": "Cancel, keep my data",
"download_certificate": "Download certificate", "configuration_error": "Configuration error",
"e_mail_adress": "mail address", "confirm_delete_all_of_my_data": "Confirm, delete all of my data",
"go_to_login": "Go To Login", "confirm_personal_data": "I hereby confirm that the above information is complete and correct",
"i_accept": "I have read and accepted the ", "delete_my_data": "Delete my data",
"i_accept_end": "", "deletion_in_progress": "Deletion in progress...",
"if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "If you are the system administrator, please refer to the official product documentation/ README for configuration guidance.", "distance": "Distance",
"imprint": "Imprint", "download_certificate": "Download certificate",
"lap_time": "Lap time", "e_mail_adress": "mail address",
"lap_times": "Lap times", "go_to_login": "Go To Login",
"main_page_text": "Here you can register for the Lauf Für Kaya! or manage your runner profile.", "i_accept": "I have read and accepted the ",
"mittelname": "Middlename", "i_accept_end": "",
"nachname": "Lastname", "if_you_are_the_system_administrator_please_refer_to_the_official_product_documentation_readme_for_configuration_guidance": "If you are the system administrator, please refer to the official product documentation/ README for configuration guidance.",
"no_laps_scans_were_recorded_yet": "No laps/ scans were recorded yet...", "imprint": "Imprint",
"ort": "City", "lap_time": "Lap time",
"phone_number": "Phone Number", "lap_times": "Lap times",
"please_provide_a_valid_zipcode": "Please provide a valid zipcode...", "lost_your_registration_mail": "Lost your registration mail?",
"please_provide_valid_mail": "Please provide a valid mail address.", "main_page_text": "Here you can register for the Lauf Für Kaya! or manage your runner profile.",
"plz": "zipcode", "mittelname": "Middlename",
"privacy_policy": "Privacy Policy", "nachname": "Lastname",
"profile": "Profile", "no_laps_scans_were_recorded_yet": "No laps/ scans were recorded yet...",
"provide_address": "Provide a postal address?", "not_registered_yet": "Not registered yet?",
"register": { "organization": "Organization",
"register_now": "Register now for Lauf für Kaya! 2021." "ort": "City",
}, "phone_number": "Phone Number",
"register_now": "Register now!", "please_provide_a_valid_zipcode": "Please provide a valid zipcode...",
"registrieren": "Register Now", "please_provide_valid_mail": "Please provide a valid mail address.",
"save_changes": "Save changes", "plz": "zipcode",
"sponsoring": "Sponsoring", "privacy_policy": "Privacy Policy",
"strasse": "Street/ Block", "profile": "Profile",
"the_system_is_not_properly_configured_please_contact_the_system_administrator_for_help": "The system is not properly configured. Please contact the system administrator for help.", "provide_address": "Provide a postal address?",
"this_is_not_a_valid_international_phone_number": "This is not a valid international phone number", "register": {
"tos": "Terms of Service", "register_now": "Register now for Lauf für Kaya! 2021."
"view_my_data": "View my data", },
"vorname": "Firstname", "register_now": "Register now!",
"organization": "Organization", "register_now_small": "Register now",
"you_have_been_registered": "You have been registered!" "registrieren": "Register Now",
} "resend_the_registration_mail": "Resend the registration mail",
"save_changes": "Save changes",
"sponsoring": "Sponsoring",
"strasse": "Street/ Block",
"the_system_is_not_properly_configured_please_contact_the_system_administrator_for_help": "The system is not properly configured. Please contact the system administrator for help.",
"this_is_not_a_valid_international_phone_number": "This is not a valid international phone number",
"tos": "Terms of Service",
"view_my_data": "View my data",
"vorname": "Firstname",
"you_have_been_registered": "You have been registered!",
"you_have_not_provided_a_valid_access_key": "You have not provided a valid access key..."
}

View File

@@ -1,16 +1,24 @@
import EnvError from './components/EnvError.vue'; // import EnvError from './components/EnvError.vue';
import Home from './views/Home.vue'; import Home from './views/Home.vue';
import Imprint from './views/Imprint.vue'; import Imprint from './views/Imprint.vue';
import Privacy from './views/Privacy.vue'; import Privacy from './views/Privacy.vue';
import Register from './views/Register.vue'; import Register from './views/Register.vue';
import Profile from './views/Profile.vue'; import Profile from './views/Profile.vue';
import ProfileNone from './views/ProfileNone.vue';
console.log(config);
/** @type {import('vue-router').RouterOptions['routes']} */ /** @type {import('vue-router').RouterOptions['routes']} */
export const routes = [ export const routes = [
{ path: '/', component: Home }, { path: config.baseurl_selfservice + '', component: Home },
{ path: '/imprint', component: Imprint }, { path: config.baseurl_selfservice + 'imprint', component: Imprint },
{ path: '/privacy', component: Privacy }, { path: config.baseurl_selfservice + 'imprint/', component: Imprint },
{ path: '/register', component: Register }, { path: config.baseurl_selfservice + 'privacy', component: Privacy },
{ path: '/register/:token', component: Register, props: true }, { path: config.baseurl_selfservice + 'privacy/', component: Privacy },
{ path: '/profile/:token', component: Profile, props: true } { path: config.baseurl_selfservice + 'register', component: Register },
{ path: config.baseurl_selfservice + 'register/', component: Register },
{ path: config.baseurl_selfservice + 'register/:token', component: Register, props: true },
{ path: config.baseurl_selfservice + 'profile', component: Profile },
{ path: config.baseurl_selfservice + 'profile/', component: ProfileNone },
{ path: config.baseurl_selfservice + 'profile/:token', component: Profile, props: true }
]; ];

View File

@@ -1,5 +1,5 @@
<template> <template>
<div class="bg-cover bg-fixed m-0 h-screen" style="background-image: url('/background.jpg');"> <div class="bg-cover bg-fixed m-0 h-screen" style="background-image: url('./background.jpg');">
<section class="container px-4 py-24 mx-auto"> <section class="container px-4 py-24 mx-auto">
<div class="w-full mx-auto text-center"> <div class="w-full mx-auto text-center">
<img src="/favicon.png" class="h-32 mx-auto" /> <img src="/favicon.png" class="h-32 mx-auto" />
@@ -9,14 +9,14 @@
<p class="px-0 mb-6 text-lg text-gray-100 md:text-xl lg:px-24">Selfservice Portal</p> <p class="px-0 mb-6 text-lg text-gray-100 md:text-xl lg:px-24">Selfservice Portal</p>
<p class="px-0 mb-6 text-md text-gray-100 lg:px-24">{{ $t('main_page_text') }}</p> <p class="px-0 mb-6 text-md text-gray-100 lg:px-24">{{ $t('main_page_text') }}</p>
<div class="mt-6 sm:flex place-content-center"> <div class="mt-6 sm:flex place-content-center">
<router-link <a
class="w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-gray-900 bg-white shadow-sm hover:text-gray-600 focus:outline-none focus:text-gray-600 transition ease-in-out duration-150 xl:text-lg xl:py-4" class="w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-gray-900 bg-white shadow-sm hover:text-gray-600 focus:outline-none focus:text-gray-600 transition ease-in-out duration-150 xl:text-lg xl:py-4"
to="/register" href="./register/"
>{{ $t('register_now') }}</router-link> >{{ $t('register_now') }}</a>
<router-link <a
to="/profile" href="./profile/"
class="mt-4 sm:ml-4 sm:mt-0 w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-white bg-gray-800 shadow-sm hover:bg-gray-700 focus:outline-none focus:bg-gray-700 transition ease-in-out duration-150 xl:text-lg xl:py-4" class="mt-4 sm:ml-4 sm:mt-0 w-full sm:w-auto inline-flex px-6 py-3 border border-transparent text-base font-semibold rounded-md text-white bg-gray-800 shadow-sm hover:bg-gray-700 focus:outline-none focus:bg-gray-700 transition ease-in-out duration-150 xl:text-lg xl:py-4"
>{{ $t('view_my_data') }}</router-link> >{{ $t('view_my_data') }}</a>
</div> </div>
</div> </div>
</section> </section>
@@ -26,4 +26,5 @@
<script setup> <script setup>
import Footer from "@/components/Footer.vue"; import Footer from "@/components/Footer.vue";
console.log(config);
</script> </script>

View File

@@ -12,29 +12,108 @@
<p class="text-md whitespace-nowrap">{{ state.group }}</p> <p class="text-md whitespace-nowrap">{{ state.group }}</p>
</div> </div>
<div class="inline-flex md:ml-auto md:mr-0 mx-auto items-center"> <div class="inline-flex md:ml-auto md:mr-0 mx-auto items-center">
<button <div v-if="(state.delete_active === false)">
type="button" <button
class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-blue-500 hover:bg-blue-600 hover:shadow-lg" type="button"
> class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-blue-500 hover:bg-blue-600 hover:shadow-lg"
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline;height: 1rem;vertical-align: sub;"
> >
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" /> <svg
<polyline points="7 10 12 15 17 10" /> xmlns="http://www.w3.org/2000/svg"
<line x1="12" y1="15" x2="12" y2="3" /> width="24"
</svg> height="24"
{{ $t('download_certificate') }} viewBox="0 0 24 24"
</button> fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline;height: 1rem;vertical-align: sub;"
>
<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" />
<polyline points="7 10 12 15 17 10" />
<line x1="12" y1="15" x2="12" y2="3" />
</svg>
{{ $t('download_certificate') }}
</button>
<button
type="button"
class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-red-600 hover:bg-red-700 hover:shadow-lg ml-1"
@click="() => { state.delete_active = true }"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="none"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline;height: 1rem;vertical-align: sub;"
>
<path d="M0 0h24v24H0z" />
<path
fill="currentColor"
d="M17 6h5v2h-2v13a1 1 0 01-1 1H5a1 1 0 01-1-1V8H2V6h5V3a1 1 0 011-1h8a1 1 0 011 1v3zm1 2H6v12h12V8zm-5 6l2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2zM9 4v2h6V4H9z"
/>
</svg>
{{ $t('delete_my_data') }}
</button>
</div>
<div v-if="(state.delete_active === true)">
<button
type="button"
class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-blue-500 hover:bg-blue-600 hover:shadow-lg"
@click="() => { state.delete_active = false }"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="none"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline;height: 1rem;vertical-align: sub;"
>
<path fill="none" d="M0 0h24v24H0z" />
<path fill="currentColor" d="M12 11l5-5 1 1-5 5 5 5-1 1-5-5-5 5-1-1 5-5-5-5 1-1z" />
</svg>
{{ $t('cancel_keep_my_data') }}
</button>
<button
type="button"
class="focus:border-black focus:ring-2 focus:ring-black text-white text-sm py-2.5 px-5 rounded-md bg-red-600 hover:bg-red-700 hover:shadow-lg ml-1"
@click="delete_me"
>
<svg
xmlns="http://www.w3.org/2000/svg"
width="24"
height="24"
viewBox="0 0 24 24"
fill="none"
stroke="none"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
class="feather feather-download"
style="display: inline;height: 1rem;vertical-align: sub;"
>
<path d="M0 0h24v24H0z" />
<path
fill="currentColor"
d="M17 6h5v2h-2v13a1 1 0 01-1 1H5a1 1 0 01-1-1V8H2V6h5V3a1 1 0 011-1h8a1 1 0 011 1v3zm1 2H6v12h12V8zm-5 6l2 2-1 1-2-2-2 2-1-1 2-2-2-2 1-1 2 2 2-2 1 1-2 2zM9 4v2h6V4H9z"
/>
</svg>
{{ $t('confirm_delete_all_of_my_data') }}
</button>
</div>
</div> </div>
</div> </div>
</section> </section>
@@ -178,13 +257,14 @@ const state = reactive({
scans: [], scans: [],
group: "", group: "",
activetab: "profile", activetab: "profile",
delete_active: false,
}) })
const toast = useToast(); const toast = useToast();
const props = defineProps({ const props = defineProps({
token: String token: String
}) })
const accesstoken = atob(props.token); const accesstoken = atob(props.token);
axios.get(`${config.baseurl_selfservice}/api/runners/me/${accesstoken}`) axios.get(`${config.baseurl}api/runners/me/${accesstoken}`)
.then(({ data }) => { .then(({ data }) => {
state.phone = data.phone; state.phone = data.phone;
state.email = data.email; state.email = data.email;
@@ -206,4 +286,16 @@ axios.get(`${config.baseurl}api/runners/me/${accesstoken}/scans`)
}).catch((error) => { }).catch((error) => {
toast.error("An error occured while loading your profile data"); toast.error("An error occured while loading your profile data");
}) })
function delete_me() {
toast("Deletion in progress...");
let url = `${config.baseurl}api/runners/me/${accesstoken}?force=true`
axios.delete(url)
.then(() => {
toast("All Data deleted!");
location.replace(`${config.baseurl_selfservice}`);
})
.catch((error) => {
toast.error("An error occured while deleting your profile data");
});
}
</script> </script>

104
src/views/ProfileNone.vue Normal file
View File

@@ -0,0 +1,104 @@
<template>
<div class="min-h-screen flex items-center justify-center">
<div class="max-w-md w-full py-12 px-6">
<img class="mx-auto h-24 w-auto" src="/favicon.png" alt />
<h1
class="sm:text-3xl text-2xl font-medium title-font mb-4 text-center"
>Lauf für Kaya! - {{ $t('profile') }}</h1>
<p class="mx-auto leading-relaxed text-base text-center">
{{ $t('you_have_not_provided_a_valid_access_key') }}
<br />
{{ $t('access_is_only_provided_via_your_email_link') }}
</p>
<div class="mt-6">
<div class="relative">
<div class="absolute inset-0 flex items-center">
<div class="w-full border-t border-gray-300"></div>
</div>
<div class="relative flex justify-center text-sm">
<span
class="px-2 bg-white dark:bg-gray-900"
>{{ $t('lost_your_registration_mail') }}</span>
</div>
</div>
<div class="mt-4">
<label for="email_address" class="block font-medium">
{{ $t('e_mail_adress') }}
<span class="font-bold">*</span>
</label>
<input
v-model="user_email"
name="email_address"
id="email_address"
autocomplete="off"
:placeholder="[[$t('e_mail_adress')]]"
type="email"
:class="{ 'border-red-500': (!isEmail(user_email)), 'border-green-300': (isEmail(user_email)) }"
class="dark:bg-gray-800 mt-1 block w-full shadow-sm sm:text-sm border-2 bg-gray-50 text-gray-500 rounded-md p-2"
/>
<p
v-if="!isEmail(user_email)"
class="text-sm"
>{{ $t('please_provide_valid_mail') }}</p>
</div>
<div class="mt-2">
<a
:disabled="(!state.submit_enabled)"
:class="{ 'opacity-50': (!state.submit_enabled), 'cursor-not-allowed': (!state.submit_enabled) }"
@click="resendMail"
class="block w-full text-center py-2 px-3 border-2 border-gray-300 rounded-md p-1 dark:bg-gray-800 font-medium hover:border-gray-400 focus:outline-none focus:border-gray-400 sm:text-sm"
>{{ $t('resend_the_registration_mail') }}</a>
</div>
</div>
<div class="mt-12">
<div class="relative">
<div class="absolute inset-0 flex items-center">
<div class="w-full border-t border-gray-300"></div>
</div>
<div class="relative flex justify-center text-sm">
<span class="px-2 bg-white dark:bg-gray-900">{{ $t('not_registered_yet') }}</span>
</div>
</div>
<div class="mt-2">
<a
href="./register/"
class="text-white block w-full text-center py-2 px-3 border-2 border-gray-300 rounded-md p-1 bg-blue-800 font-medium hover:border-gray-400 focus:outline-none focus:border-gray-400 sm:text-sm"
>{{ $t('register_now_small') }}</a>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { computed, ref, reactive, defineProps } from "vue";
import axios from "redaxios";
import isEmail from 'validator/es/lib/isEmail';
import isMobilePhone from 'validator/es/lib/isMobilePhone';
import isPostalCode from 'validator/es/lib/isPostalCode';
import { useToast } from "vue-toastification";
let user_email = ref("");
//
const state = reactive({
org_name: "",
org_teams: [],
submit_enabled: computed(() => isEmail(user_email.value))
})
const toast = useToast();
function resendMail() {
if (isEmail(user_email.value)) {
toast("sending password reset mail...");
const browserlocale = ((navigator.languages && navigator.languages[0]) || '').substr(0, 2);
axios.post(`${config.baseurl}api/runners/forgot?mail=${user_email.value}&locale=${browserlocale}`)
.then(({ data }) => {
console.log(data);
toast("sent password reset mail to " + user_email.value + "!");
})
.catch((error) => {
console.log(error);
toast("user does not exist...");
});
}
}
</script>

View File

@@ -261,14 +261,11 @@ import isEmail from 'validator/es/lib/isEmail';
import isMobilePhone from 'validator/es/lib/isMobilePhone'; import isMobilePhone from 'validator/es/lib/isMobilePhone';
import isPostalCode from 'validator/es/lib/isPostalCode'; import isPostalCode from 'validator/es/lib/isPostalCode';
import { useToast } from "vue-toastification"; import { useToast } from "vue-toastification";
// import { router } from '../router';
import { i18n } from '../language';
const props = defineProps({ const props = defineProps({
token: String token: String
}) })
if (props.token) { if (props.token) {
props.token = atob(props.token);
axios.get(`${config.baseurl}api/organizations/selfservice/${props.token}`) axios.get(`${config.baseurl}api/organizations/selfservice/${props.token}`)
.then(({ data }) => { .then(({ data }) => {
state.org_name = data.name; state.org_name = data.name;
@@ -321,14 +318,16 @@ function login() {
postdata.team = org_team.value; postdata.team = org_team.value;
} }
toast("registration in progress..."); toast("registration in progress...");
let url = `${config.baseurl}api/runners/register`; const browserlocale = ((navigator.languages && navigator.languages[0]) || '').substr(0, 2);
let url = `${config.baseurl}api/runners/register/?locale=${browserlocale}`;
if (props.token) { if (props.token) {
url = `${config.baseurl}api/runners/register/${props.token}` url = `${config.baseurl}api/runners/register/${props.token}/?locale=${browserlocale}`
} }
axios.post(url, postdata) axios.post(url, postdata)
.then(({ data }) => { .then(({ data }) => {
const token = btoa(data.token); const token = btoa(data.token);
// router.push(`${config.baseurl_selfservice}/profile/${token}`); // alert(token);
location.replace(`${config.baseurl_selfservice}profile/${token}`);
}) })
.catch((error) => { .catch((error) => {
console.log(error); console.log(error);

View File

@@ -1,11 +1,11 @@
module.exports = { module.exports = {
purge: [], purge: [ './index.html', './src/**/*.{vue,js,ts,jsx,tsx}' ],
darkMode: "media", // or 'media' or 'class' darkMode: 'media', // or 'media' or 'class'
theme: { theme: {
extend: {}, extend: {}
}, },
variants: { variants: {
extend: {}, extend: {}
}, },
plugins: [], plugins: []
} };

View File

@@ -4,6 +4,7 @@ import path from 'path';
export default defineConfig({ export default defineConfig({
plugins: [ vue() ], plugins: [ vue() ],
base: './',
resolve: { resolve: {
alias: { alias: {
'@': path.resolve(__dirname, '/src') '@': path.resolve(__dirname, '/src')