diff --git a/.github/workflows/deploy-to-heroku.yml b/.github/workflows/deploy-to-heroku.yml index f83e9c9be..c353cadca 100644 --- a/.github/workflows/deploy-to-heroku.yml +++ b/.github/workflows/deploy-to-heroku.yml @@ -11,8 +11,11 @@ on: workflow_dispatch: jobs: - # Build job + # Deployment job deploy: + environment: + name: heroku + url: https://theidserver-duende.herokuapp.com/ runs-on: ubuntu-latest steps: - name: Checkout @@ -34,5 +37,5 @@ jobs: heroku_api_key: ${{ secrets.HEROKU_API_KEY }} heroku_app_name: "theidserver-duende" heroku_email: "aguacongas@gmail.com" - buildpack: https://github.com/Aguafrommars/theidserver-buildpack + buildpack: https://github.com/Aguafrommars/theidserverbuildpack diff --git a/CHANGELOG.md b/CHANGELOG.md index 524d311a9..de5340f9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,201 @@ +## [8.0.1](https://github.com/Aguafrommars/TheIdServer/compare/8.0.0...8.0.1) (2024-09-22) + + +### Bug Fixes + +* src/Aguacongas.TheIdServer.BlazorApp/Dockerfile to reduce vulnerabilities ([b68f848](https://github.com/Aguafrommars/TheIdServer/commit/b68f848836ee42cafc63203c9d9349a88e0d3480)) +* src/Aguacongas.TheIdServer.BlazorApp/Dockerfile to reduce vulnerabilities ([563a921](https://github.com/Aguafrommars/TheIdServer/commit/563a921527ba9e1b2915ef8f25710e4bc4c1855f)) +* update packages ([ce93cf3](https://github.com/Aguafrommars/TheIdServer/commit/ce93cf3ce29768fcb440e3397235802d885f891b)) +* update packages ([bf40e27](https://github.com/Aguafrommars/TheIdServer/commit/bf40e27452f9ebb3355275d2f9345c235798a1b2)) +* update packages ([b5ccb7c](https://github.com/Aguafrommars/TheIdServer/commit/b5ccb7c224fb5158b5b8dae1e847d31c13a33040)) +* update packages ([e028248](https://github.com/Aguafrommars/TheIdServer/commit/e028248f540d27052fd7426f28c3b9d90ab7bd79)) +* update packages ([78b6f52](https://github.com/Aguafrommars/TheIdServer/commit/78b6f52d70de9d94bff0d15fa03002bfd7b6abd6)) +* update packages ([102747f](https://github.com/Aguafrommars/TheIdServer/commit/102747f6020fe0176c7291553c7e0919f745a801)) +* update packages ([b10d04a](https://github.com/Aguafrommars/TheIdServer/commit/b10d04a36b162afe23b5cd4020152b8ed47185b7)) +* update packages ([93bc1e3](https://github.com/Aguafrommars/TheIdServer/commit/93bc1e39055a8bdbbf8c59e97bd6474108d3d8fb)) +* update packages ([8bee2a7](https://github.com/Aguafrommars/TheIdServer/commit/8bee2a78613e57bb9d93e02d97a0c7d64ba54159)) +* update packages ([274cd50](https://github.com/Aguafrommars/TheIdServer/commit/274cd50ef8a2cc8af244cd5ce1be413c41ad9ae4)) +* update packages ([d6fd746](https://github.com/Aguafrommars/TheIdServer/commit/d6fd746f1835221e9bc4bf4d70171e9287b1a209)) +* update packages ([35428c0](https://github.com/Aguafrommars/TheIdServer/commit/35428c047fdf9824f02a84469eaeddd3c49b877c)) +* update packages ([2396709](https://github.com/Aguafrommars/TheIdServer/commit/2396709d0a73ed27f7d389f04a7a2d1a8f5b5204)) +* update packages ([380121a](https://github.com/Aguafrommars/TheIdServer/commit/380121ad4554cbbbd4c7367db0bf66647ed91bbf)) +* update packages ([6be7a08](https://github.com/Aguafrommars/TheIdServer/commit/6be7a0841fa93d847fba70a7c69f31538ece10cf)) +* update packages ([5be3266](https://github.com/Aguafrommars/TheIdServer/commit/5be32663375c627eb0f2d3c927dfd0a05e58124e)) +* update packages ([7c8275b](https://github.com/Aguafrommars/TheIdServer/commit/7c8275b5d58c99bc0817edd1abd7024537f33ac5)) +* update packages ([4459e06](https://github.com/Aguafrommars/TheIdServer/commit/4459e06e14992f03a87a29b27d536cd8fec107ee)) +* update packages ([be3b316](https://github.com/Aguafrommars/TheIdServer/commit/be3b3167127ba3c47add9c11dfa2091a30983583)) +* update packages ([76553cd](https://github.com/Aguafrommars/TheIdServer/commit/76553cd1f0e9bcedae01d4b0d044ed742213f0b5)) +* update packages ([fd3c47b](https://github.com/Aguafrommars/TheIdServer/commit/fd3c47bc87ff732e2c10c3eafc390597c49631ff)) +* update packages ([b3c4158](https://github.com/Aguafrommars/TheIdServer/commit/b3c415884c96344bd9e5e5668ce67bbe882ec9cd)) +* update packages ([1c0ed3f](https://github.com/Aguafrommars/TheIdServer/commit/1c0ed3fd7a387abc9b8918dd4cb9c55e8f803282)) +* update packages ([4b71bb0](https://github.com/Aguafrommars/TheIdServer/commit/4b71bb0b2de83091e2191824fba0e4da469a7574)) +* update packages ([10a3730](https://github.com/Aguafrommars/TheIdServer/commit/10a3730e64e38c6b1983a5a640b25dd0f9a7b0a7)) +* update packages ([f2dc6bc](https://github.com/Aguafrommars/TheIdServer/commit/f2dc6bc86aae6095d2dde90cd4c09f5cf8ca0fe4)) +* update packages ([61fb5b6](https://github.com/Aguafrommars/TheIdServer/commit/61fb5b64bbbbf6abdd339d764a64c57d582432ea)) +* update packages ([6f4bfcb](https://github.com/Aguafrommars/TheIdServer/commit/6f4bfcb5e545edca7576765663c29d284b7010a8)) +* update packages ([51de330](https://github.com/Aguafrommars/TheIdServer/commit/51de3308a84906bb6a4ddd6fc546c7e13121eba3)) +* update packages ([10fb08b](https://github.com/Aguafrommars/TheIdServer/commit/10fb08b0c067396e58f4c5358475e487b5b08179)) +* update packages ([f3088c8](https://github.com/Aguafrommars/TheIdServer/commit/f3088c845f8d039910692e55afd85b542e9dadb5)) +* update packages ([6f081ce](https://github.com/Aguafrommars/TheIdServer/commit/6f081ce0f091c5f3167ad36b4ebaff3e2c48e061)) +* update packages ([c6bbd62](https://github.com/Aguafrommars/TheIdServer/commit/c6bbd6220b14045dab04bff62d33c62886a57ad6)) +* update packages ([efc28df](https://github.com/Aguafrommars/TheIdServer/commit/efc28dff2987519ec6002749203d2ccc1b510b51)) +* update packages ([1caadac](https://github.com/Aguafrommars/TheIdServer/commit/1caadac5753a53e62b4c034ea9332e77601edc6a)) +* update packages ([9011af4](https://github.com/Aguafrommars/TheIdServer/commit/9011af4b5f9721f653e023402b69e3ca4b3655cf)) +* update packages ([2cb3ef0](https://github.com/Aguafrommars/TheIdServer/commit/2cb3ef0db262c444a4813e3339eec797b5886368)) +* update packages ([475aed9](https://github.com/Aguafrommars/TheIdServer/commit/475aed9d5a777bb515dd282a4ceaa5bc616adfbe)) +* update packages ([f002e68](https://github.com/Aguafrommars/TheIdServer/commit/f002e684f2f1931b36dd0ee44a3298c47b9f930b)) +* update packages ([1bf248c](https://github.com/Aguafrommars/TheIdServer/commit/1bf248c3af47dcc27be8165d5af56746de4bc53a)) +* update packages ([03a9479](https://github.com/Aguafrommars/TheIdServer/commit/03a9479583a71368ef8302d59595f06b95a6d5dd)) +* update packages ([5c748b5](https://github.com/Aguafrommars/TheIdServer/commit/5c748b584aa2de3be55dc5a05e6e0e2c418a91d4)) +* update packages ([f859e7b](https://github.com/Aguafrommars/TheIdServer/commit/f859e7b0d6f4fa0cf240b0b8b93c184284a07b82)) +* update packages ([a408d56](https://github.com/Aguafrommars/TheIdServer/commit/a408d56b85fc9e916fd73d480a171fd0c5958bc0)) +* update packages ([74c00c8](https://github.com/Aguafrommars/TheIdServer/commit/74c00c84dcd13b5324b227c21bf7190e15c2c9e9)) +* update packages ([9bce3ec](https://github.com/Aguafrommars/TheIdServer/commit/9bce3ec8817f682901c4b65c7222045557ae071b)) +* update packages ([83dadc7](https://github.com/Aguafrommars/TheIdServer/commit/83dadc750d88e89db92c4845ba953e82ed440547)) +* update packages ([55f97dd](https://github.com/Aguafrommars/TheIdServer/commit/55f97dd39ee455d88cd7c46bb1c9a7209ba97c0b)) +* update packages ([f9f9dc4](https://github.com/Aguafrommars/TheIdServer/commit/f9f9dc4a572f483ef3ac06dcf65d9dc5ea2857a8)) +* update packages ([d87350a](https://github.com/Aguafrommars/TheIdServer/commit/d87350a2138907562c42504c3ef0063b31def193)) +* update packages ([ef00192](https://github.com/Aguafrommars/TheIdServer/commit/ef00192a0d1a3ca4a374e2541d14cce3ece24d15)) +* update packages ([f705055](https://github.com/Aguafrommars/TheIdServer/commit/f7050553a935a1a7131be0a384c8eb43f26cc5f6)) +* update packages ([45df3d6](https://github.com/Aguafrommars/TheIdServer/commit/45df3d62ffd7f136a616819229f48c194b3e896f)) +* update packages ([0ef93c0](https://github.com/Aguafrommars/TheIdServer/commit/0ef93c0e833e24a14304ad554226d4986f5e4432)) +* update packages ([208edf4](https://github.com/Aguafrommars/TheIdServer/commit/208edf403aa6adc47ec26a2233139573d020aeb9)) +* update packages ([c8ac042](https://github.com/Aguafrommars/TheIdServer/commit/c8ac0425f8d40617e1ca7189ffb375c8b1abc98b)) +* update packages ([7e74d0b](https://github.com/Aguafrommars/TheIdServer/commit/7e74d0b2e3a6d86af8bf80dae36c37d30f016c31)) +* update packages ([2965b6f](https://github.com/Aguafrommars/TheIdServer/commit/2965b6f713d4ec8ac0dddd6da52a87e0594bb030)) +* update packages ([e1c21c3](https://github.com/Aguafrommars/TheIdServer/commit/e1c21c38c2d5f04237c62c68b5f9642b51d8c87e)) +* update packages ([c2a262b](https://github.com/Aguafrommars/TheIdServer/commit/c2a262b35f45c5f09f8cef4a50b9438f085a9a1d)) +* update packages ([4de34b7](https://github.com/Aguafrommars/TheIdServer/commit/4de34b7a88dc31de689a5ea17898056bfe050e56)) +* update packages ([a21ed94](https://github.com/Aguafrommars/TheIdServer/commit/a21ed9408656e566ad6ee1677b020340844ccb5c)) +* update packages ([2b60184](https://github.com/Aguafrommars/TheIdServer/commit/2b60184103af6265a25ea759b4dc6f31497b3953)) +* update packages ([92bdf7b](https://github.com/Aguafrommars/TheIdServer/commit/92bdf7b0c416b38146cc956c3da9e964f6452bec)) +* update packages ([a7a6f9a](https://github.com/Aguafrommars/TheIdServer/commit/a7a6f9aa23d2264934c40e9013ebf979293dcf7d)) +* update packages ([3779698](https://github.com/Aguafrommars/TheIdServer/commit/3779698673ae16965ccaeb5aee9da982e0a4bf17)) +* update packages ([f50c08b](https://github.com/Aguafrommars/TheIdServer/commit/f50c08bc2125cd0a38d6e9e924b967a7efd030b5)) +* update packages ([bb52a22](https://github.com/Aguafrommars/TheIdServer/commit/bb52a22a0e9731f63149283a63ff404ca979ff6f)) +* update packages ([fd2d6c0](https://github.com/Aguafrommars/TheIdServer/commit/fd2d6c09e1595f3c6698d4473f23a29c4ceda54f)) +* update packages ([c1c37d3](https://github.com/Aguafrommars/TheIdServer/commit/c1c37d389538097770268cafda0ee44fe6745ea5)) +* update packages ([36f6b12](https://github.com/Aguafrommars/TheIdServer/commit/36f6b120b3b98ed7526bf2d5449f877e175d28b3)) +* update packages ([d8a0d3e](https://github.com/Aguafrommars/TheIdServer/commit/d8a0d3e2680180693cc2e8a19a0d85be14d5531b)) +* update packages ([0078fd6](https://github.com/Aguafrommars/TheIdServer/commit/0078fd61216e6e2ca437993aaa3da2a5dd1e3e4e)) +* update packages ([b3fbf09](https://github.com/Aguafrommars/TheIdServer/commit/b3fbf096d2f85cfe206af176ddd60d1173fdb963)) +* update packages ([c79f812](https://github.com/Aguafrommars/TheIdServer/commit/c79f81296404b0dc186bc215e2efb8e1f9b2e78d)) +* update packages ([b946507](https://github.com/Aguafrommars/TheIdServer/commit/b946507a45119b137fe119082d2f70dfbfe63c88)) +* update packages ([4faf389](https://github.com/Aguafrommars/TheIdServer/commit/4faf3891c5cee6415d4011fd620a81bd54bf1899)) +* update packages ([24da3b7](https://github.com/Aguafrommars/TheIdServer/commit/24da3b7a8933af2f2041624aa8f58fc3405a823f)) +* update packages ([3cf755c](https://github.com/Aguafrommars/TheIdServer/commit/3cf755cf078fd0ed3d94c0413f31a295755c28fa)) +* update packages ([d0bba43](https://github.com/Aguafrommars/TheIdServer/commit/d0bba43048cce6a0f94052baebb38cb69daa822d)) +* update packages ([448a5b3](https://github.com/Aguafrommars/TheIdServer/commit/448a5b3842f8f894ddc3c9415a8b68df8e8e443a)) +* update packages ([c62731f](https://github.com/Aguafrommars/TheIdServer/commit/c62731f88cd8978eb0fb59e98bc6d5d18efd6796)) +* update packages ([0d9cd34](https://github.com/Aguafrommars/TheIdServer/commit/0d9cd349cd90dba7d3847721e7b3dc13641e9d08)) + +# [8.0.0](https://github.com/Aguafrommars/TheIdServer/compare/7.4.6...8.0.0) (2024-03-09) + + +### Bug Fixes + +* check dependencies whem latest not found ([2e7def4](https://github.com/Aguafrommars/TheIdServer/commit/2e7def49701b074d49973f9df5c904017c2f2ab6)) +* middleware pipeline ([c5c04d3](https://github.com/Aguafrommars/TheIdServer/commit/c5c04d3a265a46202ade2cb6629950e929d89a4c)) +* oidc configuration serialization ([8cdd617](https://github.com/Aguafrommars/TheIdServer/commit/8cdd6173d646b80a7d379ce102cf191475534d52)) +* return null when entity is null ([c380b41](https://github.com/Aguafrommars/TheIdServer/commit/c380b41556a0f9a433faf348500ecd7bcc3f6e76)), closes [#1188](https://github.com/Aguafrommars/TheIdServer/issues/1188) +* update packages ([5318170](https://github.com/Aguafrommars/TheIdServer/commit/53181701cbfa5e0c131a0abe3afd889393b08b3e)) +* update packages ([61dbc3e](https://github.com/Aguafrommars/TheIdServer/commit/61dbc3e2dd9632614be3b23e93543ef92354b203)) +* update packages ([32fa2d7](https://github.com/Aguafrommars/TheIdServer/commit/32fa2d7db3506b696e31e5c765b18c35f11763c3)) +* update packages ([ac318d1](https://github.com/Aguafrommars/TheIdServer/commit/ac318d1353fbb4cd3b30295241390a899f507e47)) +* update packages ([19e4256](https://github.com/Aguafrommars/TheIdServer/commit/19e4256bda5c51c1331d19ad8945f40c088dd683)) +* update packages ([d850684](https://github.com/Aguafrommars/TheIdServer/commit/d85068448f7a4bb7f42c7fbde37d070e06681b64)) +* update packages ([48dbd44](https://github.com/Aguafrommars/TheIdServer/commit/48dbd44fa459f57f6d1978477c14d593af12ce43)) +* update packages ([1e304d0](https://github.com/Aguafrommars/TheIdServer/commit/1e304d0c901bbc398a0f0fe4a7bad57788ce5e8f)) +* update packages ([4dacc38](https://github.com/Aguafrommars/TheIdServer/commit/4dacc38a563f8811e1ad08bace3100ca03a2f7db)) +* update packages ([6edadb5](https://github.com/Aguafrommars/TheIdServer/commit/6edadb5609108ba4da7fff88dc36ca228d41e675)) +* update packages ([ea92009](https://github.com/Aguafrommars/TheIdServer/commit/ea92009ad5d728abada75a8770b4ffdfd87976df)) +* update packages ([d7530bb](https://github.com/Aguafrommars/TheIdServer/commit/d7530bbb0be995f93a9d428218ee0fdb8bd55dba)) +* update packages ([a6bbb89](https://github.com/Aguafrommars/TheIdServer/commit/a6bbb89b5720172cb5009707a95d6ce026da40da)) +* update packages ([288711a](https://github.com/Aguafrommars/TheIdServer/commit/288711a1a533e7a4849d23e2fb361dfb413031c2)) +* update packages ([c60bc5d](https://github.com/Aguafrommars/TheIdServer/commit/c60bc5d24c5da24fb1143f642e3801c3e7a1bac0)) +* update packages ([319e46c](https://github.com/Aguafrommars/TheIdServer/commit/319e46c51499e144c3ec9ac9bc8a01083cd9bd75)) +* update packages ([e6da0ba](https://github.com/Aguafrommars/TheIdServer/commit/e6da0ba8df27dd81d67477e8b245b003207dcc18)) +* update packages ([15188e6](https://github.com/Aguafrommars/TheIdServer/commit/15188e63cfc62856c04300f48d13d84f5a94eb32)) +* update packages ([ea52768](https://github.com/Aguafrommars/TheIdServer/commit/ea527688e1062f3fd060f5eb4f6e30596d78f53b)) +* update packages ([22d7859](https://github.com/Aguafrommars/TheIdServer/commit/22d7859b9310dce9fa7d492ac11326c9329ece56)) +* update packages ([76ac141](https://github.com/Aguafrommars/TheIdServer/commit/76ac14181533b326a732f6fee57806a26f6505b0)) +* update packages ([5969385](https://github.com/Aguafrommars/TheIdServer/commit/596938514b34f3ef1600068fa6ab9b60b5b4bce2)) +* update packages ([d76c3e9](https://github.com/Aguafrommars/TheIdServer/commit/d76c3e92a9b985d80d6749a3ca1e848f8b01d0ef)) +* update packages ([02db302](https://github.com/Aguafrommars/TheIdServer/commit/02db302d197c693321230423cf5199c15059fa5b)) +* update packages ([39a4a6f](https://github.com/Aguafrommars/TheIdServer/commit/39a4a6fd3ad30ba072e0d23c9e99f47006a79d62)) +* update packages ([0a917a0](https://github.com/Aguafrommars/TheIdServer/commit/0a917a0f7659cd0d4426ffd9608a8531178dbac8)) +* update packages ([4c0aac9](https://github.com/Aguafrommars/TheIdServer/commit/4c0aac99cba11fe99b60dd5327887ffda89af889)) +* update packages ([e82be27](https://github.com/Aguafrommars/TheIdServer/commit/e82be27666122b0fa24600f8335a9e4a2a45673d)) +* update packages ([c9476b0](https://github.com/Aguafrommars/TheIdServer/commit/c9476b04c1a051ad3a2a8fba75a64ac081cc03be)) +* update packages ([83be04f](https://github.com/Aguafrommars/TheIdServer/commit/83be04f848b57cbfe379fd049ddab42164fb34ed)) +* update packages ([54f46d8](https://github.com/Aguafrommars/TheIdServer/commit/54f46d802ee4106514eed8e922ed1bb68a204a6b)) +* update packages ([943dfe7](https://github.com/Aguafrommars/TheIdServer/commit/943dfe78b3b66df83d521173dfab0cb038dd2ea3)) +* update packages ([ed3e0da](https://github.com/Aguafrommars/TheIdServer/commit/ed3e0da59c570e2bc79be49b0a2aa83096b35039)) +* update packages ([bd1880c](https://github.com/Aguafrommars/TheIdServer/commit/bd1880cfab16e2242d0435d6abd391389c108667)) +* update packages ([f583676](https://github.com/Aguafrommars/TheIdServer/commit/f5836761ef9c57dabc867fb9006b2ebafb97ef1d)) +* update packages ([19af2a5](https://github.com/Aguafrommars/TheIdServer/commit/19af2a51363195a67abc6cdf9ad3c9ab0c2ae96a)) +* update packages ([837b340](https://github.com/Aguafrommars/TheIdServer/commit/837b3402ce17debd6927396b469ea49761fe2d58)) +* update packages ([733f334](https://github.com/Aguafrommars/TheIdServer/commit/733f334f7b3ca2e6bc0b9fc2dae4483ed4ab11b6)) +* update packages ([2343523](https://github.com/Aguafrommars/TheIdServer/commit/2343523ecdf14fb8ad493a72687411cb04b8eefd)) +* update packages ([179de45](https://github.com/Aguafrommars/TheIdServer/commit/179de4599eb87463225c3d4f8e9d461319d2a0ed)) +* update packages ([fb93717](https://github.com/Aguafrommars/TheIdServer/commit/fb9371737177d3182c38415bf1059a4ddc1819e4)) +* update packages ([59028a9](https://github.com/Aguafrommars/TheIdServer/commit/59028a92de3ef251d85c998ec27104ff7df7a3d4)) +* update packages ([70bb8ab](https://github.com/Aguafrommars/TheIdServer/commit/70bb8abec277839a5ef01ea3b46185149dc52ff9)) +* update packages ([1f64bbf](https://github.com/Aguafrommars/TheIdServer/commit/1f64bbf211736ba77b3dda095b8feee08127359c)) +* update packages ([8da3b40](https://github.com/Aguafrommars/TheIdServer/commit/8da3b40b07aff6777c88df5745c58ebf4b38fccf)) +* update packages ([024f4a7](https://github.com/Aguafrommars/TheIdServer/commit/024f4a7dfb5db50ec3e6292bf590f12b18b1cc24)) +* update packages ([1a0753e](https://github.com/Aguafrommars/TheIdServer/commit/1a0753ec462b92598d85cd37891485014a031d4f)) +* update packages ([3f607f6](https://github.com/Aguafrommars/TheIdServer/commit/3f607f6d7fccae68d8f8f912ed54bf28e086aff7)) +* update packages ([1fa6a62](https://github.com/Aguafrommars/TheIdServer/commit/1fa6a62b5f2372fa8b50464247bc4f157862d4d2)) +* update packages ([597210c](https://github.com/Aguafrommars/TheIdServer/commit/597210c95b565af9910a709eff02640341a88730)) +* update packages ([df68d4f](https://github.com/Aguafrommars/TheIdServer/commit/df68d4f4db2de7f0840d3e2f714f7f7e63561b14)) +* update packages ([5e2d73e](https://github.com/Aguafrommars/TheIdServer/commit/5e2d73e0080ffb0ca95104fa7060db1bff513af7)) +* update packages ([887cb4d](https://github.com/Aguafrommars/TheIdServer/commit/887cb4da7f124e3011e9e95de14cb421b8b73132)) +* update packages ([2f110e2](https://github.com/Aguafrommars/TheIdServer/commit/2f110e2d582f215f4d87917eb3f05eb664d54e39)) +* update packages ([df057a2](https://github.com/Aguafrommars/TheIdServer/commit/df057a2d16561949a42077af7f936dd4691703c7)) +* update packages ([67bc810](https://github.com/Aguafrommars/TheIdServer/commit/67bc810209fad473ed5aaa61abbc99902fe11a54)) +* update packages ([37d2bb9](https://github.com/Aguafrommars/TheIdServer/commit/37d2bb977d239ab3af236378cb26c8d1554c794b)) +* update packages ([8c036ae](https://github.com/Aguafrommars/TheIdServer/commit/8c036ae64f1edf32757e8ca11c4eb08884c457e9)) +* update packages ([386f684](https://github.com/Aguafrommars/TheIdServer/commit/386f684cba5bffb61b9f6e3d92d5ad5ac565f76c)) +* update packages ([0c36cac](https://github.com/Aguafrommars/TheIdServer/commit/0c36cacf0fc0a1410c538280f2d98d2144485e4a)) +* update packages ([ef8891b](https://github.com/Aguafrommars/TheIdServer/commit/ef8891b174318100ae4b566779e4bee2d1d10810)) +* update packages ([3e3c89a](https://github.com/Aguafrommars/TheIdServer/commit/3e3c89a876862db8165ef6966eaa966beddb9719)) +* update packages ([25978ce](https://github.com/Aguafrommars/TheIdServer/commit/25978ce98b8d595034430b0589cd9dbf4687ba55)) +* update packages ([c2b1b9e](https://github.com/Aguafrommars/TheIdServer/commit/c2b1b9e97af5d5ec6ed92fe26cf81d1e798015e5)) + + +### Build System + +* .net 8 rc1 ([1568bcc](https://github.com/Aguafrommars/TheIdServer/commit/1568bcc854bad8ca4dbc3ba86aaab2868d96aa23)) +* bump sdk & dependencies to .Net 8 RC2 ([21d6c17](https://github.com/Aguafrommars/TheIdServer/commit/21d6c171167e5cd67a4f7b7a47c933b50fae8283)) +* remove deprecated opentelemetry pacakegs ([99bee99](https://github.com/Aguafrommars/TheIdServer/commit/99bee99a9f6f920f2594c27b78107e612d1471c7)) + + +* 8.0.0 preview (#1136) (#1138) ([6974107](https://github.com/Aguafrommars/TheIdServer/commit/697410781f9e4e5fe8ad9afe71cbd81ac7f82290)), closes [#1136](https://github.com/Aguafrommars/TheIdServer/issues/1136) [#1138](https://github.com/Aguafrommars/TheIdServer/issues/1138) +* 8.0.0 preview (#1136) ([ef09208](https://github.com/Aguafrommars/TheIdServer/commit/ef09208017daac52348a90be8bc58bb4db66bb22)), closes [#1136](https://github.com/Aguafrommars/TheIdServer/issues/1136) + + +### Features + +* argon 2 password hasher ([ae23dc0](https://github.com/Aguafrommars/TheIdServer/commit/ae23dc0d490a2098d7de62d9e56ec9297068b611)), closes [#441](https://github.com/Aguafrommars/TheIdServer/issues/441) +* bcrypt password hasher ([76cda86](https://github.com/Aguafrommars/TheIdServer/commit/76cda8694529638b08115ac5afe3584472352df6)), closes [#441](https://github.com/Aguafrommars/TheIdServer/issues/441) +* dynamic client registration with par ([8875cca](https://github.com/Aguafrommars/TheIdServer/commit/8875cca81503488217fdcb33e89489eabd777cb8)) +* password migration ([acf59be](https://github.com/Aguafrommars/TheIdServer/commit/acf59be2b942527f50089093f82295a5bbc88f0f)), closes [#441](https://github.com/Aguafrommars/TheIdServer/issues/441) +* push authorization request configuration ([e910664](https://github.com/Aguafrommars/TheIdServer/commit/e910664ae0903340d43236c317ab8be8d2dbfe66)) +* push autorization request ([bdedc2a](https://github.com/Aguafrommars/TheIdServer/commit/bdedc2a2186f17718658d508fdf04dc65fdc0650)) +* scrypt password hasher ([cb26092](https://github.com/Aguafrommars/TheIdServer/commit/cb26092943d4ce6a7747bc61b28ef61fbfcb1bf1)) +* scrypt password hasher ([b1b8063](https://github.com/Aguafrommars/TheIdServer/commit/b1b806302d4d16334016619834f9cbac20222c47)) +* upgrade password hash ([42b9352](https://github.com/Aguafrommars/TheIdServer/commit/42b93525b3653726d53e489315d1d3aedc9fa66c)), closes [#441](https://github.com/Aguafrommars/TheIdServer/issues/441) + + +### BREAKING CHANGES + +* Jaeger configuration removed +* .Net 8 +* .Net 8 +* .Net 8 RC2 +* .Net 8 RC1 + ## [7.4.6](https://github.com/Aguafrommars/TheIdServer/compare/7.4.5...7.4.6) (2023-10-28) diff --git a/GitVersion.yml b/GitVersion.yml index 49eab7afd..056f00008 100644 --- a/GitVersion.yml +++ b/GitVersion.yml @@ -1,16 +1,17 @@ mode: ContinuousDelivery branches: master: - tag: ci - is-mainline: false + regex: master + label: ci + is-main-branch: false release: regex: release/ - tag: '' - is-mainline: true + label: '' + is-main-branch: true preview: regex: preview/ - tag: 'preview' - is-mainline: true + label: 'preview' + is-main-branch: true source-branches: ['master'] ignore: sha: [] \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 21f60f27c..0d06db93a 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -14,15 +14,15 @@ services: environment: GITHUB_TOKEN: secure: /o9VAhx5ewGmdLR9qcgFJMzBaCuzOmGlsXAHu7khUJLdQzsv4gJzLUfYDghcRPHd - donetsdk: 8.0.100 + donetsdk: 8.0.403 JAVA_HOME: C:\Program Files\Java\jdk19 PATH: $(JAVA_HOME)\bin;$(PATH) init: - cmd: git config --global core.autocrlf true install: - - ps: Install-Product node 18 x64 - - ps: .\dotnet-install.ps1 -Version 7.0.11 -Runtime dotnet -Architecture x64 -InstallDir "C:\Program Files\dotnet" - - ps: .\dotnet-install.ps1 -Version 7.0.11 -Runtime aspnetcore -Architecture x64 -InstallDir "C:\Program Files\dotnet" + - ps: Install-Product node 20 x64 + - ps: .\dotnet-install.ps1 -Version 7.0.16 -Runtime dotnet -Architecture x64 -InstallDir "C:\Program Files\dotnet" + - ps: .\dotnet-install.ps1 -Version 7.0.16 -Runtime aspnetcore -Architecture x64 -InstallDir "C:\Program Files\dotnet" - ps: .\dotnet-install.ps1 -Version $env:donetsdk -InstallDir "C:\Program Files\dotnet" - ps: dotnet tool install --global GitVersion.Tool - ps: dotnet gitversion /l console /output buildserver @@ -48,7 +48,7 @@ artifacts: deploy: - provider: NuGet api_key: - secure: L5Ol2yiygLW8nUF6j5/rwx4feonMPly+S69GjoX1ilEUklPMixlX5RW2l8FJScNK + secure: UCcGrUEujBVjkw4G9l6ebB4iWv8EBGNNP8FdzZQDT0GpGgCnaBRmmfdS+5ejk5EB on: branch: - /^preview\/\d+.\d+.\d+$/ diff --git a/doc/OPEN_TELEMETRY.md b/doc/OPEN_TELEMETRY.md index acdcd749e..05b837c5b 100644 --- a/doc/OPEN_TELEMETRY.md +++ b/doc/OPEN_TELEMETRY.md @@ -188,31 +188,6 @@ To enable the [OTLP endpoint or Collector](https://opentelemetry.io/docs/collect `OpenTelemetryProtocol` is deserialized into a [`OtlpExporterOptions`](https://github.com/open-telemetry/opentelemetry-dotnet/blob/4b3ee96ffc39bc24c3b8377455b2c099bd9da6b0/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs) instance. -#### Jaeger - -To enable the [Jaeger](https://www.jaegertracing.io/) exporter setup the `Jaeger` node: - -```json -{ - "OpenTelemetryOptions": { - "Trace": { - "Jaeger": { - "AgentHost": "exemple.com", //required - "AgentPort": 443 , - "ExportProcessorType": "Batch", - "BatchExportProcessorOptions": { - "BatchExportProcessorOptions": 2048, - "ScheduledDelayMilliseconds": 5000, - "ExporterTimeoutMilliseconds": 30000, - "MaxExportBatchSize": 512 - } - } - } - } -} -``` - -`Jaeger` is deserialized into a [`JaegerExporterOptions`](https://github.com/open-telemetry/opentelemetry-dotnet/blob/main/src/OpenTelemetry.Exporter.Jaeger/JaegerExporterOptionsExtensions.cs) instance. #### Zipkin diff --git a/sample/Aguacongas.TheIdServer.ApiSample/Aguacongas.TheIdServer.ApiSample.csproj b/sample/Aguacongas.TheIdServer.ApiSample/Aguacongas.TheIdServer.ApiSample.csproj index dc260d379..a44eda259 100644 --- a/sample/Aguacongas.TheIdServer.ApiSample/Aguacongas.TheIdServer.ApiSample.csproj +++ b/sample/Aguacongas.TheIdServer.ApiSample/Aguacongas.TheIdServer.ApiSample.csproj @@ -13,9 +13,9 @@ - - - + + + diff --git a/sample/Aguacongas.TheIdServer.CibaSample/Aguacongas.TheIdServer.CibaSample.csproj b/sample/Aguacongas.TheIdServer.CibaSample/Aguacongas.TheIdServer.CibaSample.csproj index 2588ecca6..c82b84644 100644 --- a/sample/Aguacongas.TheIdServer.CibaSample/Aguacongas.TheIdServer.CibaSample.csproj +++ b/sample/Aguacongas.TheIdServer.CibaSample/Aguacongas.TheIdServer.CibaSample.csproj @@ -9,7 +9,7 @@ - + diff --git a/sample/Aguacongas.TheIdServer.ClientCredentialSample/Aguacongas.TheIdServer.ClientCredentialSample.csproj b/sample/Aguacongas.TheIdServer.ClientCredentialSample/Aguacongas.TheIdServer.ClientCredentialSample.csproj index 92efdb381..9de2a02f8 100644 --- a/sample/Aguacongas.TheIdServer.ClientCredentialSample/Aguacongas.TheIdServer.ClientCredentialSample.csproj +++ b/sample/Aguacongas.TheIdServer.ClientCredentialSample/Aguacongas.TheIdServer.ClientCredentialSample.csproj @@ -15,7 +15,7 @@ - + diff --git a/sample/Aguacongas.TheIdServer.CustomClaimsProvider/Aguacongas.TheIdServer.CustomClaimsProviders.csproj b/sample/Aguacongas.TheIdServer.CustomClaimsProvider/Aguacongas.TheIdServer.CustomClaimsProviders.csproj index 7d4f7dc1b..4619e8555 100644 --- a/sample/Aguacongas.TheIdServer.CustomClaimsProvider/Aguacongas.TheIdServer.CustomClaimsProviders.csproj +++ b/sample/Aguacongas.TheIdServer.CustomClaimsProvider/Aguacongas.TheIdServer.CustomClaimsProviders.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/sample/Aguacongas.TheIdServer.DeviceFlowSample/Aguacongas.TheIdServer.DeviceFlowSample.csproj b/sample/Aguacongas.TheIdServer.DeviceFlowSample/Aguacongas.TheIdServer.DeviceFlowSample.csproj index 71a021f51..2516b38b5 100644 --- a/sample/Aguacongas.TheIdServer.DeviceFlowSample/Aguacongas.TheIdServer.DeviceFlowSample.csproj +++ b/sample/Aguacongas.TheIdServer.DeviceFlowSample/Aguacongas.TheIdServer.DeviceFlowSample.csproj @@ -15,7 +15,7 @@ - + diff --git a/sample/Aguacongas.TheIdServer.MtlsSample/Aguacongas.TheIdServer.MtlsSample.csproj b/sample/Aguacongas.TheIdServer.MtlsSample/Aguacongas.TheIdServer.MtlsSample.csproj index d8974298c..33917af43 100644 --- a/sample/Aguacongas.TheIdServer.MtlsSample/Aguacongas.TheIdServer.MtlsSample.csproj +++ b/sample/Aguacongas.TheIdServer.MtlsSample/Aguacongas.TheIdServer.MtlsSample.csproj @@ -9,7 +9,7 @@ - + diff --git a/sample/Aguacongas.TheIdServer.MvcClient/Aguacongas.TheIdServer.MvcClient.csproj b/sample/Aguacongas.TheIdServer.MvcClient/Aguacongas.TheIdServer.MvcClient.csproj index 4c8189d58..810006a23 100644 --- a/sample/Aguacongas.TheIdServer.MvcClient/Aguacongas.TheIdServer.MvcClient.csproj +++ b/sample/Aguacongas.TheIdServer.MvcClient/Aguacongas.TheIdServer.MvcClient.csproj @@ -14,10 +14,10 @@ - - - - + + + + diff --git a/sample/Aguacongas.TheIdServer.WsFederationSample/Aguacongas.TheIdServer.WsFederationSample.csproj b/sample/Aguacongas.TheIdServer.WsFederationSample/Aguacongas.TheIdServer.WsFederationSample.csproj index e53310e45..62dfd4d68 100644 --- a/sample/Aguacongas.TheIdServer.WsFederationSample/Aguacongas.TheIdServer.WsFederationSample.csproj +++ b/sample/Aguacongas.TheIdServer.WsFederationSample/Aguacongas.TheIdServer.WsFederationSample.csproj @@ -6,9 +6,9 @@ - - - + + + diff --git a/sample/Aguacongas.TheIdentityServer.SpaSample/Aguacongas.TheIdentityServer.SpaSample.csproj b/sample/Aguacongas.TheIdentityServer.SpaSample/Aguacongas.TheIdentityServer.SpaSample.csproj index 563fcc24c..922339693 100644 --- a/sample/Aguacongas.TheIdentityServer.SpaSample/Aguacongas.TheIdentityServer.SpaSample.csproj +++ b/sample/Aguacongas.TheIdentityServer.SpaSample/Aguacongas.TheIdentityServer.SpaSample.csproj @@ -13,11 +13,11 @@ - - - - - + + + + + diff --git a/sample/DPoP/Api/ApiHost.csproj b/sample/DPoP/Api/ApiHost.csproj index 30e1eee03..4b6c0aaa4 100644 --- a/sample/DPoP/Api/ApiHost.csproj +++ b/sample/DPoP/Api/ApiHost.csproj @@ -5,9 +5,9 @@ - - - + + + \ No newline at end of file diff --git a/sample/DPoP/ClientCredentials/ClientCredentials.csproj b/sample/DPoP/ClientCredentials/ClientCredentials.csproj index 9a2fdd13c..6d4ecc229 100644 --- a/sample/DPoP/ClientCredentials/ClientCredentials.csproj +++ b/sample/DPoP/ClientCredentials/ClientCredentials.csproj @@ -6,8 +6,8 @@ - - - + + + diff --git a/sample/DPoP/WebClient/WebClient.csproj b/sample/DPoP/WebClient/WebClient.csproj index a53912fb5..dd96a085d 100644 --- a/sample/DPoP/WebClient/WebClient.csproj +++ b/sample/DPoP/WebClient/WebClient.csproj @@ -5,9 +5,9 @@ - - - + + + \ No newline at end of file diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/Aguacongas.TheIdServer.Api.csproj b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Aguacongas.TheIdServer.Api.csproj index a6b70a396..b1192567f 100644 --- a/sample/MultiTiers/Aguacongas.TheIdServer.Api/Aguacongas.TheIdServer.Api.csproj +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Aguacongas.TheIdServer.Api.csproj @@ -35,24 +35,29 @@ 1701;1702;NU1603 - - - - - - - + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - + + + + + + + + + + + + + + diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/ClientConfigurationValidator.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Api/ClientConfigurationValidator.cs new file mode 100644 index 000000000..d4ee8d922 --- /dev/null +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/ClientConfigurationValidator.cs @@ -0,0 +1,10 @@ +using Duende.IdentityServer.Validation; +using System.Threading.Tasks; + +namespace Aguacongas.TheIdServer.Api; + +public class EmptyClientConfigurationValidator : IClientConfigurationValidator +{ + public Task ValidateAsync(ClientConfigurationValidationContext context) + => Task.CompletedTask; +} diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/Clock.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Clock.cs new file mode 100644 index 000000000..c2b419bfa --- /dev/null +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Clock.cs @@ -0,0 +1,11 @@ +// Project: Aguafrommars/TheIdServer +// Copyright (c) 2023 @Olivier Lefebvre +using Duende.IdentityServer; +using System; + +namespace Aguacongas.TheIdServer.Api; + +internal class Clock : IClock +{ + public DateTimeOffset UtcNow => DateTime.UtcNow; +} \ No newline at end of file diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/CreatePersonalAccessTokenServvice.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Api/CreatePersonalAccessTokenServvice.cs new file mode 100644 index 000000000..ddda26d3b --- /dev/null +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/CreatePersonalAccessTokenServvice.cs @@ -0,0 +1,14 @@ +using Aguacongas.IdentityServer.Abstractions; +using Microsoft.AspNetCore.Http; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace Aguacongas.TheIdServer.Api; + +public class CreatePersonalAccessTokenServvice : ICreatePersonalAccessToken +{ + public Task CreatePersonalAccessTokenAsync(HttpContext context, bool isRefenceToken, int lifetimeDays, IEnumerable apis, IEnumerable scopes, IEnumerable claimTypes) + { + throw new System.NotImplementedException(); + } +} diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/EventService.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Api/EventService.cs new file mode 100644 index 000000000..16e02c69c --- /dev/null +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/EventService.cs @@ -0,0 +1,14 @@ +using Duende.IdentityServer.Events; +using Duende.IdentityServer.Services; +using System.Threading.Tasks; + +namespace Aguacongas.TheIdServer.Api; + +public class EmptyEventService : IEventService +{ + public bool CanRaiseEventType(EventTypes evtType) + => true; + + public Task RaiseAsync(Event evt) + => Task.CompletedTask; +} diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/ApplicationBuilderExtensions.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/ApplicationBuilderExtensions.cs index 172a32a39..0cf1c439c 100644 --- a/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/ApplicationBuilderExtensions.cs +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/ApplicationBuilderExtensions.cs @@ -1,5 +1,6 @@ // Project: Aguafrommars/TheIdServer // Copyright (c) 2023 @Olivier Lefebvre +using Aguacongas.IdentityServer.Admin.Configuration; using Aguacongas.TheIdServer.Admin.Hubs; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; @@ -22,6 +23,7 @@ public static IApplicationBuilder UseTheIdServerApi(this IApplicationBuilder app .UseHsts(); } + ApiBasePath.Value = "/api"; app.UseSerilogRequestLogging() .UseHttpsRedirection() .UseResponseCompression() diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/WebApplicationBuilderExtensions.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/WebApplicationBuilderExtensions.cs index 740407a7e..2d5c2c030 100644 --- a/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/WebApplicationBuilderExtensions.cs +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/Extensions/WebApplicationBuilderExtensions.cs @@ -1,19 +1,32 @@ // Project: Aguafrommars/TheIdServer // Copyright (c) 2023 @Olivier Lefebvre +using Aguacongas.AspNetCore.Authentication; +using Aguacongas.IdentityServer.Abstractions; +using Aguacongas.IdentityServer.Admin.Models; using Aguacongas.IdentityServer.Admin.Services; using Aguacongas.IdentityServer.Store; +using Aguacongas.TheIdServer.Api; using Aguacongas.TheIdServer.Authentication; using Aguacongas.TheIdServer.Data; using Aguacongas.TheIdServer.Models; +using Duende.IdentityServer; +using Duende.IdentityServer.Configuration; +using Duende.IdentityServer.Events; +using Duende.IdentityServer.Services; +using Duende.IdentityServer.Services.KeyManagement; +using Duende.IdentityServer.Stores; +using Duende.IdentityServer.Validation; using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.ResponseCompression; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Microsoft.Extensions.Options; using Newtonsoft.Json; -using System; using System.Linq; -using System.Reflection; +using System.Net.Http; namespace Microsoft.AspNetCore.Builder { @@ -26,23 +39,33 @@ public static WebApplicationBuilder AddTheIdServerApi(this WebApplicationBuilder var connectionString = configuration.GetConnectionString("DefaultConnection"); var services = webApplicationBuilder.Services; - services.AddDbContext(options => - options.UseSqlServer(connectionString)) - .AddTheIdServerAdminEntityFrameworkStores(options => + services.AddTheIdServerAdminEntityFrameworkStores(options => options.UseSqlServer(connectionString, sql => sql.MigrationsAssembly(migrationsAssembly))) .AddConfigurationEntityFrameworkStores(options => options.UseSqlServer(connectionString, sql => sql.MigrationsAssembly(migrationsAssembly))) .AddOperationalEntityFrameworkStores(options => options.UseSqlServer(connectionString, sql => sql.MigrationsAssembly(migrationsAssembly))); + services.AddIdentityProviderStore() + .AddConfigurationStores() + .AddOperationalStores(); + + services.AddIdentity( + options => + { + configuration.Bind(nameof(IdentityOptions), options); + }) + .AddTheIdServerStores() + .AddDefaultTokenProviders(); + var signalRBuilder = services.AddSignalR(options => configuration.GetSection("SignalR:HubOptions").Bind(options)); if (configuration.GetValue("SignalR:UseMessagePack")) { signalRBuilder.AddMessagePackProtocol(); } - services.Configure(configuration) + .AddLocalization() .AddControllersWithViews(options => { options.AddIdentityServerAdminFilters(); @@ -53,7 +76,8 @@ public static WebApplicationBuilder AddTheIdServerApi(this WebApplicationBuilder settings.NullValueHandling = NullValueHandling.Ignore; settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; }) - .AddIdentityServerAdmin(); + .AddIdentityServerAdmin() + .AddTheIdServerEntityFrameworkStore(); services.AddAuthorization(options => { @@ -83,6 +107,30 @@ public static WebApplicationBuilder AddTheIdServerApi(this WebApplicationBuilder new[] { "application/octet-stream" }); }); + services.AddTransient(); + + services.Configure(options => options.IssuerUri = "https://localhost:5443") + .AddTransient(p => p.GetRequiredService>().Value) + .AddTransient() + .AddTransient(); + + services.RemoveAll(); + services.AddTransient(); + + services.AddScoped(); + + services.AddTransient(p => + { + var handler = new HttpClientHandler(); + if (configuration.GetValue("DisableStrictSsl")) + { +#pragma warning disable S4830 // Server certificates should be verified during SSL/TLS connections + handler.ServerCertificateCustomValidationCallback = (message, cert, chain, policy) => true; +#pragma warning restore S4830 // Server certificates should be verified during SSL/TLS connections + } + return handler; + }); + return webApplicationBuilder; } } diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/SchemeChangeSubscriber.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Api/SchemeChangeSubscriber.cs new file mode 100644 index 000000000..defeede45 --- /dev/null +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/SchemeChangeSubscriber.cs @@ -0,0 +1,14 @@ +using Aguacongas.IdentityServer.Abstractions; +using System.Threading; +using System.Threading.Tasks; + +namespace Aguacongas.TheIdServer.Api; + +public class SchemeChangeSubscriber : ISchemeChangeSubscriber +{ + public Task SubscribeAsync(CancellationToken cancellationToken) + => Task.CompletedTask; + + public Task UnSubscribeAsync(CancellationToken cancellationToken) + => Task.CompletedTask; +} diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Api/appsettings.json b/sample/MultiTiers/Aguacongas.TheIdServer.Api/appsettings.json index 0d86c2753..cf017c8c2 100644 --- a/sample/MultiTiers/Aguacongas.TheIdServer.Api/appsettings.json +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Api/appsettings.json @@ -5,6 +5,14 @@ "SignInOptions": { "RequireConfirmedAccount": false }, + "ApiAuthentication": { + "Authority": "https://localhost:5443", + "RequireHttpsMetadata": false, + "ApiName": "theidserveradminapi", + "ApiSecret": "5b556f7c-b3bc-4b5b-85ab-45eed0cb962d", + "EnableCaching": true, + "CacheDuration": "0:10:0" + }, "SignalR": { "HubUrl": "https://localhost:8443/providerhub", "HubOptions": { diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Private/Aguacongas.TheIdServer.Private.csproj b/sample/MultiTiers/Aguacongas.TheIdServer.Private/Aguacongas.TheIdServer.Private.csproj index 2f45af37a..d0291e680 100644 --- a/sample/MultiTiers/Aguacongas.TheIdServer.Private/Aguacongas.TheIdServer.Private.csproj +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Private/Aguacongas.TheIdServer.Private.csproj @@ -8,6 +8,7 @@ f6987681-1871-440a-a6ea-a606c2c5ccf6 false ..\docker-compose.dcproj + True Aguacongas.TheIdServer.Private.ruleset @@ -23,36 +24,36 @@ 1701;1702;NU1603 - - - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - + + + + + + + + + + \ No newline at end of file diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Public/Aguacongas.TheIdServer.Public.csproj b/sample/MultiTiers/Aguacongas.TheIdServer.Public/Aguacongas.TheIdServer.Public.csproj index de6d902fc..ae1722233 100644 --- a/sample/MultiTiers/Aguacongas.TheIdServer.Public/Aguacongas.TheIdServer.Public.csproj +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Public/Aguacongas.TheIdServer.Public.csproj @@ -1,49 +1,50 @@ - - net8.0 - false - Linux - ..\.. - f6987681-1871-440a-a6ea-a606c2c5ccf6 - false - ..\docker-compose.dcproj - - - Aguacongas.TheIdServer.Public.ruleset - - - Aguacongas.TheIdServer.Public.ruleset - - - - - - + + net8.0 + false + Linux + ..\.. + f6987681-1871-440a-a6ea-a606c2c5ccf6 + false + ..\docker-compose.dcproj + True + + + Aguacongas.TheIdServer.Public.ruleset + + + Aguacongas.TheIdServer.Public.ruleset + + + + + + - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - - - - - - - - - - + + + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample/MultiTiers/Aguacongas.TheIdServer.Public/Extensions/ApplicationBuilderExtensions.cs b/sample/MultiTiers/Aguacongas.TheIdServer.Public/Extensions/ApplicationBuilderExtensions.cs index ca0f8cbb4..1fc378704 100644 --- a/sample/MultiTiers/Aguacongas.TheIdServer.Public/Extensions/ApplicationBuilderExtensions.cs +++ b/sample/MultiTiers/Aguacongas.TheIdServer.Public/Extensions/ApplicationBuilderExtensions.cs @@ -32,7 +32,7 @@ public static IApplicationBuilder UseTheIdServerPublic(this IApplicationBuilder if (configuration.GetValue("EnableOpenApiDoc")) { child.UseOpenApi() - .UseSwaggerUi3(options => + .UseSwaggerUi(options => { var settings = configuration.GetSection("SwaggerUiSettings").Get(); options.OAuth2Client = settings.OAuth2Client; diff --git a/src/Aguacongas.TheIdServer.Authentication/Aguacongas.TheIdServer.Authentication.csproj b/src/Aguacongas.TheIdServer.Authentication/Aguacongas.TheIdServer.Authentication.csproj index 28a9c7e13..361e97a8c 100644 --- a/src/Aguacongas.TheIdServer.Authentication/Aguacongas.TheIdServer.Authentication.csproj +++ b/src/Aguacongas.TheIdServer.Authentication/Aguacongas.TheIdServer.Authentication.csproj @@ -10,12 +10,12 @@ git theidserver;aspnetcore;authentication;security Aguacongas.AspNetCore.Authentication store implementation for TheIdServer API. - Full + portable package-icon.png - + diff --git a/src/Aguacongas.TheIdServer.BlazorApp/Aguacongas.TheIdServer.BlazorApp.csproj b/src/Aguacongas.TheIdServer.BlazorApp/Aguacongas.TheIdServer.BlazorApp.csproj index c2a012668..73f488142 100644 --- a/src/Aguacongas.TheIdServer.BlazorApp/Aguacongas.TheIdServer.BlazorApp.csproj +++ b/src/Aguacongas.TheIdServer.BlazorApp/Aguacongas.TheIdServer.BlazorApp.csproj @@ -33,9 +33,9 @@ - - - + + + diff --git a/src/Aguacongas.TheIdServer.BlazorApp/Dockerfile b/src/Aguacongas.TheIdServer.BlazorApp/Dockerfile index 89ba6886a..36e1bf711 100644 --- a/src/Aguacongas.TheIdServer.BlazorApp/Dockerfile +++ b/src/Aguacongas.TheIdServer.BlazorApp/Dockerfile @@ -41,7 +41,7 @@ FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./Aguacongas.TheIdServer.BlazorApp.csproj" -c "$BUILD_CONFIGURATION" -o /app/publish /p:UseAppHost=false -p:FileVersion="$FILE_VERSION" -p:SourceRevisionId="$SOURCE_VERSION" -FROM nginx:1.25.3 AS final +FROM nginx:1.26 AS final WORKDIR /usr/share/nginx/html COPY --from=publish /app/publish/wwwroot . COPY --from=build /src/src/Aguacongas.TheIdServer.BlazorApp/nginx.conf /etc/nginx/nginx.conf diff --git a/src/Aguacongas.TheIdServer.BlazorApp/Roots.xml b/src/Aguacongas.TheIdServer.BlazorApp/Roots.xml index fd65d88e6..7b52d4e0d 100644 --- a/src/Aguacongas.TheIdServer.BlazorApp/Roots.xml +++ b/src/Aguacongas.TheIdServer.BlazorApp/Roots.xml @@ -1,6 +1,4 @@  - - - - + + diff --git a/src/Aguacongas.TheIdServer.Duende/Aguacongas.TheIdServer.Duende.csproj b/src/Aguacongas.TheIdServer.Duende/Aguacongas.TheIdServer.Duende.csproj index c68cc5f67..0f5757c79 100644 --- a/src/Aguacongas.TheIdServer.Duende/Aguacongas.TheIdServer.Duende.csproj +++ b/src/Aguacongas.TheIdServer.Duende/Aguacongas.TheIdServer.Duende.csproj @@ -23,12 +23,16 @@ + Always + + Always + @@ -49,8 +53,8 @@ - - - + + + diff --git a/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Ciba.cshtml.cs b/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Ciba.cshtml.cs index 7129a607a..428b79526 100644 --- a/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Ciba.cshtml.cs +++ b/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Ciba.cshtml.cs @@ -2,9 +2,7 @@ using Duende.IdentityServer.Services; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; -using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; namespace Aguacongas.TheIdServer.Areas.Identity.Pages.Account.Manage { diff --git a/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Grants.cshtml.cs b/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Grants.cshtml.cs index 2f03c2d31..a9721867a 100644 --- a/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Grants.cshtml.cs +++ b/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Grants.cshtml.cs @@ -1,9 +1,5 @@ // Project: Aguafrommars/TheIdServer // Copyright (c) 2023 @Olivier Lefebvre -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Duende.IdentityServer.Events; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Services; diff --git a/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Sessions.cshtml.cs b/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Sessions.cshtml.cs index eec06a766..b471fa571 100644 --- a/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Sessions.cshtml.cs +++ b/src/Aguacongas.TheIdServer.Duende/Areas/Identity/Pages/Account/Manage/Sessions.cshtml.cs @@ -4,8 +4,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Threading.Tasks; namespace Aguacongas.TheIdServer.Areas.Identity.Pages.Account.Manage { diff --git a/src/Aguacongas.TheIdServer.Duende/Extensions/ApplicationBuilderExtensions.cs b/src/Aguacongas.TheIdServer.Duende/Extensions/ApplicationBuilderExtensions.cs index 2c6b1677e..1bbb98c49 100644 --- a/src/Aguacongas.TheIdServer.Duende/Extensions/ApplicationBuilderExtensions.cs +++ b/src/Aguacongas.TheIdServer.Duende/Extensions/ApplicationBuilderExtensions.cs @@ -187,9 +187,9 @@ private static void ConfigureOpentApi(IConfiguration configuration, IApplication options.Path = $"{settings.Path}{{documentName}}/swagger.json"; } }) - .UseSwaggerUi3(options => + .UseSwaggerUi(options => { - var settings = configuration.GetSection("SwaggerUiSettings").Get(); + var settings = configuration.GetSection("SwaggerUiSettings").Get(); options.OAuth2Client = settings?.OAuth2Client; options.Path = settings?.Path; if (settings?.Path is not null) diff --git a/src/Aguacongas.TheIdServer.Duende/Localization-de.json b/src/Aguacongas.TheIdServer.Duende/Localization-de.json new file mode 100644 index 000000000..810453ddd --- /dev/null +++ b/src/Aguacongas.TheIdServer.Duende/Localization-de.json @@ -0,0 +1,2166 @@ +[ + { + "key": "(required)", + "value": "(erforderlich)" + }, + { + "key": "{0} is requesting your permission", + "value": "{0} fordert Ihre Genehmigung an" + }, + { + "key": "'{0}' cannot be added to a client with grant type '{1}'.", + "value": "'{0}' kann nicht zu einem Client mit Gewährungstyp '{1}' hinzugefügt werden." + }, + { + "key": "{0} is not a valid uri.", + "value": "{0} ist keine gültige URI." + }, + { + "key": "2fa has been disabled. You can reenable 2fa when you setup an authenticator app", + "value": "2FA wurde deaktiviert. Sie können 2FA wieder aktivieren, wenn Sie eine Authenticator-App einrichten." + }, + { + "key": "About", + "value": "Über" + }, + { + "key": "Absolute", + "value": "Absolut" + }, + { + "key": "absolute refresh token lifetime", + "value": "Absolute Lebensdauer des Auffrischungstokens" + }, + { + "key": "Access Denied", + "value": "Zugriff verweigert" + }, + { + "key": "access failed count", + "value": "Zugriffsfehlanzahl" + }, + { + "key": "access token lifetime", + "value": "Zugriffstoken-Lebensdauer" + }, + { + "key": "access token type", + "value": "Zugriffstokentyp" + }, + { + "key": "access type", + "value": "Zugriffstyp" + }, + { + "key": "activation", + "value": "Aktivierung" + }, + { + "key": "Add", + "value": "Hinzufügen" + }, + { + "key": "Add another service to log in.", + "value": "Fügen Sie einen weiteren Dienst zum Einloggen hinzu." + }, + { + "key": "Add authenticator app", + "value": "Authentifizierungs-App hinzufügen" + }, + { + "key": "allow access tokens via browser", + "value": "Erlauben Sie den Zugriff auf Tokens über den Browser" + }, + { + "key": "allow offline access", + "value": "Offline-Zugriff zulassen" + }, + { + "key": "allow plain text PKCE", + "value": "Klartext-PKCE zulassen" + }, + { + "key": "allow unsolicited logins", + "value": "Ungefragte Anmeldungen zulassen" + }, + { + "key": "always include user claims in id token", + "value": "Benutzeransprüche immer im ID-Token einbeziehen" + }, + { + "key": "always send claims", + "value": "Ansprüche immer senden" + }, + { + "key": "An url cannot exceed 2000 char.", + "value": "Eine URL darf 2000 Zeichen nicht überschreiten." + }, + { + "key": "api", + "value": "API" + }, + { + "key": "API Grants", + "value": "API-Zuwendungen" + }, + { + "key": "api id", + "value": "API-ID" + }, + { + "key": "Apis", + "value": "APIs" + }, + { + "key": "app id", + "value": "App-ID" + }, + { + "key": "app secret", + "value": "App-Geheimnis" + }, + { + "key": "Application Access", + "value": "Anwendungs-Zugriff" + }, + { + "key": "Associate your {0} account.", + "value": "Verknüpfen Sie Ihr {0}-Konto." + }, + { + "key": "Authentication in progress", + "value": "Authentifizierung läuft" + }, + { + "key": "Authenticator app", + "value": "Authentifizierungs-App" + }, + { + "key": "Authenticator code", + "value": "Authentifizierungscode" + }, + { + "key": "authority", + "value": "Autorität" + }, + { + "key": "Authority is required.", + "value": "Autorität ist erforderlich." + }, + { + "key": "Authority must be a valid uir.", + "value": "Autorität muss eine gültige URI sein." + }, + { + "key": "authorization code lifetime", + "value": "Autorisierungscode-Lebensdauer" + }, + { + "key": "authorization endpoint", + "value": "Autorisierungsendpunkt" + }, + { + "key": "Authorization endpoint is required.", + "value": "Autorisierungsendpunkt ist erforderlich." + }, + { + "key": "Authorization endpoint must be a valid uri.", + "value": "Autorisierungsendpunkt muss eine gültige URI sein." + }, + { + "key": "back channel logout uri", + "value": "URI für die Abmeldung im Hintergrundkanal" + }, + { + "key": "back channel logout uri required", + "value": "URI für die Abmeldung im Hintergrundkanal erforderlich" + }, + { + "key": "Below is the list of applications you have given access to and the names of the resources they have access to.", + "value": "Nachfolgend finden Sie eine Liste der Anwendungen, denen Sie Zugriff gewährt haben, und die Namen der Ressourcen, auf die sie zugreifen können." + }, + { + "key": "Cancel", + "value": "Abbrechen" + }, + { + "key": "Change email", + "value": "E-Mail ändern" + }, + { + "key": "Change password", + "value": "Passwort ändern" + }, + { + "key": "Change your account settings", + "value": "Ändern Sie Ihre Kontoeinstellungen" + }, + { + "key": "Checking login state...", + "value": "Anmeldestatus wird überprüft..." + }, + { + "key": "claim type", + "value": "Anspruchstyp" + }, + { + "key": "Claims", + "value": "Ansprüche" + }, + { + "key": "claims", + "value": "Ansprüche" + }, + { + "key": "claims mapping", + "value": "Anspruchszuordnung" + }, + { + "key": "Claims mapping", + "value": "Anspruchszuordnung" + }, + { + "key": "claims prefix", + "value": "Anspruchs-Präfix" + }, + { + "key": "claims transformations", + "value": "Anspruchstransformationen" + }, + { + "key": "Claims transformations", + "value": "Anspruchstransformationen" + }, + { + "key": "Click here to return to the {1} application.", + "value": "Klicken Sie hier, um zur Anwendung {1} zurückzukehren." + }, + { + "key": "Client Application Access", + "value": "Accès aux applications clientes" + }, + { + "key": "client id", + "value": "identité du client" + }, + { + "key": "Client Id is required.", + "value": "Die Client-ID ist erforderlich." + }, + { + "key": "client name", + "value": "Name des Kunden" + }, + { + "key": "client secret", + "value": "Kunden-Geheimnis" + }, + { + "key": "Client Secret is required.", + "value": "Das Client-Geheimnis ist erforderlich." + }, + { + "key": "client uri", + "value": "Client-URI" + }, + { + "key": "Clients", + "value": "Kunden" + }, + { + "key": "Close", + "value": "Schließen" + }, + { + "key": "Code", + "value": "Code" + }, + { + "key": "Completing login...", + "value": "Anmeldung wird abgeschlossen..." + }, + { + "key": "Configure authenticator app", + "value": "Authentifikator-App konfigurieren" + }, + { + "key": "Confirm email", + "value": "Bestätigen Sie Ihre E-Mail" + }, + { + "key": "Confirm email change", + "value": "Bestätigen Sie die Änderung der E-Mail" + }, + { + "key": "Confirm new password", + "value": "Bestätigen Sie das neue Passwort" + }, + { + "key": "Confirm password", + "value": "Bestätigen Sie das Passwort" + }, + { + "key": "Confirm your email", + "value": "Bestätigen Sie Ihre E-Mail" + }, + { + "key": "Confirmation link to change email sent. Please check your email.", + "value": "Bestätigungslink zum Ändern der E-Mail gesendet. Bitte überprüfen Sie Ihre E-Mails." + }, + { + "key": "consent", + "value": "Zustimmung" + }, + { + "key": "Consent", + "value": "Zustimmung" + }, + { + "key": "consent lifetime", + "value": "Lebensdauer der Zustimmung" + }, + { + "key": "consents", + "value": "Zustimmungen" + }, + { + "key": "Consents", + "value": "Zustimmungen" + }, + { + "key": "consumer key", + "value": "Verbraucher-Schlüssel" + }, + { + "key": "Consumer Key is required.", + "value": "Der Verbraucher-Schlüssel ist erforderlich." + }, + { + "key": "consumer secret", + "value": "Verbraucher-Geheimnis" + }, + { + "key": "Consumer Secret is required.", + "value": "Das Verbraucher-Geheimnis ist erforderlich." + }, + { + "key": "cors", + "value": "cors" + }, + { + "key": "Create a new account.", + "value": "Ein neues Konto erstellen." + }, + { + "key": "create at", + "value": "erstellt am" + }, + { + "key": "Created:", + "value": "Erstellt:" + }, + { + "key": "creation", + "value": "Erstellung" + }, + { + "key": "culture", + "value": "Kultur" + }, + { + "key": "Cultures", + "value": "Kulturen" + }, + { + "key": "Current password", + "value": "Aktuelles Passwort" + }, + { + "key": "data", + "value": "Daten" + }, + { + "key": "Data Protection", + "value": "Datenschutz" + }, + { + "key": "decription", + "value": "Beschreibung" + }, + { + "key": "Delete", + "value": "Löschen" + }, + { + "key": "Delete data and close my account", + "value": "Daten löschen und mein Konto schließen" + }, + { + "key": "Delete Personal Data", + "value": "Persönliche Daten löschen" + }, + { + "key": "Deleted", + "value": "Gelöscht" + }, + { + "key": "Deleting this data will permanently remove your account, and this cannot be recovered.", + "value": "Durch das Löschen dieser Daten wird Ihr Konto dauerhaft entfernt, und dies kann nicht wiederhergestellt werden." + }, + { + "key": "description", + "value": "Beschreibung" + }, + { + "key": "device flow request lifetime", + "value": "Lebensdauer der Geräteflussanforderung" + }, + { + "key": "Disable 2FA", + "value": "2FA deaktivieren" + }, + { + "key": "disable telemetry", + "value": "Telemetrie deaktivieren" + }, + { + "key": "Disable two-factor authentication (2FA)", + "value": "Zwei-Faktor-Authentifizierung (2FA) deaktivieren" + }, + { + "key": "Disabling 2FA does not change the keys used in authenticator apps. If you wish to change the key used in an authenticator app you should reset your authenticator keys.", + "value": "Das Deaktivieren von 2FA ändert nicht die Schlüssel, die in Authentifikator-Apps verwendet werden. Wenn Sie den Schlüssel in einer Authentifikator-App ändern möchten, sollten Sie Ihre Authentifikatorschlüssel zurücksetzen." + }, + { + "key": "display name", + "value": "Anzeigename" + }, + { + "key": "Don't have access to your authenticator device? You can log in with a recovery code.", + "value": "Keinen Zugriff auf Ihr Authentifikator-Gerät? Sie können mit einem Wiederherstellungscode anmelden." + }, + { + "key": "Download", + "value": "Herunterladen" + }, + { + "key": "Download a two-factor authenticator app like Microsoft Authenticator for Windows Phone, Android and iOS or Google Authenticator for Android and iOS.", + "value": "Laden Sie eine Zwei-Faktor-Authentifikator-App wie Microsoft Authenticator für Windows Phone, Android und iOS oder Google Authenticator für Android und iOS herunter." + }, + { + "key": "Download Your Data", + "value": "Laden Sie Ihre Daten herunter" + }, + { + "key": "Editing the profile is not supported.", + "value": "Die Profilbearbeitung wird nicht unterstützt." + }, + { + "key": "Email", + "value": "E-Mail" + }, + { + "key": "email", + "value": "E-Mail" + }, + { + "key": "email confirmed", + "value": "E-Mail bestätigt" + }, + { + "key": "emphasize", + "value": "betonen" + }, + { + "key": "enable local login", + "value": "lokale Anmeldung aktivieren" + }, + { + "key": "enabled", + "value": "aktiviert" + }, + { + "key": "encryption certificate", + "value": "Verschlüsselungszertifikat" + }, + { + "key": "Enter your email.", + "value": "Geben Sie Ihre E-Mail ein." + }, + { + "key": "Entities created", + "value": "Erstellte Entitäten" + }, + { + "key": "Entities updated", + "value": "Aktualisierte Entitäten" + }, + { + "key": "Error", + "value": "Fehler" + }, + { + "key": "Error changing email.", + "value": "Fehler beim Ändern der E-Mail." + }, + { + "key": "Error changing user name.", + "value": "Fehler beim Ändern des Benutzernamens." + }, + { + "key": "Error confirming your email.", + "value": "Fehler beim Bestätigen Ihrer E-Mail." + }, + { + "key": "Error from external provider: {0}", + "value": "Fehler vom externen Anbieter: {0}" + }, + { + "key": "Error loading external login information during confirmation.", + "value": "Fehler beim Laden externer Anmeldeinformationen während der Bestätigung." + }, + { + "key": "Error loading external login information.", + "value": "Fehler beim Laden externer Anmeldeinformationen." + }, + { + "key": "Error when trying to revoke the key.", + "value": "Fehler beim Versuch, den Schlüssel zu widerrufen." + }, + { + "key": "expiration", + "value": "Ablauf" + }, + { + "key": "expire at", + "value": "Ablauf um" + }, + { + "key": "Expires:", + "value": "Läuft ab:" + }, + { + "key": "export", + "value": "exportieren" + }, + { + "key": "External Login", + "value": "Externe Anmeldung" + }, + { + "key": "External login tokens", + "value": "Externe Anmeldetoken" + }, + { + "key": "external logins", + "value": "externe Anmeldungen" + }, + { + "key": "External logins", + "value": "Externe Anmeldungen" + }, + { + "key": "external logins tokens", + "value": "externe Anmeldetoken" + }, + { + "key": "External provider restrictions", + "value": "Einschränkungen externer Anbieter" + }, + { + "key": "field", + "value": "Feld" + }, + { + "key": "fields", + "value": "Felder" + }, + { + "key": "filter", + "value": "Filter" + }, + { + "key": "Forget this browser", + "value": "Diesen Browser vergessen" + }, + { + "key": "Forgot password confirmation", + "value": "Passwort vergessen Bestätigung" + }, + { + "key": "Forgot your password?", + "value": "Passwort vergessen?" + }, + { + "key": "from claim type", + "value": "vom Anspruchstyp" + }, + { + "key": "front channel logout uri", + "value": "URI für Abmelden im Frontchannel" + }, + { + "key": "front channel logout uri required", + "value": "URI für Abmelden im Frontchannel erforderlich" + }, + { + "key": "Generate Recovery Codes", + "value": "Wiederherstellungscodes generieren" + }, + { + "key": "Generate two-factor authentication (2FA) recovery codes", + "value": "Wiederherstellungscodes für die Zwei-Faktor-Authentifizierung (2FA) generieren" + }, + { + "key": "Generating new recovery codes does not change the keys used in authenticator apps. If you wish to change the key used in an authenticator app you should reset your authenticator keys.", + "value": "Das Generieren neuer Wiederherstellungscodes ändert nicht die Schlüssel, die in Authentifikator-Apps verwendet werden. Wenn Sie den Schlüssel in einer Authentifikator-App ändern möchten, sollten Sie Ihre Authentifikatorschlüssel zurücksetzen." + }, + { + "key": "grant type", + "value": "Subventionstyp" + }, + { + "key": "grant types", + "value": "Subventionstypen" + }, + { + "key": "Grant types", + "value": "Subventionstypen" + }, + { + "key": "Grants", + "value": "Subventionen" + }, + { + "key": "Hello {0}!", + "value": "Hallo {0}!" + }, + { + "key": "Hello, {0}!", + "value": "Hallo, {0}!" + }, + { + "key": "Home", + "value": "Startseite" + }, + { + "key": "id", + "value": "ID" + }, + { + "key": "id token lifetime", + "value": "Ablaufzeit des ID-Tokens" + }, + { + "key": "Identities", + "value": "Identitäten" + }, + { + "key": "identity", + "value": "Identität" + }, + { + "key": "Identity Grants", + "value": "Identitätsgewährungen" + }, + { + "key": "idp restrictions", + "value": "IDP-Beschränkungen" + }, + { + "key": "If you lose your device and don't have the recovery codes you will lose access to your account.", + "value": "Wenn Sie Ihr Gerät verlieren und keine Wiederherstellungscodes haben, verlieren Sie den Zugriff auf Ihr Konto." + }, + { + "key": "If you reset your authenticator key your authenticator app will not work until you reconfigure it.", + "value": "Wenn Sie Ihren Authentifikatorschlüssel zurücksetzen, funktioniert Ihre Authentifikator-App erst wieder, wenn Sie sie neu konfigurieren." + }, + { + "key": "Import", + "value": "Importieren" + }, + { + "key": "include JWT id", + "value": "JWT-ID einbeziehen" + }, + { + "key": "Incorrect password.", + "value": "Falsches Passwort." + }, + { + "key": "Invalid authenticator code.", + "value": "Ungültiger Authentifikationscode." + }, + { + "key": "Invalid file", + "value": "Ungültige Datei" + }, + { + "key": "Invalid login request", + "value": "Ungültige Anmeldeanfrage" + }, + { + "key": "Invalid recovery code entered.", + "value": "Ungültiger eingegebener Wiederherstellungscode." + }, + { + "key": "issuer", + "value": "Herausgeber" + }, + { + "key": "key", + "value": "Schlüssel" + }, + { + "key": "Keys", + "value": "Schlüssel" + }, + { + "key": "lifetime", + "value": "Lebensdauer" + }, + { + "key": "Loading...", + "value": "Laden..." + }, + { + "key": "Local Login", + "value": "Lokale Anmeldung" + }, + { + "key": "localized description", + "value": "lokale Beschreibung" + }, + { + "key": "localized display name", + "value": "lokaler Anzeigename" + }, + { + "key": "lockout enabled", + "value": "Sperrung aktiviert" + }, + { + "key": "lockout end", + "value": "Sperrungsende" + }, + { + "key": "Log in", + "value": "Anmelden" + }, + { + "key": "Log in using your {0} account", + "value": "Melden Sie sich mit Ihrem {0}-Konto an" + }, + { + "key": "Log out", + "value": "Abmelden" + }, + { + "key": "Login", + "value": "Anmeldung" + }, + { + "key": "Login form", + "value": "Anmeldeformular" + }, + { + "key": "logo uri", + "value": "Logo-URI" + }, + { + "key": "Logout", + "value": "Abmelden" + }, + { + "key": "Logout form", + "value": "Abmeldeformular" + }, + { + "key": "Manage Email", + "value": "E-Mails verwalten" + }, + { + "key": "Manage your account", + "value": "Ihr Konto verwalten" + }, + { + "key": "Manage your external logins", + "value": "Verwalten Sie Ihre externen Anmeldungen" + }, + { + "key": "map default outbound JWT claim types", + "value": "Standardausgehende JWT-Anspruchstypen zuordnen" + }, + { + "key": "metadata address", + "value": "Metadatenadresse" + }, + { + "key": "Metadata address is required.", + "value": "Metadatenadresse ist erforderlich." + }, + { + "key": "Metadata address must be a valid HTTPS url when 'required https metadata is true'.", + "value": "Die Metadatenadresse muss eine gültige HTTPS-URL sein, wenn 'erforderliche HTTPS-Metadaten wahr ist'." + }, + { + "key": "Metadata address must be a valid uri.", + "value": "Metadatenadresse muss ein gültiges URI sein." + }, + { + "key": "name", + "value": "Name" + }, + { + "key": "name id format", + "value": "Namens-ID-Format" + }, + { + "key": "New email", + "value": "Neue E-Mail" + }, + { + "key": "New password", + "value": "Neues Passwort" + }, + { + "key": "No changes", + "value": "Keine Änderungen" + }, + { + "key": "No, Do Not Allow", + "value": "Nein, nicht zulassen" + }, + { + "key": "Nothing here.", + "value": "Hier gibt es nichts." + }, + { + "key": "Once complete, you may close this tab", + "value": "Sobald abgeschlossen, können Sie diesen Tab schließen" + }, + { + "key": "Once you have scanned the QR code or input the key above, your two factor authentication app will provide youm with a unique code.Enter the code in the confirmation box below.", + "value": "Sobald Sie den QR-Code gescannt oder den oben eingegebenen Schlüssel eingegeben haben, wird Ihre Zwei-Faktor-Authentifizierungs-App Ihnen einen eindeutigen Code bereitstellen. Geben Sie den Code im unten stehenden Bestätigungsfeld ein." + }, + { + "key": "One time only", + "value": "Nur einmal" + }, + { + "key": "pairwise subject salt", + "value": "Paarweises Subjekt-Salz" + }, + { + "key": "Password", + "value": "Passwort" + }, + { + "key": "password", + "value": "Passwort" + }, + { + "key": "Personal data", + "value": "Persönliche Daten" + }, + { + "key": "Personal Information", + "value": "Persönliche Informationen" + }, + { + "key": "phone number", + "value": "Telefonnummer" + }, + { + "key": "Phone number", + "value": "Telefonnummer" + }, + { + "key": "phone number confirmed", + "value": "Telefonnummer bestätigt" + }, + { + "key": "Please check your email to confirm your account.", + "value": "Bitte überprüfen Sie Ihre E-Mail, um Ihr Konto zu bestätigen." + }, + { + "key": "Please check your email to reset your password.", + "value": "Bitte überprüfen Sie Ihre E-Mail, um Ihr Passwort zurückzusetzen." + }, + { + "key": "Please confirm that the authorization request quotes the code: \"{0}\".", + "value": "Bitte bestätigen Sie, dass die Autorisierungsanfrage den Code zitiert: \"{0}\"." + }, + { + "key": "Please confirm your account by clicking here.", + "value": "Bitte bestätigen Sie Ihr Konto, indem Sie hier klicken." + }, + { + "key": "Please enter the code displayed on your device", + "value": "Bitte geben Sie den auf Ihrem Gerät angezeigten Code ein" + }, + { + "key": "Please reset your password by clicking here.", + "value": "Bitte setzen Sie Ihr Passwort zurück, indem Sie hier klicken." + }, + { + "key": "Policy", + "value": "Richtlinie" + }, + { + "key": "policy uri", + "value": "Richtlinien-URI" + }, + { + "key": "post logout", + "value": "Nach der Abmeldung" + }, + { + "key": "prefix", + "value": "Präfix" + }, + { + "key": "Processing logout callback...", + "value": "Verarbeitung des Abmelde-Rückrufs..." + }, + { + "key": "Processing logout...", + "value": "Abmeldevorgang wird verarbeitet..." + }, + { + "key": "Profile", + "value": "Profil" + }, + { + "key": "prompt", + "value": "Aufforderung" + }, + { + "key": "properties", + "value": "Eigenschaften" + }, + { + "key": "Properties", + "value": "Eigenschaften" + }, + { + "key": "protocol type", + "value": "Protokolltyp" + }, + { + "key": "provider", + "value": "Anbieter" + }, + { + "key": "Providers", + "value": "Anbieter" + }, + { + "key": "Put these codes in a safe place.", + "value": "Bewahren Sie diese Codes sicher auf." + }, + { + "key": "Re use", + "value": "Wiederverwendung" + }, + { + "key": "reason", + "value": "Grund" + }, + { + "key": "Recovery Code", + "value": "Wiederherstellungscode" + }, + { + "key": "Recovery code verification", + "value": "Wiederherstellungskode-Verifizierung" + }, + { + "key": "Recovery codes", + "value": "Wiederherstellungscodes" + }, + { + "key": "redirect", + "value": "Umleitung" + }, + { + "key": "redirect uri", + "value": "Umleitungs-URI" + }, + { + "key": "Reference tokens", + "value": "Referenz-Token" + }, + { + "key": "reference tokens", + "value": "Referenz-Token" + }, + { + "key": "refresh on issuer key not found", + "value": "Auffrischung bei nicht gefundener Herausgeber-Schlüssel" + }, + { + "key": "refresh token expiration", + "value": "Ablauf der Aktualisierungstoken" + }, + { + "key": "refresh token usage", + "value": "Aktualisierungstoken-Nutzung" + }, + { + "key": "Refresh tokens", + "value": "Aktualisierungstoken" + }, + { + "key": "refresh tokens", + "value": "Aktualisierungstoken" + }, + { + "key": "Register", + "value": "Registrieren" + }, + { + "key": "Register confirmation", + "value": "Registrierungsbestätigung" + }, + { + "key": "Registered Logins", + "value": "Registrierte Anmeldungen" + }, + { + "key": "Registration is not supported.", + "value": "Die Registrierung wird nicht unterstützt." + }, + { + "key": "Relying parties", + "value": "Vertrauende Parteien" + }, + { + "key": "relying party", + "value": "vertrauende Partei" + }, + { + "key": "Remember My Decision", + "value": "Meine Entscheidung merken" + }, + { + "key": "Remember My Login", + "value": "Meine Anmeldung merken" + }, + { + "key": "Remember this machine", + "value": "Diese Maschine merken" + }, + { + "key": "remenber consent", + "value": "Zustimmung merken" + }, + { + "key": "remote sign-out path ", + "value": "Pfad für die Fernabmeldung" + }, + { + "key": "remote sign-out path", + "value": "Pfad für die Fernabmeldung" + }, + { + "key": "Remove", + "value": "Entfernen" + }, + { + "key": "require consent", + "value": "Zustimmung erforderlich" + }, + { + "key": "require https metadata", + "value": "Erfordert HTTPS-Metadaten" + }, + { + "key": "require PKCE", + "value": "Erfordert PKCE" + }, + { + "key": "require secret", + "value": "Erfordert Geheimnis" + }, + { + "key": "required", + "value": "Erforderlich" + }, + { + "key": "Reset authenticator app", + "value": "Authenticator-App zurücksetzen" + }, + { + "key": "Reset authenticator key", + "value": "Authenticator-Schlüssel zurücksetzen" + }, + { + "key": "Reset Password", + "value": "Passwort zurücksetzen" + }, + { + "key": "Reset recovery codes", + "value": "Wiederherstellungscodes zurücksetzen" + }, + { + "key": "resource", + "value": "Ressource" + }, + { + "key": "Resources", + "value": "Ressourcen" + }, + { + "key": "response mode", + "value": "Antwortmodus" + }, + { + "key": "response type", + "value": "Antworttyp" + }, + { + "key": "retrieve user details", + "value": "Benutzerdetails abrufen" + }, + { + "key": "Retype the \"{0}\" if you are sure to delete it.", + "value": "Geben Sie \"{0}\" erneut ein, wenn Sie sicher sind, dass Sie es löschen möchten." + }, + { + "key": "Retype the \"{0}\" if you are sure to revoke it.", + "value": "Geben Sie \"{0}\" erneut ein, wenn Sie sicher sind, dass Sie es widerrufen möchten." + }, + { + "key": "Revoke", + "value": "Widerrufen" + }, + { + "key": "Revoke Access", + "value": "Zugriff widerrufen" + }, + { + "key": "Revoked", + "value": "Widerrufen" + }, + { + "key": "role", + "value": "Rolle" + }, + { + "key": "Roles", + "value": "Rollen" + }, + { + "key": "Save", + "value": "Speichern" + }, + { + "key": "save tokens", + "value": "Token speichern" + }, + { + "key": "Saved", + "value": "Gespeichert" + }, + { + "key": "Scan the QR Code or enter this key {0} into your two factor authenticator app. Spaces and casing do not matter.", + "value": "Scannen Sie den QR-Code oder geben Sie diesen Schlüssel {0} in Ihre Authenticator-App mit zwei Faktoren ein. Leerzeichen und Groß-/Kleinschreibung spielen keine Rolle." + }, + { + "key": "scheme", + "value": "Schema" + }, + { + "key": "scope", + "value": "Umfang" + }, + { + "key": "scopes", + "value": "Umfänge" + }, + { + "key": "Scopes", + "value": "Umfänge" + }, + { + "key": "Scopes must be unique.", + "value": "Umfänge müssen eindeutig sein." + }, + { + "key": "secrets", + "value": "Geheimnisse" + }, + { + "key": "Select a kind of provider...", + "value": "Wählen Sie eine Art von Anbieter..." + }, + { + "key": "send app secret proof", + "value": "App-Geheimnisnachweis senden" + }, + { + "key": "Send verification email", + "value": "Verifizierungs-E-Mail senden" + }, + { + "key": "Set password", + "value": "Passwort festlegen" + }, + { + "key": "Set your password", + "value": "Setzen Sie Ihr Passwort" + }, + { + "key": "Setup authenticator app", + "value": "Authenticator-App einrichten" + }, + { + "key": "show all options", + "value": "Alle Optionen anzeigen" + }, + { + "key": "show in discovery document", + "value": "Im Entdeckungsdokument anzeigen" + }, + { + "key": "signature algorithm", + "value": "Signaturalgorithmus" + }, + { + "key": "signature digest", + "value": "Signatur-Hashwert" + }, + { + "key": "signed-out callback path", + "value": "Abgemeldeter Rückrufpfad" + }, + { + "key": "signed-out redirect uri", + "value": "Abgemeldete Weiterleitungs-URI" + }, + { + "key": "Signing", + "value": "Unterzeichnung" + }, + { + "key": "sign-out scheme ", + "value": "Abmeldeschema" + }, + { + "key": "sign-out scheme", + "value": "Abmeldeschema" + }, + { + "key": "sign-out wreply ", + "value": "Abmeldeantwort wreply" + }, + { + "key": "skip unrecognized requests", + "value": "Nicht erkannte Anfragen überspringen" + }, + { + "key": "Sliding", + "value": "Schieberegler" + }, + { + "key": "sliding refresh token lifetime", + "value": "Lebensdauer des gleitenden Auffrischungstokens" + }, + { + "key": "Sorry, there was an error", + "value": "Entschuldigung, es gab einen Fehler" + }, + { + "key": "Sorry, there's nothing at this address.", + "value": "Entschuldigung, hier ist nichts." + }, + { + "key": "sso lifetime", + "value": "SSO-Lebensdauer" + }, + { + "key": "store claims", + "value": "Ansprüche speichern" + }, + { + "key": "Submit", + "value": "Einreichen" + }, + { + "key": "Success", + "value": "Erfolg" + }, + { + "key": "Supported cultures", + "value": "Unterstützte Kulturen" + }, + { + "key": "Terms of service", + "value": "Nutzungsbedingungen" + }, + { + "key": "terms of service uri", + "value": "Nutzungsbedingungen URI" + }, + { + "key": "Thank you for confirming your email change.", + "value": "Vielen Dank, dass Sie Ihre E-Mail-Änderung bestätigt haben." + }, + { + "key": "The {0} must be at least {2} and at max {1} characters long.", + "value": "{0} muss mindestens {2} und maximal {1} Zeichen lang sein." + }, + { + "key": "The api property key cannot exceed 250 chars.", + "value": "Der API-Eigenschaftsschlüssel darf nicht mehr als 250 Zeichen enthalten." + }, + { + "key": "The api property key is required.", + "value": "Der API-Eigenschaftsschlüssel ist erforderlich." + }, + { + "key": "The api property key must be unique.", + "value": "Der API-Eigenschaftsschlüssel muss eindeutig sein." + }, + { + "key": "The api property value cannot exceed 2000 chars.", + "value": "Der API-Eigenschaftswert darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The api property value is required.", + "value": "Der API-Eigenschaftswert ist erforderlich." + }, + { + "key": "The back channel logout url cannot exceed 2000 char.", + "value": "Die URL zum Abmelden vom Hintergrundkanal darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The back channel logout url is required.", + "value": "Die URL zum Abmelden vom Hintergrundkanal ist erforderlich." + }, + { + "key": "The back logout url is not valid.", + "value": "Die URL zum Abmelden vom Hintergrundkanal ist ungültig." + }, + { + "key": "The claim prefix cannot exceed 250 char.", + "value": "Das Präfix der Behauptung darf nicht mehr als 250 Zeichen enthalten." + }, + { + "key": "The claim type cannot exceed 2000 chars.", + "value": "Der Ansprüchetyp darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The claim type cannot exceed 250 chars.", + "value": "Der Ansprüchetyp darf nicht mehr als 250 Zeichen enthalten." + }, + { + "key": "The claim type is required.", + "value": "Der Ansprüchetyp ist erforderlich." + }, + { + "key": "The claim type must be unique.", + "value": "Der Ansprüchetyp muss eindeutig sein." + }, + { + "key": "The claim value cannot exceed 2000 chars.", + "value": "Der Anspruchswert darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The claim value is required.", + "value": "Der Anspruchswert ist erforderlich." + }, + { + "key": "The client property key cannot exceed 250 chars.", + "value": "Der Eigenschaftsschlüssel des Clients darf nicht mehr als 250 Zeichen enthalten." + }, + { + "key": "The client property key is required.", + "value": "Der Eigenschaftsschlüssel des Clients ist erforderlich." + }, + { + "key": "The client property key must be unique.", + "value": "Der Eigenschaftsschlüssel des Clients muss eindeutig sein." + }, + { + "key": "The client property value cannot exceed 2000 chars.", + "value": "Der Eigenschaftswert des Clients darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The client property value is required.", + "value": "Der Eigenschaftswert des Clients ist erforderlich." + }, + { + "key": "The client should contain at least one grant type.", + "value": "Der Client sollte mindestens einen Subventionstyp enthalten." + }, + { + "key": "The culture is required.", + "value": "Die Kultur ist erforderlich." + }, + { + "key": "The culture must be unique.", + "value": "Die Kultur muss eindeutig sein." + }, + { + "key": "The current browser has been forgotten. When you login again from this browser you will be prompted for your 2fa code.", + "value": "Der aktuelle Browser wurde vergessen. Wenn Sie sich erneut von diesem Browser aus anmelden, werden Sie zur Eingabe Ihres 2FA-Codes aufgefordert." + }, + { + "key": "The description cannot exceed 200 chars.", + "value": "Die Beschreibung darf nicht mehr als 200 Zeichen enthalten." + }, + { + "key": "The description cannot exceed 2000 chars.", + "value": "Die Beschreibung darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The description canoot exceed 1000 char.", + "value": "Die Beschreibung darf nicht mehr als 1000 Zeichen enthalten." + }, + { + "key": "The digest algorithm is required", + "value": "Der Digest-Algorithmus ist erforderlich" + }, + { + "key": "The display name cannot exceed 200 chars.", + "value": "Der Anzeigename darf nicht mehr als 200 Zeichen enthalten." + }, + { + "key": "The display name is required.", + "value": "Der Anzeigename ist erforderlich." + }, + { + "key": "The external login was added.", + "value": "Die externe Anmeldung wurde hinzugefügt." + }, + { + "key": "The external login was not added. External logins can only be associated with one account.", + "value": "Die externe Anmeldung wurde nicht hinzugefügt. Externe Anmeldungen können nur mit einem Konto verknüpft werden." + }, + { + "key": "The external login was not removed.", + "value": "Die externe Anmeldung wurde nicht entfernt." + }, + { + "key": "The external login was removed.", + "value": "Die externe Anmeldung wurde entfernt." + }, + { + "key": "The from claim tyoe is required.", + "value": "Die von Anspruchstyp ist erforderlich." + }, + { + "key": "The from claim type is required.", + "value": "Der von Anspruchstyp ist erforderlich." + }, + { + "key": "The from claim type must be unique.", + "value": "Der von Anspruchstyp muss eindeutig sein." + }, + { + "key": "The front channel logout url cannot exceed 2000 char.", + "value": "Die URL zum Abmelden vom Frontend-Kanal darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The front channel logout url is not valid.", + "value": "Die URL zum Abmelden vom Frontend-Kanal ist ungültig." + }, + { + "key": "The front channel logout url is required.", + "value": "Die URL zum Abmelden vom Frontend-Kanal ist erforderlich." + }, + { + "key": "The grant type cannot contains space.", + "value": "Der Subventionstyp darf keine Leerzeichen enthalten." + }, + { + "key": "The grant type must be unique.", + "value": "Der Subventionstyp muss eindeutig sein." + }, + { + "key": "The id is required.", + "value": "Die ID ist erforderlich." + }, + { + "key": "The id must be an URI when protocol is WS-Federation. (ex: urn:wsfed).", + "value": "Die ID muss eine URI sein, wenn das Protokoll WS-Föderation lautet. (z. B.: urn:wsfed)." + }, + { + "key": "The identity claim type cannot exceed 2000 chars.", + "value": "Der Identitätsansprüchetyp darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The identity claim type is required.", + "value": "Der Identitätsansprüchetyp ist erforderlich." + }, + { + "key": "The identity claim type must be unique.", + "value": "Der Identitätsansprüchetyp muss eindeutig sein." + }, + { + "key": "The identity property key cannot exceed 250 chars.", + "value": "Der Identitätseigenschaftsschlüssel darf nicht mehr als 250 Zeichen enthalten." + }, + { + "key": "The identity property key is required.", + "value": "Der Identitätseigenschaftsschlüssel ist erforderlich." + }, + { + "key": "The identity property key must be unique.", + "value": "Der Identitätseigenschaftsschlüssel muss eindeutig sein." + }, + { + "key": "The identity property value cannot exceed 2000 chars.", + "value": "Der Identitätseigenschaftswert darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The identity property value is required.", + "value": "Der Identitätseigenschaftswert ist erforderlich." + }, + { + "key": "The identity should provide at least one claim.", + "value": "Die Identität sollte mindestens eine Behauptung bereitstellen." + }, + { + "key": "The key is required.", + "value": "Der Schlüssel ist erforderlich." + }, + { + "key": "The key '{0}' must be unique.", + "value": "Der Schlüssel '{0}' muss eindeutig sein." + }, + { + "key": "The kind of provider is required.", + "value": "Die Art des Anbieters ist erforderlich." + }, + { + "key": "The logo url cannot exceed 2000 char.", + "value": "Die Logo-URL darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The logo url is not valid.", + "value": "Die Logo-URL ist ungültig." + }, + { + "key": "The name cannot exceed 200 char.", + "value": "Der Name darf nicht mehr als 200 Zeichen enthalten." + }, + { + "key": "The name cannot exceed 200 chars.", + "value": "Der Name darf nicht mehr als 200 Zeichen enthalten." + }, + { + "key": "The name identifier is required", + "value": "Der Name-Identifikator ist erforderlich" + }, + { + "key": "The name is required", + "value": "Der Name ist erforderlich" + }, + { + "key": "The name is required.", + "value": "Der Name ist erforderlich." + }, + { + "key": "The new password and confirmation password do not match.", + "value": "Das neue Passwort und das Bestätigungspasswort stimmen nicht überein." + }, + { + "key": "The password and confirmation password do not match.", + "value": "Das Passwort und das Bestätigungspasswort stimmen nicht überein." + }, + { + "key": "The policy url cannot exceed 2000 char.", + "value": "Die Richtlinien-URL darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The policy url is not valid.", + "value": "Die Richtlinien-URL ist ungültig." + }, + { + "key": "The relying party is required.", + "value": "Die vertrauende Partei ist erforderlich." + }, + { + "key": "The role must be unique", + "value": "Die Rolle muss eindeutig sein" + }, + { + "key": "The role name is required", + "value": "Der Rollenname ist erforderlich" + }, + { + "key": "The secret type is required.", + "value": "Der Geheimnistyp ist erforderlich." + }, + { + "key": "The secret value is required.", + "value": "Der Geheimniswert ist erforderlich." + }, + { + "key": "The sheme is required.", + "value": "Das Schema ist erforderlich." + }, + { + "key": "The subject salt cannot exceed 250 char.", + "value": "Das Subjekt-Salz darf nicht mehr als 250 Zeichen enthalten." + }, + { + "key": "The terms of service url cannot exceed 2000 char.", + "value": "Die Nutzungsbedingungen-URL darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The terms of service url is not valid.", + "value": "Die Nutzungsbedingungen-URL ist ungültig." + }, + { + "key": "The to claim tyoe is required.", + "value": "Der zu beanspruchende Typ ist erforderlich." + }, + { + "key": "The to claim type is required.", + "value": "Der zu beanspruchende Typ ist erforderlich." + }, + { + "key": "The to claim type must be an URI.", + "value": "Der zu beanspruchende Typ muss ein URI sein." + }, + { + "key": "The token expression doesn't match a valid format. You can use the forms d.hh:mm:ss, hh.mm:ss, mm:ss, a number of days (365d), a number of hours (12h), a number of minutes (30m), a number of second", + "value": "Der Token-Ausdruck entspricht keinem gültigen Format. Sie können die Formen d.hh:mm:ss, hh.mm:ss, mm:ss, eine Anzahl von Tagen (365d), eine Anzahl von Stunden (12h), eine Anzahl von Minuten (30m), eine Anzahl von Sekunden verwenden" + }, + { + "key": "The token type is required", + "value": "Der Token-Typ ist erforderlich" + }, + { + "key": "The type of protocol cannot exceed 200 char.", + "value": "Der Protokolltyp darf nicht mehr als 200 Zeichen enthalten." + }, + { + "key": "The type of protocol is required", + "value": "Der Protokolltyp ist erforderlich" + }, + { + "key": "The type of user code cannot exceed 100 char.", + "value": "Der Typ des Benutzercodes darf nicht mehr als 100 Zeichen enthalten." + }, + { + "key": "The url cannot exceed 2000 char.", + "value": "Die URL darf nicht mehr als 2000 Zeichen enthalten." + }, + { + "key": "The url is not valid.", + "value": "Die URL ist ungültig." + }, + { + "key": "There are no login schemes configured for this client.", + "value": "Für diesen Client sind keine Anmeldepläne konfiguriert." + }, + { + "key": "There was an error trying to log you in: '{0}'", + "value": "Beim Versuch, Sie anzumelden, ist ein Fehler aufgetreten: '{0}'" + }, + { + "key": "There was an error trying to log you out: '{0}'", + "value": "Beim Versuch, Sie abzumelden, ist ein Fehler aufgetreten: '{0}'" + }, + { + "key": "This action only disables 2FA.", + "value": "Diese Aktion deaktiviert nur 2FA." + }, + { + "key": "This process disables 2FA until you verify your authenticator app. If you do not complete your authenticator app configuration you may lose access to your account.", + "value": "Dieser Vorgang deaktiviert 2FA, bis Sie Ihre Authentifizierungs-App überprüfen. Wenn Sie die Konfiguration Ihrer Authentifizierungs-App nicht abschließen, können Sie den Zugriff auf Ihr Konto verlieren." + }, + { + "key": "to claim type", + "value": "Typ der zu beanspruchenden" + }, + { + "key": "To use an authenticator app go through the following steps:", + "value": "Gehen Sie folgendermaßen vor, um eine Authentifizierungs-App zu verwenden:" + }, + { + "key": "Token endpoint is required.", + "value": "Der Token-Endpunkt ist erforderlich." + }, + { + "key": "Token endpoint must be a valid uri.", + "value": "Der Token-Endpunkt muss ein gültiger URI sein." + }, + { + "key": "token enpoint", + "value": "Token-Endpunkt" + }, + { + "key": "token type", + "value": "Token-Typ" + }, + { + "key": "Tokens", + "value": "Tokens" + }, + { + "key": "tokens", + "value": "tokens" + }, + { + "key": "two factor enabled", + "value": "Zwei-Faktor aktiviert" + }, + { + "key": "Two-factor authentication", + "value": "Zwei-Faktor-Authentifizierung" + }, + { + "key": "Two-factor authentication (2FA)", + "value": "Zwei-Faktor-Authentifizierung (2FA)" + }, + { + "key": "type", + "value": "Typ" + }, + { + "key": "Unable to load user with ID '{0}'.", + "value": "Benutzer mit der ID '{0}' konnte nicht geladen werden." + }, + { + "key": "Uncheck the permissions you do not wish to grant.", + "value": "Deaktivieren Sie die Berechtigungen, die Sie nicht gewähren möchten." + }, + { + "key": "Unexpected error when trying to set phone number.", + "value": "Unerwarteter Fehler beim Versuch, die Telefonnummer festzulegen." + }, + { + "key": "update access token on refresh", + "value": "Aktualisieren Sie den Zugriffstoken beim Aktualisieren" + }, + { + "key": "Update password", + "value": "Passwort aktualisieren" + }, + { + "key": "uri", + "value": "uri" + }, + { + "key": "Uri must be unique.", + "value": "Uri muss eindeutig sein." + }, + { + "key": "urls", + "value": "URL" + }, + { + "key": "Use another service to register.", + "value": "Verwenden Sie einen anderen Dienst, um sich zu registrieren." + }, + { + "key": "use PKCE", + "value": "Verwenden Sie PKCE" + }, + { + "key": "use token lifetime", + "value": "Verwenden Sie die Token-Lebensdauer" + }, + { + "key": "User", + "value": "Benutzer" + }, + { + "key": "user", + "value": "Benutzer" + }, + { + "key": "User Code", + "value": "Benutzercode" + }, + { + "key": "user enpoint", + "value": "Benutzer-Endpunkt" + }, + { + "key": "User information endpoint is required.", + "value": "Der Endpunkt für Benutzerinformationen ist erforderlich." + }, + { + "key": "User information endpoint must be a valid uri.", + "value": "Der Endpunkt für Benutzerinformationen muss ein gültiger URI sein." + }, + { + "key": "user name", + "value": "Benutzername" + }, + { + "key": "Username", + "value": "Benutzername" + }, + { + "key": "Users", + "value": "Benutzer" + }, + { + "key": "value", + "value": "Wert" + }, + { + "key": "Verification Code", + "value": "Verifizierungscode" + }, + { + "key": "Verification code is invalid.", + "value": "Der Verifizierungscode ist ungültig." + }, + { + "key": "Verification email sent. Please check your email.", + "value": "Die Verifizierungs-E-Mail wurde gesendet. Bitte überprüfen Sie Ihre E-Mails." + }, + { + "key": "Verify", + "value": "Überprüfen" + }, + { + "key": "Welcome", + "value": "Willkommen" + }, + { + "key": "Would you like to logout of {0}?", + "value": "Möchten Sie sich von {0} abmelden?" + }, + { + "key": "wreply ", + "value": "wreply " + }, + { + "key": "wtrealm ", + "value": "wtrealm " + }, + { + "key": "Wtrealm is required.", + "value": "Wtrealm ist erforderlich." + }, + { + "key": "Yes", + "value": "Ja" + }, + { + "key": "Yes, Allow", + "value": "Ja, Erlauben" + }, + { + "key": "You are logged out.", + "value": "Sie sind abgemeldet." + }, + { + "key": "You are not authorize to import data.", + "value": "Sie sind nicht berechtigt, Daten zu importieren." + }, + { + "key": "You are now being returned to the application.", + "value": "Sie werden nun zur Anwendung zurückgeleitet." + }, + { + "key": "You are now logged out", + "value": "Sie sind jetzt abgemeldet" + }, + { + "key": "You are revoking the key currently in use. Be sure what you're doing.", + "value": "Sie widerrufen den derzeit verwendeten Schlüssel. Seien Sie sicher, was Sie tun." + }, + { + "key": "You can generate a new set of recovery codes.", + "value": "Sie können einen neuen Satz Wiederherstellungscodes generieren." + }, + { + "key": "You do not have a local username/password for this site. Add a local account so you can log in without an external login.", + "value": "Sie haben keinen lokalen Benutzernamen/-passwort für diese Seite. Fügen Sie ein lokales Konto hinzu, um sich ohne externe Anmeldung anzumelden." + }, + { + "key": "You do not have access to that resource.", + "value": "Sie haben keinen Zugriff auf diese Ressource." + }, + { + "key": "You have 1 recovery code left.", + "value": "Sie haben noch 1 Wiederherstellungscode übrig." + }, + { + "key": "You have generated new recovery codes.", + "value": "Sie haben neue Wiederherstellungscodes generiert." + }, + { + "key": "You have no recovery codes left.", + "value": "Sie haben keine Wiederherstellungscodes mehr übrig." + }, + { + "key": "You have not given access to any applications", + "value": "Sie haben keinen Anwendungen Zugriff gewährt" + }, + { + "key": "You have requested to log in with a recovery code. This login will not be remembered until you provide an authenticator app code at log in or disable 2FA and log in again.", + "value": "Sie haben beantragt, sich mit einem Wiederherstellungscodes anzumelden. Diese Anmeldung wird nicht gespeichert, bis Sie einen Authentifizierungs-App-Code bei der Anmeldung bereitstellen oder 2FA deaktivieren und sich erneut anmelden." + }, + { + "key": "You have successfully authorized the device", + "value": "Sie haben das Gerät erfolgreich autorisiert" + }, + { + "key": "You must generate a new set of recovery codes before you can log in with a recovery code.", + "value": "Sie müssen einen neuen Satz Wiederherstellungscodes generieren, bevor Sie sich mit einem Wiederherstellungscodes anmelden können." + }, + { + "key": "You should generate a new set of recovery codes", + "value": "Sie sollten einen neuen Satz Wiederherstellungscodes generieren." + }, + { + "key": "Your account contains personal data that you have given us. This page allows you to download or delete that data.", + "value": "Ihr Konto enthält persönliche Daten, die Sie uns gegeben haben. Diese Seite ermöglicht es Ihnen, diese Daten herunterzuladen oder zu löschen." + }, + { + "key": "Your authenticator app has been verified.", + "value": "Ihre Authentifizierungs-App wurde verifiziert." + }, + { + "key": "Your authenticator app key has been reset, you will need to configure your authenticator app using the new key.", + "value": "Ihr Authentifizierungs-App-Schlüssel wurde zurückgesetzt. Sie müssen Ihre Authentifizierungs-App mit dem neuen Schlüssel konfigurieren." + }, + { + "key": "Your email is unchanged.", + "value": "Ihre E-Mail-Adresse ist unverändert." + }, + { + "key": "Your login is protected with an authenticator app. Enter your authenticator code below.", + "value": "Ihre Anmeldung ist durch eine Authentifizierungs-App geschützt. Geben Sie Ihren Authentifizierungscode unten ein." + }, + { + "key": "Your password has been changed.", + "value": "Ihr Passwort wurde geändert." + }, + { + "key": "Your password has been set.", + "value": "Ihr Passwort wurde festgelegt." + }, + { + "key": "Your profile has been updated", + "value": "Ihr Profil wurde aktualisiert" + }, + { + "key": "You've successfully authenticated with {0}. Please enter an email address for this site below and click the Register button to finish logging in.", + "value": "Sie haben sich erfolgreich authentifiziert mit {0}. Bitte geben Sie unten eine E-Mail-Adresse für diese Seite ein und klicken Sie auf die Schaltfläche Registrieren, um die Anmeldung abzuschließen." + }, + { + "key": "{0} is requesting your permission", + "value": "{0} fordert Ihre Erlaubnis an" + }, + { + "key": "Verify that this identifier matches what the client is displaying:", + "value": "Überprüfen Sie, ob dieser Bezeichner mit dem übereinstimmt, was der Client anzeigt:" + }, + { + "key": "Description or name of device", + "value": "Beschreibung oder Name des Geräts" + }, + { + "key": "Will be available to these resource servers:", + "value": "Wird für diese Ressourcenserver verfügbar sein:" + }, + { + "key": "Binding Message", + "value": "Bindenachricht" + }, + { + "key": "Pending Backchannel Login Requests", + "value": "Ausstehende Backchannel-Anmeldeanforderungen" + }, + { + "key": "No Pending Login Requests", + "value": "Keine ausstehenden Anmeldeanforderungen" + }, + { + "key": "Invalid login request id.", + "value": "Ungültige Anmeldeanforderungs-ID." + }, + { + "key": "SubjectIds don't match.", + "value": "Die Subjekt-IDs stimmen nicht überein." + }, + { + "key": "Backchannel login requests", + "value": "Backchannel-Anmeldeanforderungen" + }, + { + "key": "ciba requests", + "value": "ciba-Anfragen" + }, + { + "key": "ciba lifetime", + "value": "ciba-Lebensdauer" + }, + { + "key": "polling interval", + "value": "Abfrageintervall" + }, + { + "key": "Below is the list of sessions you have opened.", + "value": "Hier ist die Liste der von Ihnen geöffneten Sitzungen." + }, + { + "key": "Below is the list of backchannel login requests awaiting your approbation.", + "value": "Hier ist die Liste der Backchannel-Anmeldeanforderungen, die auf Ihre Genehmigung warten." + }, + { + "key": "Sessions", + "value": "Sitzungen" + }, + { + "key": "Renewed", + "value": "Erneuert" + }, + { + "key": "Created", + "value": "Erstellt" + }, + { + "key": "Expires", + "value": "Läuft ab" + }, + { + "key": "No session", + "value": "Keine Sitzung" + }, + { + "key": "allowed identity token signing algorithms", + "value": "erlaubte Algorithmen zur Signierung von Identitätstoken" + }, + { + "key": "Reset password", + "value": "Passwort zurücksetzen" + }, + { + "key": "Reset your password.", + "value": "Setzen Sie Ihr Passwort zurück." + }, + { + "key": "Reset", + "value": "Zurücksetzen" + }, + { + "key": "Reset password confirmation", + "value": "Bestätigung des Passwortzurücksetzens" + }, + { + "key": "Your password has been reset.", + "value": "Ihr Passwort wurde zurückgesetzt." + }, + { + "key": "Please click here to log in", + "value": "Bitte klicken Sie hier, um sich anzumelden" + }, + { + "key": "Register as a new user", + "value": "Als neuer Benutzer registrieren" + }, + { + "key": "Resend email confirmation", + "value": "E-Mail-Bestätigung erneut senden" + }, + { + "key": "Resend", + "value": "Erneut senden" + }, + { + "key": "The machine account password is required.", + "value": "Das Maschinenkontokennwort ist erforderlich." + }, + { + "key": "persist kerberos credentials", + "value": "kerberos-Anmeldeinformationen beibehalten" + }, + { + "key": "persist ntlm credentials", + "value": "ntlm-Anmeldeinformationen beibehalten" + }, + { + "key": "enable ldap", + "value": "ldap aktivieren" + }, + { + "key": "domain", + "value": "Domäne" + }, + { + "key": "machine account name", + "value": "Maschinenkontoname" + }, + { + "key": "machine account password", + "value": "Maschinenkontokennwort" + }, + { + "key": "enable ldap claim resolution", + "value": "ldap-Behauptungsauflösung aktivieren" + }, + { + "key": "ignore nested groups", + "value": "verschachtelte Gruppen ignorieren" + }, + { + "key": "claims cache absolute expiration", + "value": "Ablauf der absoluten Ansprüche-Cache" + }, + { + "key": "claims cache sliding expiration", + "value": "Ablauf der gleitenden Ansprüche-Cache" + }, + { + "key": "require resource indicator", + "value": "Ressourcenindikator erforderlich" + }, + { + "key": "Are you sure you want to leave this page?", + "value": "Sind Sie sicher, dass Sie diese Seite verlassen möchten?" + }, + { + "key": "clone", + "value": "klonen" + }, + { + "key": "Clone of {0}", + "value": "Klon von {0}" + }, + { + "key": "Scope of", + "value": "Umfang von" + }, + { + "key": "Allowed to", + "value": "Erlaubt zu" + }, + { + "key": "scope of", + "value": "Umfang von" + }, + { + "key": "allowed to", + "value": "Erlaubt zu" + }, + { + "key": "metadata", + "value": "Metadaten" + }, + { + "key": "Cannot have more than one URI per kind.", + "value": "Kann nicht mehr als eine URI pro Art haben." + }, + { + "key": "Either a metadata or redirect URI must be set.", + "value": "Entweder eine Metadaten- oder Redirect-URI muss festgelegt sein." + }, + { + "key": "Either a metadata URI or a X509Certificate secret must be set.", + "value": "Entweder eine Metadaten-URI oder ein X509Certificate-Schlüssel muss festgelegt sein." + } +] \ No newline at end of file diff --git a/src/Aguacongas.TheIdServer.Duende/Localization-fr.json b/src/Aguacongas.TheIdServer.Duende/Localization-fr.json index 0ae13e948..8293828c3 100644 --- a/src/Aguacongas.TheIdServer.Duende/Localization-fr.json +++ b/src/Aguacongas.TheIdServer.Duende/Localization-fr.json @@ -1148,8 +1148,8 @@ "value": "rôle" }, { - "key": "roles", - "value": "rôles" + "key": "Roles", + "value": "Rôles" }, { "key": "Save", @@ -2160,7 +2160,7 @@ "value": "Une URI de métadonnées ou de redirection doit être défini." }, { - "key": "Either a metadata or redirect URI must be set.", + "key": "Either a metadata URI or a X509Certificate secret must be set.", "value": "Une URI de métadonnées ou un secret X509Certificate doit être défini." } ] \ No newline at end of file diff --git a/src/Aguacongas.TheIdServer.Duende/Localization-zh.json b/src/Aguacongas.TheIdServer.Duende/Localization-zh.json new file mode 100644 index 000000000..4cbe053f9 --- /dev/null +++ b/src/Aguacongas.TheIdServer.Duende/Localization-zh.json @@ -0,0 +1,2166 @@ +[ + { + "key": "(required)", + "value": "(必填)" + }, + { + "key": "{0} is requesting your permission", + "value": "{0} 正在请求您的许可" + }, + { + "key": "'{0}' cannot be added to a client with grant type '{1}'.", + "value": "'{0}' 无法添加到授权类型为 '{1}' 的客户端。" + }, + { + "key": "{0} is not a valid uri.", + "value": "{0} 不是有效的 uri。" + }, + { + "key": "2fa has been disabled. You can reenable 2fa when you setup an authenticator app", + "value": "2fa 已被禁用。当您设置身份验证器应用程序时,可以重新启用 2fa" + }, + { + "key": "About", + "value": "关于" + }, + { + "key": "Absolute", + "value": "绝对" + }, + { + "key": "absolute refresh token lifetime", + "value": "绝对刷新令牌生存期" + }, + { + "key": "Access Denied", + "value": "拒绝访问" + }, + { + "key": "access failed count", + "value": "访问失败计数" + }, + { + "key": "access token lifetime", + "value": "访问令牌生存期" + }, + { + "key": "access token type", + "value": "访问令牌类型" + }, + { + "key": "access type", + "value": "访问类型" + }, + { + "key": "activation", + "value": "激活" + }, + { + "key": "Add", + "value": "添加" + }, + { + "key": "Add another service to log in.", + "value": "添加另一个服务以登录。" + }, + { + "key": "Add authenticator app", + "value": "添加身份验证器应用程序" + }, + { + "key": "allow access tokens via browser", + "value": "允许通过浏览器访问令牌" + }, + { + "key": "allow offline access", + "value": "允许离线访问" + }, + { + "key": "allow plain text PKCE", + "value": "允许纯文本 PKCE" + }, + { + "key": "allow unsolicited logins", + "value": "允许未经请求的登录" + }, + { + "key": "always include user claims in id token", + "value": "始终在 id 令牌中包含用户声明" + }, + { + "key": "always send claims", + "value": "始终发送声明" + }, + { + "key": "An url cannot exceed 2000 char.", + "value": "URL 不能超过 2000 个字符。" + }, + { + "key": "api", + "value": "api" + }, + { + "key": "API Grants", + "value": "API 授权" + }, + { + "key": "api id", + "value": "api id" + }, + { + "key": "Apis", + "value": "Apis" + }, + { + "key": "app id", + "value": "应用程序 id" + }, + { + "key": "app secret", + "value": "应用程序密钥" + }, + { + "key": "Application Access", + "value": "应用程序访问" + }, + { + "key": "Associate your {0} account.", + "value": "关联您的 {0} 账户。" + }, + { + "key": "Authentication in progress", + "value": "正在进行身份验证" + }, + { + "key": "Authenticator app", + "value": "身份验证器应用程序" + }, + { + "key": "Authenticator code", + "value": "验证码" + }, + { + "key": "authority", + "value": "权限" + }, + { + "key": "Authority is required.", + "value": "权限是必需的。" + }, + { + "key": "Authority must be a valid uir.", + "value": "权限必须是有效的 uir。" + }, + { + "key": "authorization code lifetime", + "value": "授权码生存期" + }, + { + "key": "authorization endpoint", + "value": "授权端点" + }, + { + "key": "Authorization endpoint is required.", + "value": "授权端点是必需的。" + }, + { + "key": "Authorization endpoint must be a valid uri.", + "value": "授权端点必须是有效的 uri。" + }, + { + "key": "back channel logout uri", + "value": "后端通道注销 uri" + }, + { + "key": "back channel logout uri required", + "value": "需要后端通道注销 uri" + }, + { + "key": "Below is the list of applications you have given access to and the names of the resources they have access to.", + "value": "以下是您已授予访问权限的应用程序列表以及它们有权访问的资源名称。" + }, + { + "key": "Cancel", + "value": "取消" + }, + { + "key": "Change email", + "value": "更改电子邮件" + }, + { + "key": "Change password", + "value": "更改密码" + }, + { + "key": "Change your account settings", + "value": "更改您的账户设置" + }, + { + "key": "Checking login state...", + "value": "正在检查登录状态..." + }, + { + "key": "claim type", + "value": "声明类型" + }, + { + "key": "Claims", + "value": "声明" + }, + { + "key": "claims", + "value": "声明" + }, + { + "key": "claims mapping", + "value": "声明映射" + }, + { + "key": "Claims mapping", + "value": "声明映射" + }, + { + "key": "claims prefix", + "value": "声明前缀" + }, + { + "key": "claims transformations", + "value": "声明转换" + }, + { + "key": "Claims transformations", + "value": "声明转换" + }, + { + "key": "Click here to return to the {1} application.", + "value": "点击这里返回到{1}应用程序。" + }, + { + "key": "Client Application Access", + "value": "客户端应用程序访问" + }, + { + "key": "client id", + "value": "客户端 ID" + }, + { + "key": "Client Id is required.", + "value": "客户端 ID 是必需的。" + }, + { + "key": "client name", + "value": "客户端名称" + }, + { + "key": "client secret", + "value": "客户端密钥" + }, + { + "key": "Client Secret is required.", + "value": "客户端密钥是必需的。" + }, + { + "key": "client uri", + "value": "客户端 uri" + }, + { + "key": "Clients", + "value": "客户端" + }, + { + "key": "Close", + "value": "关闭" + }, + { + "key": "Code", + "value": "代码" + }, + { + "key": "Completing login...", + "value": "正在完成登录..." + }, + { + "key": "Configure authenticator app", + "value": "配置身份验证器应用程序" + }, + { + "key": "Confirm email", + "value": "确认电子邮件" + }, + { + "key": "Confirm email change", + "value": "确认电子邮件更改" + }, + { + "key": "Confirm new password", + "value": "确认新密码" + }, + { + "key": "Confirm password", + "value": "确认密码" + }, + { + "key": "Confirm your email", + "value": "确认您的电子邮件" + }, + { + "key": "Confirmation link to change email sent. Please check your email.", + "value": "更改电子邮件的确认链接已发送。请检查您的电子邮件。" + }, + { + "key": "consent", + "value": "同意" + }, + { + "key": "Consent", + "value": "同意" + }, + { + "key": "consent lifetime", + "value": "同意生存期" + }, + { + "key": "consents", + "value": "同意" + }, + { + "key": "Consents", + "value": "同意" + }, + { + "key": "consumer key", + "value": "消费者密钥" + }, + { + "key": "Consumer Key is required.", + "value": "消费者密钥是必需的。" + }, + { + "key": "consumer secret", + "value": "消费者密钥" + }, + { + "key": "Consumer Secret is required.", + "value": "消费者密钥是必需的。" + }, + { + "key": "cors", + "value": "cors" + }, + { + "key": "Create a new account.", + "value": "创建新账户。" + }, + { + "key": "create at", + "value": "创建于" + }, + { + "key": "Created:", + "value": "已创建:" + }, + { + "key": "creation", + "value": "创建" + }, + { + "key": "culture", + "value": "文化" + }, + { + "key": "Cultures", + "value": "文化" + }, + { + "key": "Current password", + "value": "当前密码" + }, + { + "key": "data", + "value": "数据" + }, + { + "key": "Data Protection", + "value": "数据保护" + }, + { + "key": "decription", + "value": "描述" + }, + { + "key": "Delete", + "value": "删除" + }, + { + "key": "Delete data and close my account", + "value": "删除数据并关闭我的账户" + }, + { + "key": "Delete Personal Data", + "value": "删除个人数据" + }, + { + "key": "Deleted", + "value": "已删除" + }, + { + "key": "Deleting this data will permanently remove your account, and this cannot be recovered.", + "value": "删除这些数据将永久删除您的账户,且无法恢复。" + }, + { + "key": "description", + "value": "描述" + }, + { + "key": "device flow request lifetime", + "value": "设备流请求生存期" + }, + { + "key": "Disable 2FA", + "value": "禁用双因素认证" + }, + { + "key": "disable telemetry", + "value": "禁用遥测" + }, + { + "key": "Disable two-factor authentication (2FA)", + "value": "禁用双因素认证(2FA)" + }, + { + "key": "Disabling 2FA does not change the keys used in authenticator apps. If you wish to change the key used in an authenticator app you should reset your authenticator keys.", + "value": "禁用2FA不会更改身份验证器应用中使用的密钥。如果您希望更改身份验证器应用中使用的密钥,您应该重置您的身份验证器密钥。" + }, + { + "key": "display name", + "value": "显示名称" + }, + { + "key": "Don't have access to your authenticator device? You can log in with a recovery code.", + "value": "无法访问您的身份验证器设备?您可以使用恢复代码登录。" + }, + { + "key": "Download", + "value": "下载" + }, + { + "key": "Download a two-factor authenticator app like Microsoft Authenticator for Windows Phone, Android and iOS or Google Authenticator for Android and iOS.", + "value": "下载双因素身份验证器应用,如适用于Windows PhoneAndroidiOS的Microsoft Authenticator,或适用于AndroidiOS的Google Authenticator。" + }, + { + "key": "Download Your Data", + "value": "下载您的数据" + }, + { + "key": "Editing the profile is not supported.", + "value": "不支持编辑个人资料。" + }, + { + "key": "Email", + "value": "电子邮件" + }, + { + "key": "email", + "value": "电子邮件" + }, + { + "key": "email confirmed", + "value": "电子邮件已确认" + }, + { + "key": "emphasize", + "value": "强调" + }, + { + "key": "enable local login", + "value": "启用本地登录" + }, + { + "key": "enabled", + "value": "已启用" + }, + { + "key": "encryption certificate", + "value": "加密证书" + }, + { + "key": "Enter your email.", + "value": "输入您的电子邮件。" + }, + { + "key": "Entities created", + "value": "已创建实体" + }, + { + "key": "Entities updated", + "value": "已更新实体" + }, + { + "key": "Error", + "value": "错误" + }, + { + "key": "Error changing email.", + "value": "更改电子邮件时出错。" + }, + { + "key": "Error changing user name.", + "value": "更改用户名时出错。" + }, + { + "key": "Error confirming your email.", + "value": "确认您的电子邮件时出错。" + }, + { + "key": "Error from external provider: {0}", + "value": "外部提供商错误:{0}" + }, + { + "key": "Error loading external login information during confirmation.", + "value": "确认期间加载外部登录信息时出错。" + }, + { + "key": "Error loading external login information.", + "value": "加载外部登录信息时出错。" + }, + { + "key": "Error when trying to revoke the key.", + "value": "尝试撤销密钥时出错。" + }, + { + "key": "expiration", + "value": "过期" + }, + { + "key": "expire at", + "value": "过期于" + }, + { + "key": "Expires:", + "value": "过期:" + }, + { + "key": "export", + "value": "导出" + }, + { + "key": "External Login", + "value": "外部登录" + }, + { + "key": "External login tokens", + "value": "外部登录令牌" + }, + { + "key": "external logins", + "value": "外部登录" + }, + { + "key": "External logins", + "value": "外部登录" + }, + { + "key": "external logins tokens", + "value": "外部登录令牌" + }, + { + "key": "External provider restrictions", + "value": "外部提供商限制" + }, + { + "key": "field", + "value": "字段" + }, + { + "key": "fields", + "value": "字段" + }, + { + "key": "filter", + "value": "过滤器" + }, + { + "key": "Forget this browser", + "value": "忘记此浏览器" + }, + { + "key": "Forgot password confirmation", + "value": "忘记密码确认" + }, + { + "key": "Forgot your password?", + "value": "忘记密码?" + }, + { + "key": "from claim type", + "value": "来自声明类型" + }, + { + "key": "front channel logout uri", + "value": "前端通道注销uri" + }, + { + "key": "front channel logout uri required", + "value": "需要前端通道注销uri" + }, + { + "key": "Generate Recovery Codes", + "value": "生成恢复码" + }, + { + "key": "Generate two-factor authentication (2FA) recovery codes", + "value": "生成双因素认证(2FA)恢复码" + }, + { + "key": "Generating new recovery codes does not change the keys used in authenticator apps. If you wish to change the key used in an authenticator app you should reset your authenticator keys.", + "value": "生成新的恢复码不会更改身份验证器应用中使用的密钥。如果您希望更改身份验证器应用中使用的密钥,您应该重置您的身份验证器密钥。" + }, + { + "key": "grant type", + "value": "授权类型" + }, + { + "key": "grant types", + "value": "授权类型" + }, + { + "key": "Grant types", + "value": "授权类型" + }, + { + "key": "Grants", + "value": "授权" + }, + { + "key": "Hello {0}!", + "value": "你好 {0}!" + }, + { + "key": "Hello, {0}!", + "value": "你好,{0}!" + }, + { + "key": "Home", + "value": "首页" + }, + { + "key": "id", + "value": "id" + }, + { + "key": "id token lifetime", + "value": "id 令牌生存期" + }, + { + "key": "Identities", + "value": "身份" + }, + { + "key": "identity", + "value": "身份" + }, + { + "key": "Identity Grants", + "value": "身份授权" + }, + { + "key": "idp restrictions", + "value": "idp 限制" + }, + { + "key": "If you lose your device and don't have the recovery codes you will lose access to your account.", + "value": "如果您丢失了设备且没有恢复码,您将无法访问您的账户。" + }, + { + "key": "If you reset your authenticator key your authenticator app will not work until you reconfigure it.", + "value": "如果您重置身份验证器密钥,您的身份验证器应用将无法工作,直到您重新配置它。" + }, + { + "key": "Import", + "value": "导入" + }, + { + "key": "include JWT id", + "value": "包含 JWT id" + }, + { + "key": "Incorrect password.", + "value": "密码不正确。" + }, + { + "key": "Invalid authenticator code.", + "value": "无效的身份验证器代码。" + }, + { + "key": "Invalid file", + "value": "无效文件" + }, + { + "key": "Invalid login request", + "value": "无效的登录请求" + }, + { + "key": "Invalid recovery code entered.", + "value": "输入的恢复码无效。" + }, + { + "key": "issuer", + "value": "发行者" + }, + { + "key": "key", + "value": "密钥" + }, + { + "key": "Keys", + "value": "密钥" + }, + { + "key": "lifetime", + "value": "生存期" + }, + { + "key": "Loading...", + "value": "加载中..." + }, + { + "key": "Local Login", + "value": "本地登录" + }, + { + "key": "localized description", + "value": "本地化描述" + }, + { + "key": "localized display name", + "value": "本地化显示名称" + }, + { + "key": "lockout enabled", + "value": "已启用锁定" + }, + { + "key": "lockout end", + "value": "锁定结束" + }, + { + "key": "Log in", + "value": "登录" + }, + { + "key": "Log in using your {0} account", + "value": "使用您的 {0} 账户登录" + }, + { + "key": "Log out", + "value": "登出" + }, + { + "key": "Login", + "value": "登录" + }, + { + "key": "Login form", + "value": "登录表单" + }, + { + "key": "logo uri", + "value": "logo uri" + }, + { + "key": "Logout", + "value": "登出" + }, + { + "key": "Logout form", + "value": "登出表单" + }, + { + "key": "Manage Email", + "value": "管理电子邮件" + }, + { + "key": "Manage your account", + "value": "管理您的账户" + }, + { + "key": "Manage your external logins", + "value": "管理您的外部登录" + }, + { + "key": "map default outbound JWT claim types", + "value": "映射默认出站 JWT 声明类型" + }, + { + "key": "metadata address", + "value": "元数据地址" + }, + { + "key": "Metadata address is required.", + "value": "元数据地址是必需的。" + }, + { + "key": "Metadata address must be a valid HTTPS url when 'required https metadata is true'.", + "value": "当 '需要https元数据' 为 true 时,元数据地址必须是有效的HTTPS URL。" + }, + { + "key": "Metadata address must be a valid uri.", + "value": "元数据地址必须是有效的uri。" + }, + { + "key": "name", + "value": "名称" + }, + { + "key": "name id format", + "value": "名称id格式" + }, + { + "key": "New email", + "value": "新电子邮件" + }, + { + "key": "New password", + "value": "新密码" + }, + { + "key": "No changes", + "value": "无变化" + }, + { + "key": "No, Do Not Allow", + "value": "否,不允许" + }, + { + "key": "Nothing here.", + "value": "这里什么都没有。" + }, + { + "key": "Once complete, you may close this tab", + "value": "完成后,您可以关闭此标签页" + }, + { + "key": "Once you have scanned the QR code or input the key above, your two factor authentication app will provide youm with a unique code.Enter the code in the confirmation box below.", + "value": "一旦您扫描了QR码或输入了上面的密钥,您的双因素身份验证应用将为您提供一个唯一的代码。在下面的确认框中输入该代码。" + }, + { + "key": "One time only", + "value": "仅一次" + }, + { + "key": "pairwise subject salt", + "value": "成对主题盐" + }, + { + "key": "Password", + "value": "密码" + }, + { + "key": "password", + "value": "密码" + }, + { + "key": "Personal data", + "value": "个人数据" + }, + { + "key": "Personal Information", + "value": "个人信息" + }, + { + "key": "phone number", + "value": "电话号码" + }, + { + "key": "Phone number", + "value": "电话号码" + }, + { + "key": "phone number confirmed", + "value": "电话号码已确认" + }, + { + "key": "Please check your email to confirm your account.", + "value": "请检查您的电子邮件以确认您的账户。" + }, + { + "key": "Please check your email to reset your password.", + "value": "请检查您的电子邮件以重置您的密码。" + }, + { + "key": "Please confirm that the authorization request quotes the code: \"{0}\".", + "value": "请确认授权请求引用了代码:\"{0}\"。" + }, + { + "key": "Please confirm your account by clicking here.", + "value": "请通过点击此处确认您的账户。" + }, + { + "key": "Please enter the code displayed on your device", + "value": "请输入显示在您设备上的代码" + }, + { + "key": "Please reset your password by clicking here.", + "value": "请通过点击此处重置您的密码。" + }, + { + "key": "Policy", + "value": "策略" + }, + { + "key": "policy uri", + "value": "策略 uri" + }, + { + "key": "post logout", + "value": "登出后" + }, + { + "key": "prefix", + "value": "前缀" + }, + { + "key": "Processing logout callback...", + "value": "正在处理登出回调..." + }, + { + "key": "Processing logout...", + "value": "正在处理登出..." + }, + { + "key": "Profile", + "value": "个人资料" + }, + { + "key": "prompt", + "value": "提示" + }, + { + "key": "properties", + "value": "属性" + }, + { + "key": "Properties", + "value": "属性" + }, + { + "key": "protocol type", + "value": "协议类型" + }, + { + "key": "provider", + "value": "提供商" + }, + { + "key": "Providers", + "value": "提供商" + }, + { + "key": "Put these codes in a safe place.", + "value": "将这些代码放在安全的地方。" + }, + { + "key": "Re use", + "value": "重用" + }, + { + "key": "reason", + "value": "原因" + }, + { + "key": "Recovery Code", + "value": "恢复码" + }, + { + "key": "Recovery code verification", + "value": "恢复码验证" + }, + { + "key": "Recovery codes", + "value": "恢复码" + }, + { + "key": "redirect", + "value": "重定向" + }, + { + "key": "redirect uri", + "value": "重定向 uri" + }, + { + "key": "Reference tokens", + "value": "引用令牌" + }, + { + "key": "reference tokens", + "value": "引用令牌" + }, + { + "key": "refresh on issuer key not found", + "value": "未找到发行者密钥时刷新" + }, + { + "key": "refresh token expiration", + "value": "刷新令牌过期" + }, + { + "key": "refresh token usage", + "value": "刷新令牌使用" + }, + { + "key": "Refresh tokens", + "value": "刷新令牌" + }, + { + "key": "refresh tokens", + "value": "刷新令牌" + }, + { + "key": "Register", + "value": "注册" + }, + { + "key": "Register confirmation", + "value": "注册确认" + }, + { + "key": "Registered Logins", + "value": "已注册的登录" + }, + { + "key": "Registration is not supported.", + "value": "不支持注册。" + }, + { + "key": "Relying parties", + "value": "依赖方" + }, + { + "key": "relying party", + "value": "依赖方" + }, + { + "key": "Remember My Decision", + "value": "记住我的决定" + }, + { + "key": "Remember My Login", + "value": "记住我的登录" + }, + { + "key": "Remember this machine", + "value": "记住此设备" + }, + { + "key": "remenber consent", + "value": "记住同意" + }, + { + "key": "remote sign-out path ", + "value": "远程登出路径" + }, + { + "key": "remote sign-out path", + "value": "远程登出路径" + }, + { + "key": "Remove", + "value": "移除" + }, + { + "key": "require consent", + "value": "需要同意" + }, + { + "key": "require https metadata", + "value": "需要https元数据" + }, + { + "key": "require PKCE", + "value": "需要PKCE" + }, + { + "key": "require secret", + "value": "需要密钥" + }, + { + "key": "required", + "value": "必需" + }, + { + "key": "Reset authenticator app", + "value": "重置身份验证器应用" + }, + { + "key": "Reset authenticator key", + "value": "重置身份验证器密钥" + }, + { + "key": "Reset Password", + "value": "重置密码" + }, + { + "key": "Reset recovery codes", + "value": "重置恢复码" + }, + { + "key": "resource", + "value": "资源" + }, + { + "key": "Resources", + "value": "资源" + }, + { + "key": "response mode", + "value": "响应模式" + }, + { + "key": "response type", + "value": "响应类型" + }, + { + "key": "retrieve user details", + "value": "检索用户详情" + }, + { + "key": "Retype the \"{0}\" if you are sure to delete it.", + "value": "如果您确定要删除它,请重新输入 \"{0}\"。" + }, + { + "key": "Retype the \"{0}\" if you are sure to revoke it.", + "value": "如果您确定要撤销它,请重新输入 \"{0}\"。" + }, + { + "key": "Revoke", + "value": "撤销" + }, + { + "key": "Revoke Access", + "value": "撤销访问权限" + }, + { + "key": "Revoked", + "value": "已撤销" + }, + { + "key": "role", + "value": "角色" + }, + { + "key": "Roles", + "value": "角色" + }, + { + "key": "Save", + "value": "保存" + }, + { + "key": "save tokens", + "value": "保存令牌" + }, + { + "key": "Saved", + "value": "已保存" + }, + { + "key": "Scan the QR Code or enter this key {0} into your two factor authenticator app. Spaces and casing do not matter.", + "value": "扫描二维码或将此密钥 {0} 输入到您的双因素身份验证器应用中。忽略空格和大小写。" + }, + { + "key": "scheme", + "value": "方案" + }, + { + "key": "scope", + "value": "范围" + }, + { + "key": "scopes", + "value": "范围" + }, + { + "key": "Scopes", + "value": "范围" + }, + { + "key": "Scopes must be unique.", + "value": "范围必须是唯一的。" + }, + { + "key": "secrets", + "value": "密钥" + }, + { + "key": "Select a kind of provider...", + "value": "选择一种提供商..." + }, + { + "key": "send app secret proof", + "value": "发送应用密钥证明" + }, + { + "key": "Send verification email", + "value": "发送验证邮件" + }, + { + "key": "Set password", + "value": "设置密码" + }, + { + "key": "Set your password", + "value": "设置您的密码" + }, + { + "key": "Setup authenticator app", + "value": "设置身份验证器应用" + }, + { + "key": "show all options", + "value": "显示所有选项" + }, + { + "key": "show in discovery document", + "value": "在发现文档中显示" + }, + { + "key": "signature algorithm", + "value": "签名算法" + }, + { + "key": "signature digest", + "value": "签名摘要" + }, + { + "key": "signed-out callback path", + "value": "登出回调路径" + }, + { + "key": "signed-out redirect uri", + "value": "登出重定向uri" + }, + { + "key": "Signing", + "value": "签名" + }, + { + "key": "sign-out scheme ", + "value": "登出方案" + }, + { + "key": "sign-out scheme", + "value": "登出方案" + }, + { + "key": "sign-out wreply ", + "value": "登出wreply" + }, + { + "key": "skip unrecognized requests", + "value": "跳过无法识别的请求" + }, + { + "key": "Sliding", + "value": "滑动" + }, + { + "key": "sliding refresh token lifetime", + "value": "滑动刷新令牌生存期" + }, + { + "key": "Sorry, there was an error", + "value": "抱歉,出现了一个错误" + }, + { + "key": "Sorry, there's nothing at this address.", + "value": "抱歉,此地址没有任何内容。" + }, + { + "key": "sso lifetime", + "value": "单点登录生存期" + }, + { + "key": "store claims", + "value": "存储声明" + }, + { + "key": "Submit", + "value": "提交" + }, + { + "key": "Success", + "value": "成功" + }, + { + "key": "Supported cultures", + "value": "支持的文化" + }, + { + "key": "Terms of service", + "value": "服务条款" + }, + { + "key": "terms of service uri", + "value": "服务条款uri" + }, + { + "key": "Thank you for confirming your email change.", + "value": "感谢您确认您的电子邮件更改。" + }, + { + "key": "The {0} must be at least {2} and at max {1} characters long.", + "value": "{0} 必须至少 {2} 个字符长,最多 {1} 个字符。" + }, + { + "key": "The api property key cannot exceed 250 chars.", + "value": "api属性键不能超过250个字符。" + }, + { + "key": "The api property key is required.", + "value": "api属性键是必需的。" + }, + { + "key": "The api property key must be unique.", + "value": "api属性键必须是唯一的。" + }, + { + "key": "The api property value cannot exceed 2000 chars.", + "value": "api属性值不能超过2000个字符。" + }, + { + "key": "The api property value is required.", + "value": "api属性值是必需的。" + }, + { + "key": "The back channel logout url cannot exceed 2000 char.", + "value": "后端通道登出url不能超过2000个字符。" + }, + { + "key": "The back channel logout url is required.", + "value": "后端通道登出url是必需的。" + }, + { + "key": "The back logout url is not valid.", + "value": "后端登出url无效。" + }, + { + "key": "The claim prefix cannot exceed 250 char.", + "value": "声明前缀不能超过250个字符。" + }, + { + "key": "The claim type cannot exceed 2000 chars.", + "value": "声明类型不能超过2000个字符。" + }, + { + "key": "The claim type cannot exceed 250 chars.", + "value": "声明类型不能超过250个字符。" + }, + { + "key": "The claim type is required.", + "value": "声明类型是必需的。" + }, + { + "key": "The claim type must be unique.", + "value": "声明类型必须是唯一的。" + }, + { + "key": "The claim value cannot exceed 2000 chars.", + "value": "声明值不能超过2000个字符。" + }, + { + "key": "The claim value is required.", + "value": "声明值是必需的。" + }, + { + "key": "The client property key cannot exceed 250 chars.", + "value": "客户端属性键不能超过250个字符。" + }, + { + "key": "The client property key is required.", + "value": "客户端属性键是必需的。" + }, + { + "key": "The client property key must be unique.", + "value": "客户端属性键必须是唯一的。" + }, + { + "key": "The client property value cannot exceed 2000 chars.", + "value": "客户端属性值不能超过2000个字符。" + }, + { + "key": "The client property value is required.", + "value": "客户端属性值是必需的。" + }, + { + "key": "The client should contain at least one grant type.", + "value": "客户端应至少包含一种授权类型。" + }, + { + "key": "The culture is required.", + "value": "文化是必需的。" + }, + { + "key": "The culture must be unique.", + "value": "文化必须是唯一的。" + }, + { + "key": "The current browser has been forgotten. When you login again from this browser you will be prompted for your 2fa code.", + "value": "当前浏览器已被忘记。当您从此浏览器再次登录时,系统将提示您输入2fa代码。" + }, + { + "key": "The description cannot exceed 200 chars.", + "value": "描述不能超过200个字符。" + }, + { + "key": "The description cannot exceed 2000 chars.", + "value": "描述不能超过2000个字符。" + }, + { + "key": "The description canoot exceed 1000 char.", + "value": "描述不能超过1000个字符。" + }, + { + "key": "The digest algorithm is required", + "value": "摘要算法是必需的" + }, + { + "key": "The display name cannot exceed 200 chars.", + "value": "显示名称不能超过200个字符。" + }, + { + "key": "The display name is required.", + "value": "显示名称是必需的。" + }, + { + "key": "The external login was added.", + "value": "外部登录已添加。" + }, + { + "key": "The external login was not added. External logins can only be associated with one account.", + "value": "外部登录未添加。外部登录只能与一个账户关联。" + }, + { + "key": "The external login was not removed.", + "value": "外部登录未被移除。" + }, + { + "key": "The external login was removed.", + "value": "外部登录已被移除。" + }, + { + "key": "The from claim tyoe is required.", + "value": "来源声明类型是必需的。" + }, + { + "key": "The from claim type is required.", + "value": "来源声明类型是必需的。" + }, + { + "key": "The from claim type must be unique.", + "value": "来源声明类型必须是唯一的。" + }, + { + "key": "The front channel logout url cannot exceed 2000 char.", + "value": "前端通道登出url不能超过2000个字符。" + }, + { + "key": "The front channel logout url is not valid.", + "value": "前端通道登出url无效。" + }, + { + "key": "The front channel logout url is required.", + "value": "前端通道登出url是必需的。" + }, + { + "key": "The grant type cannot contains space.", + "value": "授权类型不能包含空格。" + }, + { + "key": "The grant type must be unique.", + "value": "授权类型必须是唯一的。" + }, + { + "key": "The id is required.", + "value": "id是必需的。" + }, + { + "key": "The id must be an URI when protocol is WS-Federation. (ex: urn:wsfed).", + "value": "当协议为WS-Federation时,id必须是URI。(例如:urn:wsfed)" + }, + { + "key": "The identity claim type cannot exceed 2000 chars.", + "value": "身份声明类型不能超过2000个字符。" + }, + { + "key": "The identity claim type is required.", + "value": "身份声明类型是必需的。" + }, + { + "key": "The identity claim type must be unique.", + "value": "身份声明类型必须是唯一的。" + }, + { + "key": "The identity property key cannot exceed 250 chars.", + "value": "身份属性键不能超过250个字符。" + }, + { + "key": "The identity property key is required.", + "value": "身份属性键是必需的。" + }, + { + "key": "The identity property key must be unique.", + "value": "身份属性键必须是唯一的。" + }, + { + "key": "The identity property value cannot exceed 2000 chars.", + "value": "身份属性值不能超过2000个字符。" + }, + { + "key": "The identity property value is required.", + "value": "身份属性值是必需的。" + }, + { + "key": "The identity should provide at least one claim.", + "value": "身份应提供至少一个声明。" + }, + { + "key": "The key is required.", + "value": "密钥是必需的。" + }, + { + "key": "The key '{0}' must be unique.", + "value": "密钥必须是唯一的。" + }, + { + "key": "The kind of provider is required.", + "value": "需要提供商类型。" + }, + { + "key": "The logo url cannot exceed 2000 char.", + "value": "标志URL不能超过2000个字符。" + }, + { + "key": "The logo url is not valid.", + "value": "标志URL无效。" + }, + { + "key": "The name cannot exceed 200 char.", + "value": "名称不能超过200个字符。" + }, + { + "key": "The name cannot exceed 200 chars.", + "value": "名称不能超过200个字符。" + }, + { + "key": "The name identifier is required", + "value": "名称标识符是必需的" + }, + { + "key": "The name is required", + "value": "名称是必需的" + }, + { + "key": "The name is required.", + "value": "名称是必需的。" + }, + { + "key": "The new password and confirmation password do not match.", + "value": "新密码和确认密码不匹配。" + }, + { + "key": "The password and confirmation password do not match.", + "value": "密码和确认密码不匹配。" + }, + { + "key": "The policy url cannot exceed 2000 char.", + "value": "策略URL不能超过2000个字符。" + }, + { + "key": "The policy url is not valid.", + "value": "策略URL无效。" + }, + { + "key": "The relying party is required.", + "value": "需要依赖方。" + }, + { + "key": "The role must be unique", + "value": "角色必须是唯一的" + }, + { + "key": "The role name is required", + "value": "角色名称是必需的" + }, + { + "key": "The secret type is required.", + "value": "需要密钥类型。" + }, + { + "key": "The secret value is required.", + "value": "密钥值是必需的。" + }, + { + "key": "The sheme is required.", + "value": "需要方案。" + }, + { + "key": "The subject salt cannot exceed 250 char.", + "value": "主题盐不能超过250个字符。" + }, + { + "key": "The terms of service url cannot exceed 2000 char.", + "value": "服务条款URL不能超过2000个字符。" + }, + { + "key": "The terms of service url is not valid.", + "value": "服务条款URL无效。" + }, + { + "key": "The to claim tyoe is required.", + "value": "需要声明类型。" + }, + { + "key": "The to claim type is required.", + "value": "需要声明类型。" + }, + { + "key": "The to claim type must be an URI.", + "value": "声明类型必须是URI。" + }, + { + "key": "The token expression doesn't match a valid format. You can use the forms d.hh:mm:ss, hh.mm:ss, mm:ss, a number of days (365d), a number of hours (12h), a number of minutes (30m), a number of second", + "value": "令牌表达式不符合有效格式。您可以使用d.hh:mm:ss、hh.mm:ss、mm:ss格式,或天数(365d)、小时数(12h)、分钟数(30m)、秒数" + }, + { + "key": "The token type is required", + "value": "需要令牌类型" + }, + { + "key": "The type of protocol cannot exceed 200 char.", + "value": "协议类型不能超过200个字符。" + }, + { + "key": "The type of protocol is required", + "value": "需要协议类型" + }, + { + "key": "The type of user code cannot exceed 100 char.", + "value": "用户代码类型不能超过100个字符。" + }, + { + "key": "The url cannot exceed 2000 char.", + "value": "URL不能超过2000个字符。" + }, + { + "key": "The url is not valid.", + "value": "URL无效。" + }, + { + "key": "There are no login schemes configured for this client.", + "value": "此客户端未配置登录方案。" + }, + { + "key": "There was an error trying to log you in: '{0}'", + "value": "尝试登录时出错:'{0}'" + }, + { + "key": "There was an error trying to log you out: '{0}'", + "value": "尝试注销时出错:'{0}'" + }, + { + "key": "This action only disables 2FA.", + "value": "此操作仅禁用双因素认证。" + }, + { + "key": "This process disables 2FA until you verify your authenticator app. If you do not complete your authenticator app configuration you may lose access to your account.", + "value": "此过程会禁用双因素认证,直到您验证您的认证器应用。如果您未完成认证器应用配置,可能会失去对账户的访问权限。" + }, + { + "key": "to claim type", + "value": "声明类型" + }, + { + "key": "To use an authenticator app go through the following steps:", + "value": "要使用认证器应用,请执行以下步骤:" + }, + { + "key": "Token endpoint is required.", + "value": "需要令牌端点。" + }, + { + "key": "Token endpoint must be a valid uri.", + "value": "令牌端点必须是有效的URI。" + }, + { + "key": "token enpoint", + "value": "令牌端点" + }, + { + "key": "token type", + "value": "令牌类型" + }, + { + "key": "Tokens", + "value": "令牌" + }, + { + "key": "tokens", + "value": "令牌" + }, + { + "key": "two factor enabled", + "value": "已启用双因素认证" + }, + { + "key": "Two-factor authentication", + "value": "双因素认证" + }, + { + "key": "Two-factor authentication (2FA)", + "value": "双因素认证(2FA)" + }, + { + "key": "type", + "value": "类型" + }, + { + "key": "Unable to load user with ID '{0}'.", + "value": "无法加载ID为'{0}'的用户。" + }, + { + "key": "Uncheck the permissions you do not wish to grant.", + "value": "取消选中您不希望授予的权限。" + }, + { + "key": "Unexpected error when trying to set phone number.", + "value": "尝试设置电话号码时出现意外错误。" + }, + { + "key": "update access token on refresh", + "value": "刷新时更新访问令牌" + }, + { + "key": "Update password", + "value": "更新密码" + }, + { + "key": "uri", + "value": "uri" + }, + { + "key": "Uri must be unique.", + "value": "Uri必须是唯一的。" + }, + { + "key": "urls", + "value": "URL" + }, + { + "key": "Use another service to register.", + "value": "使用其他服务注册。" + }, + { + "key": "use PKCE", + "value": "使用PKCE" + }, + { + "key": "use token lifetime", + "value": "使用令牌生命周期" + }, + { + "key": "User", + "value": "用户" + }, + { + "key": "user", + "value": "用户" + }, + { + "key": "User Code", + "value": "用户代码" + }, + { + "key": "user enpoint", + "value": "用户端点" + }, + { + "key": "User information endpoint is required.", + "value": "需要用户信息端点。" + }, + { + "key": "User information endpoint must be a valid uri.", + "value": "用户信息端点必须是有效的URI。" + }, + { + "key": "user name", + "value": "用户名" + }, + { + "key": "Username", + "value": "用户名" + }, + { + "key": "Users", + "value": "用户" + }, + { + "key": "value", + "value": "值" + }, + { + "key": "Verification Code", + "value": "验证码" + }, + { + "key": "Verification code is invalid.", + "value": "验证码无效。" + }, + { + "key": "Verification email sent. Please check your email.", + "value": "验证邮件已发送。请查看您的邮箱。" + }, + { + "key": "Verify", + "value": "验证" + }, + { + "key": "Welcome", + "value": "欢迎" + }, + { + "key": "Would you like to logout of {0}?", + "value": "您想要退出{0}吗?" + }, + { + "key": "wreply ", + "value": "wreply " + }, + { + "key": "wtrealm ", + "value": "wtrealm " + }, + { + "key": "Wtrealm is required.", + "value": "需要Wtrealm。" + }, + { + "key": "Yes", + "value": "是" + }, + { + "key": "Yes, Allow", + "value": "是,允许" + }, + { + "key": "You are logged out.", + "value": "您已注销。" + }, + { + "key": "You are not authorize to import data.", + "value": "您无权导入数据。" + }, + { + "key": "You are now being returned to the application.", + "value": "您现在将返回应用程序。" + }, + { + "key": "You are now logged out", + "value": "您现在已注销" + }, + { + "key": "You are revoking the key currently in use. Be sure what you're doing.", + "value": "您正在撤销当前使用的密钥。请确保您知道自己在做什么。" + }, + { + "key": "You can generate a new set of recovery codes.", + "value": "您可以生成一组新的恢复码。" + }, + { + "key": "You do not have a local username/password for this site. Add a local account so you can log in without an external login.", + "value": "您没有此站点的本地用户名/密码。添加本地帐户,以便无需外部登录即可登录。" + }, + { + "key": "You do not have access to that resource.", + "value": "您无权访问该资源。" + }, + { + "key": "You have 1 recovery code left.", + "value": "您还剩1个恢复码。" + }, + { + "key": "You have generated new recovery codes.", + "value": "您已生成新的恢复码。" + }, + { + "key": "You have no recovery codes left.", + "value": "您没有剩余的恢复码。" + }, + { + "key": "You have not given access to any applications", + "value": "您尚未授予任何应用程序访问权限" + }, + { + "key": "You have requested to log in with a recovery code. This login will not be remembered until you provide an authenticator app code at log in or disable 2FA and log in again.", + "value": "您已请求使用恢复码登录。在您提供认证器应用代码登录或禁用双因素认证并重新登录之前,此登录不会被记住。" + }, + { + "key": "You have successfully authorized the device", + "value": "您已成功授权设备" + }, + { + "key": "You must generate a new set of recovery codes before you can log in with a recovery code.", + "value": "在使用恢复码登录之前,您必须生成一组新的恢复码。" + }, + { + "key": "You should generate a new set of recovery codes", + "value": "您应该生成一组新的恢复码。" + }, + { + "key": "Your account contains personal data that you have given us. This page allows you to download or delete that data.", + "value": "您的帐户包含您提供给我们的个人数据。此页面允许您下载或删除这些数据。" + }, + { + "key": "Your authenticator app has been verified.", + "value": "您的认证器应用已验证。" + }, + { + "key": "Your authenticator app key has been reset, you will need to configure your authenticator app using the new key.", + "value": "您的认证器应用密钥已重置,您需要使用新密钥配置您的认证器应用。" + }, + { + "key": "Your email is unchanged.", + "value": "您的电子邮件未更改。" + }, + { + "key": "Your login is protected with an authenticator app. Enter your authenticator code below.", + "value": "您的登录受认证器应用保护。请在下方输入您的认证器代码。" + }, + { + "key": "Your password has been changed.", + "value": "您的密码已更改。" + }, + { + "key": "Your password has been set.", + "value": "您的密码已设置。" + }, + { + "key": "Your profile has been updated", + "value": "您的个人资料已更新" + }, + { + "key": "You've successfully authenticated with {0}. Please enter an email address for this site below and click the Register button to finish logging in.", + "value": "您已成功通过{0}身份验证。请在下方输入此网站的电子邮件地址,然后点击注册按钮完成登录。" + }, + { + "key": "{0} is requesting your permission", + "value": "{0} 正在请求您的许可" + }, + { + "key": "Verify that this identifier matches what the client is displaying:", + "value": "验证此标识符是否与客户端显示的内容匹配:" + }, + { + "key": "Description or name of device", + "value": "设备描述或名称" + }, + { + "key": "Will be available to these resource servers:", + "value": "将可用于这些资源服务器:" + }, + { + "key": "Binding Message", + "value": "绑定消息" + }, + { + "key": "Pending Backchannel Login Requests", + "value": "待处理的后通道登录请求" + }, + { + "key": "No Pending Login Requests", + "value": "没有待处理的登录请求" + }, + { + "key": "Invalid login request id.", + "value": "无效的登录请求ID。" + }, + { + "key": "SubjectIds don't match.", + "value": "主体ID不匹配。" + }, + { + "key": "Backchannel login requests", + "value": "后通道登录请求" + }, + { + "key": "ciba requests", + "value": "CIBA请求" + }, + { + "key": "ciba lifetime", + "value": "CIBA生命周期" + }, + { + "key": "polling interval", + "value": "轮询间隔" + }, + { + "key": "Below is the list of sessions you have opened.", + "value": "以下是您已打开的会话列表。" + }, + { + "key": "Below is the list of backchannel login requests awaiting your approbation.", + "value": "以下是等待您批准的后通道登录请求列表。" + }, + { + "key": "Sessions", + "value": "会话" + }, + { + "key": "Renewed", + "value": "已续期" + }, + { + "key": "Created", + "value": "已创建" + }, + { + "key": "Expires", + "value": "过期" + }, + { + "key": "No session", + "value": "无会话" + }, + { + "key": "allowed identity token signing algorithms", + "value": "允许的身份令牌签名算法" + }, + { + "key": "Reset password", + "value": "重置密码" + }, + { + "key": "Reset your password.", + "value": "重置您的密码。" + }, + { + "key": "Reset", + "value": "重置" + }, + { + "key": "Reset password confirmation", + "value": "重置密码确认" + }, + { + "key": "Your password has been reset.", + "value": "您的密码已重置。" + }, + { + "key": "Please click here to log in", + "value": "请点击此处登录" + }, + { + "key": "Register as a new user", + "value": "注册为新用户" + }, + { + "key": "Resend email confirmation", + "value": "重新发送电子邮件确认" + }, + { + "key": "Resend", + "value": "重新发送" + }, + { + "key": "The machine account password is required.", + "value": "需要机器账户密码。" + }, + { + "key": "persist kerberos credentials", + "value": "保留Kerberos凭证" + }, + { + "key": "persist ntlm credentials", + "value": "保留NTLM凭证" + }, + { + "key": "enable ldap", + "value": "启用LDAP" + }, + { + "key": "domain", + "value": "域" + }, + { + "key": "machine account name", + "value": "机器账户名" + }, + { + "key": "machine account password", + "value": "机器账户密码" + }, + { + "key": "enable ldap claim resolution", + "value": "启用LDAP声明解析" + }, + { + "key": "ignore nested groups", + "value": "忽略嵌套组" + }, + { + "key": "claims cache absolute expiration", + "value": "声明缓存绝对过期时间" + }, + { + "key": "claims cache sliding expiration", + "value": "声明缓存滑动过期时间" + }, + { + "key": "require resource indicator", + "value": "需要资源指示器" + }, + { + "key": "Are you sure you want to leave this page?", + "value": "您确定要离开此页面吗?" + }, + { + "key": "clone", + "value": "克隆" + }, + { + "key": "Clone of {0}", + "value": "{0}的克隆" + }, + { + "key": "Scope of", + "value": "范围" + }, + { + "key": "Allowed to", + "value": "允许" + }, + { + "key": "scope of", + "value": "范围" + }, + { + "key": "allowed to", + "value": "允许" + }, + { + "key": "metadata", + "value": "元数据" + }, + { + "key": "Cannot have more than one URI per kind.", + "value": "每种类型不能有多个URI。" + }, + { + "key": "Either a metadata or redirect URI must be set.", + "value": "必须设置元数据或重定向URI。" + }, + { + "key": "Either a metadata URI or a X509Certificate secret must be set.", + "value": "必须设置元数据URI或X509证书密钥。" + } +] \ No newline at end of file diff --git a/src/Aguacongas.TheIdServer.Duende/SeedData.cs b/src/Aguacongas.TheIdServer.Duende/SeedData.cs index 99b090881..4405b7179 100644 --- a/src/Aguacongas.TheIdServer.Duende/SeedData.cs +++ b/src/Aguacongas.TheIdServer.Duende/SeedData.cs @@ -8,7 +8,6 @@ using IdentityModel; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; -using Serilog; using System.Security.Claims; using System.Text.Json; using Entity = Aguacongas.IdentityServer.Store.Entity; @@ -23,8 +22,8 @@ public static class SeedData PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; - public static void EnsureSeedData(IConfiguration configuration, IServiceProvider services) - { + public static void EnsureSeedData(IConfiguration configuration, IServiceProvider services) + { using var scope = services.CreateScope(); var dbType = configuration.GetValue("DbType"); @@ -39,7 +38,7 @@ public static void EnsureSeedData(IConfiguration configuration, IServiceProvider var appcontext = scope.ServiceProvider.GetRequiredService(); appcontext.Database.Migrate(); } - + SeedUsers(scope, configuration); SeedConfiguration(scope, configuration); } @@ -199,7 +198,7 @@ private static void SeedApis(IConfiguration configuration, IServiceProvider prov DisplayName = resource.DisplayName, Enabled = resource.Enabled, Id = resource.Name, - + RequireResourceIndicator = resource.RequireResourceIndicator }).GetAwaiter().GetResult(); } @@ -211,7 +210,7 @@ private static void SeedApis(IConfiguration configuration, IServiceProvider prov SeedApiSecrets(apiSecretStore, resource); SeedApiApiScopes(apiApiScopeStore, resource); SeedApiProperties(apiPropertyStore, resource); - + logger.LogInformation("Add api resource {DisplayName}", resource.DisplayName); } } @@ -273,7 +272,7 @@ private static void SeedApiSecrets(IAdminStore apiSecretStore, Value = secret.Value }).GetAwaiter().GetResult(); } - catch(ArgumentException) + catch (ArgumentException) { // silent } @@ -355,7 +354,7 @@ private static void SeedApiScopeProperties(IAdminStore Value = property.Value }).GetAwaiter().GetResult(); } - catch(ArgumentException) + catch (ArgumentException) { // silent } @@ -375,7 +374,7 @@ private static void SeedApiScopeClaims(IAdminStore apiScop Type = claim }).GetAwaiter().GetResult(); } - catch(ArgumentException) + catch (ArgumentException) { // silent } @@ -387,7 +386,7 @@ private static void SeedIdentities(IServiceProvider provider) var identityStore = provider.GetRequiredService>(); var identityClaimStore = provider.GetRequiredService>(); var identityPropertyStore = provider.GetRequiredService>(); - + var loggerFactory = provider.GetRequiredService(); var logger = loggerFactory.CreateLogger("SeedIdentities"); @@ -458,7 +457,7 @@ private static void SeedIdentityClaims(IAdminStore identit Type = claim }).GetAwaiter().GetResult(); } - catch(ArgumentException) + catch (ArgumentException) { // silent } @@ -654,7 +653,7 @@ private static void SeedClientProperties(IAdminStore clie Value = property.Value }).GetAwaiter().GetResult(); } - catch(ArgumentException) + catch (ArgumentException) { // silent } @@ -697,7 +696,7 @@ private static void SeedClientSecrets(IAdminStore clientSec Value = secret.Value }).GetAwaiter().GetResult(); } - catch(ArgumentException) + catch (ArgumentException) { // silent } @@ -794,7 +793,7 @@ private static void SeedRelyingParties(IConfiguration configuration, IServicePro TokenType = relyingParty.TokenType }).GetAwaiter().GetResult(); } - catch(ArgumentException) + catch (ArgumentException) { // silent } @@ -811,7 +810,7 @@ private static void SeedRelyingPartyClaimMappings(IAdminStore + /// Gets or sets the Swagger UI OAuth2 client settings. + /// + public OAuth2ClientSettings? OAuth2Client { get; set; } + + /// + /// Gets or sets the internal swagger UI route (must start with '/'). + /// + public string Path { get; set; } = "/swagger"; + +} diff --git a/src/Aguacongas.TheIdServer.Duende/appsettings.json b/src/Aguacongas.TheIdServer.Duende/appsettings.json index 998e42e5b..48d848a9d 100644 --- a/src/Aguacongas.TheIdServer.Duende/appsettings.json +++ b/src/Aguacongas.TheIdServer.Duende/appsettings.json @@ -288,7 +288,7 @@ "https://localhost:5443" ], "RedirectUris": [ - "https://localhost:5443/swagger/oauth2-redirect.html" + "https://localhost:5443/api/swagger/oauth2-redirect.html" ] } ], diff --git a/src/Aguacongas.TheIdServer.Identity/Aguacongas.TheIdServer.Identity.csproj b/src/Aguacongas.TheIdServer.Identity/Aguacongas.TheIdServer.Identity.csproj index 84b5c6f6a..329002f5a 100644 --- a/src/Aguacongas.TheIdServer.Identity/Aguacongas.TheIdServer.Identity.csproj +++ b/src/Aguacongas.TheIdServer.Identity/Aguacongas.TheIdServer.Identity.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/Aguacongas.TheIdServer.Identity/Extensions/EntityExtensions.cs b/src/Aguacongas.TheIdServer.Identity/Extensions/EntityExtensions.cs index 586b0b0bb..32842129c 100644 --- a/src/Aguacongas.TheIdServer.Identity/Extensions/EntityExtensions.cs +++ b/src/Aguacongas.TheIdServer.Identity/Extensions/EntityExtensions.cs @@ -8,6 +8,10 @@ public static class EntityExtensions { public static Role ToRole(this TRole role) where TRole : IdentityRole { + if (role is null) + { + return null; + } return new Role { ConcurrencyStamp = role.ConcurrencyStamp, @@ -18,6 +22,10 @@ public static Role ToRole(this TRole role) where TRole : IdentityRole } public static TRole ToIdentityRole(this Role entity) where TRole: IdentityRole, new() { + if (entity is null) + { + return null; + } return new TRole { ConcurrencyStamp = entity.ConcurrencyStamp, @@ -29,6 +37,10 @@ public static Role ToRole(this TRole role) where TRole : IdentityRole public static User ToUser(this TUser user) where TUser: IdentityUser { + if (user is null) + { + return null; + } return new User { AccessFailedCount = user.AccessFailedCount, @@ -51,6 +63,10 @@ public static User ToUser(this TUser user) where TUser: IdentityUser public static UserToken ToEntity(this IdentityUserToken token) { + if (token is null) + { + return null; + } return new UserToken { Id = $"{token.UserId}@{token.LoginProvider}@{token.Name}", diff --git a/src/Aguacongas.TheIdServer/Aguacongas.TheIdServer.csproj b/src/Aguacongas.TheIdServer/Aguacongas.TheIdServer.csproj index fc84e7368..80e8c5317 100644 --- a/src/Aguacongas.TheIdServer/Aguacongas.TheIdServer.csproj +++ b/src/Aguacongas.TheIdServer/Aguacongas.TheIdServer.csproj @@ -12,7 +12,7 @@ git aspnetcore;identityserver4;oidc,oauth;authentication;security OpenID/Connect , OAuth and WS-Federation server base on Duende IdentityServer. - Full + portable f6987681-1871-440a-a6ea-a606c2c5ccf6 ..\..\docker-compose.dcproj Linux @@ -30,45 +30,44 @@ 1701;1702;CA1416;NU1603;NU1608 - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - + + + + + + + diff --git a/src/Aguacongas.TheIdServer/Areas/Identity/Pages/Account/Register.cshtml b/src/Aguacongas.TheIdServer/Areas/Identity/Pages/Account/Register.cshtml index 5d0c8e74c..69f8c50d6 100644 --- a/src/Aguacongas.TheIdServer/Areas/Identity/Pages/Account/Register.cshtml +++ b/src/Aguacongas.TheIdServer/Areas/Identity/Pages/Account/Register.cshtml @@ -29,7 +29,7 @@ Copyright (c) 2023 @Olivier Lefebvre
- +
diff --git a/src/Aguacongas.TheIdServer/Extensions/TracerProviderBuilderExtensions.cs b/src/Aguacongas.TheIdServer/Extensions/TracerProviderBuilderExtensions.cs index 85269b6a3..f207b237c 100644 --- a/src/Aguacongas.TheIdServer/Extensions/TracerProviderBuilderExtensions.cs +++ b/src/Aguacongas.TheIdServer/Extensions/TracerProviderBuilderExtensions.cs @@ -66,7 +66,6 @@ public static TracerProviderBuilder AddInstrumentation(this TracerProviderBuilde } o.RecordException = aspOptions.RecordException; - o.EnableGrpcAspNetCoreSupport = aspOptions.EnableGrpcAspNetCoreSupport; }) .AddSqlClientInstrumentation(o => { @@ -107,18 +106,6 @@ private static TracerProviderBuilder AddExporters(this TracerProviderBuilder bui return builder; } - if (!string.IsNullOrEmpty(options.Jaeger?.AgentHost)) - { - builder = builder.AddJaegerExporter(o => - { - var jaegerOptions = options.Jaeger; - o.AgentPort = jaegerOptions.AgentPort; - o.AgentHost = jaegerOptions.AgentHost; - o.BatchExportProcessorOptions = jaegerOptions.BatchExportProcessorOptions; - o.ExportProcessorType = jaegerOptions.ExportProcessorType; - }); - } - if (options.OpenTelemetryProtocol?.Endpoint is not null) { builder = builder.AddOtlpExporter(o => diff --git a/src/Aguacongas.TheIdServer/Options/OpenTelemetry/InstrumentationOptions.cs b/src/Aguacongas.TheIdServer/Options/OpenTelemetry/InstrumentationOptions.cs index 9c8449b49..5ab05da85 100644 --- a/src/Aguacongas.TheIdServer/Options/OpenTelemetry/InstrumentationOptions.cs +++ b/src/Aguacongas.TheIdServer/Options/OpenTelemetry/InstrumentationOptions.cs @@ -1,14 +1,13 @@ using OpenTelemetry.Instrumentation.AspNetCore; using OpenTelemetry.Instrumentation.Http; using OpenTelemetry.Instrumentation.SqlClient; -using OpenTelemetry.Instrumentation.StackExchangeRedis; namespace Aguacongas.TheIdServer.Options.OpenTelemetry { public class InstrumentationOptions { - public AspNetCoreInstrumentationOptions AspNetCore{ get; set; } - public HttpClientInstrumentationOptions HttpClient { get; set; } + public AspNetCoreTraceInstrumentationOptions AspNetCore { get; set; } + public HttpClientTraceInstrumentationOptions HttpClient { get; set; } public SqlClientInstrumentationOptions SqlClient { get; set; } public RedisOptions Redis { get; set; } } diff --git a/src/Aguacongas.TheIdServer/Options/OpenTelemetry/TraceOptions.cs b/src/Aguacongas.TheIdServer/Options/OpenTelemetry/TraceOptions.cs index b8e0c5141..70494be00 100644 --- a/src/Aguacongas.TheIdServer/Options/OpenTelemetry/TraceOptions.cs +++ b/src/Aguacongas.TheIdServer/Options/OpenTelemetry/TraceOptions.cs @@ -14,7 +14,6 @@ public class TraceOptions public bool ConsoleEnabled { get; set; } public OtlpExporterOptions OpenTelemetryProtocol { get; set; } - public JaegerExporterOptions Jaeger { get; set; } public ZipkinExporterOptions Zipkin { get; set; } public HoneycombOptions Honeycomb { get; set; } diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Components/Aguacongas.TheIdServer.BlazorApp.Components.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Components/Aguacongas.TheIdServer.BlazorApp.Components.csproj index 9531da394..7254e2118 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Components/Aguacongas.TheIdServer.BlazorApp.Components.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Components/Aguacongas.TheIdServer.BlazorApp.Components.csproj @@ -11,13 +11,13 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application components. - Full + portable package-icon.png - - + + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Abstraction/EntitiesModel.cs b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Abstraction/EntitiesModel.cs index 78421499c..1490914a9 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Abstraction/EntitiesModel.cs +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Abstraction/EntitiesModel.cs @@ -7,6 +7,7 @@ using Aguacongas.TheIdServer.BlazorApp.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Components; +using Microsoft.JSInterop; using System; using System.Collections.Generic; using System.Globalization; @@ -34,7 +35,11 @@ public abstract class EntitiesModel : ComponentBase, IDisposable where T: cla [Inject] protected IAdminStore OneTimeTokenAdminStore { get; set; } - protected IEnumerable EntityList { get; private set; } + + [Inject] + protected IJSRuntime JSRuntime { get; set; } + + protected IEnumerable EntityList { get; private set; } = []; protected GridState GridState { get; } = new GridState(); @@ -45,6 +50,12 @@ public abstract class EntitiesModel : ComponentBase, IDisposable where T: cla protected abstract string ExportExpand { get; } protected virtual string Expand { get; } + [JSInvokable] + public async Task ScrollBottomReach() + { + await GetEntityList(_pageRequest).ConfigureAwait(false); + } + protected PageRequest ExportRequest => new PageRequest { Filter = string.Join(" or ", _selectedIdList.Select(id => $"Id eq '{id}'")), @@ -59,7 +70,8 @@ protected override async Task OnInitializedAsync() { Select = SelectProperties, Expand = Expand, - Take = 10 + Skip = 0, + Take = 50 }; await GetEntityList(_pageRequest) .ConfigureAwait(false); @@ -67,6 +79,18 @@ await GetEntityList(_pageRequest) GridState.OnHeaderClicked += GridState_OnHeaderClicked; } + protected override Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + const int margin = 95; + return JSRuntime.InvokeVoidAsync("browserInteropt.onScrollEnd", DotNetObjectReference.Create(this), margin) + .AsTask(); + } + return Task.CompletedTask; + } + + protected Task OnFilterChanged(string filter) { _cancellationTokenSource?.Cancel(); @@ -78,19 +102,10 @@ protected Task OnFilterChanged(string filter) .ContinueWith(async task => { _pageRequest.Filter = CreateRequestFilter(filter); + _pageRequest.Skip = 0; + EntityList = []; - var page = await AdminStore.GetAsync(_pageRequest, token) - .ConfigureAwait(false); - - if (task.IsCanceled) - { - return; - } - - EntityList = page.Items; - - await InvokeAsync(() => StateHasChanged()) - .ConfigureAwait(false); + await GetEntityList(_pageRequest, token).ConfigureAwait(false); }, TaskScheduler.Default); } @@ -121,7 +136,7 @@ protected void OnItemSelected(string id, bool isSelected) protected virtual void OnRowClicked(T entity) { - if (!(entity is IEntityId entityWithId)) + if (entity is not IEntityId entityWithId) { throw new InvalidOperationException($"The identity type {typeof(T).Name} is not a 'IEntityId', override this method to navigate to the identity page."); } @@ -135,19 +150,38 @@ protected virtual string LocalizeEntityProperty(ILocalizable r.ResourceKind == kind && r.CultureId == CultureInfo.CurrentCulture.Name)?.Value ?? value; } - private async Task GetEntityList(PageRequest pageRequest) + private async Task GetEntityList(PageRequest pageRequest, CancellationToken token = default) { - var page = await AdminStore.GetAsync(pageRequest) + var page = await AdminStore.GetAsync(pageRequest, token) .ConfigureAwait(false); - EntityList = page.Items; + + if (token.IsCancellationRequested ) + { + return; + } + + EntityList = EntityList.Concat(page.Items); + + await InvokeAsync(() => StateHasChanged()) + .ConfigureAwait(false); + + _pageRequest.Skip += _pageRequest.Take; + + if (EntityList.Count() != page.Count && !await JSRuntime.InvokeAsync("browserInteropt.isScrollable", 0)) + { + // load next page if document heigth < windows heigth + await GetEntityList(_pageRequest, token).ConfigureAwait(false); + } } private async Task GridState_OnHeaderClicked(SortEventArgs e) { + EntityList = []; + _pageRequest.Skip = 0; _pageRequest.OrderBy = e.OrderBy; await GetEntityList(_pageRequest) .ConfigureAwait(false); - StateHasChanged(); + } #region IDisposable Support diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Aguacongas.TheIdServer.BlazorApp.Infrastructure.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Aguacongas.TheIdServer.BlazorApp.Infrastructure.csproj index 39c75b917..609c4b498 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Aguacongas.TheIdServer.BlazorApp.Infrastructure.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Aguacongas.TheIdServer.BlazorApp.Infrastructure.csproj @@ -10,21 +10,21 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application models, services, validators and extensions. - Full + portable Aguacongas.TheIdServer.BlazorApp package-icon.png - - + + - - - - - - + + + + + + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/JaegerExportProtocol.cs b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/JaegerExportProtocol.cs deleted file mode 100644 index 12b8e0410..000000000 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/JaegerExportProtocol.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace Aguacongas.TheIdServer.BlazorApp.Models -{ - // - // Summary: - // Defines the exporter protocols supported by the OpenTelemetry.Exporter.JaegerExporter. - public enum JaegerExportProtocol : byte - { - // - // Summary: - // Compact thrift protocol over UDP. - // - // Remarks: - // Note: Supported by Jaeger Agents only. - UdpCompactThrift, - // - // Summary: - // Binary thrift protocol over HTTP. - // - // Remarks: - // Note: Supported by Jaeger Collectors only. - HttpBinaryThrift - } -} \ No newline at end of file diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/JaegerExporterOptions.cs b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/JaegerExporterOptions.cs deleted file mode 100644 index c2a38494c..000000000 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/JaegerExporterOptions.cs +++ /dev/null @@ -1,40 +0,0 @@ -namespace Aguacongas.TheIdServer.BlazorApp.Models -{ - public class JaegerExporterOptions - { - public JaegerExportProtocol Protocol { get; set; } - - // - // Summary: - // Gets or sets the Jaeger agent host. Default value: localhost. - public string AgentHost { get; set; } - - - // - // Summary: - // Gets or sets the Jaeger agent port. Default value: 6831. - public int AgentPort { get; set; } - - - // - // Summary: - // Gets or sets the Jaeger HTTP endpoint. Default value: "http://localhost:14268/api/traces". - // Typically https://jaeger-server-name:14268/api/traces. - public string Endpoint { get; set; } - - - // - // Summary: - // Gets or sets the maximum payload size in bytes. Default value: 4096. - public int? MaxPayloadSizeInBytes { get; set; } - - - // - // Summary: - // Gets or sets the export processor type to be used with Jaeger Exporter. The default - // value is OpenTelemetry.ExportProcessorType.Batch. - public ExportProcessorType ExportProcessorType { get; set; } - - - } -} \ No newline at end of file diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/TraceOptions.cs b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/TraceOptions.cs index d88b8d544..fac35c735 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/TraceOptions.cs +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/Models/TraceOptions.cs @@ -11,7 +11,6 @@ public class TraceOptions public bool ConsoleEnabled { get; set; } public OtlpExporterOptions OpenTelemetryProtocol { get; set; } - public JaegerExporterOptions Jaeger { get; set; } public ZipkinExporterOptions Zipkin { get; set; } public HoneycombOptions Honeycomb { get; set; } diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/wwwroot/TheIdServerInterop.js b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/wwwroot/TheIdServerInterop.js index 9afa472f8..336f53bff 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/wwwroot/TheIdServerInterop.js +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Infrastructure/wwwroot/TheIdServerInterop.js @@ -49,6 +49,9 @@ window.browserInteropt = { pending = false } } + }, + isScrollable: margin => { + return $(document).height() > $(window).height() - margin; } } window.setTheme = theme => { diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Api/Aguacongas.TheIdServer.BlazorApp.Pages.Api.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Api/Aguacongas.TheIdServer.BlazorApp.Pages.Api.csproj index 1158bc8ff..3f67f0aa6 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Api/Aguacongas.TheIdServer.BlazorApp.Pages.Api.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Api/Aguacongas.TheIdServer.BlazorApp.Pages.Api.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application api page and components. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope.csproj index e9491d91d..3fa11f43b 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScope.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application api scope page and components. - Full + portable package-icon.png @@ -21,7 +21,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes.csproj index eae37904b..45784dc2c 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes/Aguacongas.TheIdServer.BlazorApp.Pages.ApiScopes.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application api scope list page. - Full + portable package-icon.png @@ -21,7 +21,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Apis/Aguacongas.TheIdServer.BlazorApp.Pages.Apis.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Apis/Aguacongas.TheIdServer.BlazorApp.Pages.Apis.csproj index 2df746783..371244c5f 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Apis/Aguacongas.TheIdServer.BlazorApp.Pages.Apis.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Apis/Aguacongas.TheIdServer.BlazorApp.Pages.Apis.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application api list page. - Full + portable package-icon.png @@ -21,7 +21,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Client/Aguacongas.TheIdServer.BlazorApp.Pages.Client.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Client/Aguacongas.TheIdServer.BlazorApp.Pages.Client.csproj index 6bdf6707f..f57f59883 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Client/Aguacongas.TheIdServer.BlazorApp.Pages.Client.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Client/Aguacongas.TheIdServer.BlazorApp.Pages.Client.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application client page and components. - Full + portable package-icon.png @@ -21,7 +21,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Clients/Aguacongas.TheIdServer.BlazorApp.Pages.Clients.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Clients/Aguacongas.TheIdServer.BlazorApp.Pages.Clients.csproj index 84359cf18..c9e34f849 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Clients/Aguacongas.TheIdServer.BlazorApp.Pages.Clients.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Clients/Aguacongas.TheIdServer.BlazorApp.Pages.Clients.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application client list page. - Full + portable package-icon.png @@ -21,7 +21,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Culture/Aguacongas.TheIdServer.BlazorApp.Pages.Culture.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Culture/Aguacongas.TheIdServer.BlazorApp.Pages.Culture.csproj index f8a7b1ff7..364d4958a 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Culture/Aguacongas.TheIdServer.BlazorApp.Pages.Culture.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Culture/Aguacongas.TheIdServer.BlazorApp.Pages.Culture.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application culture page and components. - Full + portable package-icon.png @@ -21,7 +21,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures.csproj index 6715c44a2..f0b550aaf 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures/Aguacongas.TheIdServer.BlazorApp.Pages.Cultures.csproj @@ -11,7 +11,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application culture list page. - Full + portable package-icon.png @@ -21,7 +21,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider.csproj index 6e2308d7d..4e71e4d8f 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProvider.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application external provider page and components. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders.csproj index 2fad80beb..f695fa8e2 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders/Aguacongas.TheIdServer.BlazorApp.Pages.ExternalProviders.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application external provider list page. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identities/Aguacongas.TheIdServer.BlazorApp.Pages.Identities.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identities/Aguacongas.TheIdServer.BlazorApp.Pages.Identities.csproj index 70a5d346c..bbf26b00e 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identities/Aguacongas.TheIdServer.BlazorApp.Pages.Identities.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identities/Aguacongas.TheIdServer.BlazorApp.Pages.Identities.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application identity list page. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identity/Aguacongas.TheIdServer.BlazorApp.Pages.Identity.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identity/Aguacongas.TheIdServer.BlazorApp.Pages.Identity.csproj index a8602844f..551e0e910 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identity/Aguacongas.TheIdServer.BlazorApp.Pages.Identity.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Identity/Aguacongas.TheIdServer.BlazorApp.Pages.Identity.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application identity page and components. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Import/Aguacongas.TheIdServer.BlazorApp.Pages.Import.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Import/Aguacongas.TheIdServer.BlazorApp.Pages.Import.csproj index 2e641b8d3..4ee9cfc12 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Import/Aguacongas.TheIdServer.BlazorApp.Pages.Import.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Import/Aguacongas.TheIdServer.BlazorApp.Pages.Import.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application import page and components. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Keys/Aguacongas.TheIdServer.BlazorApp.Pages.Keys.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Keys/Aguacongas.TheIdServer.BlazorApp.Pages.Keys.csproj index 1e4ab19a1..fd65a4ea2 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Keys/Aguacongas.TheIdServer.BlazorApp.Pages.Keys.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Keys/Aguacongas.TheIdServer.BlazorApp.Pages.Keys.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application key list page and components. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties.csproj index db2596c60..3a6b562e5 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParties.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application relying party list page. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty.csproj index bb0e7b589..8b03b7f35 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty/Aguacongas.TheIdServer.BlazorApp.Pages.RelyingParty.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application api scope page and components. - Full + portable package-icon.png @@ -19,8 +19,8 @@ - - + + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Role/Aguacongas.TheIdServer.BlazorApp.Pages.Role.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Role/Aguacongas.TheIdServer.BlazorApp.Pages.Role.csproj index 7da66590d..2cd54d834 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Role/Aguacongas.TheIdServer.BlazorApp.Pages.Role.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Role/Aguacongas.TheIdServer.BlazorApp.Pages.Role.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application role page and components. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Roles/Aguacongas.TheIdServer.BlazorApp.Pages.Roles.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Roles/Aguacongas.TheIdServer.BlazorApp.Pages.Roles.csproj index 2bb0333ce..eea555f30 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Roles/Aguacongas.TheIdServer.BlazorApp.Pages.Roles.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Roles/Aguacongas.TheIdServer.BlazorApp.Pages.Roles.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application role list page. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Settings/Aguacongas.TheIdServer.BlazorApp.Pages.Settings.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Settings/Aguacongas.TheIdServer.BlazorApp.Pages.Settings.csproj index 8b95666c3..3578beebf 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Settings/Aguacongas.TheIdServer.BlazorApp.Pages.Settings.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Settings/Aguacongas.TheIdServer.BlazorApp.Pages.Settings.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer settings page. - Full + portable package-icon.png enable enable @@ -23,7 +23,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.User/Aguacongas.TheIdServer.BlazorApp.Pages.User.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.User/Aguacongas.TheIdServer.BlazorApp.Pages.User.csproj index 43eb73ec1..3b6383f59 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.User/Aguacongas.TheIdServer.BlazorApp.Pages.User.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.User/Aguacongas.TheIdServer.BlazorApp.Pages.User.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application external provider user and components. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Users/Aguacongas.TheIdServer.BlazorApp.Pages.Users.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Users/Aguacongas.TheIdServer.BlazorApp.Pages.Users.csproj index 9a2d23674..3552dbfaf 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Users/Aguacongas.TheIdServer.BlazorApp.Pages.Users.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages.Users/Aguacongas.TheIdServer.BlazorApp.Pages.Users.csproj @@ -10,7 +10,7 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application user list page. - Full + portable package-icon.png @@ -20,7 +20,7 @@ - + diff --git a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages/Aguacongas.TheIdServer.BlazorApp.Pages.csproj b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages/Aguacongas.TheIdServer.BlazorApp.Pages.csproj index ee61a81b4..cbe6219b2 100644 --- a/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages/Aguacongas.TheIdServer.BlazorApp.Pages.csproj +++ b/src/BlazorApp/Aguacongas.TheIdServer.BlazorApp.Pages/Aguacongas.TheIdServer.BlazorApp.Pages.csproj @@ -11,12 +11,12 @@ git theidserver;identityserver4;duende-identityserveroidc;oauth;identity,authentication;security TheIdServer administration application pages. - Full + portable package-icon.png - + diff --git a/src/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.csproj b/src/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.csproj index e9494bcc1..7821c2bc5 100644 --- a/src/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.csproj +++ b/src/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.csproj @@ -17,9 +17,9 @@ - - - + + + diff --git a/src/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher.csproj b/src/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher.csproj index 1e7380c72..8c1348d1b 100644 --- a/src/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher.csproj +++ b/src/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher/Aguacongas.TheIdServer.Identity.BcryptPasswordHasher.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/src/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher.csproj b/src/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher.csproj index c194b7dad..f5d88792a 100644 --- a/src/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher.csproj +++ b/src/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher/Aguacongas.TheIdServer.Identity.ScryptPasswordHasher.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/src/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher.csproj b/src/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher.csproj index 50223151b..3238adbb5 100644 --- a/src/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher.csproj +++ b/src/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher/Aguacongas.TheIdServer.Identity.UpgradePasswordHasher.csproj @@ -17,8 +17,8 @@ - - + + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.Admin.Http.Store/Aguacongas.IdentityServer.Admin.Http.Store.csproj b/src/IdentityServer/Aguacongas.IdentityServer.Admin.Http.Store/Aguacongas.IdentityServer.Admin.Http.Store.csproj index 5163f8e23..617193652 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.Admin.Http.Store/Aguacongas.IdentityServer.Admin.Http.Store.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.Admin.Http.Store/Aguacongas.IdentityServer.Admin.Http.Store.csproj @@ -23,11 +23,11 @@ - - - - - + + + + + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.Admin/Aguacongas.IdentityServer.Admin.csproj b/src/IdentityServer/Aguacongas.IdentityServer.Admin/Aguacongas.IdentityServer.Admin.csproj index 07eac0fe1..525ebe73d 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.Admin/Aguacongas.IdentityServer.Admin.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.Admin/Aguacongas.IdentityServer.Admin.csproj @@ -31,20 +31,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiPath.cs b/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiPath.cs index c01c741fc..f5146adef 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiPath.cs +++ b/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiPath.cs @@ -8,5 +8,5 @@ public static class ApiBasePath /// /// The api base path value /// - public static string Value { get; set; } = "api/"; + public static string Value { get; set; } = "/api"; } diff --git a/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiRouteAttribute.cs b/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiRouteAttribute.cs index 42a5fa796..ff10ba8b3 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiRouteAttribute.cs +++ b/src/IdentityServer/Aguacongas.IdentityServer.Admin/Configuration/ApiRouteAttribute.cs @@ -1,10 +1,6 @@ using Microsoft.AspNetCore.Mvc.Routing; using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Aguacongas.IdentityServer.Admin.Configuration; @@ -21,8 +17,9 @@ public class ApiRouteAttribute : Attribute, IRouteTemplateProvider /// The route template. May not be null. public ApiRouteAttribute([StringSyntax("Route")] string template) { + ArgumentException.ThrowIfNullOrWhiteSpace(template); var routeBasePath = $"{ApiBasePath.Value[1..]}/"; - Template = $"{routeBasePath}{template ?? throw new ArgumentNullException(nameof(template))}"; + Template = $"{routeBasePath}{template}"; } /// diff --git a/src/IdentityServer/Aguacongas.IdentityServer.EntityFramework.Store/Aguacongas.IdentityServer.EntityFramework.Store.csproj b/src/IdentityServer/Aguacongas.IdentityServer.EntityFramework.Store/Aguacongas.IdentityServer.EntityFramework.Store.csproj index 4a965339b..276487305 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.EntityFramework.Store/Aguacongas.IdentityServer.EntityFramework.Store.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.EntityFramework.Store/Aguacongas.IdentityServer.EntityFramework.Store.csproj @@ -24,7 +24,7 @@ - + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.Http.Store/Aguacongas.IdentityServer.Http.Store.csproj b/src/IdentityServer/Aguacongas.IdentityServer.Http.Store/Aguacongas.IdentityServer.Http.Store.csproj index a31bcd59a..5e365184a 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.Http.Store/Aguacongas.IdentityServer.Http.Store.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.Http.Store/Aguacongas.IdentityServer.Http.Store.csproj @@ -23,9 +23,9 @@ - - - + + + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/Aguacongas.IdentityServer.KeysRotation.csproj b/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/Aguacongas.IdentityServer.KeysRotation.csproj index 59ab4e5c8..6a4cb2415 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/Aguacongas.IdentityServer.KeysRotation.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/Aguacongas.IdentityServer.KeysRotation.csproj @@ -16,18 +16,18 @@ - - - - - + + + + + - - - - - - + + + + + + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/MongoDb/MongoDatabaseWrapper.cs b/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/MongoDb/MongoDatabaseWrapper.cs index 500518a59..21b1c4cc4 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/MongoDb/MongoDatabaseWrapper.cs +++ b/src/IdentityServer/Aguacongas.IdentityServer.KeysRotation/MongoDb/MongoDatabaseWrapper.cs @@ -1,6 +1,7 @@ // Project: Aguafrommars/TheIdServer // Copyright (c) 2023 @Olivier Lefebvre using System; +using System.Linq; using MongoDB.Driver; using MongoDB.Driver.Linq; @@ -10,7 +11,7 @@ public class MongoCollectionWrapper where TKey : IXmlKey { public IMongoCollection Collection { get; } - public IMongoQueryable Queryable { get; } + public IQueryable Queryable { get; } public MongoCollectionWrapper(IMongoCollection collection) @@ -18,7 +19,7 @@ public MongoCollectionWrapper(IMongoCollection collection) { } - public MongoCollectionWrapper(IMongoCollection collection, IMongoQueryable queryable) + public MongoCollectionWrapper(IMongoCollection collection, IQueryable queryable) { Collection = collection ?? throw new ArgumentNullException(nameof(collection)); Queryable = queryable ?? throw new ArgumentNullException(nameof(queryable)); diff --git a/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/AdminStores/AdminStore.cs b/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/AdminStores/AdminStore.cs index 93a154685..4e354b22e 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/AdminStores/AdminStore.cs +++ b/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/AdminStores/AdminStore.cs @@ -50,13 +50,13 @@ public async Task> GetAsync(PageRequest request, Cancellat var oDataQuery = _collection.AsQueryable().OData(); oDataQuery = !string.IsNullOrWhiteSpace(request.Filter) ? oDataQuery.Filter(request.Filter) : oDataQuery; - var query = oDataQuery.Inner as IMongoQueryable; + var query = oDataQuery.Inner as IQueryable; int? count = request.Take.HasValue || request.Skip.HasValue ? await query.CountAsync(cancellationToken).ConfigureAwait(false) : null; var orderBy = request.OrderBy ?? nameof(IEntityId.Id); oDataQuery = oDataQuery.OrderBy(orderBy); - query = oDataQuery.Inner as IMongoQueryable; + query = oDataQuery.Inner as IQueryable; if (request.Take.HasValue) { diff --git a/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/Aguacongas.IdentityServer.MongoDb.Store.csproj b/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/Aguacongas.IdentityServer.MongoDb.Store.csproj index 0c20dbdf3..dd779d5f0 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/Aguacongas.IdentityServer.MongoDb.Store.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.MongoDb.Store/Aguacongas.IdentityServer.MongoDb.Store.csproj @@ -18,7 +18,7 @@ - + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.RavenDb.Store/Aguacongas.IdentityServer.RavenDb.Store.csproj b/src/IdentityServer/Aguacongas.IdentityServer.RavenDb.Store/Aguacongas.IdentityServer.RavenDb.Store.csproj index 1ae97a00c..222e50682 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.RavenDb.Store/Aguacongas.IdentityServer.RavenDb.Store.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.RavenDb.Store/Aguacongas.IdentityServer.RavenDb.Store.csproj @@ -24,7 +24,7 @@ - + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.Store/Aguacongas.IdentityServer.Store.csproj b/src/IdentityServer/Aguacongas.IdentityServer.Store/Aguacongas.IdentityServer.Store.csproj index a1dfec4b8..cc090133e 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.Store/Aguacongas.IdentityServer.Store.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.Store/Aguacongas.IdentityServer.Store.csproj @@ -24,7 +24,7 @@ - + diff --git a/src/IdentityServer/Aguacongas.IdentityServer.WsFederation/Aguacongas.IdentityServer.WsFederation.csproj b/src/IdentityServer/Aguacongas.IdentityServer.WsFederation/Aguacongas.IdentityServer.WsFederation.csproj index 8b467c004..4f06d7069 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer.WsFederation/Aguacongas.IdentityServer.WsFederation.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer.WsFederation/Aguacongas.IdentityServer.WsFederation.csproj @@ -32,7 +32,7 @@ - + diff --git a/src/IdentityServer/Aguacongas.IdentityServer/Aguacongas.IdentityServer.csproj b/src/IdentityServer/Aguacongas.IdentityServer/Aguacongas.IdentityServer.csproj index e6543b37b..5332b313c 100644 --- a/src/IdentityServer/Aguacongas.IdentityServer/Aguacongas.IdentityServer.csproj +++ b/src/IdentityServer/Aguacongas.IdentityServer/Aguacongas.IdentityServer.csproj @@ -11,7 +11,7 @@ git theidserver TheIdServer IndentityServer4 abstraction and extensions. - Full + portable package-icon.png true Library @@ -32,12 +32,12 @@ - - - - - - + + + + + + diff --git a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Aguacongas.IdentityServer.Admin.Duende.csproj b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Aguacongas.IdentityServer.Admin.Duende.csproj index e01c95386..2bc117fb8 100644 --- a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Aguacongas.IdentityServer.Admin.Duende.csproj +++ b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Aguacongas.IdentityServer.Admin.Duende.csproj @@ -38,7 +38,7 @@ - + diff --git a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/EndpointRoutingApplicationBuilderExtensions.cs b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/EndpointRoutingApplicationBuilderExtensions.cs index 03cbde4b3..a44560b88 100644 --- a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/EndpointRoutingApplicationBuilderExtensions.cs +++ b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/EndpointRoutingApplicationBuilderExtensions.cs @@ -32,12 +32,10 @@ public static class EndpointRoutingApplicationBuilderExtensions /// The builder. /// The base path. /// The configure. - /// (Optional) the rewritten path when an api route match outside the base path /// public static IApplicationBuilder UseIdentityServerAdminApi(this IApplicationBuilder builder, string basePath, - Action configure, - string notAllowedApiRewritePath = "not-allowed") + Action configure) { ApiBasePath.Value = basePath; diff --git a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/MvcBuilderExtensions.cs b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/MvcBuilderExtensions.cs index 9a541f419..ea9a20e65 100644 --- a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/MvcBuilderExtensions.cs +++ b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Admin.Duende/Extensions/MvcBuilderExtensions.cs @@ -22,8 +22,11 @@ using Microsoft.AspNetCore.Mvc.Formatters; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Logging; using Newtonsoft.Json; using Newtonsoft.Json.Serialization; +using NJsonSchema.Generation; +using NJsonSchema.NewtonsoftJson.Generation; using System; using System.Collections.Generic; using System.Linq; @@ -97,10 +100,21 @@ public static DynamicAuthenticationBuilder AddIdentityServerAdmin(); var authority = configuration.GetValue("ApiAuthentication:Authority").Trim('/'); diff --git a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Duende/Aguacongas.IdentityServer.Duende.csproj b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Duende/Aguacongas.IdentityServer.Duende.csproj index 18425cf4d..1b06aff76 100644 --- a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Duende/Aguacongas.IdentityServer.Duende.csproj +++ b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Duende/Aguacongas.IdentityServer.Duende.csproj @@ -11,7 +11,7 @@ git theidserver;duede.identityserver TheIdServer IndentityServer4 abstraction and extensions. - Full + portable package-icon.png Aguacongas.IdentityServer True @@ -36,7 +36,7 @@ - + diff --git a/src/IdentityServer/Duende/Aguacongas.IdentityServer.KeysRotation.Duende/Aguacongas.IdentityServer.KeysRotation.Duende.csproj b/src/IdentityServer/Duende/Aguacongas.IdentityServer.KeysRotation.Duende/Aguacongas.IdentityServer.KeysRotation.Duende.csproj index cc6146f74..07fd81faf 100644 --- a/src/IdentityServer/Duende/Aguacongas.IdentityServer.KeysRotation.Duende/Aguacongas.IdentityServer.KeysRotation.Duende.csproj +++ b/src/IdentityServer/Duende/Aguacongas.IdentityServer.KeysRotation.Duende/Aguacongas.IdentityServer.KeysRotation.Duende.csproj @@ -28,7 +28,7 @@ - + diff --git a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Aguacongas.IdentityServer.Saml2p.Duende.csproj b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Aguacongas.IdentityServer.Saml2p.Duende.csproj index 9b83cc1ec..535b3f38b 100644 --- a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Aguacongas.IdentityServer.Saml2p.Duende.csproj +++ b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Aguacongas.IdentityServer.Saml2p.Duende.csproj @@ -28,8 +28,8 @@ - - + + diff --git a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Services/Validation/SignInValidationResult.cs b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Services/Validation/SignInValidationResult.cs index 5b5a01d17..9e0611212 100644 --- a/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Services/Validation/SignInValidationResult.cs +++ b/src/IdentityServer/Duende/Aguacongas.IdentityServer.Saml2p.Duende/Services/Validation/SignInValidationResult.cs @@ -10,7 +10,7 @@ namespace Aguacongas.IdentityServer.Saml2p.Duende.Services.Validation; /// Signing validation result /// /// -public class SignInValidationResult where T : Saml2Binding +public class SignInValidationResult where T : Saml2Binding { /// /// Saml2P request diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Aguacongas.TheIdServer.Migrations.MySql.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Aguacongas.TheIdServer.Migrations.MySql.csproj index 6d3118d48..e224e2f64 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Aguacongas.TheIdServer.Migrations.MySql.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Aguacongas.TheIdServer.Migrations.MySql.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/20240128084602_PushAuthorizationRequest.Designer.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/20240128084602_PushAuthorizationRequest.Designer.cs new file mode 100644 index 000000000..e311b4cd1 --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/20240128084602_PushAuthorizationRequest.Designer.cs @@ -0,0 +1,1456 @@ +// +using System; +using Aguacongas.IdentityServer.EntityFramework.Store; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Aguacongas.TheIdServer.MySql.Migrations.ConfigurationDb +{ + [DbContext(typeof(ConfigurationDbContext))] + [Migration("20240128084602_PushAuthorizationRequest")] + partial class PushAuthorizationRequest + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiApiScope", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("ApiId"); + + b.HasIndex("ApiScopeId"); + + b.ToTable("ApiApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiClaim", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("ApiId", "Type") + .IsUnique(); + + b.ToTable("ApiClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ApiId"); + + b.ToTable("ApiLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiProperty", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ApiId", "Key") + .IsUnique(); + + b.ToTable("ApiProperty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScope", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Emphasize") + .HasColumnType("tinyint(1)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Required") + .HasColumnType("tinyint(1)"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("ApiScopes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeClaim", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("ApiScopeId", "Type") + .IsUnique(); + + b.ToTable("ApiScopeClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ApiScopeId"); + + b.ToTable("ApiScopeLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeProperty", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ApiScopeId", "Key") + .IsUnique(); + + b.ToTable("ApiScopeProperty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiSecret", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ApiId"); + + b.ToTable("ApiSecrets"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("tinyint(1)"); + + b.Property("AllowOfflineAccess") + .HasColumnType("tinyint(1)"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("tinyint(1)"); + + b.Property("AllowRememberConsent") + .HasColumnType("tinyint(1)"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("tinyint(1)"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("tinyint(1)"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("tinyint(1)"); + + b.Property("BackChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("CibaLifetime") + .HasColumnType("int"); + + b.Property("ClientClaimsPrefix") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ClientName") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ClientUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CoordinateLifetimeWithUserSession") + .HasColumnType("tinyint(1)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("tinyint(1)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("tinyint(1)"); + + b.Property("FrontChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("tinyint(1)"); + + b.Property("LogoUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("NonEditable") + .HasColumnType("tinyint(1)"); + + b.Property("PairWiseSubjectSalt") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("PolicyUri") + .HasColumnType("longtext"); + + b.Property("PollingInterval") + .HasColumnType("int"); + + b.Property("ProtocolType") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("PushedAuthorizationLifetime") + .HasColumnType("int"); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RegistrationToken") + .HasColumnType("char(36)"); + + b.Property("RelyingPartyId") + .HasColumnType("varchar(255)"); + + b.Property("RequireClientSecret") + .HasColumnType("tinyint(1)"); + + b.Property("RequireConsent") + .HasColumnType("tinyint(1)"); + + b.Property("RequireDPoP") + .HasColumnType("tinyint(1)"); + + b.Property("RequirePkce") + .HasColumnType("tinyint(1)"); + + b.Property("RequirePushedAuthorization") + .HasColumnType("tinyint(1)"); + + b.Property("RequireRequestObject") + .HasColumnType("tinyint(1)"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("TosUri") + .HasColumnType("longtext"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("tinyint(1)"); + + b.Property("UserCodeType") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("RelyingPartyId"); + + b.ToTable("Clients"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientAllowedIdentityTokenSigningAlgorithm", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Algorithm") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Algorithm") + .IsUnique(); + + b.ToTable("ClientAllowedIdentityTokenSigningAlgorithms"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientClaim", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientGrantType", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("GrantType") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "GrantType") + .IsUnique(); + + b.ToTable("ClientGrantTypes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientIdpRestriction", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Provider") + .IsUnique(); + + b.ToTable("ClientIdpRestriction"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientProperty", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Key") + .IsUnique(); + + b.ToTable("ClientProperties"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientScope", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Scope") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Scope") + .IsUnique(); + + b.ToTable("ClientScopes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientSecret", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientSecrets"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientUri", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Kind") + .HasColumnType("int"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SanetizedCorsUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("Uri") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Uri") + .IsUnique(); + + b.ToTable("ClientUris"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Culture", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.ToTable("Cultures"); + + b.HasData( + new + { + Id = "en", + CreatedAt = new DateTime(2024, 1, 28, 8, 46, 1, 739, DateTimeKind.Utc).AddTicks(6037) + }); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalClaimTransformation", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("AsMultipleValues") + .HasColumnType("tinyint(1)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("FromClaimType") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Scheme") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ToClaimType") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("Scheme", "FromClaimType") + .IsUnique(); + + b.ToTable("ExternalClaimTransformations"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", b => + { + b.Property("Id") + .HasColumnType("varchar(255)") + .HasColumnName("Scheme"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("DisplayName") + .HasColumnType("longtext"); + + b.Property("MapDefaultOutboundClaimType") + .HasColumnType("tinyint(1)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SerializedHandlerType") + .HasColumnType("longtext"); + + b.Property("SerializedOptions") + .HasColumnType("longtext"); + + b.Property("StoreClaims") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("Providers"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityClaim", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("IdentityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Type") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("IdentityId", "Type") + .IsUnique(); + + b.ToTable("IdentityClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("IdentityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("IdentityId"); + + b.ToTable("IdentityLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityProperty", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("IdentityId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.HasKey("Id"); + + b.HasIndex("IdentityId", "Key") + .IsUnique(); + + b.ToTable("IdentityProperties"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityResource", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DisplayName") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Emphasize") + .HasColumnType("tinyint(1)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("NonEditable") + .HasColumnType("tinyint(1)"); + + b.Property("Required") + .HasColumnType("tinyint(1)"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("Identities"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.LocalizedResource", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("BaseName") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("Key") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Location") + .HasColumnType("longtext"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("CultureId"); + + b.ToTable("LocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ProtectResource", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("NonEditable") + .HasColumnType("tinyint(1)"); + + b.Property("RequireResourceIndicator") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("Apis"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingParty", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("DigestAlgorithm") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("EncryptionCertificate") + .HasColumnType("longblob"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SamlNameIdentifierFormat") + .HasColumnType("longtext"); + + b.Property("SignatureAlgorithm") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TokenType") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("RelyingParties"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingPartyClaimMapping", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("FromClaimType") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("RelyingPartyId") + .HasColumnType("varchar(255)"); + + b.Property("ToClaimType") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("RelyingPartyId"); + + b.ToTable("RelyingPartyClaimMappings"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiApiScope", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("ApiScopes") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Apis") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("ApiClaims") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Resources") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Properties") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("ApiScopeClaims") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Resources") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Properties") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiSecret", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Secrets") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") + .WithMany("Clients") + .HasForeignKey("RelyingPartyId"); + + b.Navigation("RelyingParty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientAllowedIdentityTokenSigningAlgorithm", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedIdentityTokenSigningAlgorithms") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("ClientClaims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientGrantType", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientIdpRestriction", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("Resources") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientScope", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientSecret", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientUri", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalClaimTransformation", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", null) + .WithMany("ClaimTransformations") + .HasForeignKey("Scheme") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("IdentityClaims") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Identity"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("Resources") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Identity"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("Properties") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Identity"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.LocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Culture", "Culture") + .WithMany("Resources") + .HasForeignKey("CultureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Culture"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingPartyClaimMapping", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") + .WithMany("ClaimMappings") + .HasForeignKey("RelyingPartyId"); + + b.Navigation("RelyingParty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScope", b => + { + b.Navigation("ApiScopeClaims"); + + b.Navigation("Apis"); + + b.Navigation("Properties"); + + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => + { + b.Navigation("AllowedGrantTypes"); + + b.Navigation("AllowedIdentityTokenSigningAlgorithms"); + + b.Navigation("AllowedScopes"); + + b.Navigation("ClientClaims"); + + b.Navigation("ClientSecrets"); + + b.Navigation("IdentityProviderRestrictions"); + + b.Navigation("Properties"); + + b.Navigation("RedirectUris"); + + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Culture", b => + { + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", b => + { + b.Navigation("ClaimTransformations"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityResource", b => + { + b.Navigation("IdentityClaims"); + + b.Navigation("Properties"); + + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ProtectResource", b => + { + b.Navigation("ApiClaims"); + + b.Navigation("ApiScopes"); + + b.Navigation("Properties"); + + b.Navigation("Resources"); + + b.Navigation("Secrets"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingParty", b => + { + b.Navigation("ClaimMappings"); + + b.Navigation("Clients"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/20240128084602_PushAuthorizationRequest.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/20240128084602_PushAuthorizationRequest.cs new file mode 100644 index 000000000..c8cda52dd --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/20240128084602_PushAuthorizationRequest.cs @@ -0,0 +1,54 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Aguacongas.TheIdServer.MySql.Migrations.ConfigurationDb +{ + /// + public partial class PushAuthorizationRequest : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "PushedAuthorizationLifetime", + table: "Clients", + type: "int", + nullable: true); + + migrationBuilder.AddColumn( + name: "RequirePushedAuthorization", + table: "Clients", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.UpdateData( + table: "Cultures", + keyColumn: "Id", + keyValue: "en", + column: "CreatedAt", + value: new DateTime(2024, 1, 28, 8, 46, 1, 739, DateTimeKind.Utc).AddTicks(6037)); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "PushedAuthorizationLifetime", + table: "Clients"); + + migrationBuilder.DropColumn( + name: "RequirePushedAuthorization", + table: "Clients"); + + migrationBuilder.UpdateData( + table: "Cultures", + keyColumn: "Id", + keyValue: "en", + column: "CreatedAt", + value: new DateTime(2023, 5, 20, 8, 24, 17, 622, DateTimeKind.Utc).AddTicks(6681)); + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs index e2ff2baf6..49da0f396 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs @@ -16,7 +16,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "7.0.5") + .HasAnnotation("ProductVersion", "8.0.1") .HasAnnotation("Relational:MaxIdentifierLength", 64); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiApiScope", b => @@ -423,6 +423,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(200) .HasColumnType("varchar(200)"); + b.Property("PushedAuthorizationLifetime") + .HasColumnType("int"); + b.Property("RefreshTokenExpiration") .HasColumnType("int"); @@ -447,6 +450,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("RequirePkce") .HasColumnType("tinyint(1)"); + b.Property("RequirePushedAuthorization") + .HasColumnType("tinyint(1)"); + b.Property("RequireRequestObject") .HasColumnType("tinyint(1)"); @@ -770,7 +776,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) new { Id = "en", - CreatedAt = new DateTime(2023, 5, 20, 8, 24, 17, 622, DateTimeKind.Utc).AddTicks(6681) + CreatedAt = new DateTime(2024, 1, 28, 8, 46, 1, 739, DateTimeKind.Utc).AddTicks(6037) }); }); diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/20240128084809_PushAuthorizationRequest.Designer.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/20240128084809_PushAuthorizationRequest.Designer.cs new file mode 100644 index 000000000..fe2de5904 --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/20240128084809_PushAuthorizationRequest.Designer.cs @@ -0,0 +1,397 @@ +// +using System; +using Aguacongas.IdentityServer.EntityFramework.Store; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Aguacongas.TheIdServer.MySql.Migrations.OperationalDb +{ + [DbContext(typeof(OperationalDbContext))] + [Migration("20240128084809_PushAuthorizationRequest")] + partial class PushAuthorizationRequest + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.1") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("Aguacongas.IdentityServer.KeysRotation.EntityFrameworkCore.KeyRotationKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("FriendlyName") + .HasColumnType("longtext"); + + b.Property("Xml") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("KeyRotationKeys"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.AuthorizationCode", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("AuthorizationCodes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.BackChannelAuthenticationRequest", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("BackChannelAuthenticationRequests"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.DeviceCode", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Code") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Description") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("SubjectId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("UserCode") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("DeviceCodes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.OneTimeToken", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("OneTimeTokens"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.PushedAuthorizationRequest", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAtUtc") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Parameters") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("PushedAuthorizationRequests"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ReferenceToken", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("ReferenceTokens"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RefreshToken", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("RefreshTokens"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Saml2PArtifact", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("Saml2pArtifact"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.UserConsent", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .HasColumnType("longtext"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .HasColumnType("longtext"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("UserConstents"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.UserSession", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Created") + .HasColumnType("datetime(6)"); + + b.Property("DisplayName") + .HasColumnType("longtext"); + + b.Property("Expires") + .HasColumnType("datetime(6)"); + + b.Property("Renewed") + .HasColumnType("datetime(6)"); + + b.Property("Scheme") + .HasColumnType("longtext"); + + b.Property("SessionId") + .HasColumnType("longtext"); + + b.Property("Ticket") + .HasColumnType("longtext"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("UserSessions"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("FriendlyName") + .HasColumnType("longtext"); + + b.Property("Xml") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("DataProtectionKeys"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/20240128084809_PushAuthorizationRequest.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/20240128084809_PushAuthorizationRequest.cs new file mode 100644 index 000000000..a61260281 --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/20240128084809_PushAuthorizationRequest.cs @@ -0,0 +1,40 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Aguacongas.TheIdServer.MySql.Migrations.OperationalDb +{ + /// + public partial class PushAuthorizationRequest : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "PushedAuthorizationRequests", + columns: table => new + { + Id = table.Column(type: "varchar(255)", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ExpiresAtUtc = table.Column(type: "datetime(6)", nullable: false), + Parameters = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + ModifiedAt = table.Column(type: "datetime(6)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PushedAuthorizationRequests", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "PushedAuthorizationRequests"); + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs index 71d8e27b6..675ce1de6 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.MySql/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs @@ -16,7 +16,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "7.0.4") + .HasAnnotation("ProductVersion", "8.0.1") .HasAnnotation("Relational:MaxIdentifierLength", 64); modelBuilder.Entity("Aguacongas.IdentityServer.KeysRotation.EntityFrameworkCore.KeyRotationKey", b => @@ -182,6 +182,28 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("OneTimeTokens"); }); + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.PushedAuthorizationRequest", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("ExpiresAtUtc") + .HasColumnType("datetime(6)"); + + b.Property("ModifiedAt") + .HasColumnType("datetime(6)"); + + b.Property("Parameters") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("PushedAuthorizationRequests"); + }); + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ReferenceToken", b => { b.Property("Id") diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Aguacongas.TheIdServer.Migrations.Oracle.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Aguacongas.TheIdServer.Migrations.Oracle.csproj index 55867afc1..1bb516d57 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Aguacongas.TheIdServer.Migrations.Oracle.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Aguacongas.TheIdServer.Migrations.Oracle.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/20240308134204_PushAuthorizationRequest.Designer.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/20240308134204_PushAuthorizationRequest.Designer.cs new file mode 100644 index 000000000..2d1392517 --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/20240308134204_PushAuthorizationRequest.Designer.cs @@ -0,0 +1,1454 @@ +// +using System; +using Aguacongas.IdentityServer.EntityFramework.Store; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Aguacongas.TheIdServer.Oracle.Migrations.ConfigurationDb +{ + [DbContext(typeof(ConfigurationDbContext))] + [Migration("20240308134204_PushAuthorizationRequest")] + partial class PushAuthorizationRequest + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiApiScope", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.HasKey("Id"); + + b.HasIndex("ApiId"); + + b.HasIndex("ApiScopeId"); + + b.ToTable("ApiApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiClaim", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.HasKey("Id"); + + b.HasIndex("ApiId", "Type") + .IsUnique(); + + b.ToTable("ApiClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("ApiId"); + + b.ToTable("ApiLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiProperty", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ApiId", "Key") + .IsUnique(); + + b.ToTable("ApiProperty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScope", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("Emphasize") + .HasColumnType("bool"); + + b.Property("Enabled") + .HasColumnType("bool"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Required") + .HasColumnType("bool"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bool"); + + b.HasKey("Id"); + + b.ToTable("ApiScopes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeClaim", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.HasKey("Id"); + + b.HasIndex("ApiScopeId", "Type") + .IsUnique(); + + b.ToTable("ApiScopeClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("ApiScopeId"); + + b.ToTable("ApiScopeLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeProperty", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ApiScopeId", "Key") + .IsUnique(); + + b.ToTable("ApiScopeProperty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiSecret", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("ApiId"); + + b.ToTable("ApiSecrets"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bool"); + + b.Property("AllowOfflineAccess") + .HasColumnType("bool"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("bool"); + + b.Property("AllowRememberConsent") + .HasColumnType("bool"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bool"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("bool"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bool"); + + b.Property("BackChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.Property("CibaLifetime") + .HasColumnType("int"); + + b.Property("ClientClaimsPrefix") + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("ClientName") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("ClientUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CoordinateLifetimeWithUserSession") + .HasColumnType("bool"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("bool"); + + b.Property("Enabled") + .HasColumnType("bool"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bool"); + + b.Property("FrontChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("bool"); + + b.Property("LogoUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("NonEditable") + .HasColumnType("bool"); + + b.Property("PairWiseSubjectSalt") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("PolicyUri") + .HasColumnType("nclob"); + + b.Property("PollingInterval") + .HasColumnType("int"); + + b.Property("ProtocolType") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("PushedAuthorizationLifetime") + .HasColumnType("int"); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RegistrationToken") + .HasColumnType("guid"); + + b.Property("RelyingPartyId") + .HasColumnType("nvarchar2(450)"); + + b.Property("RequireClientSecret") + .HasColumnType("bool"); + + b.Property("RequireConsent") + .HasColumnType("bool"); + + b.Property("RequireDPoP") + .HasColumnType("bool"); + + b.Property("RequirePkce") + .HasColumnType("bool"); + + b.Property("RequirePushedAuthorization") + .HasColumnType("bool"); + + b.Property("RequireRequestObject") + .HasColumnType("bool"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("TosUri") + .HasColumnType("nclob"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("bool"); + + b.Property("UserCodeType") + .HasMaxLength(100) + .HasColumnType("nvarchar2(100)"); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("RelyingPartyId"); + + b.ToTable("Clients"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientAllowedIdentityTokenSigningAlgorithm", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("Algorithm") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Algorithm") + .IsUnique(); + + b.ToTable("ClientAllowedIdentityTokenSigningAlgorithms"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientClaim", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("Value") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientGrantType", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("GrantType") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "GrantType") + .IsUnique(); + + b.ToTable("ClientGrantTypes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientIdpRestriction", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Provider") + .IsUnique(); + + b.ToTable("ClientIdpRestriction"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientProperty", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Key") + .IsUnique(); + + b.ToTable("ClientProperties"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientScope", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Scope") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Scope") + .IsUnique(); + + b.ToTable("ClientScopes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientSecret", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Description") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("Value") + .IsRequired() + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("ClientSecrets"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientUri", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Kind") + .HasColumnType("int"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SanetizedCorsUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.Property("Uri") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId", "Uri") + .IsUnique(); + + b.ToTable("ClientUris"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Culture", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.HasKey("Id"); + + b.ToTable("Cultures"); + + b.HasData( + new + { + Id = "en", + CreatedAt = new DateTime(2024, 3, 8, 13, 42, 3, 923, DateTimeKind.Utc).AddTicks(4985) + }); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalClaimTransformation", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("AsMultipleValues") + .HasColumnType("bool"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("FromClaimType") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Scheme") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("ToClaimType") + .IsRequired() + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("Scheme", "FromClaimType") + .IsUnique(); + + b.ToTable("ExternalClaimTransformations"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)") + .HasColumnName("Scheme"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("DisplayName") + .HasColumnType("nclob"); + + b.Property("MapDefaultOutboundClaimType") + .HasColumnType("bool"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SerializedHandlerType") + .HasColumnType("nclob"); + + b.Property("SerializedOptions") + .HasColumnType("nclob"); + + b.Property("StoreClaims") + .HasColumnType("bool"); + + b.HasKey("Id"); + + b.ToTable("Providers"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityClaim", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("IdentityId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Type") + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.HasKey("Id"); + + b.HasIndex("IdentityId", "Type") + .IsUnique(); + + b.ToTable("IdentityClaims"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityLocalizedResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("IdentityId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("ResourceKind") + .HasColumnType("int"); + + b.Property("Value") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("IdentityId"); + + b.ToTable("IdentityLocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityProperty", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("IdentityId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); + + b.HasKey("Id"); + + b.HasIndex("IdentityId", "Key") + .IsUnique(); + + b.ToTable("IdentityProperties"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); + + b.Property("DisplayName") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("Emphasize") + .HasColumnType("bool"); + + b.Property("Enabled") + .HasColumnType("bool"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("NonEditable") + .HasColumnType("bool"); + + b.Property("Required") + .HasColumnType("bool"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bool"); + + b.HasKey("Id"); + + b.ToTable("Identities"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.LocalizedResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("BaseName") + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("CultureId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); + + b.Property("Key") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("Location") + .HasColumnType("nclob"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Value") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("CultureId"); + + b.ToTable("LocalizedResources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ProtectResource", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("Enabled") + .HasColumnType("bool"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("NonEditable") + .HasColumnType("bool"); + + b.Property("RequireResourceIndicator") + .HasColumnType("bool"); + + b.HasKey("Id"); + + b.ToTable("Apis"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingParty", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Description") + .HasColumnType("nclob"); + + b.Property("DigestAlgorithm") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("EncryptionCertificate") + .HasColumnType("blob"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SamlNameIdentifierFormat") + .HasColumnType("nclob"); + + b.Property("SignatureAlgorithm") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("TokenType") + .IsRequired() + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.ToTable("RelyingParties"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingPartyClaimMapping", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("FromClaimType") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("RelyingPartyId") + .HasColumnType("nvarchar2(450)"); + + b.Property("ToClaimType") + .IsRequired() + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.HasIndex("RelyingPartyId"); + + b.ToTable("RelyingPartyClaimMappings"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiApiScope", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("ApiScopes") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Apis") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("ApiClaims") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Resources") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Properties") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("ApiScopeClaims") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Resources") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Properties") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ApiScope"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiSecret", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Secrets") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Api"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") + .WithMany("Clients") + .HasForeignKey("RelyingPartyId"); + + b.Navigation("RelyingParty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientAllowedIdentityTokenSigningAlgorithm", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedIdentityTokenSigningAlgorithms") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("ClientClaims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientGrantType", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientIdpRestriction", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("Resources") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientScope", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientSecret", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientUri", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Client"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalClaimTransformation", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", null) + .WithMany("ClaimTransformations") + .HasForeignKey("Scheme") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityClaim", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("IdentityClaims") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Identity"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityLocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("Resources") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Identity"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityProperty", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("Properties") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Identity"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.LocalizedResource", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Culture", "Culture") + .WithMany("Resources") + .HasForeignKey("CultureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Culture"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingPartyClaimMapping", b => + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") + .WithMany("ClaimMappings") + .HasForeignKey("RelyingPartyId"); + + b.Navigation("RelyingParty"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScope", b => + { + b.Navigation("ApiScopeClaims"); + + b.Navigation("Apis"); + + b.Navigation("Properties"); + + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => + { + b.Navigation("AllowedGrantTypes"); + + b.Navigation("AllowedIdentityTokenSigningAlgorithms"); + + b.Navigation("AllowedScopes"); + + b.Navigation("ClientClaims"); + + b.Navigation("ClientSecrets"); + + b.Navigation("IdentityProviderRestrictions"); + + b.Navigation("Properties"); + + b.Navigation("RedirectUris"); + + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Culture", b => + { + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", b => + { + b.Navigation("ClaimTransformations"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityResource", b => + { + b.Navigation("IdentityClaims"); + + b.Navigation("Properties"); + + b.Navigation("Resources"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ProtectResource", b => + { + b.Navigation("ApiClaims"); + + b.Navigation("ApiScopes"); + + b.Navigation("Properties"); + + b.Navigation("Resources"); + + b.Navigation("Secrets"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingParty", b => + { + b.Navigation("ClaimMappings"); + + b.Navigation("Clients"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/20240308134204_PushAuthorizationRequest.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/20240308134204_PushAuthorizationRequest.cs new file mode 100644 index 000000000..591bbaa8c --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/20240308134204_PushAuthorizationRequest.cs @@ -0,0 +1,54 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Aguacongas.TheIdServer.Oracle.Migrations.ConfigurationDb +{ + /// + public partial class PushAuthorizationRequest : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "PushedAuthorizationLifetime", + table: "Clients", + type: "int", + nullable: true); + + migrationBuilder.AddColumn( + name: "RequirePushedAuthorization", + table: "Clients", + type: "bool", + nullable: false, + defaultValue: false); + + migrationBuilder.UpdateData( + table: "Cultures", + keyColumn: "Id", + keyValue: "en", + column: "CreatedAt", + value: new DateTime(2024, 3, 8, 13, 42, 3, 923, DateTimeKind.Utc).AddTicks(4985)); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "PushedAuthorizationLifetime", + table: "Clients"); + + migrationBuilder.DropColumn( + name: "RequirePushedAuthorization", + table: "Clients"); + + migrationBuilder.UpdateData( + table: "Cultures", + keyColumn: "Id", + keyValue: "en", + column: "CreatedAt", + value: new DateTime(2022, 6, 30, 10, 35, 46, 284, DateTimeKind.Utc).AddTicks(3153)); + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs index 86cd2889e..c80924ce5 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs @@ -15,1430 +15,1436 @@ partial class ConfigurationDbContextModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "6.0.5"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiApiScope", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("ApiScopeId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiId"); + b.HasIndex("ApiId"); - b.HasIndex("ApiScopeId"); + b.HasIndex("ApiScopeId"); - b.ToTable("ApiApiScope"); - }); + b.ToTable("ApiApiScope"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiClaim", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Type") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiId", "Type") - .IsUnique(); + b.HasIndex("ApiId", "Type") + .IsUnique(); - b.ToTable("ApiClaims"); - }); + b.ToTable("ApiClaims"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiLocalizedResource", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("CultureId") - .IsRequired() - .HasColumnType("nclob"); + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("ResourceKind") - .HasColumnType("int"); + b.Property("ResourceKind") + .HasColumnType("int"); - b.Property("Value") - .HasColumnType("nclob"); + b.Property("Value") + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiId"); + b.HasIndex("ApiId"); - b.ToTable("ApiLocalizedResources"); - }); + b.ToTable("ApiLocalizedResources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiProperty", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Key") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Value") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiId", "Key") - .IsUnique(); + b.HasIndex("ApiId", "Key") + .IsUnique(); - b.ToTable("ApiProperty"); - }); + b.ToTable("ApiProperty"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScope", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Description") - .HasMaxLength(1000) - .HasColumnType("nvarchar2(1000)"); + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.Property("Emphasize") - .HasColumnType("bool"); + b.Property("Emphasize") + .HasColumnType("bool"); - b.Property("Enabled") - .HasColumnType("bool"); + b.Property("Enabled") + .HasColumnType("bool"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Required") - .HasColumnType("bool"); + b.Property("Required") + .HasColumnType("bool"); - b.Property("ShowInDiscoveryDocument") - .HasColumnType("bool"); + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bool"); - b.HasKey("Id"); + b.HasKey("Id"); - b.ToTable("ApiScopes"); - }); + b.ToTable("ApiScopes"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeClaim", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiScopeId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Type") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiScopeId", "Type") - .IsUnique(); + b.HasIndex("ApiScopeId", "Type") + .IsUnique(); - b.ToTable("ApiScopeClaims"); - }); + b.ToTable("ApiScopeClaims"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeLocalizedResource", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiScopeId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("CultureId") - .IsRequired() - .HasColumnType("nclob"); + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("ResourceKind") - .HasColumnType("int"); + b.Property("ResourceKind") + .HasColumnType("int"); - b.Property("Value") - .HasColumnType("nclob"); + b.Property("Value") + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiScopeId"); + b.HasIndex("ApiScopeId"); - b.ToTable("ApiScopeLocalizedResources"); - }); + b.ToTable("ApiScopeLocalizedResources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeProperty", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiScopeId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiScopeId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Key") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Value") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiScopeId", "Key") - .IsUnique(); + b.HasIndex("ApiScopeId", "Key") + .IsUnique(); - b.ToTable("ApiScopeProperty"); - }); + b.ToTable("ApiScopeProperty"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiSecret", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ApiId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ApiId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Description") - .HasMaxLength(1000) - .HasColumnType("nvarchar2(1000)"); + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); - b.Property("Expiration") - .HasColumnType("timestamp"); + b.Property("Expiration") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Type") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("Value") - .IsRequired() - .HasColumnType("nclob"); + b.Property("Value") + .IsRequired() + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ApiId"); + b.HasIndex("ApiId"); - b.ToTable("ApiSecrets"); - }); + b.ToTable("ApiSecrets"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("AbsoluteRefreshTokenLifetime") - .HasColumnType("int"); + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); - b.Property("AccessTokenLifetime") - .HasColumnType("int"); + b.Property("AccessTokenLifetime") + .HasColumnType("int"); - b.Property("AccessTokenType") - .HasColumnType("int"); + b.Property("AccessTokenType") + .HasColumnType("int"); - b.Property("AllowAccessTokensViaBrowser") - .HasColumnType("bool"); + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("bool"); - b.Property("AllowOfflineAccess") - .HasColumnType("bool"); + b.Property("AllowOfflineAccess") + .HasColumnType("bool"); - b.Property("AllowPlainTextPkce") - .HasColumnType("bool"); + b.Property("AllowPlainTextPkce") + .HasColumnType("bool"); - b.Property("AllowRememberConsent") - .HasColumnType("bool"); + b.Property("AllowRememberConsent") + .HasColumnType("bool"); - b.Property("AlwaysIncludeUserClaimsInIdToken") - .HasColumnType("bool"); + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("bool"); - b.Property("AlwaysSendClientClaims") - .HasColumnType("bool"); + b.Property("AlwaysSendClientClaims") + .HasColumnType("bool"); - b.Property("AuthorizationCodeLifetime") - .HasColumnType("int"); + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); - b.Property("BackChannelLogoutSessionRequired") - .HasColumnType("bool"); + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("bool"); - b.Property("BackChannelLogoutUri") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("BackChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.Property("CibaLifetime") - .HasColumnType("int"); + b.Property("CibaLifetime") + .HasColumnType("int"); - b.Property("ClientClaimsPrefix") - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("ClientClaimsPrefix") + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("ClientName") - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("ClientName") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.Property("ClientUri") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("ClientUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.Property("ConsentLifetime") - .HasColumnType("int"); + b.Property("ConsentLifetime") + .HasColumnType("int"); - b.Property("CoordinateLifetimeWithUserSession") - .HasColumnType("bool"); + b.Property("CoordinateLifetimeWithUserSession") + .HasColumnType("bool"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Description") - .HasMaxLength(1000) - .HasColumnType("nvarchar2(1000)"); + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); - b.Property("DeviceCodeLifetime") - .HasColumnType("int"); + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); - b.Property("EnableLocalLogin") - .HasColumnType("bool"); + b.Property("EnableLocalLogin") + .HasColumnType("bool"); - b.Property("Enabled") - .HasColumnType("bool"); + b.Property("Enabled") + .HasColumnType("bool"); - b.Property("FrontChannelLogoutSessionRequired") - .HasColumnType("bool"); + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("bool"); - b.Property("FrontChannelLogoutUri") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("FrontChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.Property("IdentityTokenLifetime") - .HasColumnType("int"); + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); - b.Property("IncludeJwtId") - .HasColumnType("bool"); + b.Property("IncludeJwtId") + .HasColumnType("bool"); - b.Property("LogoUri") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("LogoUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("NonEditable") - .HasColumnType("bool"); + b.Property("NonEditable") + .HasColumnType("bool"); - b.Property("PairWiseSubjectSalt") - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("PairWiseSubjectSalt") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.Property("PolicyUri") - .HasColumnType("nclob"); + b.Property("PolicyUri") + .HasColumnType("nclob"); - b.Property("PollingInterval") - .HasColumnType("int"); + b.Property("PollingInterval") + .HasColumnType("int"); - b.Property("ProtocolType") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("ProtocolType") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.Property("RefreshTokenExpiration") - .HasColumnType("int"); + b.Property("PushedAuthorizationLifetime") + .HasColumnType("int"); - b.Property("RefreshTokenUsage") - .HasColumnType("int"); + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); - b.Property("RegistrationToken") - .HasColumnType("guid"); + b.Property("RefreshTokenUsage") + .HasColumnType("int"); - b.Property("RelyingPartyId") - .HasColumnType("nvarchar2(450)"); + b.Property("RegistrationToken") + .HasColumnType("guid"); - b.Property("RequireClientSecret") - .HasColumnType("bool"); + b.Property("RelyingPartyId") + .HasColumnType("nvarchar2(450)"); - b.Property("RequireConsent") - .HasColumnType("bool"); + b.Property("RequireClientSecret") + .HasColumnType("bool"); - b.Property("RequirePkce") - .HasColumnType("bool"); + b.Property("RequireConsent") + .HasColumnType("bool"); - b.Property("RequireRequestObject") - .HasColumnType("bool"); + b.Property("RequireDPoP") + .HasColumnType("bool"); - b.Property("SlidingRefreshTokenLifetime") - .HasColumnType("int"); + b.Property("RequirePkce") + .HasColumnType("bool"); - b.Property("TosUri") - .HasColumnType("nclob"); + b.Property("RequirePushedAuthorization") + .HasColumnType("bool"); - b.Property("UpdateAccessTokenClaimsOnRefresh") - .HasColumnType("bool"); + b.Property("RequireRequestObject") + .HasColumnType("bool"); - b.Property("UserCodeType") - .HasMaxLength(100) - .HasColumnType("nvarchar2(100)"); + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); - b.Property("UserSsoLifetime") - .HasColumnType("int"); + b.Property("TosUri") + .HasColumnType("nclob"); - b.Property("RequireDPoP") + b.Property("UpdateAccessTokenClaimsOnRefresh") .HasColumnType("bool"); - b.HasKey("Id"); + b.Property("UserCodeType") + .HasMaxLength(100) + .HasColumnType("nvarchar2(100)"); - b.HasIndex("RelyingPartyId"); + b.Property("UserSsoLifetime") + .HasColumnType("int"); - b.ToTable("Clients"); - }); + b.HasKey("Id"); + + b.HasIndex("RelyingPartyId"); + + b.ToTable("Clients"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientAllowedIdentityTokenSigningAlgorithm", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("Algorithm") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("Algorithm") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId", "Algorithm") - .IsUnique(); + b.HasIndex("ClientId", "Algorithm") + .IsUnique(); - b.ToTable("ClientAllowedIdentityTokenSigningAlgorithms"); - }); + b.ToTable("ClientAllowedIdentityTokenSigningAlgorithms"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientClaim", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Type") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("Value") - .HasColumnType("nclob"); + b.Property("Value") + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId"); + b.HasIndex("ClientId"); - b.ToTable("ClientClaims"); - }); + b.ToTable("ClientClaims"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientGrantType", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("GrantType") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("GrantType") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId", "GrantType") - .IsUnique(); + b.HasIndex("ClientId", "GrantType") + .IsUnique(); - b.ToTable("ClientGrantTypes"); - }); + b.ToTable("ClientGrantTypes"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientIdpRestriction", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Provider") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("Provider") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId", "Provider") - .IsUnique(); + b.HasIndex("ClientId", "Provider") + .IsUnique(); - b.ToTable("ClientIdpRestriction"); - }); + b.ToTable("ClientIdpRestriction"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientLocalizedResource", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("CultureId") - .IsRequired() - .HasColumnType("nclob"); + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("ResourceKind") - .HasColumnType("int"); + b.Property("ResourceKind") + .HasColumnType("int"); - b.Property("Value") - .HasColumnType("nclob"); + b.Property("Value") + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId"); + b.HasIndex("ClientId"); - b.ToTable("ClientLocalizedResources"); - }); + b.ToTable("ClientLocalizedResources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientProperty", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Key") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Value") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId", "Key") - .IsUnique(); + b.HasIndex("ClientId", "Key") + .IsUnique(); - b.ToTable("ClientProperties"); - }); + b.ToTable("ClientProperties"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientScope", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Scope") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("Scope") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId", "Scope") - .IsUnique(); + b.HasIndex("ClientId", "Scope") + .IsUnique(); - b.ToTable("ClientScopes"); - }); + b.ToTable("ClientScopes"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientSecret", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Description") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("Description") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.Property("Expiration") - .HasColumnType("timestamp"); + b.Property("Expiration") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Type") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Type") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("Value") - .IsRequired() - .HasColumnType("nclob"); + b.Property("Value") + .IsRequired() + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId"); + b.HasIndex("ClientId"); - b.ToTable("ClientSecrets"); - }); + b.ToTable("ClientSecrets"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientUri", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Kind") - .HasColumnType("int"); + b.Property("Kind") + .HasColumnType("int"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("SanetizedCorsUri") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("SanetizedCorsUri") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.Property("Uri") - .IsRequired() - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("Uri") + .IsRequired() + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("ClientId", "Uri") - .IsUnique(); + b.HasIndex("ClientId", "Uri") + .IsUnique(); - b.ToTable("ClientUris"); - }); + b.ToTable("ClientUris"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Culture", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.HasKey("Id"); + b.HasKey("Id"); - b.ToTable("Cultures"); + b.ToTable("Cultures"); - b.HasData( - new - { - Id = "en", - CreatedAt = new DateTime(2022, 6, 30, 10, 35, 46, 284, DateTimeKind.Utc).AddTicks(3153) - }); - }); + b.HasData( + new + { + Id = "en", + CreatedAt = new DateTime(2024, 3, 8, 13, 42, 3, 923, DateTimeKind.Utc).AddTicks(4985) + }); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalClaimTransformation", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("AsMultipleValues") - .HasColumnType("bool"); + b.Property("AsMultipleValues") + .HasColumnType("bool"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("FromClaimType") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("FromClaimType") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Scheme") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("Scheme") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("ToClaimType") - .IsRequired() - .HasColumnType("nclob"); + b.Property("ToClaimType") + .IsRequired() + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("Scheme", "FromClaimType") - .IsUnique(); + b.HasIndex("Scheme", "FromClaimType") + .IsUnique(); - b.ToTable("ExternalClaimTransformations"); - }); + b.ToTable("ExternalClaimTransformations"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)") - .HasColumnName("Scheme"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)") + .HasColumnName("Scheme"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("DisplayName") - .HasColumnType("nclob"); + b.Property("DisplayName") + .HasColumnType("nclob"); - b.Property("MapDefaultOutboundClaimType") - .HasColumnType("bool"); + b.Property("MapDefaultOutboundClaimType") + .HasColumnType("bool"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("SerializedHandlerType") - .HasColumnType("nclob"); + b.Property("SerializedHandlerType") + .HasColumnType("nclob"); - b.Property("SerializedOptions") - .HasColumnType("nclob"); + b.Property("SerializedOptions") + .HasColumnType("nclob"); - b.Property("StoreClaims") - .HasColumnType("bool"); + b.Property("StoreClaims") + .HasColumnType("bool"); - b.HasKey("Id"); + b.HasKey("Id"); - b.ToTable("Providers"); - }); + b.ToTable("Providers"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityClaim", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("IdentityId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("IdentityId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Type") - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Type") + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("IdentityId", "Type") - .IsUnique(); + b.HasIndex("IdentityId", "Type") + .IsUnique(); - b.ToTable("IdentityClaims"); - }); + b.ToTable("IdentityClaims"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityLocalizedResource", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("CultureId") - .IsRequired() - .HasColumnType("nclob"); + b.Property("CultureId") + .IsRequired() + .HasColumnType("nclob"); - b.Property("IdentityId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("IdentityId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("ResourceKind") - .HasColumnType("int"); + b.Property("ResourceKind") + .HasColumnType("int"); - b.Property("Value") - .HasColumnType("nclob"); + b.Property("Value") + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("IdentityId"); + b.HasIndex("IdentityId"); - b.ToTable("IdentityLocalizedResources"); - }); + b.ToTable("IdentityLocalizedResources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityProperty", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("IdentityId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("IdentityId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("Key") - .IsRequired() - .HasMaxLength(250) - .HasColumnType("nvarchar2(250)"); + b.Property("Key") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar2(250)"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Value") - .HasMaxLength(2000) - .HasColumnType("nvarchar2(2000)"); + b.Property("Value") + .HasMaxLength(2000) + .HasColumnType("nvarchar2(2000)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("IdentityId", "Key") - .IsUnique(); + b.HasIndex("IdentityId", "Key") + .IsUnique(); - b.ToTable("IdentityProperties"); - }); + b.ToTable("IdentityProperties"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityResource", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Description") - .HasMaxLength(1000) - .HasColumnType("nvarchar2(1000)"); + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); - b.Property("DisplayName") - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("DisplayName") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.Property("Emphasize") - .HasColumnType("bool"); + b.Property("Emphasize") + .HasColumnType("bool"); - b.Property("Enabled") - .HasColumnType("bool"); + b.Property("Enabled") + .HasColumnType("bool"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("NonEditable") - .HasColumnType("bool"); + b.Property("NonEditable") + .HasColumnType("bool"); - b.Property("Required") - .HasColumnType("bool"); + b.Property("Required") + .HasColumnType("bool"); - b.Property("ShowInDiscoveryDocument") - .HasColumnType("bool"); + b.Property("ShowInDiscoveryDocument") + .HasColumnType("bool"); - b.HasKey("Id"); + b.HasKey("Id"); - b.ToTable("Identities"); - }); + b.ToTable("Identities"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.LocalizedResource", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("BaseName") - .HasColumnType("nclob"); + b.Property("BaseName") + .HasColumnType("nclob"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("CultureId") - .IsRequired() - .HasColumnType("nvarchar2(450)"); + b.Property("CultureId") + .IsRequired() + .HasColumnType("nvarchar2(450)"); - b.Property("Key") - .IsRequired() - .HasColumnType("nclob"); + b.Property("Key") + .IsRequired() + .HasColumnType("nclob"); - b.Property("Location") - .HasColumnType("nclob"); + b.Property("Location") + .HasColumnType("nclob"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Value") - .HasColumnType("nclob"); + b.Property("Value") + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("CultureId"); + b.HasIndex("CultureId"); - b.ToTable("LocalizedResources"); - }); + b.ToTable("LocalizedResources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ProtectResource", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Description") - .HasMaxLength(1000) - .HasColumnType("nvarchar2(1000)"); + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("nvarchar2(1000)"); - b.Property("DisplayName") - .IsRequired() - .HasMaxLength(200) - .HasColumnType("nvarchar2(200)"); + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.Property("Enabled") - .HasColumnType("bool"); + b.Property("Enabled") + .HasColumnType("bool"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("NonEditable") - .HasColumnType("bool"); + b.Property("NonEditable") + .HasColumnType("bool"); - b.Property("RequireResourceIndicator") - .HasColumnType("bool"); + b.Property("RequireResourceIndicator") + .HasColumnType("bool"); - b.HasKey("Id"); + b.HasKey("Id"); - b.ToTable("Apis"); - }); + b.ToTable("Apis"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingParty", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Description") - .HasColumnType("nclob"); + b.Property("Description") + .HasColumnType("nclob"); - b.Property("DigestAlgorithm") - .IsRequired() - .HasColumnType("nclob"); + b.Property("DigestAlgorithm") + .IsRequired() + .HasColumnType("nclob"); - b.Property("EncryptionCertificate") - .HasColumnType("blob"); + b.Property("EncryptionCertificate") + .HasColumnType("blob"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("SamlNameIdentifierFormat") - .HasColumnType("nclob"); + b.Property("SamlNameIdentifierFormat") + .HasColumnType("nclob"); - b.Property("SignatureAlgorithm") - .IsRequired() - .HasColumnType("nclob"); + b.Property("SignatureAlgorithm") + .IsRequired() + .HasColumnType("nclob"); - b.Property("TokenType") - .IsRequired() - .HasColumnType("nclob"); + b.Property("TokenType") + .IsRequired() + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.ToTable("RelyingParties"); - }); + b.ToTable("RelyingParties"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingPartyClaimMapping", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("FromClaimType") - .IsRequired() - .HasColumnType("nclob"); + b.Property("FromClaimType") + .IsRequired() + .HasColumnType("nclob"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("RelyingPartyId") - .HasColumnType("nvarchar2(450)"); + b.Property("RelyingPartyId") + .HasColumnType("nvarchar2(450)"); - b.Property("ToClaimType") - .IsRequired() - .HasColumnType("nclob"); + b.Property("ToClaimType") + .IsRequired() + .HasColumnType("nclob"); - b.HasKey("Id"); + b.HasKey("Id"); - b.HasIndex("RelyingPartyId"); + b.HasIndex("RelyingPartyId"); - b.ToTable("RelyingPartyClaimMappings"); - }); + b.ToTable("RelyingPartyClaimMappings"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiApiScope", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") - .WithMany("ApiScopes") - .HasForeignKey("ApiId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("ApiScopes") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") - .WithMany("Apis") - .HasForeignKey("ApiScopeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Apis") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Api"); + b.Navigation("Api"); - b.Navigation("ApiScope"); - }); + b.Navigation("ApiScope"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiClaim", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") - .WithMany("ApiClaims") - .HasForeignKey("ApiId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("ApiClaims") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Api"); - }); + b.Navigation("Api"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiLocalizedResource", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") - .WithMany("Resources") - .HasForeignKey("ApiId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Resources") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Api"); - }); + b.Navigation("Api"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiProperty", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") - .WithMany("Properties") - .HasForeignKey("ApiId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Properties") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Api"); - }); + b.Navigation("Api"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeClaim", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") - .WithMany("ApiScopeClaims") - .HasForeignKey("ApiScopeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("ApiScopeClaims") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("ApiScope"); - }); + b.Navigation("ApiScope"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeLocalizedResource", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") - .WithMany("Resources") - .HasForeignKey("ApiScopeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Resources") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("ApiScope"); - }); + b.Navigation("ApiScope"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScopeProperty", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") - .WithMany("Properties") - .HasForeignKey("ApiScopeId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ApiScope", "ApiScope") + .WithMany("Properties") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("ApiScope"); - }); + b.Navigation("ApiScope"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiSecret", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") - .WithMany("Secrets") - .HasForeignKey("ApiId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ProtectResource", "Api") + .WithMany("Secrets") + .HasForeignKey("ApiId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Api"); - }); + b.Navigation("Api"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") - .WithMany("Clients") - .HasForeignKey("RelyingPartyId"); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") + .WithMany("Clients") + .HasForeignKey("RelyingPartyId"); - b.Navigation("RelyingParty"); - }); + b.Navigation("RelyingParty"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientAllowedIdentityTokenSigningAlgorithm", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("AllowedIdentityTokenSigningAlgorithms") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedIdentityTokenSigningAlgorithms") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientClaim", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("ClientClaims") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("ClientClaims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientGrantType", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("AllowedGrantTypes") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientIdpRestriction", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("IdentityProviderRestrictions") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientLocalizedResource", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("Resources") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("Resources") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientProperty", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("Properties") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientScope", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("AllowedScopes") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientSecret", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("ClientSecrets") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ClientUri", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") - .WithMany("RedirectUris") - .HasForeignKey("ClientId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Client", "Client") + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Client"); - }); + b.Navigation("Client"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalClaimTransformation", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", null) - .WithMany("ClaimTransformations") - .HasForeignKey("Scheme") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", null) + .WithMany("ClaimTransformations") + .HasForeignKey("Scheme") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityClaim", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") - .WithMany("IdentityClaims") - .HasForeignKey("IdentityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("IdentityClaims") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Identity"); - }); + b.Navigation("Identity"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityLocalizedResource", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") - .WithMany("Resources") - .HasForeignKey("IdentityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("Resources") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Identity"); - }); + b.Navigation("Identity"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityProperty", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") - .WithMany("Properties") - .HasForeignKey("IdentityId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.IdentityResource", "Identity") + .WithMany("Properties") + .HasForeignKey("IdentityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Identity"); - }); + b.Navigation("Identity"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.LocalizedResource", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.Culture", "Culture") - .WithMany("Resources") - .HasForeignKey("CultureId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.Culture", "Culture") + .WithMany("Resources") + .HasForeignKey("CultureId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); - b.Navigation("Culture"); - }); + b.Navigation("Culture"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingPartyClaimMapping", b => - { - b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") - .WithMany("ClaimMappings") - .HasForeignKey("RelyingPartyId"); + { + b.HasOne("Aguacongas.IdentityServer.Store.Entity.RelyingParty", "RelyingParty") + .WithMany("ClaimMappings") + .HasForeignKey("RelyingPartyId"); - b.Navigation("RelyingParty"); - }); + b.Navigation("RelyingParty"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ApiScope", b => - { - b.Navigation("ApiScopeClaims"); + { + b.Navigation("ApiScopeClaims"); - b.Navigation("Apis"); + b.Navigation("Apis"); - b.Navigation("Properties"); + b.Navigation("Properties"); - b.Navigation("Resources"); - }); + b.Navigation("Resources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Client", b => - { - b.Navigation("AllowedGrantTypes"); + { + b.Navigation("AllowedGrantTypes"); - b.Navigation("AllowedIdentityTokenSigningAlgorithms"); + b.Navigation("AllowedIdentityTokenSigningAlgorithms"); - b.Navigation("AllowedScopes"); + b.Navigation("AllowedScopes"); - b.Navigation("ClientClaims"); + b.Navigation("ClientClaims"); - b.Navigation("ClientSecrets"); + b.Navigation("ClientSecrets"); - b.Navigation("IdentityProviderRestrictions"); + b.Navigation("IdentityProviderRestrictions"); - b.Navigation("Properties"); + b.Navigation("Properties"); - b.Navigation("RedirectUris"); + b.Navigation("RedirectUris"); - b.Navigation("Resources"); - }); + b.Navigation("Resources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Culture", b => - { - b.Navigation("Resources"); - }); + { + b.Navigation("Resources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ExternalProvider", b => - { - b.Navigation("ClaimTransformations"); - }); + { + b.Navigation("ClaimTransformations"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.IdentityResource", b => - { - b.Navigation("IdentityClaims"); + { + b.Navigation("IdentityClaims"); - b.Navigation("Properties"); + b.Navigation("Properties"); - b.Navigation("Resources"); - }); + b.Navigation("Resources"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ProtectResource", b => - { - b.Navigation("ApiClaims"); + { + b.Navigation("ApiClaims"); - b.Navigation("ApiScopes"); + b.Navigation("ApiScopes"); - b.Navigation("Properties"); + b.Navigation("Properties"); - b.Navigation("Resources"); + b.Navigation("Resources"); - b.Navigation("Secrets"); - }); + b.Navigation("Secrets"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RelyingParty", b => - { - b.Navigation("ClaimMappings"); + { + b.Navigation("ClaimMappings"); - b.Navigation("Clients"); - }); + b.Navigation("Clients"); + }); #pragma warning restore 612, 618 } } diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20230328205635_Saml2P.Designer.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20230328205635_Saml2P.Designer.cs index 544a4b1cb..427bee52c 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20230328205635_Saml2P.Designer.cs +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20230328205635_Saml2P.Designer.cs @@ -11,7 +11,7 @@ namespace Aguacongas.TheIdServer.Oracle.Migrations.OperationalDb { [DbContext(typeof(OperationalDbContext))] - [Migration("20220408172728_ServerSideSession")] + [Migration("20230328205635_Saml2P")] partial class Saml2P { protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20240308134443_PushAuthorizationRequest.Designer.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20240308134443_PushAuthorizationRequest.Designer.cs new file mode 100644 index 000000000..0a752e841 --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20240308134443_PushAuthorizationRequest.Designer.cs @@ -0,0 +1,395 @@ +// +using System; +using Aguacongas.IdentityServer.EntityFramework.Store; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Aguacongas.TheIdServer.Oracle.Migrations.OperationalDb +{ + [DbContext(typeof(OperationalDbContext))] + [Migration("20240308134443_PushAuthorizationRequest")] + partial class PushAuthorizationRequest + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); + + modelBuilder.Entity("Aguacongas.IdentityServer.KeysRotation.EntityFrameworkCore.KeyRotationKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("FriendlyName") + .HasColumnType("nclob"); + + b.Property("Xml") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.ToTable("KeyRotationKeys"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.AuthorizationCode", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .HasColumnType("nclob"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("AuthorizationCodes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.BackChannelAuthenticationRequest", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("BackChannelAuthenticationRequests"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.DeviceCode", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("Code") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Description") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("nvarchar2(100)"); + + b.Property("SubjectId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.Property("UserCode") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("DeviceCodes"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.OneTimeToken", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .HasColumnType("nclob"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("OneTimeTokens"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.PushedAuthorizationRequest", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ExpiresAtUtc") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Parameters") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.ToTable("PushedAuthorizationRequests"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ReferenceToken", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .HasColumnType("nclob"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("ReferenceTokens"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RefreshToken", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .HasColumnType("nclob"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("RefreshTokens"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Saml2PArtifact", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .HasColumnType("nclob"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("Saml2pArtifact"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.UserConsent", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .HasColumnType("nclob"); + + b.Property("UserId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("UserConstents"); + }); + + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.UserSession", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("Created") + .HasColumnType("timestamp"); + + b.Property("DisplayName") + .HasColumnType("nclob"); + + b.Property("Expires") + .HasColumnType("timestamp"); + + b.Property("Renewed") + .HasColumnType("timestamp"); + + b.Property("Scheme") + .HasColumnType("nclob"); + + b.Property("SessionId") + .HasColumnType("nclob"); + + b.Property("Ticket") + .HasColumnType("nclob"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.ToTable("UserSessions"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + b.Property("FriendlyName") + .HasColumnType("nclob"); + + b.Property("Xml") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.ToTable("DataProtectionKeys"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20240308134443_PushAuthorizationRequest.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20240308134443_PushAuthorizationRequest.cs new file mode 100644 index 000000000..e28102c50 --- /dev/null +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/20240308134443_PushAuthorizationRequest.cs @@ -0,0 +1,37 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Aguacongas.TheIdServer.Oracle.Migrations.OperationalDb +{ + /// + public partial class PushAuthorizationRequest : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "PushedAuthorizationRequests", + columns: table => new + { + Id = table.Column(type: "nvarchar2(450)", nullable: false), + ExpiresAtUtc = table.Column(type: "timestamp", nullable: false), + Parameters = table.Column(type: "nclob", nullable: true), + CreatedAt = table.Column(type: "timestamp", nullable: false), + ModifiedAt = table.Column(type: "timestamp", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_PushedAuthorizationRequests", x => x.Id); + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "PushedAuthorizationRequests"); + } + } +} diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs index e7793911c..7e1698a5c 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Oracle/Migrations/OperationalDb/OperationalDbContextModelSnapshot.cs @@ -1,11 +1,12 @@ -// Project: Aguafrommars/TheIdServer -// Copyright (c) 2023 @Olivier Lefebvre +// using System; using Aguacongas.IdentityServer.EntityFramework.Store; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +#nullable disable + namespace Aguacongas.TheIdServer.Oracle.Migrations.OperationalDb { [DbContext(typeof(OperationalDbContext))] @@ -14,8 +15,7 @@ partial class OperationalDbContextModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "3.1.8"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); modelBuilder.Entity("Aguacongas.IdentityServer.KeysRotation.EntityFrameworkCore.KeyRotationKey", b => { @@ -59,14 +59,48 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nclob"); b.Property("UserId") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.HasKey("Id"); b.ToTable("AuthorizationCodes"); }); + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.BackChannelAuthenticationRequest", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("Data") + .HasColumnType("nclob"); + + b.Property("Expiration") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("SessionId") + .IsRequired() + .HasColumnType("nclob"); + + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + + b.HasKey("Id"); + + b.ToTable("BackChannelAuthenticationRequests"); + }); + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.DeviceCode", b => { b.Property("Id") @@ -77,8 +111,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nclob"); b.Property("Code") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.Property("CreatedAt") .HasColumnType("timestamp"); @@ -86,19 +120,27 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Data") .HasColumnType("nclob"); + b.Property("Description") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); + b.Property("Expiration") .HasColumnType("timestamp"); b.Property("ModifiedAt") .HasColumnType("timestamp"); + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("nvarchar2(100)"); + b.Property("SubjectId") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.Property("UserCode") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.HasKey("Id"); @@ -130,14 +172,36 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nclob"); b.Property("UserId") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.HasKey("Id"); b.ToTable("OneTimeTokens"); }); + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.PushedAuthorizationRequest", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp"); + + b.Property("ExpiresAtUtc") + .HasColumnType("timestamp"); + + b.Property("ModifiedAt") + .HasColumnType("timestamp"); + + b.Property("Parameters") + .HasColumnType("nclob"); + + b.HasKey("Id"); + + b.ToTable("PushedAuthorizationRequests"); + }); + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.ReferenceToken", b => { b.Property("Id") @@ -163,47 +227,14 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nclob"); b.Property("UserId") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.HasKey("Id"); b.ToTable("ReferenceTokens"); }); - modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.BackChannelAuthenticationRequest", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); - - b.Property("ClientId") - .IsRequired() - .HasColumnType("nclob"); - - b.Property("CreatedAt") - .HasColumnType("timestamp"); - - b.Property("Data") - .HasColumnType("nclob"); - - b.Property("Expiration") - .HasColumnType("timestamp"); - - b.Property("ModifiedAt") - .HasColumnType("timestamp"); - - b.Property("SessionId") - .HasColumnType("nclob"); - - b.Property("UserId") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); - - b.HasKey("Id"); - - b.ToTable("BackChannelAuthenticationRequest"); - }); - modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.RefreshToken", b => { b.Property("Id") @@ -229,46 +260,46 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("nclob"); b.Property("UserId") - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.HasKey("Id"); b.ToTable("RefreshTokens"); }); - modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Saml2pArtifact", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.Saml2PArtifact", b => + { + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nclob"); + b.Property("ClientId") + .IsRequired() + .HasColumnType("nclob"); - b.Property("UserId") - .HasColumnType("varchar(200)"); + b.Property("CreatedAt") + .HasColumnType("timestamp"); - b.Property("Data") - .HasColumnType("nclob"); + b.Property("Data") + .HasColumnType("nclob"); - b.Property("SessionId") - .HasColumnType("nclob"); + b.Property("Expiration") + .HasColumnType("timestamp"); - b.Property("CreatedAt") - .IsRequired() - .HasColumnType("timestamp"); + b.Property("ModifiedAt") + .HasColumnType("timestamp"); - b.Property("Expiration") - .HasColumnType("datetime(6)"); + b.Property("SessionId") + .HasColumnType("nclob"); - b.Property("ModifiedAt") - .HasColumnType("datetime(6)"); + b.Property("UserId") + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); - b.HasKey("Id"); + b.HasKey("Id"); - b.ToTable("Saml2pArtifact"); - }); + b.ToTable("Saml2pArtifact"); + }); modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.UserConsent", b => { @@ -296,65 +327,65 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("UserId") .IsRequired() - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + .HasMaxLength(200) + .HasColumnType("nvarchar2(200)"); b.HasKey("Id"); b.ToTable("UserConstents"); }); - modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.UserSession", b => { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); + b.Property("Id") + .HasColumnType("nvarchar2(450)"); - b.Property("FriendlyName") - .HasColumnType("nclob"); + b.Property("Created") + .HasColumnType("timestamp"); - b.Property("Xml") + b.Property("DisplayName") .HasColumnType("nclob"); - b.HasKey("Id"); + b.Property("Expires") + .HasColumnType("timestamp"); - b.ToTable("DataProtectionKeys"); - }); + b.Property("Renewed") + .HasColumnType("timestamp"); - modelBuilder.Entity("Aguacongas.IdentityServer.Store.Entity.UserSession", b => - { - b.Property("Id") - .HasColumnType("nvarchar2(450)"); + b.Property("Scheme") + .HasColumnType("nclob"); - b.Property("ClientId") - .IsRequired() - .HasColumnType("nclob"); + b.Property("SessionId") + .HasColumnType("nclob"); - b.Property("CreatedAt") - .HasColumnType("timestamp"); + b.Property("Ticket") + .HasColumnType("nclob"); - b.Property("Data") - .HasColumnType("nclob"); + b.Property("UserId") + .IsRequired() + .HasColumnType("nclob"); - b.Property("Expiration") - .HasColumnType("timestamp"); + b.HasKey("Id"); - b.Property("ModifiedAt") - .HasColumnType("timestamp"); + b.ToTable("UserSessions"); + }); - b.Property("SessionId") - .HasColumnType("nclob"); + modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); - b.Property("UserId") - .IsRequired() - .HasColumnType("nvarchar2(200)") - .HasMaxLength(200); + b.Property("FriendlyName") + .HasColumnType("nclob"); - b.HasKey("Id"); + b.Property("Xml") + .HasColumnType("nclob"); - b.ToTable("UserSessions"); - }); + b.HasKey("Id"); + b.ToTable("DataProtectionKeys"); + }); #pragma warning restore 612, 618 } } diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.PostgreSQL/Aguacongas.TheIdServer.Migrations.PostgreSQL.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.PostgreSQL/Aguacongas.TheIdServer.Migrations.PostgreSQL.csproj index 9929d68c2..eb02cf3d1 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.PostgreSQL/Aguacongas.TheIdServer.Migrations.PostgreSQL.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.PostgreSQL/Aguacongas.TheIdServer.Migrations.PostgreSQL.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.SqlServer/Aguacongas.TheIdServer.Migrations.SqlServer.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.SqlServer/Aguacongas.TheIdServer.Migrations.SqlServer.csproj index 338e98a8b..0043e75bf 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.SqlServer/Aguacongas.TheIdServer.Migrations.SqlServer.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.SqlServer/Aguacongas.TheIdServer.Migrations.SqlServer.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Sqlite/Aguacongas.TheIdServer.Migrations.Sqlite.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Sqlite/Aguacongas.TheIdServer.Migrations.Sqlite.csproj index e4cf118aa..f72c9cd0a 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Sqlite/Aguacongas.TheIdServer.Migrations.Sqlite.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Migrations.Sqlite/Aguacongas.TheIdServer.Migrations.Sqlite.csproj @@ -16,7 +16,7 @@ - + diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.MySql.Startup/Aguacongas.TheIdServer.MySql.Startup.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.MySql.Startup/Aguacongas.TheIdServer.MySql.Startup.csproj index e6dbbd66b..ab8259641 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.MySql.Startup/Aguacongas.TheIdServer.MySql.Startup.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.MySql.Startup/Aguacongas.TheIdServer.MySql.Startup.csproj @@ -16,8 +16,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/Aguacongas.TheIdServer.Oracle.Startup.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/Aguacongas.TheIdServer.Oracle.Startup.csproj index 64eaf5554..7b1195fad 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/Aguacongas.TheIdServer.Oracle.Startup.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/Aguacongas.TheIdServer.Oracle.Startup.csproj @@ -15,11 +15,13 @@ enable True + + 620bb083-3fdb-426d-b01a-aefcfcf7a6f5 - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/appsettings.json b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/appsettings.json index 9d70e09a3..6b2272d6f 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/appsettings.json +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Oracle.Startup/appsettings.json @@ -1,5 +1,5 @@ { "ConnectionStrings": { - "db": "server=localhost;connect mode=SysDba;direct=True;service name=ORCLCDB.localdomain;user id=sys;password=I2bnR1iD4X;License Key=utsgvkT8r1j0sszGsNKxQSBlvJuZ6IrsIc+y7aJ85Oh4/UJ9OYM0qT53OaInE8 qYosRr4YHX40ODF0BICuUXBO7zcBU0RMVULdANq2PlWZtS87MnuWXh4TcciW0j5Ttv39XGzwcaOWbh3fTNEZNn9dctxnB1gpQulQnmHAmh1kxMPAXZLF59tEkYJjWM3ajK4OI87C7NpNHpgQR/yOvychJggWxE4T1q7+xdBqop4b8Bq4+Xzni4//xloTZ8Jgu7y0V4m0NMGlpVAOE9OjgQyZI7dTpwK4DemhgZSmJxBZRtvy9hgdjBz+f2LlowVLYQ" + "db": "configured in user secret" } } \ No newline at end of file diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.PostgreSQL.Startup/Aguacongas.TheIdServer.PostgreSQL.Startup.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.PostgreSQL.Startup/Aguacongas.TheIdServer.PostgreSQL.Startup.csproj index 2eb9b863b..778693fc2 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.PostgreSQL.Startup/Aguacongas.TheIdServer.PostgreSQL.Startup.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.PostgreSQL.Startup/Aguacongas.TheIdServer.PostgreSQL.Startup.csproj @@ -16,8 +16,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.SqlServer.Startup/Aguacongas.TheIdServer.SqlServer.Startup.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.SqlServer.Startup/Aguacongas.TheIdServer.SqlServer.Startup.csproj index b601a1a0c..5c9f97ef4 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.SqlServer.Startup/Aguacongas.TheIdServer.SqlServer.Startup.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.SqlServer.Startup/Aguacongas.TheIdServer.SqlServer.Startup.csproj @@ -16,8 +16,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Sqlite.Startup/Aguacongas.TheIdServer.Sqlite.Startup.csproj b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Sqlite.Startup/Aguacongas.TheIdServer.Sqlite.Startup.csproj index 7f47ddf79..c735b83c9 100644 --- a/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Sqlite.Startup/Aguacongas.TheIdServer.Sqlite.Startup.csproj +++ b/src/IdentityServer/Migrations/Aguacongas.TheIdServer.Sqlite.Startup/Aguacongas.TheIdServer.Sqlite.Startup.csproj @@ -16,8 +16,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Aguacongas.IdentityServer.Admin.Http.Store.Test/Aguacongas.IdentityServer.Admin.Http.Store.Test.csproj b/test/Aguacongas.IdentityServer.Admin.Http.Store.Test/Aguacongas.IdentityServer.Admin.Http.Store.Test.csproj index bdcef7d24..5d1387f37 100644 --- a/test/Aguacongas.IdentityServer.Admin.Http.Store.Test/Aguacongas.IdentityServer.Admin.Http.Store.Test.csproj +++ b/test/Aguacongas.IdentityServer.Admin.Http.Store.Test/Aguacongas.IdentityServer.Admin.Http.Store.Test.csproj @@ -5,13 +5,13 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Aguacongas.TheIdServer.BlazorApp.Test/Aguacongas.TheIdServer.BlazorApp.Test.csproj b/test/Aguacongas.TheIdServer.BlazorApp.Test/Aguacongas.TheIdServer.BlazorApp.Test.csproj index 7d1c62e78..446a81c05 100644 --- a/test/Aguacongas.TheIdServer.BlazorApp.Test/Aguacongas.TheIdServer.BlazorApp.Test.csproj +++ b/test/Aguacongas.TheIdServer.BlazorApp.Test/Aguacongas.TheIdServer.BlazorApp.Test.csproj @@ -11,14 +11,14 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Aguacongas.TheIdServer.Test/Aguacongas.TheIdServer.Test.csproj b/test/Aguacongas.TheIdServer.Test/Aguacongas.TheIdServer.Test.csproj index 394e33332..8f93aaaa9 100644 --- a/test/Aguacongas.TheIdServer.Test/Aguacongas.TheIdServer.Test.csproj +++ b/test/Aguacongas.TheIdServer.Test/Aguacongas.TheIdServer.Test.csproj @@ -9,13 +9,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Aguacongas.TheIdServer.Test/Extensions/TracerProviderBuilderExtensionsTest.cs b/test/Aguacongas.TheIdServer.Test/Extensions/TracerProviderBuilderExtensionsTest.cs index b659aa3dc..3fefee744 100644 --- a/test/Aguacongas.TheIdServer.Test/Extensions/TracerProviderBuilderExtensionsTest.cs +++ b/test/Aguacongas.TheIdServer.Test/Extensions/TracerProviderBuilderExtensionsTest.cs @@ -51,11 +51,6 @@ public void AddTheIdServerTelemetry_should_add_exporters() { ApiKey = "test" }, - Jaeger = new JaegerExporterOptions - { - AgentHost = "google.com", - AgentPort = 443 - }, Zipkin = new ZipkinExporterOptions { Endpoint = new Uri("https://google.com") @@ -81,12 +76,11 @@ public void AddTheIdServerTelemetry_should_set_up_instrumentation() }, Instrumentation = new InstrumentationOptions { - AspNetCore = new AspNetCoreInstrumentationOptions + AspNetCore = new AspNetCoreTraceInstrumentationOptions { - EnableGrpcAspNetCoreSupport = true, RecordException = true }, - HttpClient = new HttpClientInstrumentationOptions + HttpClient = new HttpClientTraceInstrumentationOptions { RecordException = true }, diff --git a/test/Duende/Aguacongas.IdentityServer.Admin.Duende.Test/Aguacongas.IdentityServer.Admin.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.Admin.Duende.Test/Aguacongas.IdentityServer.Admin.Duende.Test.csproj index d110c4501..299e98e0f 100644 --- a/test/Duende/Aguacongas.IdentityServer.Admin.Duende.Test/Aguacongas.IdentityServer.Admin.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.Admin.Duende.Test/Aguacongas.IdentityServer.Admin.Duende.Test.csproj @@ -16,16 +16,16 @@ - - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.IdentityServer.Duende.Test/Aguacongas.IdentityServer.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.Duende.Test/Aguacongas.IdentityServer.Duende.Test.csproj index f13dec717..645e7dcff 100644 --- a/test/Duende/Aguacongas.IdentityServer.Duende.Test/Aguacongas.IdentityServer.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.Duende.Test/Aguacongas.IdentityServer.Duende.Test.csproj @@ -16,14 +16,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Duende/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test.csproj index 47f2b2a87..15f855d70 100644 --- a/test/Duende/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test/Aguacongas.IdentityServer.EntityFramework.Store.Duende.Test.csproj @@ -17,18 +17,18 @@ - + runtime; build; native; contentfiles; analyzers; buildtransitive all - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.IdentityServer.Http.Store.Duende.Test/Aguacongas.IdentityServer.Http.Store.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.Http.Store.Duende.Test/Aguacongas.IdentityServer.Http.Store.Duende.Test.csproj index d2e02d034..27cc030e6 100644 --- a/test/Duende/Aguacongas.IdentityServer.Http.Store.Duende.Test/Aguacongas.IdentityServer.Http.Store.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.Http.Store.Duende.Test/Aguacongas.IdentityServer.Http.Store.Duende.Test.csproj @@ -15,15 +15,15 @@ - - + + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/Aguacongas.IdentityServer.KeysRotation.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/Aguacongas.IdentityServer.KeysRotation.Duende.Test.csproj index 9b0049fcd..2f268cd7f 100644 --- a/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/Aguacongas.IdentityServer.KeysRotation.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/Aguacongas.IdentityServer.KeysRotation.Duende.Test.csproj @@ -16,15 +16,15 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/MongoDb/MongoDbXmlRepositoryTest.cs b/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/MongoDb/MongoDbXmlRepositoryTest.cs index ee7d3c6fe..d1fd6b3a4 100644 --- a/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/MongoDb/MongoDbXmlRepositoryTest.cs +++ b/test/Duende/Aguacongas.IdentityServer.KeysRotation.Duende.Test/MongoDb/MongoDbXmlRepositoryTest.cs @@ -8,6 +8,7 @@ using Moq; using System; using System.Collections.Generic; +using System.Linq; using System.Xml.Linq; using Xunit; @@ -26,7 +27,7 @@ public void Constructor_should_check_parameters() public void GetAllElements_should_return_all_elements() { var collectionMock = new Mock>(); - var queryableMock = new Mock>(); + var queryableMock = new Mock>(); var fake = new List { new DataProtectionKey @@ -52,7 +53,7 @@ public void GetAllElements_should_return_all_elements() public void GetAllElements_should_return_all_elements_whwn_parse_xml_failed() { var collectionMock = new Mock>(); - var queryableMock = new Mock>(); + var queryableMock = new Mock>(); var fake = new List { new KeyRotationKey @@ -78,10 +79,7 @@ public void GetAllElements_should_return_all_elements_whwn_parse_xml_failed() public void StoreElement_should_store_element() { var clientMock = new Mock(); - clientMock.SetupGet(m => m.Settings).Returns(new MongoClientSettings - { - LinqProvider = LinqProvider.V3 - }); + clientMock.SetupGet(m => m.Settings).Returns(new MongoClientSettings()); var dbMock = new Mock(); dbMock.SetupGet(m => m.Client).Returns(clientMock.Object); var collectionMock = new Mock>(); diff --git a/test/Duende/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test.csproj index f68d8bab4..881b1e28c 100644 --- a/test/Duende/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test/Aguacongas.IdentityServer.MongoDb.Store.Duende.Test.csproj @@ -15,14 +15,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Duende/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test.csproj index 4b827a0cf..547afd404 100644 --- a/test/Duende/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test.csproj @@ -17,16 +17,16 @@ - - - - - - + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all @@ -50,4 +50,9 @@ + + + PreserveNewest + + diff --git a/test/Duende/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test/RavenDBServer/license.json b/test/Duende/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test/RavenDBServer/license.json new file mode 100644 index 000000000..f087c5a80 --- /dev/null +++ b/test/Duende/Aguacongas.IdentityServer.RavenDb.Store.Duende.Test/RavenDBServer/license.json @@ -0,0 +1,22 @@ +{ + "Id": "9cbc15d1-80ab-4c32-8b4e-e5fe35b8fd54", + "Name": "Aguafrommars", + "Keys": [ + "ZnJo55t2pmA2WJf2DLR3B9elN", + "ZJKQGRkknSMd79vwm0p3SS7Jx", + "VFY/cYUry5oSLxtjQcsyIJbPd", + "LRcKdeo2Qmwwi/Y7wy9YUq01z", + "jedxFcA5nV54bGhWUfsYqcD9p", + "Q+QG/YVD34of879L+MGok7cRg", + "5Y9YUUmjXwYO706idcGsVAAYE", + "DNi4wBQYHKEkDCgsMDQ4PEBES", + "ExQ1FhcYGRobHB0enwIfAJ8CI", + "ACfAiEgnwIjAJ8CJACfAiUAnw", + "ImAJ8CJwCfAigAnwIpAJ8CKgC", + "fAisAnwIsAJ8CLQCfAi4AnwIv", + "AJ8CMACfAzFAAp8DMkACnwMzQ", + "C2fAzRAJJ8DNUAknwM2QAGfAz", + "tAA58DPEAPnwM9QAGfAz5ABZ8", + "DP0ABnwNAQAVDBkQDYnJa" + ] +} \ No newline at end of file diff --git a/test/Duende/Aguacongas.IdentityServer.Saml2P.Duende.Test/Aguacongas.IdentityServer.Saml2P.Duende.Test.csproj b/test/Duende/Aguacongas.IdentityServer.Saml2P.Duende.Test/Aguacongas.IdentityServer.Saml2P.Duende.Test.csproj index 41cea0a74..cf8a07654 100644 --- a/test/Duende/Aguacongas.IdentityServer.Saml2P.Duende.Test/Aguacongas.IdentityServer.Saml2P.Duende.Test.csproj +++ b/test/Duende/Aguacongas.IdentityServer.Saml2P.Duende.Test/Aguacongas.IdentityServer.Saml2P.Duende.Test.csproj @@ -11,14 +11,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Duende/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test.csproj b/test/Duende/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test.csproj index b0ed128d5..ace0cd6e8 100644 --- a/test/Duende/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test.csproj +++ b/test/Duende/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test/Aguacongas.TheIdServer.Authentication.Integration.Duende.Test.csproj @@ -16,19 +16,19 @@ - - - - - - - - - + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.TheIdServer.Duende.Test/Aguacongas.TheIdServer.Duende.Test.csproj b/test/Duende/Aguacongas.TheIdServer.Duende.Test/Aguacongas.TheIdServer.Duende.Test.csproj index 9a3935450..3b9f5b581 100644 --- a/test/Duende/Aguacongas.TheIdServer.Duende.Test/Aguacongas.TheIdServer.Duende.Test.csproj +++ b/test/Duende/Aguacongas.TheIdServer.Duende.Test/Aguacongas.TheIdServer.Duende.Test.csproj @@ -24,17 +24,17 @@ - - - - + + + + - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.TheIdServer.Identity.Duende.Test/Aguacongas.TheIdServer.Identity.Duende.Test.csproj b/test/Duende/Aguacongas.TheIdServer.Identity.Duende.Test/Aguacongas.TheIdServer.Identity.Duende.Test.csproj index 2477d5388..e588aa9c7 100644 --- a/test/Duende/Aguacongas.TheIdServer.Identity.Duende.Test/Aguacongas.TheIdServer.Identity.Duende.Test.csproj +++ b/test/Duende/Aguacongas.TheIdServer.Identity.Duende.Test/Aguacongas.TheIdServer.Identity.Duende.Test.csproj @@ -7,13 +7,13 @@ - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.TheIdServer.Identity.Integration.Duende.Test/Aguacongas.TheIdServer.Identity.Integration.Duende.Test.csproj b/test/Duende/Aguacongas.TheIdServer.Identity.Integration.Duende.Test/Aguacongas.TheIdServer.Identity.Integration.Duende.Test.csproj index c3a440eb9..1302f70f2 100644 --- a/test/Duende/Aguacongas.TheIdServer.Identity.Integration.Duende.Test/Aguacongas.TheIdServer.Identity.Integration.Duende.Test.csproj +++ b/test/Duende/Aguacongas.TheIdServer.Identity.Integration.Duende.Test/Aguacongas.TheIdServer.Identity.Integration.Duende.Test.csproj @@ -17,18 +17,18 @@ - - - - - - - - + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Aguacongas.TheIdServer.Integration.Duende.Test.csproj b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Aguacongas.TheIdServer.Integration.Duende.Test.csproj index 52708618c..1f02ce48d 100644 --- a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Aguacongas.TheIdServer.Integration.Duende.Test.csproj +++ b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Aguacongas.TheIdServer.Integration.Duende.Test.csproj @@ -5,8 +5,7 @@ enable false 51a7f0be-96e4-42d5-ad09-37e9adabfff6 - true - True + True @@ -17,21 +16,25 @@ $(DefineConstants)TRACE + + true + + - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all - + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -63,5 +66,10 @@ + + + + + diff --git a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/ApisTest.cs b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/ApisTest.cs index b21b29d4c..ee2c3f9db 100644 --- a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/ApisTest.cs +++ b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/ApisTest.cs @@ -1,7 +1,10 @@ // Project: Aguafrommars/TheIdServer // Copyright (c) 2023 @Olivier Lefebvre using Aguacongas.IdentityServer.EntityFramework.Store; +using Aguacongas.IdentityServer.Store; using Aguacongas.IdentityServer.Store.Entity; +using Bunit; +using System; using System.Threading.Tasks; using Xunit; using ApisPage = Aguacongas.TheIdServer.BlazorApp.Pages.Apis.Apis; @@ -17,6 +20,46 @@ public ApisTest(TheIdServerFactory factory) { } + [Fact] + public async Task ScrollBottomReach_should_load_next_entities() + { + await DbActionAsync(context => + { + for(var i = 0; i < 200; i++) + context.Apis.Add(new ProtectResource + { + Id = GenerateId(), + DisplayName = "filtered" + }); + + return context.SaveChangesAsync(); + }); + + JSInterop.Setup("browserInteropt.isScrollable", 0).SetResult(true); + + var component = CreateComponent("Alice Smith", + SharedConstants.WRITERPOLICY); + + component.WaitForState(() => component.Markup.Contains(FilteredString), TimeSpan.FromMinutes(1)); + + var tdList = component.FindAll(".table-hover tr td"); + + component.WaitForState(() => component.Markup.Contains(FilteredString), TimeSpan.FromMinutes(1)); + + Assert.NotEmpty(tdList); + + tdList = component.FindAll(".table-hover tr td"); + + JSInterop.Setup("browserInteropt.isScrollable", 0).SetResult(false); + await component.Instance.ScrollBottomReach(); + + component.WaitForState(() => component.Markup.Contains(FilteredString), TimeSpan.FromMinutes(1)); + + var newTdList = component.FindAll(".table-hover tr td"); + + Assert.NotEqual(tdList.Count, newTdList.Count); + } + protected override Task PopulateList() { return DbActionAsync(context => diff --git a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/EntitiesPageTestBase.cs b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/EntitiesPageTestBase.cs index f63107e3c..de1125ff6 100644 --- a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/EntitiesPageTestBase.cs +++ b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/BlazorApp/Pages/EntitiesPageTestBase.cs @@ -1,4 +1,5 @@ using Aguacongas.IdentityServer.Store; +using Aguacongas.TheIdServer.BlazorApp.Pages; using Bunit; using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components.Web; @@ -13,7 +14,9 @@ namespace Aguacongas.TheIdServer.IntegrationTest.BlazorApp.Pages { - public abstract class EntitiesPageTestBase : TestContext where TComponent : IComponent + public abstract class EntitiesPageTestBase : TestContext + where TComponent : EntitiesModel + where TEntity: class { private readonly TheIdServerFactory _factory; @@ -95,10 +98,6 @@ await selectAll.ChangeAsync(new ChangeEventArgs AssertExportResponse(response); } - protected virtual void AssertExportResponse(HttpResponseMessage response) - { - Assert.False(response.IsSuccessStatusCode); - } [Fact] public async Task OnRowClicked_should_navigate_to_entity_page() @@ -112,11 +111,12 @@ public async Task OnRowClicked_should_navigate_to_entity_page() var navigationManager = Services.GetRequiredService(); - var tdList = component.FindAll(".table-hover tr td"); - - Assert.NotEmpty(tdList); - - await tdList[tdList.Count - 1].ClickAsync(new MouseEventArgs()); + await component.InvokeAsync(() => + { + var tdList = component.FindAll(".table-hover tr td"); + Assert.NotEmpty(tdList); + tdList[tdList.Count - 1].Click(new MouseEventArgs()); + }); Assert.Contains(typeof(TEntity).Name.ToLower(), navigationManager.Uri); } @@ -176,6 +176,10 @@ public async Task OnSelectAllClicked_should_select_all_items() Assert.NotNull(selectAll); + component.WaitForState(() => component.Markup.Contains(FilteredString), TimeSpan.FromMinutes(1)); + + selectAll = component.Find(".table.mb-0 th input"); + await selectAll.ChangeAsync(new ChangeEventArgs { Value = true @@ -219,17 +223,21 @@ await selectAll.ChangeAsync(new ChangeEventArgs protected abstract Task PopulateList(); + protected virtual void AssertExportResponse(HttpResponseMessage response) + { + Assert.False(response.IsSuccessStatusCode); + } + protected IRenderedComponent CreateComponent(string userName, string role) { _factory.ConfigureTestContext(userName, - new Claim[] - { + [ new Claim("scope", SharedConstants.ADMINSCOPE), new Claim("role", SharedConstants.READERPOLICY), new Claim("role", role), new Claim("sub", Guid.NewGuid().ToString()) - }, + ], this); var component = RenderComponent(); diff --git a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Controllers/Saml2PControllerTest.cs b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Controllers/Saml2PControllerTest.cs index 124cda800..048801133 100644 --- a/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Controllers/Saml2PControllerTest.cs +++ b/test/Duende/Aguacongas.TheIdServer.Integration.Duende.Test/Controllers/Saml2PControllerTest.cs @@ -900,23 +900,23 @@ public async Task Login_should_use_metadata_when_metadata_url_found() entityDescriptor.SPSsoDescriptor = new SPSsoDescriptor { WantAssertionsSigned = true, - SigningCertificates = new X509Certificate2[] - { + SigningCertificates = + [ certificate - }, - SingleLogoutServices = new SingleLogoutService[] - { + ], + SingleLogoutServices = + [ new SingleLogoutService { Binding = ProtocolBindings.HttpPost, Location = new Uri(defaultSite, "Auth/SingleLogout"), ResponseLocation = new Uri(defaultSite, "Auth/LoggedOut") } - }, - NameIDFormats = new Uri[] { NameIdentifierFormats.X509SubjectName }, - AssertionConsumerServices = new AssertionConsumerService[] - { + ], + NameIDFormats = [NameIdentifierFormats.X509SubjectName], + AssertionConsumerServices = + [ new AssertionConsumerService { Binding = ProtocolBindings.HttpArtifact, Location = new Uri(defaultSite, "Auth/AssertionConsumerService") }, - }, - AttributeConsumingServices = new AttributeConsumingService[] - { - new AttributeConsumingService { ServiceName = new ServiceName("Some SP", "en"), RequestedAttributes = CreateRequestedAttributes() } - }, + ], + AttributeConsumingServices = + [ + new AttributeConsumingService { ServiceNames = [new("Some SP", "en")], RequestedAttributes = CreateRequestedAttributes() } + ], }; return new HttpResponseMessage(HttpStatusCode.OK) diff --git a/test/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test.csproj b/test/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test.csproj index 38aae7e77..bf4c74356 100644 --- a/test/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test.csproj +++ b/test/Identity/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test/Aguacongas.TheIdServer.Identity.Argon2PasswordHasher.Test.csproj @@ -10,14 +10,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest.csproj b/test/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest.csproj index 3dce59fab..f21761de8 100644 --- a/test/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest.csproj +++ b/test/Identity/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.BcryptPasswordHasherTest.csproj @@ -10,13 +10,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest.csproj b/test/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest.csproj index 2e3c3a643..a8be57b06 100644 --- a/test/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest.csproj +++ b/test/Identity/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest/Aguacongas.TheIdServer.Identity.ScryptPasswordHasherTest.csproj @@ -10,13 +10,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest.csproj b/test/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest.csproj index 99a99c286..0d0310a1c 100644 --- a/test/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest.csproj +++ b/test/Identity/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest/Aguacongas.TheIdServer.Identity.UpgradePasswordHasherTest.csproj @@ -10,13 +10,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all