Compare commits

..

88 Commits

Author SHA1 Message Date
Unbound Release e6e1b1e348 chore(release): prepare for 0.1.2 2024-10-19 11:20:55 +00:00
peter aaab5b2cd5 chore: support issuer in openid-configuration 2024-10-19 12:47:53 +02:00
peter 32af389b7b chore: update Dockerfile to remove warnings 2024-10-19 12:47:29 +02:00
Renovate f60af84b41 chore(deps): update dependency ingress to networking.k8s.io/v1 2024-10-10 13:56:44 +00:00
Renovate 9cb454c32a fix(deps): update dependency express to v4.21.1 2024-10-09 11:01:33 +00:00
Renovate 8f31c1d717 fix(deps): update dependency cookie-parser to v1.4.7 2024-10-08 20:05:45 +00:00
Unbound Release 277b64019c chore(release): prepare for 0.1.1 2024-10-05 19:19:03 +00:00
argoyle 66f83fa70d ci: add release flow 2024-10-05 21:15:49 +02:00
Renovate 01ccab5024 fix(deps): update dependency nodemon to v3.1.7 2024-09-20 17:21:17 +00:00
Renovate 656b10bab9 fix(deps): update dependency nodemon to v3.1.6 2024-09-19 11:00:48 +00:00
Renovate 366113bbf5 fix(deps): update dependency nodemon to v3.1.5 2024-09-17 16:56:03 +00:00
Renovate dde5e91968 fix(deps): update dependency express to v4.21.0 2024-09-11 22:56:16 +00:00
Renovate 21ccdc6809 fix(deps): update dependency express to v4.20.0 2024-09-10 14:38:40 +00:00
Renovate b6b5673ea4 fix(deps): update dependency body-parser to v1.20.3 2024-09-10 01:58:16 +00:00
Renovate b40c5b85e8 fix(deps): update dependency debug to v4.3.7 2024-09-06 02:00:16 +00:00
Renovate 295636e444 fix(deps): update dependency debug to v4.3.6 2024-07-27 10:56:03 +00:00
Renovate 5c7a189bf1 chore(deps): update dependency prettier to v3.3.3 2024-07-13 13:56:00 +00:00
Renovate 60ae679d87 fix(deps): update dependency nodemon to v3.1.4 2024-06-20 10:56:14 +00:00
Renovate bc1dcdc8b4 chore(deps): update dependency prettier to v3.3.2 2024-06-11 07:55:52 +00:00
Renovate 81673c01eb chore(deps): update dependency prettier to v3.3.1 2024-06-05 10:56:12 +00:00
Renovate 0e883190d5 fix(deps): update dependency nodemon to v3.1.3 2024-06-03 16:54:41 +00:00
Renovate bb29d2f2ad chore(deps): update dependency prettier to v3.3.0 2024-06-02 10:25:51 +00:00
Renovate 55374c395d fix(deps): update dependency debug to v4.3.5 2024-05-31 13:54:39 +00:00
Renovate 8d94a8f8af fix(deps): update dependency nodemon to v3.1.2 2024-05-29 10:55:49 +00:00
Renovate 3478ad0e5b fix(deps): update dependency nodemon to v3.1.1 2024-05-25 10:56:38 +00:00
argoyle b9a1c0b285 feat: replace keystore handling with node-jose 2024-04-08 13:10:20 +02:00
Renovate 3382e03305 fix(deps): update dependency express to v4.19.2 2024-03-25 14:55:16 +00:00
Renovate f97c03772b fix(deps): update dependency express to v4.19.1 2024-03-20 23:55:11 +00:00
argoyle 488d3a8b7f feat: support patching of user info 2024-03-11 16:38:52 +01:00
Renovate a42c8c3251 fix(deps): update dependency express to v4.18.3 2024-02-29 11:54:02 +00:00
Renovate 411dd3d222 chore(deps): update dependency node to v20 2024-02-23 22:55:39 +00:00
Renovate acbea4996f Add renovate.json 2024-02-23 22:59:42 +01:00
argoyle e0df0465aa chore(deps): bump nodemon from 3.0.3 to 3.1.0
Bumps [nodemon](https://github.com/remy/nodemon) from 3.0.3 to 3.1.0.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v3.0.3...v3.1.0)
2024-02-23 06:53:00 +00:00
argoyle e7c4bfcdb7 chore(deps-dev): bump prettier from 3.2.4 to 3.2.5
Bumps [prettier](https://github.com/prettier/prettier) from 3.2.4 to 3.2.5.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.2.4...3.2.5)
2024-02-04 06:52:38 +00:00
argoyle 041b66a54e chore(deps-dev): bump prettier from 3.2.3 to 3.2.4
Bumps [prettier](https://github.com/prettier/prettier) from 3.2.3 to 3.2.4.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.2.3...3.2.4)
2024-01-18 06:52:57 +00:00
argoyle ce5467682e chore(deps-dev): bump prettier from 3.2.2 to 3.2.3
Bumps [prettier](https://github.com/prettier/prettier) from 3.2.2 to 3.2.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.2.2...3.2.3)
2024-01-17 10:12:35 +00:00
argoyle 860b658fd8 chore(deps): bump nodemon from 3.0.2 to 3.0.3
Bumps [nodemon](https://github.com/remy/nodemon) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v3.0.2...v3.0.3)
2024-01-17 06:53:12 +00:00
argoyle 5e0922d84f chore(deps-dev): bump prettier from 3.2.1 to 3.2.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.2.1...3.2.2)
2024-01-14 06:52:40 +00:00
argoyle ce35c1eb50 chore(deps-dev): bump prettier from 3.1.1 to 3.2.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.1.1 to 3.2.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.1.1...3.2.1)
2024-01-13 06:52:53 +00:00
argoyle 44047f88e4 chore(deps-dev): bump prettier from 3.1.0 to 3.1.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.1.0...3.1.1)
2023-12-11 06:52:49 +00:00
argoyle a9633e9079 chore(deps): bump nodemon from 3.0.1 to 3.0.2
Bumps [nodemon](https://github.com/remy/nodemon) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v3.0.1...v3.0.2)
2023-12-02 06:52:34 +00:00
argoyle ef9654adfa chore(deps-dev): bump prettier from 3.0.3 to 3.1.0
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.3 to 3.1.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.3...3.1.0)
2023-11-13 06:52:57 +00:00
argoyle e99a340485 chore(deps): bump jsonwebtoken from 9.0.1 to 9.0.2
Bumps [jsonwebtoken](https://github.com/auth0/node-jsonwebtoken) from 9.0.1 to 9.0.2.
- [Changelog](https://github.com/auth0/node-jsonwebtoken/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/node-jsonwebtoken/compare/v9.0.1...v9.0.2)
2023-08-31 06:53:06 +00:00
argoyle d362203165 chore(deps-dev): bump prettier from 3.0.2 to 3.0.3
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.2...3.0.3)
2023-08-30 06:52:46 +00:00
argoyle afa1893f1a chore(deps-dev): bump prettier from 3.0.1 to 3.0.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.1...3.0.2)
2023-08-16 06:52:54 +00:00
argoyle 791a29d5b8 chore(deps-dev): bump prettier from 3.0.0 to 3.0.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.0.0...3.0.1)
2023-08-03 06:52:38 +00:00
argoyle d34a738b71 chore(deps): bump nodemon from 3.0.0 to 3.0.1
Bumps [nodemon](https://github.com/remy/nodemon) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v3.0.0...v3.0.1)
2023-07-10 06:52:57 +00:00
argoyle 6e0bb8e1ca chore(deps): bump nodemon from 2.0.22 to 3.0.0
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.22 to 3.0.0.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.22...v3.0.0)
2023-07-09 06:52:41 +00:00
argoyle c29f8be74c chore(deps-dev): bump prettier from 2.8.8 to 3.0.0
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.8 to 3.0.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.8...3.0.0)
2023-07-06 08:57:27 +00:00
argoyle 349989bb67 chore(deps): bump jsonwebtoken from 9.0.0 to 9.0.1
Bumps [jsonwebtoken](https://github.com/auth0/node-jsonwebtoken) from 9.0.0 to 9.0.1.
- [Changelog](https://github.com/auth0/node-jsonwebtoken/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/node-jsonwebtoken/commits)
2023-07-06 06:52:31 +00:00
peter d940a04d05 feat: initial users store 2023-06-01 15:00:26 +02:00
peter 192929229f fix: return empty array 2023-05-31 23:24:38 +02:00
peter 397d60361e feat: remember created users 2023-05-31 20:30:37 +02:00
argoyle bb8deb221e feat: add name and email to id token 2023-05-02 12:12:43 +02:00
argoyle a465ae543a chore(deps): bump node from 18 to 20
Bumps node from 18 to 20.
2023-04-24 07:01:58 +00:00
argoyle 8aad0d6308 chore(deps-dev): bump prettier from 2.8.7 to 2.8.8
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.7 to 2.8.8.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.7...2.8.8)
2023-04-24 06:52:34 +00:00
argoyle 0166537d2f chore(deps-dev): bump prettier from 2.8.6 to 2.8.7
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.6 to 2.8.7.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.6...2.8.7)
2023-03-27 14:04:03 +00:00
argoyle 9f6e63ea50 chore(deps): bump nodemon from 2.0.21 to 2.0.22
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.21 to 2.0.22.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.21...v2.0.22)
2023-03-23 06:52:58 +00:00
argoyle a30cb4b08c chore(deps-dev): bump prettier from 2.8.5 to 2.8.6
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.5 to 2.8.6.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.5...2.8.6)
2023-03-22 06:52:36 +00:00
argoyle abbc55ea6e chore(deps-dev): bump prettier from 2.8.4 to 2.8.5
Bumps [prettier](https://github.com/prettier/prettier) from 2.8.4 to 2.8.5.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.8.4...2.8.5)
2023-03-20 06:52:25 +00:00
argoyle 779d78cdc6 fix: remove session on logout 2023-03-10 15:10:36 +01:00
argoyle cf958ffa85 fix: handle response mode query 2023-03-10 13:50:38 +01:00
argoyle eb579289f0 chore: format code and add prettier 2023-03-10 13:49:33 +01:00
argoyle d1ff4ec278 chore(deps): bump nodemon from 2.0.20 to 2.0.21
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.20 to 2.0.21.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.20...v2.0.21)
2023-03-03 06:52:26 +00:00
argoyle 14c2c8f366 chore(deps): bump body-parser from 1.20.1 to 1.20.2
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.1 to 1.20.2.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.1...1.20.2)
2023-02-22 06:52:15 +00:00
argoyle 7177ba9516 ci: change Dependabot rebase strategy 2023-02-09 08:09:57 +01:00
argoyle 652483e2de ci: use Docker DinD version from variable 2023-02-09 08:09:35 +01:00
argoyle 4e43361217 fix: update image name to correct location 2022-12-28 20:02:21 +01:00
argoyle 6dda660e78 chore(deps): bump jsonwebtoken from 8.5.1 to 9.0.0
Bumps [jsonwebtoken](https://github.com/auth0/node-jsonwebtoken) from 8.5.1 to 9.0.0.
- [Release notes](https://github.com/auth0/node-jsonwebtoken/releases)
- [Changelog](https://github.com/auth0/node-jsonwebtoken/blob/master/CHANGELOG.md)
- [Commits](https://github.com/auth0/node-jsonwebtoken/compare/v8.5.1...v9.0.0)
2022-12-22 06:52:39 +00:00
argoyle 534772b315 chore(deps): bump express from 4.18.1 to 4.18.2
Bumps [express](https://github.com/expressjs/express) from 4.18.1 to 4.18.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.1...4.18.2)
2022-10-09 06:52:35 +00:00
argoyle 3bdfe7bf0e chore(deps): bump body-parser from 1.20.0 to 1.20.1
Bumps [body-parser](https://github.com/expressjs/body-parser) from 1.20.0 to 1.20.1.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/1.20.0...1.20.1)
2022-10-07 06:52:24 +00:00
argoyle edba76d0ab chore(deps): bump nodemon from 2.0.19 to 2.0.20
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.19 to 2.0.20.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.19...v2.0.20)
2022-09-17 06:52:27 +00:00
argoyle 5289b4fa23 chore(deps): bump nodemon from 2.0.18 to 2.0.19
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.18 to 2.0.19.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.18...v2.0.19)
2022-07-06 06:52:23 +00:00
argoyle eef7168f37 chore(deps): bump nodemon from 2.0.16 to 2.0.18
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.16 to 2.0.18.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.16...v2.0.18)
2022-06-24 06:52:29 +00:00
argoyle 596967ff72 Merge branch 'dependabot-npm_and_yarn-normalize-url-4.5.1' into 'main'
chore(deps): [security] bump normalize-url from 4.5.0 to 4.5.1

See merge request unboundsoftware/auth0mock!41
2022-05-02 07:01:46 +00:00
argoyle 5f2385a92f chore(deps): [security] bump normalize-url from 4.5.0 to 4.5.1
Bumps [normalize-url](https://github.com/sindresorhus/normalize-url) from 4.5.0 to 4.5.1. **This update includes a security fix.**
- [Release notes](https://github.com/sindresorhus/normalize-url/releases)
- [Commits](https://github.com/sindresorhus/normalize-url/commits)
2022-05-02 07:00:02 +00:00
argoyle a5653c8ea6 Merge branch 'dependabot-npm_and_yarn-ini-1.3.8' into 'main'
chore(deps): [security] bump ini from 1.3.5 to 1.3.8

See merge request unboundsoftware/auth0mock!39
2022-05-02 06:59:59 +00:00
argoyle 75ec899c99 chore(deps): [security] bump ini from 1.3.5 to 1.3.8
Bumps [ini](https://github.com/npm/ini) from 1.3.5 to 1.3.8. **This update includes a security fix.**
- [Release notes](https://github.com/npm/ini/releases)
- [Changelog](https://github.com/npm/ini/blob/main/CHANGELOG.md)
- [Commits](https://github.com/npm/ini/compare/v1.3.5...v1.3.8)
2022-05-02 06:58:19 +00:00
argoyle cb31381be2 Merge branch 'dependabot-npm_and_yarn-minimist-1.2.6' into 'main'
chore(deps): [security] bump minimist from 1.2.0 to 1.2.6

See merge request unboundsoftware/auth0mock!40
2022-05-02 06:58:17 +00:00
argoyle 9ee344311a chore(deps): [security] bump minimist from 1.2.0 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.0 to 1.2.6. **This update includes security fixes.**
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.0...1.2.6)
2022-05-02 06:56:54 +00:00
argoyle d7e3b10e80 Merge branch 'dependabot-npm_and_yarn-ansi-regex-4.1.1' into 'main'
chore(deps): [security] bump ansi-regex from 4.1.0 to 4.1.1

See merge request unboundsoftware/auth0mock!38
2022-05-02 06:56:51 +00:00
argoyle 7b306dd500 chore(deps): [security] bump ansi-regex from 4.1.0 to 4.1.1
Bumps [ansi-regex](https://github.com/chalk/ansi-regex) from 4.1.0 to 4.1.1. **This update includes a security fix.**
- [Release notes](https://github.com/chalk/ansi-regex/releases)
- [Commits](https://github.com/chalk/ansi-regex/compare/v4.1.0...v4.1.1)
2022-05-02 06:52:21 +00:00
argoyle 22d096a2be Merge branch 'dependabot-npm_and_yarn-nodemon-2.0.16' into 'main'
chore(deps): bump nodemon from 2.0.15 to 2.0.16

See merge request unboundsoftware/auth0mock!37
2022-05-01 17:27:31 +00:00
argoyle 858cb96e10 chore(deps): bump nodemon from 2.0.15 to 2.0.16
Bumps [nodemon](https://github.com/remy/nodemon) from 2.0.15 to 2.0.16.
- [Release notes](https://github.com/remy/nodemon/releases)
- [Commits](https://github.com/remy/nodemon/compare/v2.0.15...v2.0.16)
2022-05-01 17:26:04 +00:00
argoyle e8dd55208c Merge branch 'dependabot-npm_and_yarn-express-4.18.1' into 'main'
chore(deps): bump express from 4.18.0 to 4.18.1

See merge request unboundsoftware/auth0mock!36
2022-05-01 17:25:57 +00:00
argoyle dbf5206c1b chore(deps): bump express from 4.18.0 to 4.18.1
Bumps [express](https://github.com/expressjs/express) from 4.18.0 to 4.18.1.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](https://github.com/expressjs/express/compare/4.18.0...4.18.1)
2022-04-30 06:52:18 +00:00
argoyle 4229508bba feat: add support for client id and secret tokens 2022-04-28 09:38:05 +02:00
argoyle b4d5dbe9e3 feat: add dummy-implementation of management API 2022-04-26 16:54:03 +02:00
16 changed files with 877 additions and 1125 deletions
+3 -1
View File
@@ -1,5 +1,7 @@
include:
- template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml'
- project: unboundsoftware/ci-templates
file: Release.gitlab-ci.yml
stages:
- build
@@ -16,7 +18,7 @@ image: buildtool/build-tools:${BUILDTOOLS_VERSION}
build:
stage: build
services:
- docker:dind
- docker:${DOCKER_DIND_VERSION}
script:
- build
- push
-17
View File
@@ -1,17 +0,0 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 20
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "daily"
open-pull-requests-limit: 20
+1
View File
@@ -0,0 +1 @@
20
+2
View File
@@ -0,0 +1,2 @@
*.yaml
*.yml
+9
View File
@@ -0,0 +1,9 @@
{
"semi": false,
"singleQuote": true,
"trailingComma": "none",
"arrowParens": "always",
"quoteProps": "as-needed",
"bracketSpacing": true,
"bracketSameLine": false
}
+211
View File
@@ -0,0 +1,211 @@
# Changelog
All notable changes to this project will be documented in this file.
## [0.1.2] - 2024-10-19
### 🐛 Bug Fixes
- *(deps)* Update dependency cookie-parser to v1.4.7
- *(deps)* Update dependency express to v4.21.1
### ⚙️ Miscellaneous Tasks
- Update Dockerfile to remove warnings
- Support issuer in openid-configuration
## [0.1.1] - 2024-10-05
### 🐛 Bug Fixes
- *(deps)* Update dependency nodemon to v3.1.1
- *(deps)* Update dependency nodemon to v3.1.2
- *(deps)* Update dependency debug to v4.3.5
- *(deps)* Update dependency nodemon to v3.1.3
- *(deps)* Update dependency nodemon to v3.1.4
- *(deps)* Update dependency debug to v4.3.6
- *(deps)* Update dependency debug to v4.3.7
- *(deps)* Update dependency body-parser to v1.20.3
- *(deps)* Update dependency express to v4.20.0
- *(deps)* Update dependency express to v4.21.0
- *(deps)* Update dependency nodemon to v3.1.5
- *(deps)* Update dependency nodemon to v3.1.6
- *(deps)* Update dependency nodemon to v3.1.7
### ⚙️ Miscellaneous Tasks
- Add release flow
## [0.1.0] - 2024-04-08
### 🚀 Features
- Replace keystore handling with node-jose
### 🐛 Bug Fixes
- *(deps)* Update dependency express to v4.19.1
- *(deps)* Update dependency express to v4.19.2
## [0.0.17] - 2024-03-11
### 🚀 Features
- Support patching of user info
### 🐛 Bug Fixes
- *(deps)* Update dependency express to v4.18.3
## [0.0.16] - 2023-06-01
### 🚀 Features
- Initial users store
## [0.0.15] - 2023-05-31
### 🐛 Bug Fixes
- Return empty array
## [0.0.14] - 2023-05-31
### 🚀 Features
- Remember created users
## [0.0.13] - 2023-05-02
### 🚀 Features
- Add name and email to id token
## [0.0.12] - 2023-03-10
### 🐛 Bug Fixes
- Remove session on logout
## [0.0.11] - 2023-03-10
### 🐛 Bug Fixes
- Update image name to correct location
- Handle response mode query
### ⚙️ Miscellaneous Tasks
- Use Docker DinD version from variable
- Change Dependabot rebase strategy
- Format code and add prettier
## [0.0.9] - 2022-04-28
### 🚀 Features
- Add support for client id and secret tokens
## [0.0.8] - 2022-04-26
### 🚀 Features
- Add dummy-implementation of management API
## [0.0.7] - 2022-04-26
### 🐛 Bug Fixes
- Use correct return-variable
## [0.0.6] - 2022-04-26
### 🐛 Bug Fixes
- Make sure thumbPrint is a string
### 💼 Other
- *(deps)* Bump express from 4.17.3 to 4.18.0
### ⚙️ Miscellaneous Tasks
- Format code
## [0.0.5] - 2022-04-26
### 🐛 Bug Fixes
- Add custom claims to both id and access token
## [0.0.4] - 2022-04-26
### 🚀 Features
- Add email custom claim
## [0.0.3] - 2022-04-26
### 🚀 Features
- Add env-property for default issuer
## [0.0.2] - 2022-04-25
### 💼 Other
- *(deps)* Bump node from 17 to 18
### ⚙️ Miscellaneous Tasks
- Change admin-handling
## [0.0.1] - 2022-04-19
### 🚀 Features
- Initial commit
- Updated to be compatible with Auth0 SPA which uses the 'Authorization Code Grant using Proof Key for Code Exchange (PKCE)' flow
- Add ENV-property for setting admin-role
### 🐛 Bug Fixes
- Use correct envs
- Use commit rather than latest
- Package.json & yarn.lock to reduce vulnerabilities
- Package.json & yarn.lock to reduce vulnerabilities
- Pipeline
### 💼 Other
- *(deps)* Bump nodemon from 2.0.14 to 2.0.15
- *(deps)* Bump cookie-parser from 1.4.5 to 1.4.6
- *(deps)* Bump debug from 4.3.2 to 4.3.3
- *(deps)* Bump body-parser from 1.19.0 to 1.19.1
- *(deps)* Bump express from 4.17.1 to 4.17.2
- *(deps)* Bump node-forge from 0.10.0 to 1.0.0
- *(deps)* Bump node-forge from 1.0.0 to 1.1.0
- *(deps)* Bump node-forge from 1.1.0 to 1.2.0
- *(deps)* Bump node-forge from 1.2.0 to 1.2.1
- *(deps)* Bump body-parser from 1.19.1 to 1.19.2
- *(deps)* Bump https-localhost from 4.7.0 to 4.7.1
- *(deps)* Bump express from 4.17.2 to 4.17.3
- *(deps)* Bump debug from 4.3.3 to 4.3.4
- *(deps)* Bump node-forge from 1.2.1 to 1.3.0
- *(deps)* Bump node-forge from 1.3.0 to 1.3.1
- *(deps)* Bump body-parser from 1.19.2 to 1.20.0
### ⚙️ Miscellaneous Tasks
- Add triggering of acctest
- Add artifacts
- Update to latest build-tools
- Update to latest build-tools
- Add ingress
- Add CI workflows
- Use buildtools version from env
- Add dependabot config
- Remove dependabot-standalone
- Cleanup and remove acctest triggering
<!-- generated by git-cliff -->
+6 -6
View File
@@ -1,12 +1,12 @@
FROM node:18
ENV AUDIENCE "https://shiny.unbound.se"
ENV ORIGIN_HOST "auth0mock"
ENV ORIGIN "https://auth0mock:3333"
FROM node:20
ENV AUDIENCE="https://shiny.unbound.se"
ENV ORIGIN_HOST="auth0mock"
ENV ORIGIN="https://auth0mock:3333"
EXPOSE 3333
WORKDIR /app
ADD package.json yarn.lock /app/
RUN yarn install --frozen-lockfile
ADD app.js cert.js /app/
ADD *.js /app/
ADD public /app/public
RUN mkdir -p /root/.config
ENTRYPOINT yarn start
ENTRYPOINT ["yarn", "start"]
+33 -12
View File
@@ -3,47 +3,68 @@
> This server helps you to simulate auth0 server locally. So, you are able to use the `/tokeninfo` endpoint to verify your token.
## Getting Started
### Prerequisites
* Install [Node.js](http://nodejs.org)
* on OSX use [homebrew](http://brew.sh) `brew install node`
* on Windows use [chocolatey](https://chocolatey.org/) `choco install nodejs`
### Prerequisites
- Install [Node.js](http://nodejs.org)
- on OSX use [homebrew](http://brew.sh) `brew install node`
- on Windows use [chocolatey](https://chocolatey.org/) `choco install nodejs`
## Installing
* `fork` this repo
* `clone` your fork
* `npm install` to install all dependencies
- `fork` this repo
- `clone` your fork
- `npm install` to install all dependencies
## Running the app
After you have installed all dependencies you can now run the app.
Run `npm start` to start a local server.
The port will be displayed to you as `http://0.0.0.0:3333` (or if you prefer IPv6, if you're using `express` server, then it's `http://[::1]:3333/`).
## Initial users
Adding a JSON file with the following layout will populate the users store when starting:
```json
{
"email@test.com": {
"given_name": "name",
"family_name": "family",
"user_id": "id"
}
}
```
By default `./users.json` will be read but this can be overridden by setting the environment variable `USERS_FILE`.
## API Documentation
### `GET` /token/:username
Returns a token with the given user(username). This token can the be used by your application.
### `POST` /tokeninfo
Returns the data of the token like the username.
**Body**
```
{
"id_token": "your-token-kjasdf6ashasl..."
}
```
## Related Projects
* [express-typescript-boilerplate](https://github.com/w3tecch/express-typescript-boilerplate) - Boilerplate for an restful express-apllication written in TypeScript
* [express-graphql-typescript-boilerplate](https://github.com/w3tecch/express-graphql-typescript-boilerplate) - A starter kit for building amazing GraphQL API's with TypeScript and express by @w3tecch
- [express-typescript-boilerplate](https://github.com/w3tecch/express-typescript-boilerplate) - Boilerplate for an restful express-apllication written in TypeScript
- [express-graphql-typescript-boilerplate](https://github.com/w3tecch/express-graphql-typescript-boilerplate) - A starter kit for building amazing GraphQL API's with TypeScript and express by @w3tecch
## License
[MIT](/LICENSE)
---
Made with ♥ by Gery Hirschfeld ([@GeryHirschfeld1](https://twitter.com/GeryHirschfeld1))
Made with ♥ by Gery Hirschfeld ([@GeryHirschfeld1](https://twitter.com/GeryHirschfeld1))
+263 -96
View File
@@ -8,19 +8,24 @@ const Debug = require('debug')
const path = require('path')
const cors = require('cors')
const bodyParser = require('body-parser')
const jose = require('node-jose');
const favicon = require('serve-favicon')
const cert = require('./cert')
const initialUsers = require('./users')
let issuer = process.env.ISSUER || 'localhost:3333'
let jwksOrigin = `https://${issuer}/`
const issuer = process.env.ISSUER || 'localhost:3333'
const jwksOrigin = `https://${issuer}/`
const audience = process.env.AUDIENCE || 'https://generic-audience'
const adminCustomClaim = process.env.ADMIN_CUSTOM_CLAIM || 'https://unbound.se/admin'
const emailCustomClaim = process.env.EMAIL_CUSTOM_CLAIM || 'https://unbound.se/email'
const adminCustomClaim =
process.env.ADMIN_CUSTOM_CLAIM || 'https://unbound.se/admin'
const emailCustomClaim =
process.env.EMAIL_CUSTOM_CLAIM || 'https://unbound.se/email'
const debug = Debug('app')
let { privateKey, certDer, thumbprint, exponent, modulus } = cert(jwksOrigin)
const keyStore = jose.JWK.createKeyStore()
keyStore.generate('RSA', 2048, { alg: 'RS256', use: 'sig' })
// let { privateKey, certDer, thumbprint, exponent, modulus } = cert(jwksOrigin)
const users = initialUsers(process.env.USERS_FILE || './users.json')
const sessions = {}
const challenges = {}
@@ -37,61 +42,103 @@ const addCustomClaims = (email, customClaims, token) => {
...claim
}
}, token)
}
const signToken = async (token) => {
const [key] = keyStore.all({ use: 'sig' })
const opt = { compact: true, jwk: key, fields: { typ: 'jwt' } }
return await jose.JWS.createSign(opt, key)
.update(JSON.stringify(token))
.final()
}
// Configure our small auth0-mock-server
app.options('*', cors(corsOpts))
app
.options('*', cors(corsOpts))
.use(cors())
.use(bodyParser.json())
.use(bodyParser.json({ strict: false }))
.use(bodyParser.urlencoded({ extended: true }))
.use(cookieParser())
.use(express.static(`${__dirname}/public`))
.use(favicon(path.join(__dirname, 'public', 'favicon.ico')))
// This route can be used to generate a valid jwt-token.
app.post('/oauth/token', (req, res) => {
const code = req.body.code
const session = sessions[code]
app.post('/oauth/token', async (req, res) => {
const date = Math.floor(Date.now() / 1000)
if (req.body.grant_type === 'client_credentials' && req.body.client_id) {
const accessToken = await signToken({
iss: jwksOrigin,
aud: [audience],
sub: 'auth0|management',
iat: date,
exp: date + 7200,
azp: req.body.client_id
})
let date = Math.floor(Date.now() / 1000)
let accessToken = jwt.sign(Buffer.from(JSON.stringify(addCustomClaims(session.email, session.customClaims, {
iss: jwksOrigin,
aud: [audience],
sub: 'auth0|' + session.email,
iat: date,
exp: date + 7200,
azp: session.clientId
}))), privateKey, {
algorithm: 'RS256',
keyid: thumbprint
})
const idToken = await signToken({
iss: jwksOrigin,
aud: req.body.client_id,
sub: 'auth0|management',
iat: date,
exp: date + 7200,
azp: req.body.client_id,
name: 'Management API'
})
let idToken = jwt.sign(Buffer.from(JSON.stringify(addCustomClaims(session.email, session.customClaims, {
iss: jwksOrigin,
aud: session.clientId,
nonce: session.nonce,
sub: 'auth0|' + session.email,
iat: date,
exp: date + 7200,
azp: session.clientId,
name: 'Example Person',
picture: 'https://cdn.playbuzz.com/cdn/5458360f-32ea-460e-a707-1a2d26760558/70bda687-cb84-4756-8a44-8cf735ed87b3.jpg'
}))), privateKey, {
algorithm: 'RS256',
keyid: thumbprint
})
debug('Signed token for management API')
debug('Signed token for ' + session.email)
// res.json({ token });
res.json({
access_token: accessToken,
id_token: idToken,
scope: 'openid%20profile%20email',
expires_in: 7200,
token_type: 'Bearer'
})
} else if (req.body.code) {
const code = req.body.code
const session = sessions[code]
const accessToken = await signToken(
addCustomClaims(session.email, session.customClaims, {
iss: jwksOrigin,
aud: [audience],
sub: 'auth0|' + session.email,
iat: date,
exp: date + 7200,
azp: session.clientId
})
)
res.json({
access_token: accessToken,
id_token: idToken,
scope: 'openid%20profile%20email',
expires_in: 7200,
token_type: 'Bearer'
})
const idToken = await signToken(
addCustomClaims(session.email, session.customClaims, {
iss: jwksOrigin,
aud: session.clientId,
nonce: session.nonce,
sub: 'auth0|' + session.email,
iat: date,
exp: date + 7200,
azp: session.clientId,
name: 'Example Person',
given_name: 'Example',
family_name: 'Person',
email: session.email,
picture:
'https://cdn.playbuzz.com/cdn/5458360f-32ea-460e-a707-1a2d26760558/70bda687-cb84-4756-8a44-8cf735ed87b3.jpg'
})
)
debug('Signed token for ' + session.email)
res.json({
access_token: accessToken,
id_token: idToken,
scope: 'openid%20profile%20email',
expires_in: 7200,
token_type: 'Bearer'
})
} else {
res.status(401)
res.send('Missing client_id or client_secret')
}
})
// This route can be used to generate a valid jwt-token.
@@ -100,9 +147,12 @@ app.get('/token/:email', (req, res) => {
debug('No user was given!')
return res.status(400).send('user is missing')
}
const token = jwt.sign({
user_id: 'auth0|' + req.params.email
}, privateKey)
const token = jwt.sign(
{
user_id: 'auth0|' + req.params.email
},
privateKey
)
debug('Signed token for ' + req.params.email)
res.json({ token })
})
@@ -127,7 +177,9 @@ app.post('/code', (req, res) => {
codeChallenge: req.body.codeChallenge,
customClaims: [claim]
}
res.redirect(`${req.body.redirect}?domain=${issuer}&code=${code}&state=${encodeURIComponent(state)}`)
res.redirect(
`${req.body.redirect}?code=${code}&state=${encodeURIComponent(state)}`
)
})
app.get('/authorize', (req, res) => {
@@ -138,13 +190,26 @@ app.get('/authorize', (req, res) => {
const codeChallenge = req.query.code_challenge
const prompt = req.query.prompt
const responseMode = req.query.response_mode
if (responseMode === 'query') {
const code = req.cookies['auth0']
const session = sessions[code]
if (session) {
session.nonce = nonce
session.state = state
session.codeChallenge = codeChallenge
sessions[codeChallenge] = session
res.redirect(`${redirect}?code=${codeChallenge}&state=${state}`)
return
}
}
if (prompt === 'none' && responseMode === 'web_message') {
const code = req.cookies['auth0']
const session = sessions[code]
session.nonce = nonce
session.state = state
session.codeChallenge = codeChallenge
res.send(`
if (session) {
session.nonce = nonce
session.state = state
session.codeChallenge = codeChallenge
res.send(`
<!DOCTYPE html>
<html>
<body>
@@ -162,13 +227,16 @@ app.get('/authorize', (req, res) => {
</script>
</body>
</html>`)
} else {
res.cookie('auth0', codeChallenge, {
sameSite: 'None',
secure: true,
httpOnly: true
})
res.send(`
return
}
}
res.cookie('auth0', codeChallenge, {
sameSite: 'None',
secure: true,
httpOnly: true
})
res.send(`
<html lang='en'>
<head>
<meta charset='utf-8'>
@@ -209,35 +277,96 @@ app.get('/authorize', (req, res) => {
</body>
</html>
`)
}
})
app.get('/userinfo', (req, res) => {
res.contentType('application/json').send(JSON.stringify({ picture: 'https://cdn.playbuzz.com/cdn/5458360f-32ea-460e-a707-1a2d26760558/70bda687-cb84-4756-8a44-8cf735ed87b3.jpg' }))
res.contentType('application/json').send(
JSON.stringify({
picture:
'https://cdn.playbuzz.com/cdn/5458360f-32ea-460e-a707-1a2d26760558/70bda687-cb84-4756-8a44-8cf735ed87b3.jpg'
})
)
})
app.get('/v2/logout', (req, res) => {
res.redirect(`${req.query.returnTo}?domain=${issuer}`)
const code = req.cookies['auth0']
const session = sessions[code]
if (session) {
delete sessions[code]
}
res.redirect(req.query.returnTo)
})
app.get('/.well-known/openid-configuration', (req, res) => {
debug('Fetching OpenID configuration')
res.contentType('application/json').send(
JSON.stringify({
"issuer":
`${jwksOrigin}`,
"authorization_endpoint":
`${jwksOrigin}authorize`,
"token_endpoint":
`${jwksOrigin}oauth/token`,
"token_endpoint_auth_methods_supported":
["client_secret_basic", "private_key_jwt"],
"token_endpoint_auth_signing_alg_values_supported":
["RS256"],
"userinfo_endpoint":
`${jwksOrigin}userinfo`,
"check_session_iframe":
`${jwksOrigin}check_session`,
"end_session_endpoint":
`${jwksOrigin}end_session`,
"jwks_uri":
`${jwksOrigin}.well-known/jwks.json`,
"registration_endpoint":
`${jwksOrigin}register`,
"scopes_supported":
["openid", "profile", "email", "address",
"phone", "offline_access"],
"response_types_supported":
["code", "code id_token", "id_token", "id_token token"],
"acr_values_supported":
[],
"subject_types_supported":
["public", "pairwise"],
"userinfo_signing_alg_values_supported":
["RS256", "ES256", "HS256"],
"userinfo_encryption_alg_values_supported":
["RSA-OAEP-256", "A128KW"],
"userinfo_encryption_enc_values_supported":
["A128CBC-HS256", "A128GCM"],
"id_token_signing_alg_values_supported":
["RS256", "ES256", "HS256"],
"id_token_encryption_alg_values_supported":
["RSA-OAEP-256", "A128KW"],
"id_token_encryption_enc_values_supported":
["A128CBC-HS256", "A128GCM"],
"request_object_signing_alg_values_supported":
["none", "RS256", "ES256"],
"display_values_supported":
["page", "popup"],
"claim_types_supported":
["normal", "distributed"],
"claims_supported":
["sub", "iss", "auth_time", "acr",
"name", "given_name", "family_name", "nickname",
"profile", "picture", "website",
"email", "email_verified", "locale", "zoneinfo",
"https://unbound.se/email", "https://unbound.se/admin"],
"claims_parameter_supported":
true,
"service_documentation":
"http://auth0/",
"ui_locales_supported":
["en-US"]
})
)
})
app.get('/.well-known/jwks.json', (req, res) => {
res
.contentType('application/json')
.send(JSON.stringify({
keys: [
{
alg: 'RS256',
// e: 'AQAB',
e: exponent,
kid: thumbprint,
kty: 'RSA',
n: modulus,
use: 'sig',
x5c: [certDer],
x5t: thumbprint
}
]
}))
debug('Fetching JWKS')
res.contentType('application/json').send(keyStore.toJSON())
})
// This route returns the inside of a jwt-token. Your main application
@@ -257,21 +386,59 @@ app.post('/tokeninfo', (req, res) => {
}
})
app.post('/issuer', (req, res) => {
if (!req.body.issuer) {
debug('No issuer given in the body!')
return res.status(401).send('missing issuer')
app.get('/api/v2/users-by-email', (req, res) => {
const email = req.query.email
console.log('users', users)
const user = users[email]
if (user === undefined) {
res.json([])
} else {
res.json([user])
}
issuer = req.body.issuer
jwksOrigin = `https://${issuer}/`
const { privateKey: key, certDer: der, thumbprint: thumb, exponent: exp, modulus: mod } = cert(jwksOrigin)
privateKey = key
certDer = der
thumbprint = thumb
exponent = exp
modulus = mod
debug('Issuer set to ' + req.body.issuer)
res.send('ok')
})
app.patch('/api/v2/users/:userid', (req, res) => {
const email = req.params.userid.slice(6)
console.log('patching user with id', email)
const user = users[email]
if (!user) {
res.sendStatus(404)
return
}
users[email] = {
email: email,
given_name: req.body.given_name || user.given_name,
family_name: req.body.family_name || user.family_name,
user_id: email,
picture: req.body.picture || user.picture
}
res.json({
user_id: `auth0|${email}`
})
})
app.post('/api/v2/users', (req, res) => {
const email = req.body.email
users[email] = {
email: email,
given_name: 'Given',
family_name: 'Last',
user_id: email
}
res.json({
user_id: `auth0|${email}`
})
})
app.post('/api/v2/tickets/password-change', (req, res) => {
res.json({
ticket: `https://some-url`
})
})
app.use(function (req, res, next) {
console.log('404', req.path)
res.status(404).send('error: 404 Not Found ' + req.path)
})
app.listen(3333, () => {
-132
View File
@@ -1,132 +0,0 @@
const base64url = require('base64-url')
const createHash = require('crypto').createHash
const forge = require('node-forge')
const NodeRSA = require('node-rsa')
const PRIVATE_KEY_PEM =
'-----BEGIN RSA PRIVATE KEY-----\n' +
'MIIEpAIBAAKCAQEApoocpO3bbUF6o8eyJlQCfwLahEsunWdVF++yOEyKu4Lp1j0m\n' +
'2j/P7iHOtxBAkjdM2X2oW3qO1mR0sIFefqnm93g0q2nRuYEoS+W3o6X50wjOVm8f\n' +
'r/tLqELzy5BoET0AQl7Axp1DNsb0HNOBcoIBt+xVY4I+k6uXJJJMzbgvahAgSLZ9\n' +
'RW0Z0WT+dCHZpZUj0nLxNXIPdci65Bw6IognqXHP6AwKZXpT6jCzjzq9uyHxVcud\n' +
'qw6j0kQw48/A5A6AN5fIVy1cKnd0sKdqRX1NUqVoiOrO4jaDB1IdLD+YmRE/JjOH\n' +
'sWIMElYCPxKqnsNo6VCslGX/ziinArHhqRBrHwIDAQABAoIBAHAdmpsN5iLvafjI\n' +
'f45+EBAhg6p8Uq102zx6CakNHniN8Y5hLL7RJtJRwDBNqKrGv93LUoQDRhXfGw+Y\n' +
'iF0NVIhVTF/5pU8VPGOcCr0JB96ilwZpWRPIQW7NZAMu/GBeiMYls/IB/TXrSnv9\n' +
'h6/nBfEkEXgkPqx7YA0m0L3NuV3U1lCY/LhBJY4Xvi0uRdqu3tTHXftehuPwC4UB\n' +
'42eJTWv/qLeOlkCdUUV4f7+dNaES88Vdhj6lu/BusnNhvnwHQik4dNwzPCGeP8NV\n' +
'5gaesWiNWFZuTURGKk1B65p5LzNPjsVT50RDuW8FnSZwIvNcohrX9ILPsmg/t0Kr\n' +
'ozcOksECgYEA4XWOK4twx5RG162zveRHqU7H9RBWSz7/PzM9Eob9vx/tC/b1YqBR\n' +
'VShk23vje19eNiYWAkxcpobIP4ek/0ZT8nHkJg8wl+J/hnXADcvwv2dKnoFnm5pn\n' +
'rTBUKc8R3wrSlAV8XQAtdnxsfFa5AOQJ6WFVI9AdfH3Iw8XZk4gIIPMCgYEAvRlY\n' +
'y80HnR3kwMOqY488V1qk41dmfNqa+YDL+zkPF1HhHI9VnK5BQuI7lyKJl984KwHu\n' +
'0gbwx3Wp4XkD5JUboEpl5LnaLsjEWemjTaQWdvJHPd5wkJ0m/jRQ2YeT4g2gFu4y\n' +
'Pi/pWkrzhnzQQVAmOdAm5Kj27LtDzp0lspw3uCUCgYEAw2YdvFGSgfZZW4147QeO\n' +
'sAbON+9bysUjdMPUl10VR/LEgA0d6MdnFfX3S13Y7tDdlvJ1OrKxzcWcgaru7ism\n' +
'kEXy5KVfiRNNUNx2gb6RvWEpA6zFfc9ZMXlkSAPlyjfX/1+tw/Bmdn0pjK2gk0wP\n' +
'5wtrPameFInzWPD9O+a2nM8CgYBZ6UhgNs+M9B7FTQOiLQPa4R2PfwobCXIwef4D\n' +
'KIE1bFgl1T02r2AWZi1BUkmr7ZXuVQ/xyx0HKbopm/mu4PruvxEtrPTB0/IQcleU\n' +
'XhXUXqRjFXXePOrCaaubkqxNCn95B67aBLvmk8awxn3a4DocuQ0VIgWuT+gQwIWh\n' +
'JEgWBQKBgQDKD+2Yh1/rUzu15lbPH0JSpozUinuFjePieR/4n+5CtEUxWJ2f0WeK\n' +
's4XWWf2qgUccjpiGju2UR840mgWROoZ8BfSTd5tg1F7bo0HMgu2hu0RIRpZcRhsA\n' +
'Cd0GrJvf1t0QIdDCXAy+RpgU1SLSq4Q6Lomc0WA5C5nBw9RKEUOV9A==\n' +
'-----END RSA PRIVATE KEY-----\n'
const PUBLIC_KEY_PEM =
'-----BEGIN PUBLIC KEY-----\n' +
'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApoocpO3bbUF6o8eyJlQC\n' +
'fwLahEsunWdVF++yOEyKu4Lp1j0m2j/P7iHOtxBAkjdM2X2oW3qO1mR0sIFefqnm\n' +
'93g0q2nRuYEoS+W3o6X50wjOVm8fr/tLqELzy5BoET0AQl7Axp1DNsb0HNOBcoIB\n' +
't+xVY4I+k6uXJJJMzbgvahAgSLZ9RW0Z0WT+dCHZpZUj0nLxNXIPdci65Bw6Iogn\n' +
'qXHP6AwKZXpT6jCzjzq9uyHxVcudqw6j0kQw48/A5A6AN5fIVy1cKnd0sKdqRX1N\n' +
'UqVoiOrO4jaDB1IdLD+YmRE/JjOHsWIMElYCPxKqnsNo6VCslGX/ziinArHhqRBr\n' +
'HwIDAQAB\n' +
'-----END PUBLIC KEY-----\n'
const createCertificate = ({
publicKey,
privateKey,
jwksOrigin
}) => {
const cert = forge.pki.createCertificate()
cert.publicKey = publicKey
cert.serialNumber = '123'
const attrs = [
{
name: 'commonName',
value: `${jwksOrigin}`
}
]
cert.validity.notBefore = new Date()
cert.validity.notAfter = new Date()
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 1)
cert.setSubject(attrs)
cert.setIssuer(attrs)
cert.sign(privateKey)
return forge.pki.certificateToPem(cert)
}
const getCertThumbprint = (certificate) => {
const shasum = createHash('sha1')
const der = Buffer.from(certificate).toString('binary')
shasum.update(der)
return shasum.digest('base64')
}
const createKeyPair = () => {
const privateKey = forge.pki.privateKeyFromPem(PRIVATE_KEY_PEM)
const publicKey = forge.pki.publicKeyFromPem(PUBLIC_KEY_PEM)
return {
privateKey,
publicKey
}
}
const bnToB64 = (bn) => {
let hex = BigInt(bn).toString(16)
if (hex.length % 2) {
hex = '0' + hex
}
const bin = []
let i = 0
let d
let b
while (i < hex.length) {
d = parseInt(hex.slice(i, i + 2), 16)
b = String.fromCharCode(d)
bin.push(b)
i += 2
}
return Buffer.from(bin.join(''), 'binary').toString('base64')
}
const setup = (jwksOrigin) => {
const { privateKey, publicKey } = createKeyPair()
const certPem = createCertificate({
jwksOrigin,
privateKey,
publicKey
})
const certDer = forge.util.encode64(
forge.asn1
.toDer(forge.pki.certificateToAsn1(forge.pki.certificateFromPem(certPem)))
.getBytes()
)
const thumbprint = base64url.encode(getCertThumbprint(certDer))
const helperKey = new NodeRSA()
helperKey.importKey(forge.pki.privateKeyToPem(privateKey))
const { n: modulus, e: exponent } = helperKey.exportKey('components')
return {
privateKey: forge.pki.privateKeyToPem(privateKey),
certDer,
thumbprint: thumbprint.toString(),
exponent: bnToB64(exponent),
modulus: modulus.toString('base64')
}
}
module.exports = setup
+1 -1
View File
@@ -14,7 +14,7 @@ spec:
spec:
containers:
- name: auth0mock
image: registry.gitlab.com/unboundsoftware/shiny/auth0mock:${COMMIT}
image: registry.gitlab.com/unboundsoftware/auth0mock:${COMMIT}
imagePullPolicy: "IfNotPresent"
resources:
requests:
+1 -1
View File
@@ -1,4 +1,4 @@
apiVersion: networking.k8s.io/v1beta1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: auth0-ingress
+12 -9
View File
@@ -6,23 +6,26 @@
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "nodemon ./app.js",
"start": "node ./app.js"
"start": "node ./app.js",
"lint:prettier": "prettier --check .",
"lint": "yarn lint:prettier",
"lintfix": "prettier --write --list-different ."
},
"author": "",
"license": "MIT",
"dependencies": {
"base64-url": "^2.3.3",
"body-parser": "^1.20.0",
"buffer": "^6.0.3",
"body-parser": "^1.20.2",
"cookie-parser": "^1.4.6",
"cors": "^2.8.3",
"debug": "^4.3.4",
"express": "^4.18.0",
"express": "^4.18.2",
"https-localhost": "^4.7.1",
"jsonwebtoken": "^8.5.1",
"node-forge": "^1.3.1",
"node-rsa": "^1.1.1",
"nodemon": "^2.0.15",
"jsonwebtoken": "^9.0.2",
"node-jose": "^2.2.0",
"nodemon": "^3.1.0",
"serve-favicon": "^2.4.2"
},
"devDependencies": {
"prettier": "^3.2.5"
}
}
+6
View File
@@ -0,0 +1,6 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
]
}
+18
View File
@@ -0,0 +1,18 @@
const fs = require('fs')
const setup = (usersFile) => {
let users = {}
if (fs.existsSync(usersFile)) {
console.log(`initial users file "${usersFile}" exists, reading`)
const read = fs.readFileSync(usersFile, { encoding: 'utf8', flag: 'r' })
users = JSON.parse(read)
for (let key of Object.keys(users)) {
users[key] = { ...users[key], email: key }
}
console.log('users:', users)
} else {
console.log(`initial users file "${usersFile}" missing`)
}
return users
}
module.exports = setup
+311 -850
View File
File diff suppressed because it is too large Load Diff